<?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>141855</bug_id>
          
          <creation_ts>2015-02-20 14:21:58 -0800</creation_ts>
          <short_desc>Scrollbars and ScrollAnimators must always have a ScrollableArea</short_desc>
          <delta_ts>2015-02-20 19:45:26 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>140633</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>andersca</cc>
    
    <cc>bfulgham</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1070830</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-20 14:21:58 -0800</bug_when>
    <thetext>It doesn&apos;t make sense for a ScrollAnimator to exist without a ScrollableArea. So rather than holding a pointer to the ScrollableArea it is responsible for, have it use a reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070843</commentid>
    <comment_count>1</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-20 14:38:47 -0800</bug_when>
    <thetext>Likewise, a Scrollbar should always be associated with a ScrollArea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070877</commentid>
    <comment_count>2</comment_count>
      <attachid>247011</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-20 16:36:46 -0800</bug_when>
    <thetext>Created attachment 247011
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070886</commentid>
    <comment_count>3</comment_count>
      <attachid>247013</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-20 16:57:16 -0800</bug_when>
    <thetext>Created attachment 247013
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070897</commentid>
    <comment_count>4</comment_count>
      <attachid>247018</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-20 17:28:49 -0800</bug_when>
    <thetext>Created attachment 247018
Patch v3 (Fixes for Windows and other ports)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070898</commentid>
    <comment_count>5</comment_count>
      <attachid>247019</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-20 17:35:37 -0800</bug_when>
    <thetext>Created attachment 247019
Patch v4 (iOS fixes)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070901</commentid>
    <comment_count>6</comment_count>
      <attachid>247021</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-20 17:37:57 -0800</bug_when>
    <thetext>Created attachment 247021
Patch v5 (Efl fix)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070902</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-02-20 17:39:15 -0800</bug_when>
    <thetext>&lt;rdar://problem/19912140&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070906</commentid>
    <comment_count>8</comment_count>
      <attachid>247023</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-20 17:50:08 -0800</bug_when>
    <thetext>Created attachment 247023
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070916</commentid>
    <comment_count>9</comment_count>
      <attachid>247028</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-20 18:05:20 -0800</bug_when>
    <thetext>Created attachment 247028
Patch v7 (Gtk fix)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070938</commentid>
    <comment_count>10</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-20 19:34:20 -0800</bug_when>
    <thetext>Committed r180474: &lt;http://trac.webkit.org/changeset/180474&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070939</commentid>
    <comment_count>11</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-20 19:36:04 -0800</bug_when>
    <thetext>I think I fixed the Gtk build when I landed, but I will watch the bots to make sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070941</commentid>
    <comment_count>12</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-20 19:45:26 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; I think I fixed the Gtk build when I landed, but I will watch the bots to
&gt; make sure.

Bah! Of course I failed.

Gtk build fix in r180475. &lt;http://trac.webkit.org/changeset/180475&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247011</attachid>
            <date>2015-02-20 16:36:46 -0800</date>
            <delta_ts>2015-02-20 16:57:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141855-20150220163637.patch</filename>
            <type>text/plain</type>
            <size>76943</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDQ2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMyBAQAorMjAxNS0wMi0yMCAgQnJlbnQg
RnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBTY3JvbGxiYXJzIGFuZCBT
Y3JvbGxBbmltYXRvcnMgbXVzdCBhbHdheXMgaGF2ZSBhIFNjcm9sbGFibGVBcmVhCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4NTUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBjaGFuZ2UgaW4gZnVu
Y3Rpb25hbGl0eS4KKyAgICAgICAgCisgICAgICAgIENoYW5nZSB1c2VycyBvZiB0aGUgc2Nyb2xs
QW5pbWF0b3IoKSBtZXRob2QgdG8gZXhwZWN0IGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2lu
dGVyLiBBbHNvIGdldCByaWQgb2YKKyAgICAgICAgYSBudW1iZXIgb2YgdW5uZWNlc3NhcnkgbnVs
bHB0ciBjaGVja3MuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3Jv
bGxiYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6c2V0
VmFsdWUpOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJNYXRjaGVzQ29ybmVyUHJlc2VudFBzZXVkb0NsYXNz
KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVZpZXc6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNl
dEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvcjo6aGFuZGxlV2hlZWxFdmVudFBoYXNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9Qb3B1cE1l
bnVDbGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6U2Nyb2xsQW5pbWF0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvcjo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yOjp1cGRhdGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMpOgorICAgICAgICAqIHBs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cjo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbGFibGVBcmVhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OmNyZWF0ZVNjcm9s
bGJhcik6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbEFuaW1hdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGFibGVBcmVhOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJs
ZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYTo6bm90aWZ5U2Nyb2xsUG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzY3JvbGxQb3NpdGlvbkNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYWJsZUFyZWE6Om1vdXNlRW50ZXJlZFNjcm9sbGJhcik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6bW91c2VFeGl0ZWRTY3JvbGxiYXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmRpZEFkZFNjcm9sbGJhcik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxhYmxlQXJlYTo6d2lsbFJlbW92ZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxhYmxlQXJlYTo6dmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNjcm9sbGJhckxheWVy
RGlkQ2hhbmdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL1Njcm9sbGJhci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6
OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OlNj
cm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNjcm9sbGJhck92ZXJsYXlT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmlzU2Nyb2xsYWJsZUFyZWFBY3Rp
dmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpvZmZzZXREaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjphdXRvc2Nyb2xsUHJlc3NlZFBhcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3ZlVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyOjptb3VzZU1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6bW91c2VF
bnRlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6bW91c2VFeGl0ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3VzZVVwKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhcjo6c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyOjppc1dpbmRvd0FjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXI6OmludmFsaWRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6Y29udmVy
dFRvQ29udGFpbmluZ1ZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpjb252ZXJ0
RnJvbUNvbnRhaW5pbmdWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c3VwcG9y
dHNVcGRhdGVPblNlY29uZGFyeVRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNjcm9sbGFibGVBcmVhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6ZGlzY29ubmVjdEZyb21TY3JvbGxhYmxlQXJlYSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JJT1M6OmhhbmRsZVRvdWNoRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JJT1M6OmRldGVybWluZVNjcm9sbGFibGVBcmVh
Rm9yVG91Y2hTZXF1ZW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9y
TWFjLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tOgorICAg
ICAgICAoLVtXZWJTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlIHNjcm9sbGVySW1w
UGFpcjpzZXRDb250ZW50QXJlYU5lZWRzRGlzcGxheUluUmVjdDpdKToKKyAgICAgICAgKC1bV2Vi
U2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBzY3JvbGxlckltcFBhaXI6dXBkYXRl
U2Nyb2xsZXJTdHlsZUZvck5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZTpdKToKKyAgICAgICAg
KC1bV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIHNjcm9sbEFuaW1hdG9yXSk6CisgICAgICAg
ICgtW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBsYXllcl0pOgorICAgICAgICAoLVtXZWJT
Y3JvbGxiYXJQYWludGVyRGVsZWdhdGUgbW91c2VMb2NhdGlvbkluU2Nyb2xsZXJGb3JTY3JvbGxl
ckltcDpdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIHNldFVwQWxw
aGFBbmltYXRpb246c2Nyb2xsZXJQYWludGVyOnBhcnQ6YW5pbWF0ZUFscGhhVG86ZHVyYXRpb246
XSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpTY3JvbGxBbmltYXRvck1hYyk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yTWFjOjphZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjphZGp1c3RTY3JvbGxQb3NpdGlvblRv
Qm91bmRzSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6
OmltbWVkaWF0ZVNjcm9sbFRvKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
OjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvck1hYzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvck1hYzo6dmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aG9yaXpvbnRhbFNjcm9sbGJhckxheWVy
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpub3RpZnlD
b250ZW50QXJlYVNjcm9sbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
OjpwaW5uZWRJbkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1h
Yzo6aXNBbHJlYWR5UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnN0cmV0Y2hBbW91bnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmNhblNjcm9sbEhvcml6b250YWxs
eSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y2FuU2Nyb2xsVmVydGlj
YWxseSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6YWJzb2x1dGVTY3Jv
bGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRp
YXRlU2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvck1hYzo6dXBkYXRlU2Nyb2xsZXJTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpjcmVhdGVTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRlc3Ry
b3lTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9s
bEluZm9BZnRlckxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6Y3JlYXRlU2Nyb2xsYmFyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmRlc3Ryb3lTY3JvbGxiYXIpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6CisgICAgICAgIChSZW5kZXJNZW51TGlz
dDo6Y3JlYXRlU2Nyb2xsYmFyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3Qu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNjcm9sbGJhcjo6UmVuZGVyU2Nyb2xsYmFyKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNl
YXJjaEZpZWxkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpjcmVh
dGVTY3JvbGxiYXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5oOgor
CiAyMDE1LTAyLTIwICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CiAKICAgICAg
ICAgW1dLMl0gQWRkIHN1cHBvcnQgZm9yIGZvbnQgcGFuZWwgb24gT1MgWC4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xs
YmFyLmNwcAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTYsMTEgKzk2LDgg
QEAgdm9pZCBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpzZXRWYWx1ZShmbAogICAgIGlmICghbV9z
Y3JvbGxiYXIpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoIW1fc2Nyb2xsYmFyLT5z
Y3JvbGxhYmxlQXJlYSgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBmbG9hdCBuZXdWYWx1ZSA9
IHZhbHVlICogbV9zY3JvbGxiYXItPm1heGltdW0oKTsKLSAgICBtX3Njcm9sbGJhci0+c2Nyb2xs
YWJsZUFyZWEoKS0+c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG1fc2Nyb2xsYmFyLT5v
cmllbnRhdGlvbigpLCBuZXdWYWx1ZSk7CisgICAgbV9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVh
KCkuc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlv
bigpLCBuZXdWYWx1ZSk7CiB9CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmgJ
KHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJU
ZXN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAxNCBEaGkgQXVycmFobWFuIDxkaW9yYWhtYW5Acm9ja3liYXJzLmNvbT4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM1OCw3ICszNTgsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wg
c2Nyb2xsYmFyTWF0Y2hlc05vQnV0CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBzY3JvbGxiYXJNYXRj
aGVzQ29ybmVyUHJlc2VudFBzZXVkb0NsYXNzKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tp
bmdDb250ZXh0JiBjb250ZXh0KQogewotICAgIHJldHVybiBjb250ZXh0LnNjcm9sbGJhciAmJiBj
b250ZXh0LnNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+aXNTY3JvbGxDb3JuZXJWaXNpYmxl
KCk7CisgICAgcmV0dXJuIGNvbnRleHQuc2Nyb2xsYmFyICYmIGNvbnRleHQuc2Nyb2xsYmFyLT5z
Y3JvbGxhYmxlQXJlYSgpLmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpOwogfQogCiAjaWYgRU5BQkxF
KEZVTExTQ1JFRU5fQVBJKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNp
b24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAxOTk5IExhcnMg
S25vbGwgPGtub2xsQGtkZS5vcmc+CiAgKiAgICAgICAgICAgICAgICAgICAgIDE5OTkgQW50dGkg
S29pdmlzdG8gPGtvaXZpc3RvQGtkZS5vcmc+CiAgKiAgICAgICAgICAgICAgICAgICAgIDIwMDAg
RGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAw
OCwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQtMjAwOCwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqICAgICAgICAgICAoQykgMjAwNiBHcmFoYW0gRGVubmlzIChncmFoYW0uZGVubmlzQGdt
YWlsLmNvbSkKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBu
eXBvcC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KQEAgLTU0MiwxNyArNTQyLDE3IEBAIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBGcmFt
ZVZpZXc6OmNyZWF0ZVMKICAgICAvLyBUcnkgdGhlIDxib2R5PiBlbGVtZW50IGZpcnN0IGFzIGEg
c2Nyb2xsYmFyIHNvdXJjZS4KICAgICBIVE1MRWxlbWVudCogYm9keSA9IGRvYyA/IGRvYy0+Ym9k
eU9yRnJhbWVzZXQoKSA6IG51bGxwdHI7CiAgICAgaWYgKGJvZHkgJiYgYm9keS0+cmVuZGVyZXIo
KSAmJiBib2R5LT5yZW5kZXJlcigpLT5zdHlsZSgpLmhhc1BzZXVkb1N0eWxlKFNDUk9MTEJBUikp
Ci0gICAgICAgIHJldHVybiBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcih0
aGlzLCBvcmllbnRhdGlvbiwgYm9keSk7CisgICAgICAgIHJldHVybiBSZW5kZXJTY3JvbGxiYXI6
OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIGJvZHkpOwogICAgIAog
ICAgIC8vIElmIHRoZSA8Ym9keT4gZGlkbid0IGhhdmUgYSBjdXN0b20gc3R5bGUsIHRoZW4gdGhl
IHJvb3QgZWxlbWVudCBtaWdodC4KICAgICBFbGVtZW50KiBkb2NFbGVtZW50ID0gZG9jID8gZG9j
LT5kb2N1bWVudEVsZW1lbnQoKSA6IG51bGxwdHI7CiAgICAgaWYgKGRvY0VsZW1lbnQgJiYgZG9j
RWxlbWVudC0+cmVuZGVyZXIoKSAmJiBkb2NFbGVtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpLmhh
c1BzZXVkb1N0eWxlKFNDUk9MTEJBUikpCi0gICAgICAgIHJldHVybiBSZW5kZXJTY3JvbGxiYXI6
OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcih0aGlzLCBvcmllbnRhdGlvbiwgZG9jRWxlbWVudCk7Cisg
ICAgICAgIHJldHVybiBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcigqdGhp
cywgb3JpZW50YXRpb24sIGRvY0VsZW1lbnQpOwogICAgICAgICAKICAgICAvLyBJZiB3ZSBoYXZl
IGFuIG93bmluZyBpZnJhbWUvZnJhbWUgZWxlbWVudCwgdGhlbiBpdCBjYW4gc2V0IHRoZSBjdXN0
b20gc2Nyb2xsYmFyIGFsc28uCiAgICAgUmVuZGVyV2lkZ2V0KiBmcmFtZVJlbmRlcmVyID0gZnJh
bWUoKS5vd25lclJlbmRlcmVyKCk7CiAgICAgaWYgKGZyYW1lUmVuZGVyZXIgJiYgZnJhbWVSZW5k
ZXJlci0+c3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShTQ1JPTExCQVIpKQotICAgICAgICByZXR1cm4g
UmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIodGhpcywgb3JpZW50YXRpb24s
IDAsICZmcmFtZSgpKTsKKyAgICAgICAgcmV0dXJuIFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3Vz
dG9tU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgbnVsbHB0ciwgJmZyYW1lKCkpOwogICAg
IAogICAgIC8vIE5vYm9keSBzZXQgYSBjdXN0b20gc3R5bGUsIHNvIHdlIGp1c3QgdXNlIGEgbmF0
aXZlIHNjcm9sbGJhci4KICAgICByZXR1cm4gU2Nyb2xsVmlldzo6Y3JlYXRlU2Nyb2xsYmFyKG9y
aWVudGF0aW9uKTsKQEAgLTIwODEsNyArMjA4MSw3IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRGaXhl
ZFZpc2libGVDb250ZW50UmUKICAgICAgICAgaWYgKGZyYW1lKCkucGFnZSgpLT5zZXR0aW5ncygp
LmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCgpKQogICAgICAg
ICAgICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbGluZygpOwogICAgICAgICBJ
bnRQb2ludCBuZXdQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgICAgIHNjcm9sbEFu
aW1hdG9yKCktPnNldEN1cnJlbnRQb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsKKyAgICAgICAg
c2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50UG9zaXRpb24oc2Nyb2xsUG9zaXRpb24oKSk7CiAg
ICAgICAgIHNjcm9sbFBvc2l0aW9uQ2hhbmdlZChvbGRQb3NpdGlvbiwgbmV3UG9zaXRpb24pOwog
ICAgIH0KICAgICBpZiAodmlzaWJsZUNvbnRlbnRTaXplRGlkQ2hhbmdlKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw3ICsyODks
NyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpoYW5kbGVXaGVlbEV2CiAgICAgaWYgKCFm
cmFtZVZpZXcpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZyYW1lVmlldy0+c2Nyb2xsQW5pbWF0
b3IoKS0+aGFuZGxlV2hlZWxFdmVudFBoYXNlKHBoYXNlKTsKKyAgICBmcmFtZVZpZXctPnNjcm9s
bEFuaW1hdG9yKCkuaGFuZGxlV2hlZWxFdmVudFBoYXNlKHBoYXNlKTsKIH0KICNlbmRpZgogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnVDbGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnVDbGllbnQuaAkocmV2aXNpb24g
MTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51Q2xpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTUgQXBwbGUg
SW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC03NCw3ICs3NCw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdygpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSosIFNjcm9s
bGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSkgPSAwOworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSYsIFNj
cm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSkgPSAwOwogfTsKIAogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAkocmV2aXNp
b24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykg
MjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIAogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CkBAIC00Nyw3ICs0Nyw3IEBAIFBhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1h
dG8KIH0KICNlbmRpZgogCi1TY3JvbGxBbmltYXRvcjo6U2Nyb2xsQW5pbWF0b3IoU2Nyb2xsYWJs
ZUFyZWEqIHNjcm9sbGFibGVBcmVhKQorU2Nyb2xsQW5pbWF0b3I6OlNjcm9sbEFuaW1hdG9yKFNj
cm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKICAgICA6IG1fc2Nyb2xsYWJsZUFyZWEoc2Ny
b2xsYWJsZUFyZWEpCiAgICAgLCBtX2N1cnJlbnRQb3NYKDApCiAgICAgLCBtX2N1cnJlbnRQb3NZ
KDApCkBAIC02MSw3ICs2MSw3IEBAIFNjcm9sbEFuaW1hdG9yOjp+U2Nyb2xsQW5pbWF0b3IoKQog
Ym9vbCBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKIHsK
ICAgICBmbG9hdCogY3VycmVudFBvcyA9IChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyKSA/ICZtX2N1cnJlbnRQb3NYIDogJm1fY3VycmVudFBvc1k7Ci0gICAgZmxvYXQgbmV3UG9z
ID0gc3RkOjptYXgoc3RkOjptaW4oKmN1cnJlbnRQb3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBz
dGF0aWNfY2FzdDxmbG9hdD4obV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsU2l6ZShvcmllbnRhdGlv
bikpKSwgMC4wZik7CisgICAgZmxvYXQgbmV3UG9zID0gc3RkOjptYXgoc3RkOjptaW4oKmN1cnJl
bnRQb3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4obV9zY3JvbGxh
YmxlQXJlYS5zY3JvbGxTaXplKG9yaWVudGF0aW9uKSkpLCAwLjBmKTsKICAgICBmbG9hdCBkZWx0
YSA9ICpjdXJyZW50UG9zIC0gbmV3UG9zOwogICAgIGlmICgqY3VycmVudFBvcyA9PSBuZXdQb3Mp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNCw4ICsxMTQsOCBAQCBib29sIFNjcm9sbEFu
aW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KGNvCiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlm
CiAKLSAgICBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVh
LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJh
ciA9IG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgU2Nyb2xsYmFy
KiBob3Jpem9udGFsU2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxlQXJlYS5ob3Jpem9udGFsU2Nyb2xs
YmFyKCk7CisgICAgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFy
ZWEudmVydGljYWxTY3JvbGxiYXIoKTsKIAogICAgIC8vIEFjY2VwdCB0aGUgZXZlbnQgaWYgd2Ug
aGF2ZSBhIHNjcm9sbGJhciBpbiB0aGF0IGRpcmVjdGlvbiBhbmQgY2FuIHN0aWxsCiAgICAgLy8g
c2Nyb2xsIGFueSBmdXJ0aGVyLgpAQCAtMTI1LDggKzEyNSw4IEBAIGJvb2wgU2Nyb2xsQW5pbWF0
b3I6OmhhbmRsZVdoZWVsRXZlbnQoY28KICAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKIAogICAg
IFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5ID0gU2Nyb2xsQnlQaXhlbDsKLSAgICBJbnRT
aXplIG1heEZvcndhcmRTY3JvbGxEZWx0YSA9IG1fc2Nyb2xsYWJsZUFyZWEtPm1heGltdW1TY3Jv
bGxQb3NpdGlvbigpIC0gbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKTsKLSAgICBJ
bnRTaXplIG1heEJhY2t3YXJkU2Nyb2xsRGVsdGEgPSBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxQ
b3NpdGlvbigpIC0gbV9zY3JvbGxhYmxlQXJlYS0+bWluaW11bVNjcm9sbFBvc2l0aW9uKCk7Cisg
ICAgSW50U2l6ZSBtYXhGb3J3YXJkU2Nyb2xsRGVsdGEgPSBtX3Njcm9sbGFibGVBcmVhLm1heGlt
dW1TY3JvbGxQb3NpdGlvbigpIC0gbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxQb3NpdGlvbigpOwor
ICAgIEludFNpemUgbWF4QmFja3dhcmRTY3JvbGxEZWx0YSA9IG1fc2Nyb2xsYWJsZUFyZWEuc2Ny
b2xsUG9zaXRpb24oKSAtIG1fc2Nyb2xsYWJsZUFyZWEubWluaW11bVNjcm9sbFBvc2l0aW9uKCk7
CiAgICAgaWYgKChkZWx0YVggPCAwICYmIG1heEZvcndhcmRTY3JvbGxEZWx0YS53aWR0aCgpID4g
MCkKICAgICAgICAgfHwgKGRlbHRhWCA+IDAgJiYgbWF4QmFja3dhcmRTY3JvbGxEZWx0YS53aWR0
aCgpID4gMCkKICAgICAgICAgfHwgKGRlbHRhWSA8IDAgJiYgbWF4Rm9yd2FyZFNjcm9sbERlbHRh
LmhlaWdodCgpID4gMCkKQEAgLTEzNiw3ICsxMzYsNyBAQCBib29sIFNjcm9sbEFuaW1hdG9yOjpo
YW5kbGVXaGVlbEV2ZW50KGNvCiAgICAgICAgIGlmIChkZWx0YVkpIHsKICAgICAgICAgICAgIGlm
IChlLmdyYW51bGFyaXR5KCkgPT0gU2Nyb2xsQnlQYWdlV2hlZWxFdmVudCkgewogICAgICAgICAg
ICAgICAgIGJvb2wgbmVnYXRpdmUgPSBkZWx0YVkgPCAwOwotICAgICAgICAgICAgICAgIGRlbHRh
WSA9IFNjcm9sbGJhcjo6cGFnZVN0ZXBEZWx0YShtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlSGVp
Z2h0KCkpOworICAgICAgICAgICAgICAgIGRlbHRhWSA9IFNjcm9sbGJhcjo6cGFnZVN0ZXBEZWx0
YShtX3Njcm9sbGFibGVBcmVhLnZpc2libGVIZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgaWYg
KG5lZ2F0aXZlKQogICAgICAgICAgICAgICAgICAgICBkZWx0YVkgPSAtZGVsdGFZOwogICAgICAg
ICAgICAgfQpAQCAtMTQ2LDcgKzE0Niw3IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdo
ZWVsRXZlbnQoY28KICAgICAgICAgaWYgKGRlbHRhWCkgewogICAgICAgICAgICAgaWYgKGUuZ3Jh
bnVsYXJpdHkoKSA9PSBTY3JvbGxCeVBhZ2VXaGVlbEV2ZW50KSB7CiAgICAgICAgICAgICAgICAg
Ym9vbCBuZWdhdGl2ZSA9IGRlbHRhWCA8IDA7Ci0gICAgICAgICAgICAgICAgZGVsdGFYID0gU2Ny
b2xsYmFyOjpwYWdlU3RlcERlbHRhKG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVXaWR0aCgpKTsK
KyAgICAgICAgICAgICAgICBkZWx0YVggPSBTY3JvbGxiYXI6OnBhZ2VTdGVwRGVsdGEobV9zY3Jv
bGxhYmxlQXJlYS52aXNpYmxlV2lkdGgoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG5lZ2F0aXZl
KQogICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAtZGVsdGFYOwogICAgICAgICAgICAgfQpA
QCAtMTc3LDIyICsxNzcsMjIgQEAgRmxvYXRQb2ludCBTY3JvbGxBbmltYXRvcjo6Y3VycmVudFBv
c2l0aQogdm9pZCBTY3JvbGxBbmltYXRvcjo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKGNvbnN0IEZs
b2F0U2l6ZSYgZGVsdGEpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGRlbHRhKTsKLSAgICBtX3Njcm9s
bGFibGVBcmVhLT5zZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKEludFBvaW50KG1fY3VycmVu
dFBvc1gsIG1fY3VycmVudFBvc1kpKTsKKyAgICBtX3Njcm9sbGFibGVBcmVhLnNldFNjcm9sbE9m
ZnNldEZyb21BbmltYXRpb24oSW50UG9pbnQobV9jdXJyZW50UG9zWCwgbV9jdXJyZW50UG9zWSkp
OwogfQogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkgJiYgUExBVEZPUk0oTUFDKQogdm9p
ZCBTY3JvbGxBbmltYXRvcjo6dXBkYXRlU2Nyb2xsQW5pbWF0b3JzQW5kVGltZXJzKCkKIHsKICAg
ICAvLyBGSVhNRTogQ3VycmVudGx5LCBzY3JvbGwgc25hcCBhbmltYXRvcnMgYXJlIHJlY3JlYXRl
ZCBldmVuIHRob3VnaCB0aGUgc25hcCBvZmZzZXRzIGFsb25lIGNhbiBiZSB1cGRhdGVkLgotICAg
IGlmIChtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU25hcE9mZnNldHMoKSkgewotICAgICAg
ICBtX2hvcml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPEF4aXNT
Y3JvbGxTbmFwQW5pbWF0b3I+KHRoaXMsIG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTbmFw
T2Zmc2V0cygpLCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpOworICAgIGlmIChtX3Njcm9s
bGFibGVBcmVhLmhvcml6b250YWxTbmFwT2Zmc2V0cygpKSB7CisgICAgICAgIG1faG9yaXpvbnRh
bFNjcm9sbFNuYXBBbmltYXRvciA9IHN0ZDo6bWFrZV91bmlxdWU8QXhpc1Njcm9sbFNuYXBBbmlt
YXRvcj4odGhpcywgbV9zY3JvbGxhYmxlQXJlYS5ob3Jpem9udGFsU25hcE9mZnNldHMoKSwgU2Ny
b2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25h
cFRpbWVyID0gc3RkOjptYWtlX3VuaXF1ZTxUaW1lcj4oKnRoaXMsICZTY3JvbGxBbmltYXRvcjo6
aG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lckZpcmVkKTsKICAgICB9IGVsc2UgaWYgKG1faG9yaXpv
bnRhbFNjcm9sbFNuYXBBbmltYXRvcikgewogICAgICAgICBtX2hvcml6b250YWxTY3JvbGxTbmFw
QW5pbWF0b3IgPSBudWxscHRyOwogICAgICAgICBtX2hvcml6b250YWxTY3JvbGxTbmFwVGltZXIg
PSBudWxscHRyOwogICAgIH0KLSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTbmFw
T2Zmc2V0cygpKSB7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3IgPSBzdGQ6
Om1ha2VfdW5pcXVlPEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I+KHRoaXMsIG1fc2Nyb2xsYWJsZUFy
ZWEtPnZlcnRpY2FsU25hcE9mZnNldHMoKSwgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCk7Cisg
ICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEudmVydGljYWxTbmFwT2Zmc2V0cygpKSB7CisgICAgICAg
IG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPEF4aXNTY3Jv
bGxTbmFwQW5pbWF0b3I+KHRoaXMsIG1fc2Nyb2xsYWJsZUFyZWEudmVydGljYWxTbmFwT2Zmc2V0
cygpLCBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9s
bFNuYXBUaW1lciA9IHN0ZDo6bWFrZV91bmlxdWU8VGltZXI+KCp0aGlzLCAmU2Nyb2xsQW5pbWF0
b3I6OnZlcnRpY2FsU2Nyb2xsU25hcFRpbWVyRmlyZWQpOwogICAgIH0gZWxzZSBpZiAobV92ZXJ0
aWNhbFNjcm9sbFNuYXBBbmltYXRvcikgewogICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFu
aW1hdG9yID0gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuaAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogICogbWV0OgpAQCAtNTYsNyArNTcsNyBA
QCBjbGFzcyBTY3JvbGxBbmltYXRvciB7CiAjZW5kaWYKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gY3Jl
YXRlKFNjcm9sbGFibGVBcmVhKik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8U2Nyb2xsQW5pbWF0
b3I+IGNyZWF0ZShTY3JvbGxhYmxlQXJlYSYpOwogCiAgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0
b3IoKTsKIApAQCAtNjgsNyArNjksNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2Ny
b2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKIAotICAgIFNj
cm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJs
ZUFyZWE7IH0KKyAgICBTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEoKSBjb25zdCB7IHJl
dHVybiBtX3Njcm9sbGFibGVBcmVhOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxF
dmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKIApAQCAtMTI1LDcgKzEyNiw3IEBAIHB1
YmxpYzoKICNlbmRpZgogCiBwcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgU2Nyb2xsQW5pbWF0b3Io
U2Nyb2xsYWJsZUFyZWEqKTsKKyAgICBleHBsaWNpdCBTY3JvbGxBbmltYXRvcihTY3JvbGxhYmxl
QXJlYSYpOwogCiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChjb25zdCBG
bG9hdFNpemUmIGRlbHRhKTsKIApAQCAtMTM1LDcgKzEzNiw3IEBAIHByb3RlY3RlZDoKICAgICB2
b2lkIHZlcnRpY2FsU2Nyb2xsU25hcFRpbWVyRmlyZWQoKTsKICNlbmRpZgogCi0gICAgU2Nyb2xs
YWJsZUFyZWEqIG1fc2Nyb2xsYWJsZUFyZWE7CisgICAgU2Nyb2xsYWJsZUFyZWEmIG1fc2Nyb2xs
YWJsZUFyZWE7CiAgICAgZmxvYXQgbV9jdXJyZW50UG9zWDsgLy8gV2UgYXZvaWQgdXNpbmcgYSBG
bG9hdFBvaW50IGluIG9yZGVyIHRvIHJlZHVjZQogICAgIGZsb2F0IG1fY3VycmVudFBvc1k7IC8v
IHN1YmNsYXNzIGNvZGUgY29tcGxleGl0eS4KICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAm
JiBQTEFURk9STShNQUMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNw
cAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxNC0yMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTM0LDcgKzEzNCw3IEBAIGJvb2wgU2Nyb2xsVmlldzo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIK
IAogUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFNjcm9sbFZpZXc6OmNyZWF0ZVNjcm9sbGJhcihTY3Jv
bGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKLSAgICByZXR1cm4gU2Nyb2xsYmFyOjpj
cmVhdGVOYXRpdmVTY3JvbGxiYXIodGhpcywgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIp
OworICAgIHJldHVybiBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcigqdGhpcywgb3Jp
ZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpOwogfQogCiB2b2lkIFNjcm9sbFZpZXc6OnNldFNj
cm9sbGJhck1vZGVzKFNjcm9sbGJhck1vZGUgaG9yaXpvbnRhbE1vZGUsIFNjcm9sbGJhck1vZGUg
dmVydGljYWxNb2RlLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFy
ZWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVB
cmVhLmNwcAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYWJsZUFyZWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAxMSwgMjAxNCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEsIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiAKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpA
QCAtNzAsMTIgKzcwLDEzIEBAIFNjcm9sbGFibGVBcmVhOjp+U2Nyb2xsYWJsZUFyZWEoKQogewog
fQogCi1TY3JvbGxBbmltYXRvciogU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbEFuaW1hdG9yKCkgY29u
c3QKK1Njcm9sbEFuaW1hdG9yJiBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsQW5pbWF0b3IoKSBjb25z
dAogewogICAgIGlmICghbV9zY3JvbGxBbmltYXRvcikKLSAgICAgICAgbV9zY3JvbGxBbmltYXRv
ciA9IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoY29uc3RfY2FzdDxTY3JvbGxhYmxlQXJlYSo+KHRo
aXMpKTsKKyAgICAgICAgbV9zY3JvbGxBbmltYXRvciA9IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUo
Y29uc3RfY2FzdDxTY3JvbGxhYmxlQXJlYSY+KCp0aGlzKSk7CiAKLSAgICByZXR1cm4gbV9zY3Jv
bGxBbmltYXRvci5nZXQoKTsKKyAgICBBU1NFUlQobV9zY3JvbGxBbmltYXRvcik7CisgICAgcmV0
dXJuICptX3Njcm9sbEFuaW1hdG9yLmdldCgpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpz
ZXRTY3JvbGxPcmlnaW4oY29uc3QgSW50UG9pbnQmIG9yaWdpbikKQEAgLTEyNywyNiArMTI4LDI2
IEBAIGJvb2wgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChTY3JvbGxEaXJlY3QKICAgICAgICAgbXVs
dGlwbGllciA9IC1tdWx0aXBsaWVyOwogCiAgICAgc3RlcCA9IGFkanVzdFNjcm9sbFN0ZXBGb3JG
aXhlZENvbnRlbnQoc3RlcCwgb3JpZW50YXRpb24sIGdyYW51bGFyaXR5KTsKLSAgICByZXR1cm4g
c2Nyb2xsQW5pbWF0b3IoKS0+c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwg
bXVsdGlwbGllcik7CisgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yKCkuc2Nyb2xsKG9yaWVudGF0
aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CiB9CiAKIHZvaWQgU2Nyb2xsYWJs
ZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBv
ZmZzZXQpCiB7Ci0gICAgc2Nyb2xsQW5pbWF0b3IoKS0+c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5p
bWF0aW9uKG9mZnNldCk7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS5zY3JvbGxUb09mZnNldFdpdGhv
dXRBbmltYXRpb24ob2Zmc2V0KTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9P
ZmZzZXRXaXRob3V0QW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBm
bG9hdCBvZmZzZXQpCiB7CiAgICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxi
YXIpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihGbG9hdFBvaW50KG9m
ZnNldCwgc2Nyb2xsQW5pbWF0b3IoKS0+Y3VycmVudFBvc2l0aW9uKCkueSgpKSk7CisgICAgICAg
IHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihGbG9hdFBvaW50KG9mZnNldCwgc2Nyb2xs
QW5pbWF0b3IoKS5jdXJyZW50UG9zaXRpb24oKS55KCkpKTsKICAgICBlbHNlCi0gICAgICAgIHNj
cm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihGbG9hdFBvaW50KHNjcm9sbEFuaW1hdG9yKCkt
PmN1cnJlbnRQb3NpdGlvbigpLngoKSwgb2Zmc2V0KSk7CisgICAgICAgIHNjcm9sbFRvT2Zmc2V0
V2l0aG91dEFuaW1hdGlvbihGbG9hdFBvaW50KHNjcm9sbEFuaW1hdG9yKCkuY3VycmVudFBvc2l0
aW9uKCkueCgpLCBvZmZzZXQpKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6bm90aWZ5U2Ny
b2xsUG9zaXRpb25DaGFuZ2VkKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikKIHsKICAgICBzY3Jv
bGxQb3NpdGlvbkNoYW5nZWQocG9zaXRpb24pOwotICAgIHNjcm9sbEFuaW1hdG9yKCktPnNldEN1
cnJlbnRQb3NpdGlvbihwb3NpdGlvbik7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50
UG9zaXRpb24ocG9zaXRpb24pOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxQb3Np
dGlvbkNoYW5nZWQoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQpAQCAtMTc5LDcgKzE4MCw3IEBA
IHZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFBvc2l0aW9uQ2hhbmcKICAgICB9CiAKICAgICBp
ZiAoc2Nyb2xsUG9zaXRpb24oKSAhPSBvbGRQb3NpdGlvbikKLSAgICAgICAgc2Nyb2xsQW5pbWF0
b3IoKS0+bm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChzY3JvbGxQb3NpdGlvbigpIC0gb2xkUG9z
aXRpb24pOworICAgICAgICBzY3JvbGxBbmltYXRvcigpLm5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xs
ZWQoc2Nyb2xsUG9zaXRpb24oKSAtIG9sZFBvc2l0aW9uKTsKIH0KIAogYm9vbCBTY3JvbGxhYmxl
QXJlYTo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZl
bnQpCkBAIC0xODcsMTMgKzE4OCwxMyBAQCBib29sIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVl
bEV2ZW50KGNvCiAgICAgaWYgKCFpc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBzY3JvbGxBbmltYXRvcigpLT5oYW5kbGVX
aGVlbEV2ZW50KHdoZWVsRXZlbnQpOworICAgIHJldHVybiBzY3JvbGxBbmltYXRvcigpLmhhbmRs
ZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7CiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQog
Ym9vbCBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNo
RXZlbnQmIHRvdWNoRXZlbnQpCiB7Ci0gICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yKCktPmhhbmRs
ZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7CisgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yKCkuaGFu
ZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50KTsKIH0KICNlbmRpZgogCkBAIC0yNTUsMTIgKzI1Niwx
MiBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjptb3VzZU1vdmVkSW5Db250ZW50CiAKIHZvaWQgU2Ny
b2xsYWJsZUFyZWE6Om1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikg
Y29uc3QKIHsKLSAgICBzY3JvbGxBbmltYXRvcigpLT5tb3VzZUVudGVyZWRTY3JvbGxiYXIoc2Ny
b2xsYmFyKTsKKyAgICBzY3JvbGxBbmltYXRvcigpLm1vdXNlRW50ZXJlZFNjcm9sbGJhcihzY3Jv
bGxiYXIpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjptb3VzZUV4aXRlZFNjcm9sbGJhcihT
Y3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKIHsKLSAgICBzY3JvbGxBbmltYXRvcigpLT5tb3Vz
ZUV4aXRlZFNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgIHNjcm9sbEFuaW1hdG9yKCkubW91c2VF
eGl0ZWRTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6Y29u
dGVudEFyZWFEaWRTaG93KCkgY29uc3QKQEAgLTI5MSw5ICsyOTIsOSBAQCBib29sIFNjcm9sbGFi
bGVBcmVhOjpzY3JvbGxiYXJzQ2FuQmVBY3RpCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpkaWRBZGRT
Y3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKQogewogICAgIGlmIChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKLSAg
ICAgICAgc2Nyb2xsQW5pbWF0b3IoKS0+ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFy
KTsKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5kaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihzY3Jv
bGxiYXIpOwogICAgIGVsc2UKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS0+ZGlkQWRkSG9yaXpv
bnRhbFNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxBbmltYXRvcigpLmRpZEFk
ZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKIAogICAgIC8vIDxyZGFyOi8vcHJvYmxl
bS85Nzk3MjUzPiBBcHBLaXQgcmVzZXRzIHRoZSBzY3JvbGxiYXIncyBzdHlsZSB3aGVuIHlvdSBh
dHRhY2ggYSBzY3JvbGxiYXIKICAgICBzZXRTY3JvbGxiYXJPdmVybGF5U3R5bGUoc2Nyb2xsYmFy
T3ZlcmxheVN0eWxlKCkpOwpAQCAtMzAyLDkgKzMwMyw5IEBAIHZvaWQgU2Nyb2xsYWJsZUFyZWE6
OmRpZEFkZFNjcm9sbGJhcihTY3IKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OndpbGxSZW1vdmVTY3Jv
bGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKQogewogICAgIGlmIChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAg
ICAgc2Nyb2xsQW5pbWF0b3IoKS0+d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJh
cik7CisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkud2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFy
KHNjcm9sbGJhcik7CiAgICAgZWxzZQotICAgICAgICBzY3JvbGxBbmltYXRvcigpLT53aWxsUmVt
b3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxBbmltYXRv
cigpLndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9CiAKIHZvaWQg
U2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRzUmVzaXplZCgpCkBAIC0zNjUsMTIgKzM2NiwxMiBAQCB2
b2lkIFNjcm9sbGFibGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsQ29yCiAKIHZvaWQgU2Nyb2xsYWJs
ZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQogewotICAgIHNjcm9sbEFu
aW1hdG9yKCktPnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKTsKKyAgICBzY3JvbGxB
bmltYXRvcigpLnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKTsKIH0KIAogdm9pZCBT
Y3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkKIHsKLSAg
ICBzY3JvbGxBbmltYXRvcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKTsK
KyAgICBzY3JvbGxBbmltYXRvcigpLmhvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgp
OwogfQogCiBib29sIFNjcm9sbGFibGVBcmVhOjpoYXNMYXllckZvckhvcml6b250YWxTY3JvbGxi
YXIoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5o
CShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxl
QXJlYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgogICAgIFNj
cm9sbGJhck92ZXJsYXlTdHlsZSBzY3JvbGxiYXJPdmVybGF5U3R5bGUoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxTY3JvbGxiYXJPdmVybGF5U3R5bGU+KG1fc2Nyb2xsYmFyT3ZlcmxheVN0
eWxlKTsgfQogCiAgICAgLy8gVGhpcyBnZXR0ZXIgd2lsbCBjcmVhdGUgYSBTY3JvbGxBbmltYXRv
ciBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuCi0gICAgV0VCQ09SRV9FWFBPUlQgU2Nyb2xs
QW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgU2Ny
b2xsQW5pbWF0b3ImIHNjcm9sbEFuaW1hdG9yKCkgY29uc3Q7CiAKICAgICAvLyBUaGlzIGdldHRl
ciB3aWxsIHJldHVybiBudWxsIGlmIHRoZSBTY3JvbGxBbmltYXRvciBoYXNuJ3QgYmVlbiBjcmVh
dGVkIHlldC4KICAgICBTY3JvbGxBbmltYXRvciogZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpIGNv
bnN0IHsgcmV0dXJuIG1fc2Nyb2xsQW5pbWF0b3IuZ2V0KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDQsNyArNDQsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgIVBMQVRG
T1JNKEVGTCkKLVBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNj
cm9sbGJhcihTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0
aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKQorUGFzc1JlZlB0cjxT
Y3JvbGxiYXI+IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVh
JiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9s
bGJhckNvbnRyb2xTaXplIHNpemUpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY3JvbGxi
YXIoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uLCBzaXplKSk7CiB9CkBAIC01Niw3ICs1Niw3
IEBAIGludCBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKQogICAgIHJldHVybiBt
YXhPdmVybGFwQmV0d2VlblBhZ2VzOwogfQogCi1TY3JvbGxiYXI6OlNjcm9sbGJhcihTY3JvbGxh
YmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
LCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSwKK1Njcm9sbGJhcjo6U2Nyb2xsYmFy
KFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplLAogICAgICAgICAgICAg
ICAgICAgICAgU2Nyb2xsYmFyVGhlbWUqIHRoZW1lLCBib29sIGlzQ3VzdG9tU2Nyb2xsYmFyKQog
ICAgIDogbV9zY3JvbGxhYmxlQXJlYShzY3JvbGxhYmxlQXJlYSkKICAgICAsIG1fb3JpZW50YXRp
b24ob3JpZW50YXRpb24pCkBAIC05Myw4ICs5Myw3IEBAIFNjcm9sbGJhcjo6U2Nyb2xsYmFyKFNj
cm9sbGFibGVBcmVhKiBzY3IKICAgICBpbnQgdGhpY2tuZXNzID0gbV90aGVtZS0+c2Nyb2xsYmFy
VGhpY2tuZXNzKGNvbnRyb2xTaXplKTsKICAgICBXaWRnZXQ6OnNldEZyYW1lUmVjdChJbnRSZWN0
KDAsIDAsIHRoaWNrbmVzcywgdGhpY2tuZXNzKSk7CiAKLSAgICBpZiAobV9zY3JvbGxhYmxlQXJl
YSkKLSAgICAgICAgbV9jdXJyZW50UG9zID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYWJs
ZUFyZWEtPnNjcm9sbFBvc2l0aW9uKHRoaXMpKTsKKyAgICBtX2N1cnJlbnRQb3MgPSBzdGF0aWNf
Y2FzdDxmbG9hdD4obV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxQb3NpdGlvbih0aGlzKSk7CiB9CiAK
IFNjcm9sbGJhcjo6flNjcm9sbGJhcigpCkBAIC0xMDYsMTIgKzEwNSwxMiBAQCBTY3JvbGxiYXI6
On5TY3JvbGxiYXIoKQogCiBTY3JvbGxiYXJPdmVybGF5U3R5bGUgU2Nyb2xsYmFyOjpzY3JvbGxi
YXJPdmVybGF5U3R5bGUoKSBjb25zdAogewotICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhID8g
bV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKCkgOiBTY3JvbGxiYXJPdmVy
bGF5U3R5bGVEZWZhdWx0OworICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbGJhck92
ZXJsYXlTdHlsZSgpOwogfQogCiBib29sIFNjcm9sbGJhcjo6aXNTY3JvbGxhYmxlQXJlYUFjdGl2
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9zY3JvbGxhYmxl
QXJlYS0+aXNBY3RpdmUoKTsKKyAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS5pc0FjdGl2ZSgp
OwogfQogCiBib29sIFNjcm9sbGJhcjo6aXNTY3JvbGxWaWV3U2Nyb2xsYmFyKCkgY29uc3QKQEAg
LTEyMSw5ICsxMjAsNyBAQCBib29sIFNjcm9sbGJhcjo6aXNTY3JvbGxWaWV3U2Nyb2xsYmFyKCkg
CiAKIHZvaWQgU2Nyb2xsYmFyOjpvZmZzZXREaWRDaGFuZ2UoKQogewotICAgIEFTU0VSVChtX3Nj
cm9sbGFibGVBcmVhKTsKLQotICAgIGZsb2F0IHBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKHRoaXMpKTsKKyAgICBmbG9hdCBwb3Np
dGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3Njcm9sbGFibGVBcmVhLnNjcm9sbFBvc2l0aW9u
KHRoaXMpKTsKICAgICBpZiAocG9zaXRpb24gPT0gbV9jdXJyZW50UG9zKQogICAgICAgICByZXR1
cm47CiAKQEAgLTIxMSw3ICsyMDgsNyBAQCB2b2lkIFNjcm9sbGJhcjo6YXV0b3Njcm9sbFByZXNz
ZWRQYXJ0KGRvCiAgICAgfQogCiAgICAgLy8gSGFuZGxlIHRoZSBhcnJvd3MgYW5kIHRyYWNrLgot
ICAgIGlmIChtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbChwcmVz
c2VkUGFydFNjcm9sbERpcmVjdGlvbigpLCBwcmVzc2VkUGFydFNjcm9sbEdyYW51bGFyaXR5KCkp
KQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVhLnNjcm9sbChwcmVzc2VkUGFydFNjcm9sbERpcmVj
dGlvbigpLCBwcmVzc2VkUGFydFNjcm9sbEdyYW51bGFyaXR5KCkpKQogICAgICAgICBzdGFydFRp
bWVySWZOZWVkZWQoZGVsYXkpOwogfQogCkBAIC0yNzAsMjIgKzI2NywxOSBAQCBTY3JvbGxHcmFu
dWxhcml0eSBTY3JvbGxiYXI6OnByZXNzZWRQYXJ0CiAKIHZvaWQgU2Nyb2xsYmFyOjptb3ZlVGh1
bWIoaW50IHBvcywgYm9vbCBkcmFnZ2luZ0RvY3VtZW50KQogewotICAgIGlmICghbV9zY3JvbGxh
YmxlQXJlYSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaW50IGRlbHRhID0gcG9zIC0gbV9wcmVz
c2VkUG9zOwogCiAgICAgaWYgKGRyYWdnaW5nRG9jdW1lbnQpIHsKICAgICAgICAgaWYgKG1fZHJh
Z2dpbmdEb2N1bWVudCkKICAgICAgICAgICAgIGRlbHRhID0gcG9zIC0gbV9kb2N1bWVudERyYWdQ
b3M7CiAgICAgICAgIG1fZHJhZ2dpbmdEb2N1bWVudCA9IHRydWU7Ci0gICAgICAgIEZsb2F0UG9p
bnQgY3VycmVudFBvc2l0aW9uID0gbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsQW5pbWF0b3IoKS0+
Y3VycmVudFBvc2l0aW9uKCk7CisgICAgICAgIEZsb2F0UG9pbnQgY3VycmVudFBvc2l0aW9uID0g
bV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxBbmltYXRvcigpLmN1cnJlbnRQb3NpdGlvbigpOwogICAg
ICAgICBpbnQgZGVzdGluYXRpb25Qb3NpdGlvbiA9IChtX29yaWVudGF0aW9uID09IEhvcml6b250
YWxTY3JvbGxiYXIgPyBjdXJyZW50UG9zaXRpb24ueCgpIDogY3VycmVudFBvc2l0aW9uLnkoKSkg
KyBkZWx0YTsKICAgICAgICAgaWYgKGRlbHRhID4gMCkKICAgICAgICAgICAgIGRlc3RpbmF0aW9u
UG9zaXRpb24gPSBzdGQ6Om1pbihkZXN0aW5hdGlvblBvc2l0aW9uICsgZGVsdGEsIG1heGltdW0o
KSk7CiAgICAgICAgIGVsc2UgaWYgKGRlbHRhIDwgMCkKICAgICAgICAgICAgIGRlc3RpbmF0aW9u
UG9zaXRpb24gPSBzdGQ6Om1heChkZXN0aW5hdGlvblBvc2l0aW9uICsgZGVsdGEsIDApOwotICAg
ICAgICBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24obV9v
cmllbnRhdGlvbiwgZGVzdGluYXRpb25Qb3NpdGlvbik7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFy
ZWEuc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG1fb3JpZW50YXRpb24sIGRlc3RpbmF0
aW9uUG9zaXRpb24pOwogICAgICAgICBtX2RvY3VtZW50RHJhZ1BvcyA9IHBvczsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTMwNyw3ICszMDEsNyBAQCB2b2lkIFNjcm9sbGJhcjo6bW92ZVRo
dW1iKGludCBwb3MsIGJvb2wgCiAgICAgCiAgICAgaWYgKGRlbHRhKSB7CiAgICAgICAgIGZsb2F0
IG5ld1Bvc2l0aW9uID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRodW1iUG9zICsgZGVsdGEpICogbWF4
aW11bSgpIC8gKHRyYWNrTGVuIC0gdGh1bWJMZW4pOwotICAgICAgICBtX3Njcm9sbGFibGVBcmVh
LT5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24obV9vcmllbnRhdGlvbiwgbmV3UG9zaXRp
b24pOworICAgICAgICBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1h
dGlvbihtX29yaWVudGF0aW9uLCBuZXdQb3NpdGlvbik7CiAgICAgfQogfQogCkBAIC0zNDAsMTAg
KzMzNCw5IEBAIHZvaWQgU2Nyb2xsYmFyOjpzZXRQcmVzc2VkUGFydChTY3JvbGxiYXIKIGJvb2wg
U2Nyb2xsYmFyOjptb3VzZU1vdmVkKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQogewog
ICAgIGlmIChtX3ByZXNzZWRQYXJ0ID09IFRodW1iUGFydCkgewotICAgICAgICBpZiAodGhlbWUo
KS0+c2hvdWxkU25hcEJhY2tUb0RyYWdPcmlnaW4odGhpcywgZXZ0KSkgewotICAgICAgICAgICAg
aWYgKG1fc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+
c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG1fb3JpZW50YXRpb24sIG1fZHJhZ09yaWdp
bik7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmICh0aGVtZSgpLT5zaG91bGRTbmFwQmFj
a1RvRHJhZ09yaWdpbih0aGlzLCBldnQpKQorICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS5z
Y3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24obV9vcmllbnRhdGlvbiwgbV9kcmFnT3JpZ2lu
KTsKKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtb3ZlVGh1bWIobV9vcmllbnRhdGlvbiA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gCiAgICAgICAgICAgICAgICAgICAgICAgY29udmVydEZy
b21Db250YWluaW5nV2luZG93KGV2dC5wb3NpdGlvbigpKS54KCkgOgogICAgICAgICAgICAgICAg
ICAgICAgIGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9zaXRpb24oKSkueSgpLCB0
aGVtZSgpLT5zaG91bGREcmFnRG9jdW1lbnRJbnN0ZWFkT2ZUaHVtYih0aGlzLCBldnQpKTsKQEAg
LTM3OSwxNCArMzcyLDEyIEBAIGJvb2wgU2Nyb2xsYmFyOjptb3VzZU1vdmVkKGNvbnN0IFBsYXRm
b3IKIAogdm9pZCBTY3JvbGxiYXI6Om1vdXNlRW50ZXJlZCgpCiB7Ci0gICAgaWYgKG1fc2Nyb2xs
YWJsZUFyZWEpCi0gICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPm1vdXNlRW50ZXJlZFNjcm9sbGJh
cih0aGlzKTsKKyAgICBtX3Njcm9sbGFibGVBcmVhLm1vdXNlRW50ZXJlZFNjcm9sbGJhcih0aGlz
KTsKIH0KIAogYm9vbCBTY3JvbGxiYXI6Om1vdXNlRXhpdGVkKCkKIHsKLSAgICBpZiAobV9zY3Jv
bGxhYmxlQXJlYSkKLSAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+bW91c2VFeGl0ZWRTY3JvbGxi
YXIodGhpcyk7CisgICAgbV9zY3JvbGxhYmxlQXJlYS5tb3VzZUV4aXRlZFNjcm9sbGJhcih0aGlz
KTsKICAgICBzZXRIb3ZlcmVkUGFydChOb1BhcnQpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
Mzk4LDEzICszODksMTEgQEAgYm9vbCBTY3JvbGxiYXI6Om1vdXNlVXAoY29uc3QgUGxhdGZvcm1N
bwogICAgIG1fZHJhZ2dpbmdEb2N1bWVudCA9IGZhbHNlOwogICAgIHN0b3BUaW1lcklmTmVlZGVk
KCk7CiAKLSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkgewotICAgICAgICAvLyBtX2hvdmVyZWRQ
YXJ0IHdvbid0IGJlIHVwZGF0ZWQgdW50aWwgdGhlIG5leHQgbW91c2VNb3ZlZCBvciBtb3VzZURv
d24sIHNvIHdlIGhhdmUgdG8gaGl0IHRlc3QKLSAgICAgICAgLy8gdG8gcmVhbGx5IGtub3cgaWYg
dGhlIG1vdXNlIGhhcyBleGl0ZWQgdGhlIHNjcm9sbGJhciBvbiBhIG1vdXNlVXAuCi0gICAgICAg
IFNjcm9sbGJhclBhcnQgcGFydCA9IHRoZW1lKCktPmhpdFRlc3QodGhpcywgbW91c2VFdmVudC5w
b3NpdGlvbigpKTsKLSAgICAgICAgaWYgKHBhcnQgPT0gTm9QYXJ0KQotICAgICAgICAgICAgbV9z
Y3JvbGxhYmxlQXJlYS0+bW91c2VFeGl0ZWRTY3JvbGxiYXIodGhpcyk7Ci0gICAgfQorICAgIC8v
IG1faG92ZXJlZFBhcnQgd29uJ3QgYmUgdXBkYXRlZCB1bnRpbCB0aGUgbmV4dCBtb3VzZU1vdmVk
IG9yIG1vdXNlRG93biwgc28gd2UgaGF2ZSB0byBoaXQgdGVzdAorICAgIC8vIHRvIHJlYWxseSBr
bm93IGlmIHRoZSBtb3VzZSBoYXMgZXhpdGVkIHRoZSBzY3JvbGxiYXIgb24gYSBtb3VzZVVwLgor
ICAgIFNjcm9sbGJhclBhcnQgcGFydCA9IHRoZW1lKCktPmhpdFRlc3QodGhpcywgbW91c2VFdmVu
dC5wb3NpdGlvbigpKTsKKyAgICBpZiAocGFydCA9PSBOb1BhcnQpCisgICAgICAgIG1fc2Nyb2xs
YWJsZUFyZWEubW91c2VFeGl0ZWRTY3JvbGxiYXIodGhpcyk7CiAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KQEAgLTQ5OCwxMiArNDg3LDEyIEBAIGJvb2wgU2Nyb2xsYmFyOjpzaG91bGRQYXJ0aWNpcGF0
ZUluSGl0VGUKICAgICAvLyBOb24tb3ZlcmxheSBzY3JvbGxiYXJzIHNob3VsZCBhbHdheXMgcGFy
dGljaXBhdGUgaW4gaGl0IHRlc3RpbmcuCiAgICAgaWYgKCFpc092ZXJsYXlTY3JvbGxiYXIoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9s
bEFuaW1hdG9yKCktPnNob3VsZFNjcm9sbGJhclBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKHRoaXMp
OworICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbEFuaW1hdG9yKCkuc2hvdWxkU2Ny
b2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcodGhpcyk7CiB9CiAKIGJvb2wgU2Nyb2xsYmFy
Ojppc1dpbmRvd0FjdGl2ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEg
JiYgbV9zY3JvbGxhYmxlQXJlYS0+aXNBY3RpdmUoKTsKKyAgICByZXR1cm4gbV9zY3JvbGxhYmxl
QXJlYS5pc0FjdGl2ZSgpOwogfQogCiB2b2lkIFNjcm9sbGJhcjo6aW52YWxpZGF0ZVJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkKQEAgLTUxMSw0MCArNTAwLDI3IEBAIHZvaWQgU2Nyb2xsYmFyOjpp
bnZhbGlkYXRlUmVjdChjb25zdCBJbnQKICAgICBpZiAoc3VwcHJlc3NJbnZhbGlkYXRpb24oKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIG1f
c2Nyb2xsYWJsZUFyZWEtPmludmFsaWRhdGVTY3JvbGxiYXIodGhpcywgcmVjdCk7CisgICAgbV9z
Y3JvbGxhYmxlQXJlYS5pbnZhbGlkYXRlU2Nyb2xsYmFyKHRoaXMsIHJlY3QpOwogfQogCiBJbnRS
ZWN0IFNjcm9sbGJhcjo6Y29udmVydFRvQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UmVjdCYgbG9j
YWxSZWN0KSBjb25zdAogewotICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQotICAgICAgICByZXR1
cm4gbV9zY3JvbGxhYmxlQXJlYS0+Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3
KHRoaXMsIGxvY2FsUmVjdCk7Ci0KLSAgICByZXR1cm4gV2lkZ2V0Ojpjb252ZXJ0VG9Db250YWlu
aW5nVmlldyhsb2NhbFJlY3QpOworICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLmNvbnZlcnRG
cm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyh0aGlzLCBsb2NhbFJlY3QpOwogfQogCiBJbnRS
ZWN0IFNjcm9sbGJhcjo6Y29udmVydEZyb21Db250YWluaW5nVmlldyhjb25zdCBJbnRSZWN0JiBw
YXJlbnRSZWN0KSBjb25zdAogewotICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQotICAgICAgICBy
ZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xs
YmFyKHRoaXMsIHBhcmVudFJlY3QpOwotCi0gICAgcmV0dXJuIFdpZGdldDo6Y29udmVydEZyb21D
b250YWluaW5nVmlldyhwYXJlbnRSZWN0KTsKKyAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS5j
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIodGhpcywgcGFyZW50UmVjdCk7CiB9
CiAKIEludFBvaW50IFNjcm9sbGJhcjo6Y29udmVydFRvQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50
UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0CiB7Ci0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCi0g
ICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5jb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29u
dGFpbmluZ1ZpZXcodGhpcywgbG9jYWxQb2ludCk7Ci0KLSAgICByZXR1cm4gV2lkZ2V0Ojpjb252
ZXJ0VG9Db250YWluaW5nVmlldyhsb2NhbFBvaW50KTsKKyAgICByZXR1cm4gbV9zY3JvbGxhYmxl
QXJlYS5jb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcodGhpcywgbG9jYWxQb2lu
dCk7CiB9CiAKIEludFBvaW50IFNjcm9sbGJhcjo6Y29udmVydEZyb21Db250YWluaW5nVmlldyhj
b25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0CiB7Ci0gICAgaWYgKG1fc2Nyb2xsYWJs
ZUFyZWEpCi0gICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5jb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3VG9TY3JvbGxiYXIodGhpcywgcGFyZW50UG9pbnQpOwotCi0gICAgcmV0dXJuIFdp
ZGdldDo6Y29udmVydEZyb21Db250YWluaW5nVmlldyhwYXJlbnRQb2ludCk7CisgICAgcmV0dXJu
IG1fc2Nyb2xsYWJsZUFyZWEuY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKHRo
aXMsIHBhcmVudFBvaW50KTsKIH0KIAogYm9vbCBTY3JvbGxiYXI6OnN1cHBvcnRzVXBkYXRlT25T
ZWNvbmRhcnlUaHJlYWQoKSBjb25zdApAQCAtNTUyLDggKzUyOCw4IEBAIGJvb2wgU2Nyb2xsYmFy
OjpzdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXIKICAgICAvLyBJdCdzIHVuZm9ydHVuYXRlIHRoYXQg
dGhpcyBuZWVkcyB0byBiZSBkb25lIHdpdGggYW4gaWZkZWYuIElkZWFsbHkgdGhlcmUgd291bGQg
YmUgYSB3YXkgdG8gZmVhdHVyZS1kZXRlY3QKICAgICAvLyB0aGUgbmVjZXNzYXJ5IHN1cHBvcnQg
d2l0aGluIEFwcEtpdC4KICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBQTEFURk9STShN
QUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMDAwCi0gICAgcmV0
dXJuICFtX3Njcm9sbGFibGVBcmVhLT5mb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRG
b3JQZXJmb3JtYW5jZVRlc3RpbmcoKQotICAgICAgICAmJiAobV9zY3JvbGxhYmxlQXJlYS0+aGFz
TGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIHx8IG1fc2Nyb2xsYWJsZUFyZWEtPmhhc0xheWVy
Rm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKKyAgICByZXR1cm4gIW1fc2Nyb2xsYWJsZUFyZWEu
Zm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkK
KyAgICAgICAgJiYgKG1fc2Nyb2xsYWJsZUFyZWEuaGFzTGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJh
cigpIHx8IG1fc2Nyb2xsYWJsZUFyZWEuaGFzTGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkp
OwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbGJhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGJhci5oCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxiYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMTQgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAxNC0yMDE1IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ1LDcgKzQ1LDcgQEAgY2xhc3MgU2Nyb2xsYmFyIDogcHVibGljIFdpZGdldCwKIAogcHVibGlj
OgogICAgIC8vIE11c3QgYmUgaW1wbGVtZW50ZWQgYnkgcGxhdGZvcm1zIHRoYXQgY2FuJ3Qgc2lt
cGx5IHVzZSB0aGUgU2Nyb2xsYmFyIGJhc2UgY2xhc3MuICBSaWdodCBub3cgdGhlIG9ubHkgcGxh
dGZvcm0gdGhhdCBpcyBub3QgdXNpbmcgdGhlIGJhc2UgY2xhc3MgaXMgR1RLLgotICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlTmF0aXZlU2Nyb2xs
YmFyKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNj
cm9sbGJhckNvbnRyb2xTaXplIHNpemUpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBQYXNz
UmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlTmF0aXZlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhJiwg
U2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplKTsKIAogICAgIHZpcnR1
YWwgflNjcm9sbGJhcigpOwogCkBAIC0xMDMsOCArMTAzLDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBpbnQgcGFnZVN0ZXAoaW50IHZpZXdXaWR0aE9ySGVpZ2h0KSB7IHJldHVybiBwYWdlU3RlcCh2
aWV3V2lkdGhPckhlaWdodCwgdmlld1dpZHRoT3JIZWlnaHQpOyB9CiAgICAgc3RhdGljIGZsb2F0
IHBhZ2VTdGVwRGVsdGEoaW50IHdpZHRoT3JIZWlnaHQpIHsgcmV0dXJuIHN0ZDo6bWF4KHN0ZDo6
bWF4KHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aE9ySGVpZ2h0KSAqIFNjcm9sbGJhcjo6bWluRnJh
Y3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aE9ySGVpZ2h0
KSAtIFNjcm9sbGJhcjo6bWF4T3ZlcmxhcEJldHdlZW5QYWdlcygpKSwgMS4wZik7IH0KIAotICAg
IHZvaWQgZGlzY29ubmVjdEZyb21TY3JvbGxhYmxlQXJlYSgpIHsgbV9zY3JvbGxhYmxlQXJlYSA9
IDA7IH0KLSAgICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEoKSBjb25zdCB7IHJldHVy
biBtX3Njcm9sbGFibGVBcmVhOyB9CisgICAgU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVh
KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYTsgfQogCiAgICAgaW50IHByZXNzZWRQ
b3MoKSBjb25zdCB7IHJldHVybiBtX3ByZXNzZWRQb3M7IH0KIApAQCAtMTU5LDcgKzE1OCw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNVcGRhdGVPblNlY29uZGFyeVRocmVh
ZCgpIGNvbnN0IG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6Ci0gICAgU2Nyb2xsYmFyKFNjcm9sbGFi
bGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplLCBTY3Jv
bGxiYXJUaGVtZSogPSAwLCBib29sIGlzQ3VzdG9tU2Nyb2xsYmFyID0gZmFsc2UpOworICAgIFNj
cm9sbGJhcihTY3JvbGxhYmxlQXJlYSYsIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJD
b250cm9sU2l6ZSwgU2Nyb2xsYmFyVGhlbWUqID0gMCwgYm9vbCBpc0N1c3RvbVNjcm9sbGJhciA9
IGZhbHNlKTsKIAogICAgIHZvaWQgdXBkYXRlVGh1bWIoKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlVGh1bWJQb3NpdGlvbigpOwpAQCAtMTcyLDcgKzE3MSw3IEBAIHByb3RlY3RlZDoKICAgICBT
Y3JvbGxEaXJlY3Rpb24gcHJlc3NlZFBhcnRTY3JvbGxEaXJlY3Rpb24oKTsKICAgICBTY3JvbGxH
cmFudWxhcml0eSBwcmVzc2VkUGFydFNjcm9sbEdyYW51bGFyaXR5KCk7CiAKLSAgICBTY3JvbGxh
YmxlQXJlYSogbV9zY3JvbGxhYmxlQXJlYTsKKyAgICBTY3JvbGxhYmxlQXJlYSYgbV9zY3JvbGxh
YmxlQXJlYTsKICAgICBTY3JvbGxiYXJPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uOwogICAgIFNj
cm9sbGJhckNvbnRyb2xTaXplIG1fY29udHJvbFNpemU7CiAgICAgU2Nyb2xsYmFyVGhlbWUqIG1f
dGhlbWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJ
T1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFu
aW1hdG9ySU9TLm1tCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgyLDcgKzgyLDcgQEAg
Ym9vbCBTY3JvbGxBbmltYXRvcklPUzo6aGFuZGxlVG91Y2hFdmVudAogICAgICAgICBtX2luVG91
Y2hTZXF1ZW5jZSA9IGZhbHNlOwogICAgICAgICBtX3Njcm9sbGFibGVBcmVhRm9yVG91Y2hTZXF1
ZW5jZSA9IDA7CiAgICAgICAgIGlmIChtX3N0YXJ0ZWRTY3JvbGwpCi0gICAgICAgICAgICBzY3Jv
bGxhYmxlQXJlYSgpLT5kaWRFbmRTY3JvbGwoKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVBcmVh
KCkuZGlkRW5kU2Nyb2xsKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTky
LDcgKzkyLDcgQEAgYm9vbCBTY3JvbGxBbmltYXRvcklPUzo6aGFuZGxlVG91Y2hFdmVudAogICAg
ICAgICBtX2luVG91Y2hTZXF1ZW5jZSA9IGZhbHNlOwogICAgICAgICBtX3Njcm9sbGFibGVBcmVh
Rm9yVG91Y2hTZXF1ZW5jZSA9IDA7CiAgICAgICAgIGlmIChtX3N0YXJ0ZWRTY3JvbGwpCi0gICAg
ICAgICAgICBzY3JvbGxhYmxlQXJlYSgpLT5kaWRFbmRTY3JvbGwoKTsKKyAgICAgICAgICAgIHNj
cm9sbGFibGVBcmVhKCkuZGlkRW5kU2Nyb2xsKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgCkBAIC0xMDUsOCArMTA1LDggQEAgYm9vbCBTY3JvbGxBbmltYXRvcklPUzo6aGFu
ZGxlVG91Y2hFdmVudAogICAgICAgICBkZXRlcm1pbmVTY3JvbGxhYmxlQXJlYUZvclRvdWNoU2Vx
dWVuY2UodG91Y2hEZWx0YSk7CiAKICAgICBpZiAoIW1fY29tbWl0dGVkVG9TY3JvbGxBeGlzKSB7
Ci0gICAgICAgIGJvb2wgaG9yaXpvbnRhbGx5U2Nyb2xsYWJsZSA9IG1fc2Nyb2xsYWJsZUFyZWEt
PnNjcm9sbFNpemUoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgICAgIGJvb2wgdmVydGljYWxs
eVNjcm9sbGFibGUgPSBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxTaXplKFZlcnRpY2FsU2Nyb2xs
YmFyKTsKKyAgICAgICAgYm9vbCBob3Jpem9udGFsbHlTY3JvbGxhYmxlID0gbV9zY3JvbGxhYmxl
QXJlYS5zY3JvbGxTaXplKEhvcml6b250YWxTY3JvbGxiYXIpOworICAgICAgICBib29sIHZlcnRp
Y2FsbHlTY3JvbGxhYmxlID0gbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxTaXplKFZlcnRpY2FsU2Ny
b2xsYmFyKTsKIAogICAgICAgICBpZiAoIWhvcml6b250YWxseVNjcm9sbGFibGUgJiYgIXZlcnRp
Y2FsbHlTY3JvbGxhYmxlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTYwLDkgKzE2
MCw5IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JJT1M6OmhhbmRsZVRvdWNoRXZlbnQKICAgICAgICAg
aWYgKCFoYW5kbGVkKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBtX3N0YXJ0
ZWRTY3JvbGwgPSB0cnVlOwotICAgICAgICBzY3JvbGxhYmxlQXJlYSgpLT5kaWRTdGFydFNjcm9s
bCgpOworICAgICAgICBzY3JvbGxhYmxlQXJlYSgpLmRpZFN0YXJ0U2Nyb2xsKCk7CiAgICAgfSBl
bHNlIGlmIChoYW5kbGVkKQotICAgICAgICBzY3JvbGxhYmxlQXJlYSgpLT5kaWRVcGRhdGVTY3Jv
bGwoKTsKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWEoKS5kaWRVcGRhdGVTY3JvbGwoKTsKICAgICAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE3MSw3ICsxNzEsNyBAQCB2b2lkIFNjcm9sbEFuaW1h
dG9ySU9TOjpkZXRlcm1pbmVTY3JvbGxhCiB7CiAgICAgQVNTRVJUKCFtX3Njcm9sbGFibGVBcmVh
Rm9yVG91Y2hTZXF1ZW5jZSk7CiAKLSAgICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEg
PSBtX3Njcm9sbGFibGVBcmVhOworICAgIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSA9
ICZtX3Njcm9sbGFibGVBcmVhOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGlmICghc2Ny
b2xsYWJsZUFyZWEtPmlzUGlubmVkSW5Cb3RoRGlyZWN0aW9ucyhzY3JvbGxEZWx0YSkpCiAgICAg
ICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxB
bmltYXRvck1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9T
Y3JvbGxBbmltYXRvck1hYy5oCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyAr
NTMsNyBAQCBjbGFzcyBTY3JvbGxiYXI7CiBjbGFzcyBTY3JvbGxBbmltYXRvck1hYyA6IHB1Ymxp
YyBTY3JvbGxBbmltYXRvciwgcHJpdmF0ZSBTY3JvbGxDb250cm9sbGVyQ2xpZW50IHsKIAogcHVi
bGljOgotICAgIFNjcm9sbEFuaW1hdG9yTWFjKFNjcm9sbGFibGVBcmVhKik7CisgICAgU2Nyb2xs
QW5pbWF0b3JNYWMoU2Nyb2xsYWJsZUFyZWEmKTsKICAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRv
ck1hYygpOwogCiAgICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxUb1BvaW50Rm9yU2Nyb2xsQW5pbWF0
aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG5ld1Bvc2l0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0JKHJldmlzaW9uIDE4MDQ1
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEwLCAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjY5LDcgKzI2OSw3IEBAIC0gKHZvaWQpc2Nyb2xs
ZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFAKICAgICBpZiAoW3Njcm9sbGVySW1wUGFpciBvdmVy
bGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgX3Njcm9s
bGFibGVBcmVhLT5zY3JvbGxBbmltYXRvcigpLT5jb250ZW50QXJlYVdpbGxQYWludCgpOworICAg
IF9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsQW5pbWF0b3IoKS5jb250ZW50QXJlYVdpbGxQYWludCgp
OwogfQogCiAtICh2b2lkKXNjcm9sbGVySW1wUGFpcjooaWQpc2Nyb2xsZXJJbXBQYWlyIHVwZGF0
ZVNjcm9sbGVyU3R5bGVGb3JOZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGU6KE5TU2Nyb2xsZXJT
dHlsZSluZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUKQEAgLTI3OSw3ICsyNzksNyBAQCAtICh2
b2lkKXNjcm9sbGVySW1wUGFpcjooaWQpc2Nyb2xsZXJJbXBQCiAKICAgICBbc2Nyb2xsZXJJbXBQ
YWlyIHNldFNjcm9sbGVyU3R5bGU6bmV3UmVjb21tZW5kZWRTY3JvbGxlclN0eWxlXTsKIAotICAg
IHN0YXRpY19jYXN0PFNjcm9sbEFuaW1hdG9yTWFjKj4oX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxB
bmltYXRvcigpKS0+dXBkYXRlU2Nyb2xsZXJTdHlsZSgpOworICAgIHN0YXRpY19jYXN0PFNjcm9s
bEFuaW1hdG9yTWFjJj4oX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxBbmltYXRvcigpKS51cGRhdGVT
Y3JvbGxlclN0eWxlKCk7CiB9CiAKIEBlbmQKQEAgLTQxNyw3ICs0MTcsNyBAQCAtICh2b2lkKWNh
bmNlbEFuaW1hdGlvbnMKIAogLSAoU2Nyb2xsQW5pbWF0b3JNYWMqKXNjcm9sbEFuaW1hdG9yCiB7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFNjcm9sbEFuaW1hdG9yTWFjKj4oX3Njcm9sbGJhci0+
c2Nyb2xsYWJsZUFyZWEoKS0+c2Nyb2xsQW5pbWF0b3IoKSk7CisgICAgcmV0dXJuICZzdGF0aWNf
Y2FzdDxTY3JvbGxBbmltYXRvck1hYyY+KF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkuc2Ny
b2xsQW5pbWF0b3IoKSk7CiB9CiAKIC0gKE5TUmVjdCljb252ZXJ0UmVjdFRvQmFja2luZzooTlNS
ZWN0KWFSZWN0CkBAIC00NDAsOSArNDQwLDkgQEAgLSAoQ0FMYXllciAqKWxheWVyCiAKICAgICBH
cmFwaGljc0xheWVyKiBsYXllcjsKICAgICBpZiAoX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9
PSBWZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgbGF5ZXIgPSBfc2Nyb2xsYmFyLT5zY3JvbGxh
YmxlQXJlYSgpLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgICAgIGxheWVyID0g
X3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCk7
CiAgICAgZWxzZQotICAgICAgICBsYXllciA9IF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkt
PmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgICAgICBsYXllciA9IF9zY3JvbGxi
YXItPnNjcm9sbGFibGVBcmVhKCkubGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCk7CiAKICAg
ICBzdGF0aWMgQ0FMYXllciAqZHVtbXlMYXllciA9IFtbQ0FMYXllciBhbGxvY10gaW5pdF07CiAg
ICAgcmV0dXJuIGxheWVyID8gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IGR1bW15TGF5ZXI7CkBA
IC00NTUsNyArNDU1LDcgQEAgLSAoTlNQb2ludCltb3VzZUxvY2F0aW9uSW5TY3JvbGxlckZvclNj
cgogCiAgICAgQVNTRVJUX1VOVVNFRChzY3JvbGxlckltcCwgc2Nyb2xsZXJJbXAgPT0gc2Nyb2xs
YmFyUGFpbnRlckZvclNjcm9sbGJhcihfc2Nyb2xsYmFyKSk7CiAKLSAgICByZXR1cm4gX3Njcm9s
bGJhci0+Y29udmVydEZyb21Db250YWluaW5nVmlldyhfc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJl
YSgpLT5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCkpOworICAgIHJldHVybiBfc2Nyb2xsYmFyLT5j
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGFz
dEtub3duTW91c2VQb3NpdGlvbigpKTsKIH0KIAogLSAoTlNSZWN0KWNvbnZlcnRSZWN0VG9MYXll
cjooTlNSZWN0KXJlY3QKQEAgLTQ4Miw3ICs0ODIsNyBAQCAtICh2b2lkKXNldFVwQWxwaGFBbmlt
YXRpb246KFJldGFpblB0cjxXCiAgICAgaWYgKFtzZWxmIHNjcm9sbEFuaW1hdG9yXS0+c2Nyb2xs
YmFyUGFpbnRUaW1lcklzQWN0aXZlKCkgJiYgIW11c3RBbmltYXRlKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAoX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+c2hvdWxkU3VzcGVuZFNj
cm9sbEFuaW1hdGlvbnMoKSAmJiAhbXVzdEFuaW1hdGUpIHsKKyAgICBpZiAoX3Njcm9sbGJhci0+
c2Nyb2xsYWJsZUFyZWEoKS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpICYmICFtdXN0
QW5pbWF0ZSkgewogICAgICAgICBbc2VsZiBzY3JvbGxBbmltYXRvcl0tPnN0YXJ0U2Nyb2xsYmFy
UGFpbnRUaW1lcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjM0LDEyICs2MzQsMTIg
QEAgLSAodm9pZClpbnZhbGlkYXRlCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0
cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSog
c2Nyb2xsYWJsZUFyZWEpCitQYXNzT3duUHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRv
cjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKIHsKICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IFNjcm9sbEFuaW1hdG9yTWFjKHNjcm9sbGFibGVBcmVhKSk7CiB9CiAKLVNj
cm9sbEFuaW1hdG9yTWFjOjpTY3JvbGxBbmltYXRvck1hYyhTY3JvbGxhYmxlQXJlYSogc2Nyb2xs
YWJsZUFyZWEpCitTY3JvbGxBbmltYXRvck1hYzo6U2Nyb2xsQW5pbWF0b3JNYWMoU2Nyb2xsYWJs
ZUFyZWEmIHNjcm9sbGFibGVBcmVhKQogICAgIDogU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJsZUFy
ZWEpCiAgICAgLCBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyKCp0aGlzLCAmU2Nyb2xsQW5p
bWF0b3JNYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQpCiAgICAgLCBtX3NlbmRD
b250ZW50QXJlYVNjcm9sbGVkVGltZXIoKnRoaXMsICZTY3JvbGxBbmltYXRvck1hYzo6c2VuZENv
bnRlbnRBcmVhU2Nyb2xsZWRUaW1lckZpcmVkKQpAQCAtNjUzLDcgKzY1Myw3IEBAIFNjcm9sbEFu
aW1hdG9yTWFjOjpTY3JvbGxBbmltYXRvck1hYyhTY3IKICAgICBtX3Njcm9sbEFuaW1hdGlvbkhl
bHBlckRlbGVnYXRlID0gYWRvcHROUyhbW1dlYlNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRl
IGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsKICAgICBtX3Njcm9sbEFuaW1h
dGlvbkhlbHBlciA9IGFkb3B0TlMoW1tOU0NsYXNzRnJvbVN0cmluZyhAIk5TU2Nyb2xsQW5pbWF0
aW9uSGVscGVyIikgYWxsb2NdIGluaXRXaXRoRGVsZWdhdGU6bV9zY3JvbGxBbmltYXRpb25IZWxw
ZXJEZWxlZ2F0ZS5nZXQoKV0pOwogCi0gICAgbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRl
bGVnYXRlID0gYWRvcHROUyhbW1dlYlNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUg
YWxsb2NdIGluaXRXaXRoU2Nyb2xsYWJsZUFyZWE6c2Nyb2xsYWJsZUFyZWFdKTsKKyAgICBtX3Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUgPSBhZG9wdE5TKFtbV2ViU2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxhYmxlQXJlYTom
c2Nyb2xsYWJsZUFyZWFdKTsKICAgICBtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyID0gYWRv
cHROUyhbW05TQ2xhc3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxlckltcFBhaXIiKSBhbGxvY10gaW5p
dF0pOwogICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIHNldERlbGVnYXRlOihpZClt
X3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUuZ2V0KCldOwogICAgIFttX3Njcm9s
bGJhclBhaW50ZXJDb250cm9sbGVyIHNldFNjcm9sbGVyU3R5bGU6cmVjb21tZW5kZWRTY3JvbGxl
clN0eWxlKCldOwpAQCAtNjk5LDE0ICs2OTksMTQgQEAgYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6
c2Nyb2xsKFNjcm9sbGJhcgogewogICAgIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCA9IHRy
dWU7CiAKLSAgICBpZiAoIXNjcm9sbEFuaW1hdGlvbkVuYWJsZWRGb3JTeXN0ZW0oKSB8fCAhbV9z
Y3JvbGxhYmxlQXJlYS0+c2Nyb2xsQW5pbWF0b3JFbmFibGVkKCkpCisgICAgaWYgKCFzY3JvbGxB
bmltYXRpb25FbmFibGVkRm9yU3lzdGVtKCkgfHwgIW1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5p
bWF0b3JFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9y
aWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CiAKICAgICBpZiAoZ3Jh
bnVsYXJpdHkgPT0gU2Nyb2xsQnlQaXhlbCkKICAgICAgICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9y
OjpzY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKIAog
ICAgIGZsb2F0IGN1cnJlbnRQb3MgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFy
ID8gbV9jdXJyZW50UG9zWCA6IG1fY3VycmVudFBvc1k7Ci0gICAgZmxvYXQgbmV3UG9zID0gc3Rk
OjptYXg8ZmxvYXQ+KHN0ZDo6bWluPGZsb2F0PihjdXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBs
aWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFNpemUob3Jp
ZW50YXRpb24pKSksIDApOworICAgIGZsb2F0IG5ld1BvcyA9IHN0ZDo6bWF4PGZsb2F0PihzdGQ6
Om1pbjxmbG9hdD4oY3VycmVudFBvcyArIChzdGVwICogbXVsdGlwbGllciksIHN0YXRpY19jYXN0
PGZsb2F0PihtX3Njcm9sbGFibGVBcmVhLnNjcm9sbFNpemUob3JpZW50YXRpb24pKSksIDApOwog
ICAgIGlmIChjdXJyZW50UG9zID09IG5ld1BvcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC03MjksMjUgKzcyOSwyNSBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzY3JvbGxUb09mZnNl
dFdpCiAKIEZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3JNYWM6OmFkanVzdFNjcm9sbFBvc2l0aW9u
SWZOZWNlc3NhcnkoY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pIGNvbnN0CiB7Ci0gICAgaWYg
KCFtX3Njcm9sbGFibGVBcmVhLT5jb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSgpKQor
ICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYS5jb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRn
ZSgpKQogICAgICAgICByZXR1cm4gcG9zaXRpb247CiAKLSAgICBmbG9hdCBuZXdYID0gc3RkOjpt
YXg8ZmxvYXQ+KHN0ZDo6bWluPGZsb2F0Pihwb3NpdGlvbi54KCksIG1fc2Nyb2xsYWJsZUFyZWEt
PnRvdGFsQ29udGVudHNTaXplKCkud2lkdGgoKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVX
aWR0aCgpKSwgMCk7Ci0gICAgZmxvYXQgbmV3WSA9IHN0ZDo6bWF4PGZsb2F0PihzdGQ6Om1pbjxm
bG9hdD4ocG9zaXRpb24ueSgpLCBtX3Njcm9sbGFibGVBcmVhLT50b3RhbENvbnRlbnRzU2l6ZSgp
LmhlaWdodCgpIC0gbV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUhlaWdodCgpKSwgMCk7CisgICAg
ZmxvYXQgbmV3WCA9IHN0ZDo6bWF4PGZsb2F0PihzdGQ6Om1pbjxmbG9hdD4ocG9zaXRpb24ueCgp
LCBtX3Njcm9sbGFibGVBcmVhLnRvdGFsQ29udGVudHNTaXplKCkud2lkdGgoKSAtIG1fc2Nyb2xs
YWJsZUFyZWEudmlzaWJsZVdpZHRoKCkpLCAwKTsKKyAgICBmbG9hdCBuZXdZID0gc3RkOjptYXg8
ZmxvYXQ+KHN0ZDo6bWluPGZsb2F0Pihwb3NpdGlvbi55KCksIG1fc2Nyb2xsYWJsZUFyZWEudG90
YWxDb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIG1fc2Nyb2xsYWJsZUFyZWEudmlzaWJsZUhlaWdo
dCgpKSwgMCk7CiAKICAgICByZXR1cm4gRmxvYXRQb2ludChuZXdYLCBuZXdZKTsKIH0KIAogdm9p
ZCBTY3JvbGxBbmltYXRvck1hYzo6YWRqdXN0U2Nyb2xsUG9zaXRpb25Ub0JvdW5kc0lmTmVjZXNz
YXJ5KCkKIHsKLSAgICBib29sIGN1cnJlbnRseUNvbnN0cmFpbnNUb0NvbnRlbnRFZGdlID0gbV9z
Y3JvbGxhYmxlQXJlYS0+Y29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoKTsKLSAgICBt
X3Njcm9sbGFibGVBcmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSh0cnVl
KTsKKyAgICBib29sIGN1cnJlbnRseUNvbnN0cmFpbnNUb0NvbnRlbnRFZGdlID0gbV9zY3JvbGxh
YmxlQXJlYS5jb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSgpOworICAgIG1fc2Nyb2xs
YWJsZUFyZWEuc2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7CiAKICAg
ICBJbnRQb2ludCBjdXJyZW50U2Nyb2xsUG9zaXRpb24gPSBhYnNvbHV0ZVNjcm9sbFBvc2l0aW9u
KCk7CiAgICAgRmxvYXRQb2ludCBuZWFyZXN0UG9pbnRXaXRoaW5Cb3VuZHMgPSBhZGp1c3RTY3Jv
bGxQb3NpdGlvbklmTmVjZXNzYXJ5KGFic29sdXRlU2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgaW1t
ZWRpYXRlU2Nyb2xsQnkobmVhcmVzdFBvaW50V2l0aGluQm91bmRzIC0gY3VycmVudFNjcm9sbFBv
c2l0aW9uKTsKIAotICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdU
b0NvbnRlbnRFZGdlKGN1cnJlbnRseUNvbnN0cmFpbnNUb0NvbnRlbnRFZGdlKTsKKyAgICBtX3Nj
cm9sbGFibGVBcmVhLnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGN1cnJlbnRs
eUNvbnN0cmFpbnNUb0NvbnRlbnRFZGdlKTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6
aW1tZWRpYXRlU2Nyb2xsVG8oY29uc3QgRmxvYXRQb2ludCYgbmV3UG9zaXRpb24pCkBAIC03NTUs
NyArNzU1LDcgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsVAogICAg
IEZsb2F0UG9pbnQgYWRqdXN0ZWRQb3NpdGlvbiA9IGFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNl
c3NhcnkobmV3UG9zaXRpb24pOwogIAogICAgIGJvb2wgcG9zaXRpb25DaGFuZ2VkID0gYWRqdXN0
ZWRQb3NpdGlvbi54KCkgIT0gbV9jdXJyZW50UG9zWCB8fCBhZGp1c3RlZFBvc2l0aW9uLnkoKSAh
PSBtX2N1cnJlbnRQb3NZOwotICAgIGlmICghcG9zaXRpb25DaGFuZ2VkICYmICFzY3JvbGxhYmxl
QXJlYSgpLT5zY3JvbGxPcmlnaW5DaGFuZ2VkKCkpCisgICAgaWYgKCFwb3NpdGlvbkNoYW5nZWQg
JiYgIXNjcm9sbGFibGVBcmVhKCkuc2Nyb2xsT3JpZ2luQ2hhbmdlZCgpKQogICAgICAgICByZXR1
cm47CiAKICAgICBGbG9hdFNpemUgZGVsdGEgPSBGbG9hdFNpemUoYWRqdXN0ZWRQb3NpdGlvbi54
KCkgLSBtX2N1cnJlbnRQb3NYLCBhZGp1c3RlZFBvc2l0aW9uLnkoKSAtIG1fY3VycmVudFBvc1kp
OwpAQCAtOTQyLDExICs5NDIsMTEgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6ZGlkQWRkVmVy
dGljYWxTYwogICAgIG1fdmVydGljYWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUgPSBhZG9wdE5T
KFtbV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGJhcjpz
Y3JvbGxiYXJdKTsKIAogICAgIFtwYWludGVyIHNldERlbGVnYXRlOihpZCltX3ZlcnRpY2FsU2Ny
b2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpXTsKLSAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5
ZXIgPSBzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCktPmxheWVyRm9yVmVydGljYWxTY3JvbGxi
YXIoKSkKKyAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBzY3JvbGxiYXItPnNjcm9sbGFi
bGVBcmVhKCkubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKQogICAgICAgICBbcGFpbnRlciBz
ZXRMYXllcjpsYXllci0+cGxhdGZvcm1MYXllcigpXTsKIAogICAgIFttX3Njcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyIHNldFZlcnRpY2FsU2Nyb2xsZXJJbXA6cGFpbnRlcl07Ci0gICAgaWYgKHNj
cm9sbGFibGVBcmVhKCktPmluTGl2ZVJlc2l6ZSgpKQorICAgIGlmIChzY3JvbGxhYmxlQXJlYSgp
LmluTGl2ZVJlc2l6ZSgpKQogICAgICAgICBbcGFpbnRlciBzZXRLbm9iQWxwaGE6MV07CiB9CiAK
QEAgLTk3NCwxMSArOTc0LDExIEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEFkZEhvcml6
b250YWwKICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUgPSBhZG9wdE5T
KFtbV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGJhcjpz
Y3JvbGxiYXJdKTsKIAogICAgIFtwYWludGVyIHNldERlbGVnYXRlOihpZCltX2hvcml6b250YWxT
Y3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCldOwotICAgIGlmIChHcmFwaGljc0xheWVyKiBs
YXllciA9IHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+bGF5ZXJGb3JIb3Jpem9udGFsU2Ny
b2xsYmFyKCkpCisgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gc2Nyb2xsYmFyLT5zY3Jv
bGxhYmxlQXJlYSgpLmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKQogICAgICAgICBbcGFp
bnRlciBzZXRMYXllcjpsYXllci0+cGxhdGZvcm1MYXllcigpXTsKIAogICAgIFttX3Njcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyIHNldEhvcml6b250YWxTY3JvbGxlckltcDpwYWludGVyXTsKLSAg
ICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS0+aW5MaXZlUmVzaXplKCkpCisgICAgaWYgKHNjcm9sbGFi
bGVBcmVhKCkuaW5MaXZlUmVzaXplKCkpCiAgICAgICAgIFtwYWludGVyIHNldEtub2JBbHBoYTox
XTsKIH0KIApAQCAtOTk4LDggKzk5OCw4IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OndpbGxS
ZW1vdmVIb3Jpem8KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6dmVydGljYWxTY3JvbGxiYXJM
YXllckRpZENoYW5nZSgpCiB7Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBtX3Njcm9sbGFi
bGVBcmVhLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCk7Ci0gICAgU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIEdyYXBo
aWNzTGF5ZXIqIGxheWVyID0gbV9zY3JvbGxhYmxlQXJlYS5sYXllckZvclZlcnRpY2FsU2Nyb2xs
YmFyKCk7CisgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLnZlcnRp
Y2FsU2Nyb2xsYmFyKCk7CiAgICAgaWYgKCFzY3JvbGxiYXIpCiAgICAgICAgIHJldHVybjsKIApA
QCAtMTAxMiw4ICsxMDEyLDggQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6dmVydGljYWxTY3Jv
bGxiYQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJE
aWRDaGFuZ2UoKQogewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbV9zY3JvbGxhYmxlQXJl
YS0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAgU2Nyb2xsYmFyKiBzY3JvbGxi
YXIgPSBtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgR3JhcGhp
Y3NMYXllciogbGF5ZXIgPSBtX3Njcm9sbGFibGVBcmVhLmxheWVyRm9ySG9yaXpvbnRhbFNjcm9s
bGJhcigpOworICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxlQXJlYS5ob3Jp
em9udGFsU2Nyb2xsYmFyKCk7CiAgICAgaWYgKCFzY3JvbGxiYXIpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMTA0OCw3ICsxMDQ4LDcgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bm90aWZ5Q29u
dGVudEFyZQogICAgIGlmIChbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciBvdmVybGF5U2Ny
b2xsZXJTdGF0ZUlzTG9ja2VkXSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fc2Nyb2xs
YWJsZUFyZWEtPmlzSGFuZGxpbmdXaGVlbEV2ZW50KCkpCisgICAgaWYgKG1fc2Nyb2xsYWJsZUFy
ZWEuaXNIYW5kbGluZ1doZWVsRXZlbnQoKSkKICAgICAgICAgc2VuZENvbnRlbnRBcmVhU2Nyb2xs
ZWQoZGVsdGEpOwogICAgIGVsc2UKICAgICAgICAgc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRTb29u
KGRlbHRhKTsKQEAgLTExMDksMjEgKzExMDksMjEgQEAgYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6
aGFuZGxlV2hlZWxFdmVudAogYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6cGlubmVkSW5EaXJlY3Rp
b24oZmxvYXQgZGVsdGFYLCBmbG9hdCBkZWx0YVkpCiB7CiAgICAgRmxvYXRTaXplIGxpbWl0RGVs
dGE7Ci0gICAgaWYgKGZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVsdGFYKSkgeworICAgIGlmIChz
dGQ6OmZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVsdGFYKSkgewogICAgICAgICBpZiAoZGVsdGFZ
IDwgMCkgewogICAgICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwgdXAuICBNYWtl
IHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIHRvcAotICAgICAgICAgICAgbGltaXREZWx0
YS5zZXRIZWlnaHQobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkueSgpICsg
bV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkueSgpKTsKKyAgICAgICAgICAgIGxpbWl0
RGVsdGEuc2V0SGVpZ2h0KG1fc2Nyb2xsYWJsZUFyZWEudmlzaWJsZUNvbnRlbnRSZWN0KCkueSgp
ICsgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxPcmlnaW4oKS55KCkpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwgZG93bi4gIE1ha2Ugc3Vy
ZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUgYm90dG9tCi0gICAgICAgICAgICBsaW1pdERlbHRh
LnNldEhlaWdodChtX3Njcm9sbGFibGVBcmVhLT50b3RhbENvbnRlbnRzU2l6ZSgpLmhlaWdodCgp
IC0gKG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLm1heFkoKSArIG1fc2Ny
b2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpLnkoKSkpOworICAgICAgICAgICAgbGltaXREZWx0
YS5zZXRIZWlnaHQobV9zY3JvbGxhYmxlQXJlYS50b3RhbENvbnRlbnRzU2l6ZSgpLmhlaWdodCgp
IC0gKG1fc2Nyb2xsYWJsZUFyZWEudmlzaWJsZUNvbnRlbnRSZWN0KCkubWF4WSgpICsgbV9zY3Jv
bGxhYmxlQXJlYS5zY3JvbGxPcmlnaW4oKS55KCkpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBp
ZiAoZGVsdGFYICE9IDApIHsKICAgICAgICAgaWYgKGRlbHRhWCA8IDApIHsKICAgICAgICAgICAg
IC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIGxlZnQuICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBw
aW5uZWQgdG8gdGhlIGxlZnQKLSAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0V2lkdGgobV9zY3Jv
bGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkueCgpICsgbV9zY3JvbGxhYmxlQXJlYS0+
c2Nyb2xsT3JpZ2luKCkueCgpKTsKKyAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0V2lkdGgobV9z
Y3JvbGxhYmxlQXJlYS52aXNpYmxlQ29udGVudFJlY3QoKS54KCkgKyBtX3Njcm9sbGFibGVBcmVh
LnNjcm9sbE9yaWdpbigpLngoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBX
ZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCByaWdodC4gIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBpbm5l
ZCB0byB0aGUgcmlnaHQKLSAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0V2lkdGgobV9zY3JvbGxh
YmxlQXJlYS0+dG90YWxDb250ZW50c1NpemUoKS53aWR0aCgpIC0gKG1fc2Nyb2xsYWJsZUFyZWEt
PnZpc2libGVDb250ZW50UmVjdCgpLm1heFgoKSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9y
aWdpbigpLngoKSkpOworICAgICAgICAgICAgbGltaXREZWx0YS5zZXRXaWR0aChtX3Njcm9sbGFi
bGVBcmVhLnRvdGFsQ29udGVudHNTaXplKCkud2lkdGgoKSAtIChtX3Njcm9sbGFibGVBcmVhLnZp
c2libGVDb250ZW50UmVjdCgpLm1heFgoKSArIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsT3JpZ2lu
KCkueCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0xMTQzLDkgKzExNDMsOSBAQCBi
b29sIFNjcm9sbEFuaW1hdG9yTWFjOjppc0FscmVhZHlQaW5uZWRJCiB7CiAgICAgc3dpdGNoIChh
eGlzKSB7CiAgICAgY2FzZSBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsOgotICAgICAgICByZXR1
cm4gKHdoZWVsRXZlbnQuZGVsdGFZKCkgPiAwICYmIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbGVk
VG9Ub3AoKSkgfHwgKHdoZWVsRXZlbnQuZGVsdGFZKCkgPCAwICYmIG1fc2Nyb2xsYWJsZUFyZWEt
PnNjcm9sbGVkVG9Cb3R0b20oKSk7CisgICAgICAgIHJldHVybiAod2hlZWxFdmVudC5kZWx0YVko
KSA+IDAgJiYgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxlZFRvVG9wKCkpIHx8ICh3aGVlbEV2ZW50
LmRlbHRhWSgpIDwgMCAmJiBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbGVkVG9Cb3R0b20oKSk7CiAg
ICAgY2FzZSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWw6Ci0gICAgICAgIHJldHVybiAod2hl
ZWxFdmVudC5kZWx0YVgoKSA+IDAgJiYgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsZWRUb0xlZnQo
KSkgfHwgKHdoZWVsRXZlbnQuZGVsdGFYKCkgPCAwICYmIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9s
bGVkVG9SaWdodCgpKTsKKyAgICAgICAgcmV0dXJuICh3aGVlbEV2ZW50LmRlbHRhWCgpID4gMCAm
JiBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbGVkVG9MZWZ0KCkpIHx8ICh3aGVlbEV2ZW50LmRlbHRh
WCgpIDwgMCAmJiBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbGVkVG9SaWdodCgpKTsKICAgICB9CiAK
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTExNjksMTUgKzExNjksMTUgQEAgc3RhdGlj
IGJvb2wgZ2VzdHVyZVNob3VsZEJlZ2luU25hcChjb25zdAogCiBib29sIFNjcm9sbEFuaW1hdG9y
TWFjOjphbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3
aGVlbEV2ZW50KQogewotICAgIHN3aXRjaCAobV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3Jv
bGxFbGFzdGljaXR5KCkpIHsKKyAgICBzd2l0Y2ggKG1fc2Nyb2xsYWJsZUFyZWEudmVydGljYWxT
Y3JvbGxFbGFzdGljaXR5KCkpIHsKICAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWM6
IHsKLSAgICAgICAgU2Nyb2xsYmFyKiBoU2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT5ob3Jp
em9udGFsU2Nyb2xsYmFyKCk7Ci0gICAgICAgIFNjcm9sbGJhciogdlNjcm9sbGVyID0gbV9zY3Jv
bGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICAgICAgU2Nyb2xsYmFyKiBoU2Ny
b2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICAgICAg
U2Nyb2xsYmFyKiB2U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFy
KCk7CiAgICAgICAgIGJvb2wgc2Nyb2xsYmFyc0FsbG93U3RyZXRjaGluZyA9ICgodlNjcm9sbGVy
ICYmIHZTY3JvbGxlci0+ZW5hYmxlZCgpKSB8fCAoIWhTY3JvbGxlciB8fCAhaFNjcm9sbGVyLT5l
bmFibGVkKCkpKTsKLSAgICAgICAgYm9vbCBldmVudFByZXZlbnRzU3RyZXRjaGluZyA9IG1fc2Ny
b2xsYWJsZUFyZWEtPmhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSAmJiBu
ZXdHZXN0dXJlSXNTdGFydGluZyh3aGVlbEV2ZW50KSAmJiBpc0FscmVhZHlQaW5uZWRJbkRpcmVj
dGlvbk9mR2VzdHVyZSh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKTsKKyAg
ICAgICAgYm9vbCBldmVudFByZXZlbnRzU3RyZXRjaGluZyA9IG1fc2Nyb2xsYWJsZUFyZWEuaGFz
U2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpICYmIG5ld0dlc3R1cmVJc1N0YXJ0
aW5nKHdoZWVsRXZlbnQpICYmIGlzQWxyZWFkeVBpbm5lZEluRGlyZWN0aW9uT2ZHZXN0dXJlKHdo
ZWVsRXZlbnQsIFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpOwogI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCiAgICAgICAgIGlmICghZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmcpCi0gICAgICAg
ICAgICBldmVudFByZXZlbnRzU3RyZXRjaGluZyA9IGdlc3R1cmVTaG91bGRCZWdpblNuYXAod2hl
ZWxFdmVudCwgbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTbmFwT2Zmc2V0cygpKTsKKyAgICAg
ICAgICAgIGV2ZW50UHJldmVudHNTdHJldGNoaW5nID0gZ2VzdHVyZVNob3VsZEJlZ2luU25hcCh3
aGVlbEV2ZW50LCBtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU25hcE9mZnNldHMoKSk7CiAjZW5k
aWYKICAgICAgICAgcmV0dXJuIHNjcm9sbGJhcnNBbGxvd1N0cmV0Y2hpbmcgJiYgIWV2ZW50UHJl
dmVudHNTdHJldGNoaW5nOwogICAgIH0KQEAgLTExOTMsMTUgKzExOTMsMTUgQEAgYm9vbCBTY3Jv
bGxBbmltYXRvck1hYzo6YWxsb3dzVmVydGljYWxTdAogCiBib29sIFNjcm9sbEFuaW1hdG9yTWFj
OjphbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdo
ZWVsRXZlbnQpCiB7Ci0gICAgc3dpdGNoIChtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Ny
b2xsRWxhc3RpY2l0eSgpKSB7CisgICAgc3dpdGNoIChtX3Njcm9sbGFibGVBcmVhLmhvcml6b250
YWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKICAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0
aWM6IHsKLSAgICAgICAgU2Nyb2xsYmFyKiBoU2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT5o
b3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAgICAgIFNjcm9sbGJhciogdlNjcm9sbGVyID0gbV9z
Y3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICAgICAgU2Nyb2xsYmFyKiBo
U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICAg
ICAgU2Nyb2xsYmFyKiB2U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU2Nyb2xs
YmFyKCk7CiAgICAgICAgIGJvb2wgc2Nyb2xsYmFyc0FsbG93U3RyZXRjaGluZyA9ICgoaFNjcm9s
bGVyICYmIGhTY3JvbGxlci0+ZW5hYmxlZCgpKSB8fCAoIXZTY3JvbGxlciB8fCAhdlNjcm9sbGVy
LT5lbmFibGVkKCkpKTsKLSAgICAgICAgYm9vbCBldmVudFByZXZlbnRzU3RyZXRjaGluZyA9IG1f
c2Nyb2xsYWJsZUFyZWEtPmhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSAm
JiBuZXdHZXN0dXJlSXNTdGFydGluZyh3aGVlbEV2ZW50KSAmJiBpc0FscmVhZHlQaW5uZWRJbkRp
cmVjdGlvbk9mR2VzdHVyZSh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwp
OworICAgICAgICBib29sIGV2ZW50UHJldmVudHNTdHJldGNoaW5nID0gbV9zY3JvbGxhYmxlQXJl
YS5oYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkgJiYgbmV3R2VzdHVyZUlz
U3RhcnRpbmcod2hlZWxFdmVudCkgJiYgaXNBbHJlYWR5UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1
cmUod2hlZWxFdmVudCwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKICNpZiBFTkFCTEUo
Q1NTX1NDUk9MTF9TTkFQKQogICAgICAgICBpZiAoIWV2ZW50UHJldmVudHNTdHJldGNoaW5nKQot
ICAgICAgICAgICAgZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmcgPSBnZXN0dXJlU2hvdWxkQmVnaW5T
bmFwKHdoZWVsRXZlbnQsIG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTbmFwT2Zmc2V0cygp
KTsKKyAgICAgICAgICAgIGV2ZW50UHJldmVudHNTdHJldGNoaW5nID0gZ2VzdHVyZVNob3VsZEJl
Z2luU25hcCh3aGVlbEV2ZW50LCBtX3Njcm9sbGFibGVBcmVhLmhvcml6b250YWxTbmFwT2Zmc2V0
cygpKTsKICNlbmRpZgogICAgICAgICByZXR1cm4gc2Nyb2xsYmFyc0FsbG93U3RyZXRjaGluZyAm
JiAhZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmc7CiAgICAgfQpAQCAtMTIxNyw3ICsxMjE3LDcgQEAg
Ym9vbCBTY3JvbGxBbmltYXRvck1hYzo6YWxsb3dzSG9yaXpvbnRhbAogCiBJbnRTaXplIFNjcm9s
bEFuaW1hdG9yTWFjOjpzdHJldGNoQW1vdW50KCkKIHsKLSAgICByZXR1cm4gbV9zY3JvbGxhYmxl
QXJlYS0+b3ZlcmhhbmdBbW91bnQoKTsKKyAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS5vdmVy
aGFuZ0Ftb3VudCgpOwogfQogCiBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpwaW5uZWRJbkRpcmVj
dGlvbihjb25zdCBGbG9hdFNpemUmIGRpcmVjdGlvbikKQEAgLTEyMjcsNyArMTIyNyw3IEBAIGJv
b2wgU2Nyb2xsQW5pbWF0b3JNYWM6OnBpbm5lZEluRGlyZWN0aW8KIAogYm9vbCBTY3JvbGxBbmlt
YXRvck1hYzo6Y2FuU2Nyb2xsSG9yaXpvbnRhbGx5KCkKIHsKLSAgICBTY3JvbGxiYXIqIHNjcm9s
bGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICBTY3Jv
bGxiYXIqIHNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNjcm9sbGJhcigp
OwogICAgIGlmICghc2Nyb2xsYmFyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJu
IHNjcm9sbGJhci0+ZW5hYmxlZCgpOwpAQCAtMTIzNSw3ICsxMjM1LDcgQEAgYm9vbCBTY3JvbGxB
bmltYXRvck1hYzo6Y2FuU2Nyb2xsSG9yaXpvbgogCiBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpj
YW5TY3JvbGxWZXJ0aWNhbGx5KCkKIHsKLSAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IG1fc2Ny
b2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgU2Nyb2xsYmFyKiBzY3JvbGxi
YXIgPSBtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFyKCk7CiAgICAgaWYgKCFzY3Jv
bGxiYXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gc2Nyb2xsYmFyLT5lbmFi
bGVkKCk7CkBAIC0xMjQ4LDE0ICsxMjQ4LDE0IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OnNo
b3VsZFJ1YmJlckJhbmQKIAogSW50UG9pbnQgU2Nyb2xsQW5pbWF0b3JNYWM6OmFic29sdXRlU2Ny
b2xsUG9zaXRpb24oKQogewotICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29u
dGVudFJlY3QoKS5sb2NhdGlvbigpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCk7
CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEudmlzaWJsZUNvbnRlbnRSZWN0KCkubG9jYXRp
b24oKSArIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsT3JpZ2luKCk7CiB9CiAKIHZvaWQgU2Nyb2xs
QW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWlu
dHMoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkKIHsKLSAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRD
b25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7CisgICAgbV9zY3JvbGxhYmxl
QXJlYS5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7CiAgICAgaW1t
ZWRpYXRlU2Nyb2xsQnkoZGVsdGEpOwotICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFp
bnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKHRydWUpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2V0
Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7CiB9CiAKIHZvaWQgU2Nyb2xs
QW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpCkBA
IC0xMzA0LDcgKzEzMDQsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjp1cGRhdGVTY3JvbGxl
clN0CiAKICAgICBOU1Njcm9sbGVyU3R5bGUgbmV3U3R5bGUgPSBbbV9zY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlciBzY3JvbGxlclN0eWxlXTsKIAotICAgIGlmIChTY3JvbGxiYXIqIHZlcnRpY2Fs
U2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUFyZWEoKS0+dmVydGljYWxTY3JvbGxiYXIoKSkgeworICAg
IGlmIChTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUFyZWEoKS52ZXJ0
aWNhbFNjcm9sbGJhcigpKSB7CiAgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRl
KCk7CiAKICAgICAgICAgU2Nyb2xsYmFyUGFpbnRlciBvbGRWZXJ0aWNhbFBhaW50ZXIgPSBbbV9z
Y3JvbGxiYXJQYWludGVyQ29udHJvbGxlciB2ZXJ0aWNhbFNjcm9sbGVySW1wXTsKQEAgLTEzMjIs
NyArMTMyMiw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnVwZGF0ZVNjcm9sbGVyU3QKICAg
ICAgICAgdmVydGljYWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChJbnRSZWN0KDAsIDAsIHRoaWNr
bmVzcywgdGhpY2tuZXNzKSk7CiAgICAgfQogCi0gICAgaWYgKFNjcm9sbGJhciogaG9yaXpvbnRh
bFNjcm9sbGJhciA9IHNjcm9sbGFibGVBcmVhKCktPmhvcml6b250YWxTY3JvbGxiYXIoKSkgewor
ICAgIGlmIChTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIgPSBzY3JvbGxhYmxlQXJlYSgp
Lmhvcml6b250YWxTY3JvbGxiYXIoKSkgewogICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyLT5p
bnZhbGlkYXRlKCk7CiAKICAgICAgICAgU2Nyb2xsYmFyUGFpbnRlciBvbGRIb3Jpem9udGFsUGFp
bnRlciA9IFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIGhvcml6b250YWxTY3JvbGxlcklt
cF07CkBAIC0xMzQyLDcgKzEzNDIsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjp1cGRhdGVT
Y3JvbGxlclN0CiAKICAgICAvLyBJZiBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSBpcyB0cnVl
LCB0aGVuIHRoZSBwYWdlIGlzIHJlc3RvcmluZyBmcm9tIHRoZSBwYWdlIGNhY2hlLCBhbmQgCiAg
ICAgLy8gYSByZWxheW91dCB3aWxsIGhhcHBlbiBvbiBpdHMgb3duLiBPdGhlcndpc2UsIHdlIG11
c3QgaW5pdGlhdGUgYSByZS1sYXlvdXQgb3Vyc2VsdmVzLgotICAgIHNjcm9sbGFibGVBcmVhKCkt
PnNjcm9sbGJhclN0eWxlQ2hhbmdlZChuZXdTdHlsZSwgIW1fbmVlZHNTY3JvbGxlclN0eWxlVXBk
YXRlKTsKKyAgICBzY3JvbGxhYmxlQXJlYSgpLnNjcm9sbGJhclN0eWxlQ2hhbmdlZChuZXdTdHls
ZSwgIW1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlKTsKIAogICAgIG1fbmVlZHNTY3JvbGxlclN0
eWxlVXBkYXRlID0gZmFsc2U7CiB9CkBAIC0xMzk1LDEzICsxMzk1LDEzIEBAIHZvaWQgU2Nyb2xs
QW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVMKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNl
dFZpc2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJbnRSZWN0JiBzY3JvbGxlclRodW1iKQog
ewogICAgIEludFJlY3QgcmVjdEluVmlld0Nvb3JkaW5hdGVzID0gc2Nyb2xsZXJUaHVtYjsKLSAg
ICBpZiAoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEtPnZl
cnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgaWYgKFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIg
PSBtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFyKCkpCiAgICAgICAgIHJlY3RJblZp
ZXdDb29yZGluYXRlcyA9IHZlcnRpY2FsU2Nyb2xsYmFyLT5jb252ZXJ0VG9Db250YWluaW5nVmll
dyhzY3JvbGxlclRodW1iKTsKIAogICAgIGlmIChyZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPT0gbV92
aXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fc2Nyb2xs
YWJsZUFyZWEtPnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChyZWN0SW5WaWV3Q29vcmRpbmF0
ZXMpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KHJl
Y3RJblZpZXdDb29yZGluYXRlcyk7CiAgICAgbV92aXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QgPSBy
ZWN0SW5WaWV3Q29vcmRpbmF0ZXM7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgYXJlIENvcHlyaWdodCAoQykgMTk5OCBOZXRzY2FwZSBD
b21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KICAqCkBAIC0zMzYsNyArMzM2LDcgQEAgUmVuZGVy
TGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZQogICAgICAgICAvLyBXZSBzYXZlIGFu
ZCByZXN0b3JlIG9ubHkgdGhlIHNjcm9sbE9mZnNldCBhcyB0aGUgb3RoZXIgc2Nyb2xsIHZhbHVl
cyBhcmUgcmVjYWxjdWxhdGVkLgogICAgICAgICBtX3Njcm9sbE9mZnNldCA9IGVsZW1lbnQtPnNh
dmVkTGF5ZXJTY3JvbGxPZmZzZXQoKTsKICAgICAgICAgaWYgKCFtX3Njcm9sbE9mZnNldC5pc1pl
cm8oKSkKLSAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCktPnNldEN1cnJlbnRQb3NpdGlvbihG
bG9hdFBvaW50KG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCksIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgp
KSk7CisgICAgICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldEN1cnJlbnRQb3NpdGlvbihGbG9h
dFBvaW50KG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCksIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKSk7
CiAgICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxPZmZzZXQoSW50U2l6ZSgpKTsK
ICAgICB9CiB9CkBAIC0zMDY1LDkgKzMwNjUsOSBAQCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVu
ZGVyTGF5ZXI6OmNyZWF0CiAgICAgUmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5k
ZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKICAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJh
clN0eWxlID0gYWN0dWFsUmVuZGVyZXItPmlzQm94KCkgJiYgYWN0dWFsUmVuZGVyZXItPnN0eWxl
KCkuaGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKTsKICAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFy
U3R5bGUpCi0gICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Ny
b2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCBhY3R1YWxSZW5kZXJlci0+ZWxlbWVudCgpKTsKKyAg
ICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIoKnRo
aXMsIG9yaWVudGF0aW9uLCBhY3R1YWxSZW5kZXJlci0+ZWxlbWVudCgpKTsKICAgICBlbHNlIHsK
LSAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIodGhpcywg
b3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpOworICAgICAgICB3aWRnZXQgPSBTY3JvbGxi
YXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3Jv
bGxiYXIpOwogICAgICAgICBkaWRBZGRTY3JvbGxiYXIod2lkZ2V0LmdldCgpLCBvcmllbnRhdGlv
bik7CiAgICAgfQogICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmFkZENoaWxkKHdp
ZGdldC5nZXQoKSk7CkBAIC0zMDg0LDcgKzMwODQsNiBAQCB2b2lkIFJlbmRlckxheWVyOjpkZXN0
cm95U2Nyb2xsYmFyKFNjcm9sCiAgICAgICAgIHdpbGxSZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFy
LmdldCgpLCBvcmllbnRhdGlvbik7CiAKICAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQo
KTsKLSAgICBzY3JvbGxiYXItPmRpc2Nvbm5lY3RGcm9tU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBz
Y3JvbGxiYXIgPSBudWxscHRyOwogfQogCkBAIC0zNDgyLDggKzM0ODEsOCBAQCB2b2lkIFJlbmRl
ckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTk2NAogICAgIHVwZGF0ZVNuYXBPZmZzZXRzKCk7CiAj
aWYgUExBVEZPUk0oTUFDKQotICAgIGlmIChleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAg
ICAgIHNjcm9sbEFuaW1hdG9yKCktPnVwZGF0ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycygpOwor
ICAgIGlmIChTY3JvbGxBbmltYXRvciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFu
aW1hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+dXBkYXRlU2Nyb2xsQW5p
bWF0b3JzQW5kVGltZXJzKCk7CiAjZW5kaWYKICNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gMTgwNDUwKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAx
MSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMTEsIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgICAgIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTgwMiw5ICs4MDIsOSBAQCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyTGlz
dEJveDo6Y3JlCiAgICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OwogICAgIGJvb2wgaGFzQ3Vz
dG9tU2Nyb2xsYmFyU3R5bGUgPSBzdHlsZSgpLmhhc1BzZXVkb1N0eWxlKFNDUk9MTEJBUik7CiAg
ICAgaWYgKGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlKQotICAgICAgICB3aWRnZXQgPSBSZW5kZXJT
Y3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcih0aGlzLCBWZXJ0aWNhbFNjcm9sbGJhciwg
JnNlbGVjdEVsZW1lbnQoKSk7CisgICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3Jl
YXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBWZXJ0aWNhbFNjcm9sbGJhciwgJnNlbGVjdEVsZW1l
bnQoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0
aXZlU2Nyb2xsYmFyKHRoaXMsIFZlcnRpY2FsU2Nyb2xsYmFyLCB0aGVtZSgpLnNjcm9sbGJhckNv
bnRyb2xTaXplRm9yUGFydChMaXN0Ym94UGFydCkpOworICAgICAgICB3aWRnZXQgPSBTY3JvbGxi
YXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcigqdGhpcywgVmVydGljYWxTY3JvbGxiYXIsIHRoZW1l
KCkuc2Nyb2xsYmFyQ29udHJvbFNpemVGb3JQYXJ0KExpc3Rib3hQYXJ0KSk7CiAgICAgICAgIGRp
ZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIFZlcnRpY2FsU2Nyb2xsYmFyKTsKICAgICB9CiAg
ICAgdmlldygpLmZyYW1lVmlldygpLmFkZENoaWxkKHdpZGdldC5nZXQoKSk7CkBAIC04MTksOCAr
ODE5LDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpkZXN0cm95U2Nyb2xsYmFyKCkKICAgICBpZiAo
IW1fdkJhci0+aXNDdXN0b21TY3JvbGxiYXIoKSkKICAgICAgICAgU2Nyb2xsYWJsZUFyZWE6Ondp
bGxSZW1vdmVTY3JvbGxiYXIobV92QmFyLmdldCgpLCBWZXJ0aWNhbFNjcm9sbGJhcik7CiAgICAg
bV92QmFyLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgbV92QmFyLT5kaXNjb25uZWN0RnJvbVNj
cm9sbGFibGVBcmVhKCk7Ci0gICAgbV92QmFyID0gMDsKKyAgICBtX3ZCYXIgPSBudWxscHRyOwog
fQogCiB2b2lkIFJlbmRlckxpc3RCb3g6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFz
U2Nyb2xsYmFyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxp
c3QuY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIHNlbGVjdCBlbGVtZW50IHJlbmRlcmVyIGluIFdlYkNvcmUuCiAg
KgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKS4KLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwg
MjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAgICAgICAgICAyMDA5IFRvcmNoIE1vYmlsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgpAQCAtNTc1LDcgKzU3NSw3IEBAIEhvc3RXaW5kb3cqIFJlbmRlck1lbnVMaXN0
Ojpob3N0V2luZG93KCkKICAgICByZXR1cm4gdmlldygpLmZyYW1lVmlldygpLmhvc3RXaW5kb3co
KTsKIH0KIAotUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlck1lbnVMaXN0OjpjcmVhdGVTY3Jv
bGxiYXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUpCitQYXNzUmVm
UHRyPFNjcm9sbGJhcj4gUmVuZGVyTWVudUxpc3Q6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxl
QXJlYSYgc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBT
Y3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKIHsKICAgICBSZWZQdHI8U2Nyb2xsYmFy
PiB3aWRnZXQ7CiAgICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9IHN0eWxlKCkuaGFz
UHNldWRvU3R5bGUoU0NST0xMQkFSKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNZW51TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNZW51TGlzdC5oCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWVudUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBzZWxlY3QgZWxlbWVudCByZW5kZXJlciBpbiBXZWJD
b3JlLgogICoKICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgs
IDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTEzLDcg
KzExMyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIG11bHRpcGxlKCkgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0IG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdygpIGNvbnN0IG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihT
Y3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6
ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Ny
b2xsYmFyKFNjcm9sbGFibGVBcmVhJiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNv
bnRyb2xTaXplKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNMaW5lSWZFbXB0eSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5jcHAJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMyBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDksIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwxMiArMzYsMTIgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1SZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3Rv
bVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uLCBFbGVtZW50KiBvd25lckVsZW1lbnQsIEZyYW1lKiBvd25pbmdG
cmFtZSkKK1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Ny
b2xsYmFyKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRp
b24gb3JpZW50YXRpb24sIEVsZW1lbnQqIG93bmVyRWxlbWVudCwgRnJhbWUqIG93bmluZ0ZyYW1l
KQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVuZGVyU2Nyb2xsYmFyKHNjcm9sbGFibGVB
cmVhLCBvcmllbnRhdGlvbiwgb3duZXJFbGVtZW50LCBvd25pbmdGcmFtZSkpOwogfQogCi1SZW5k
ZXJTY3JvbGxiYXI6OlJlbmRlclNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFy
ZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBFbGVtZW50KiBvd25lckVsZW1l
bnQsIEZyYW1lKiBvd25pbmdGcmFtZSkKK1JlbmRlclNjcm9sbGJhcjo6UmVuZGVyU2Nyb2xsYmFy
KFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24sIEVsZW1lbnQqIG93bmVyRWxlbWVudCwgRnJhbWUqIG93bmluZ0ZyYW1lKQogICAg
IDogU2Nyb2xsYmFyKHNjcm9sbGFibGVBcmVhLCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJh
ciwgUmVuZGVyU2Nyb2xsYmFyVGhlbWU6OnJlbmRlclNjcm9sbGJhclRoZW1lKCksIHRydWUpCiAg
ICAgLCBtX293bmVyRWxlbWVudChvd25lckVsZW1lbnQpCiAgICAgLCBtX293bmluZ0ZyYW1lKG93
bmluZ0ZyYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJh
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxi
YXIuaAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNjcm9sbGJhci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Miw3ICs0Miw3IEBAIGNs
YXNzIFJlbmRlclN0eWxlOwogY2xhc3MgUmVuZGVyU2Nyb2xsYmFyIGZpbmFsIDogcHVibGljIFNj
cm9sbGJhciB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIFNjcm9sbGJhcjsKLSAgICBzdGF0
aWMgUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVh
KiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIEVsZW1lbnQqLCBGcmFtZSogb3duaW5nRnJhbWUgPSBu
dWxscHRyKTsKKyAgICBzdGF0aWMgUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlQ3VzdG9tU2Nyb2xs
YmFyKFNjcm9sbGFibGVBcmVhJiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIEVsZW1lbnQqLCBGcmFt
ZSogb3duaW5nRnJhbWUgPSBudWxscHRyKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJTY3JvbGxiYXIo
KTsKIAogICAgIFJlbmRlckJveCogb3duaW5nUmVuZGVyZXIoKSBjb25zdDsKQEAgLTYyLDcgKzYy
LDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGdldFNjcm9sbGJhclBz
ZXVkb1N0eWxlKFNjcm9sbGJhclBhcnQsIFBzZXVkb0lkKTsKIAogcHJpdmF0ZToKLSAgICBSZW5k
ZXJTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgRWxlbWVu
dCosIEZyYW1lKik7CisgICAgUmVuZGVyU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhJiwgU2Nyb2xs
YmFyT3JpZW50YXRpb24sIEVsZW1lbnQqLCBGcmFtZSopOwogCiAgICAgdmlydHVhbCB2b2lkIHNl
dFBhcmVudChTY3JvbGxWaWV3Kikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldEVuYWJs
ZWQoYm9vbCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U2VhcmNoRmllbGQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTZWFyY2hGaWVsZC5jcHAJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMTAs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAgICAgIChDKSAy
MDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRv
cmNobW9iaWxlLmNvbS8pIAogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgpAQCAtMzQyLDcgKzM0Miw3IEBAIEhvc3RXaW5k
b3cqIFJlbmRlclNlYXJjaEZpZWxkOjpob3N0V2luZG8KICAgICByZXR1cm4gdmlldygpLmZyYW1l
VmlldygpLmhvc3RXaW5kb3coKTsKIH0KIAotUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlclNl
YXJjaEZpZWxkOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVh
LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUg
Y29udHJvbFNpemUpCitQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyU2VhcmNoRmllbGQ6OmNy
ZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkK
IHsKICAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7CiAgICAgYm9vbCBoYXNDdXN0b21TY3Jv
bGxiYXJTdHlsZSA9IHN0eWxlKCkuaGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5oCShyZXZpc2lvbiAx
ODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3LCAyMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICogQ29weXJpZ2h0IChDKSAy
MDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KICAqCkBA
IC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNldFRleHRGcm9tSXRl
bSh1bnNpZ25lZCBsaXN0SW5kZXgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgRm9udFNlbGVjdG9y
KiBmb250U2VsZWN0b3IoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3coKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2Ny
b2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRh
dGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSYsIFNjcm9sbGJh
ck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSkgb3ZlcnJpZGU7CiAKICAgICBIVE1M
RWxlbWVudCogcmVzdWx0c0J1dHRvbkVsZW1lbnQoKSBjb25zdDsKICAgICBIVE1MRWxlbWVudCog
Y2FuY2VsQnV0dG9uRWxlbWVudCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTgw
NDY1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTYgQEAKKzIwMTUtMDItMjAgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+
CisKKyAgICAgICAgU2Nyb2xsYmFycyBhbmQgU2Nyb2xsQW5pbWF0b3JzIG11c3QgYWx3YXlzIGhh
dmUgYSBTY3JvbGxhYmxlQXJlYQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQxODU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisgICAgICAgIAorICAgICAgICBDaGFuZ2UgdXNlcnMgb2YgdGhlIHNjcm9sbEFuaW1hdG9yKCkg
bWV0aG9kIHRvIGV4cGVjdCBhIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGEgcG9pbnRlci4KKworICAg
ICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tOgorICAgICAgICAoV2Vi
S2l0OjpQREZQbHVnaW46OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJLaXQ6OlBERlBs
dWdpbjo6ZGVzdHJveVNjcm9sbGJhcik6CisKIDIwMTUtMDItMjAgIEVucmljYSBDYXN1Y2NpICA8
ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAgICAgICBbV0syXSBBZGQgc3VwcG9ydCBmb3IgZm9udCBw
YW5lbCBvbiBPUyBYLgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BE
Ri9QREZQbHVnaW4ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9QREZQbHVnaW4ubW0JKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSwgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEs
IDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC02NDEsNyArNjQxLDcgQEAgY29uc3QgUGx1Z2luVmlldyog
UERGUGx1Z2luOjpwbHVnaW5WaWV3KAogCiBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUERGUGx1Z2lu
OjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCiB7Ci0g
ICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3Jv
bGxiYXIodGhpcywgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpOworICAgIFJlZlB0cjxT
Y3JvbGxiYXI+IHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlz
LCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcik7CiAgICAgaWYgKG9yaWVudGF0aW9uID09
IEhvcml6b250YWxTY3JvbGxiYXIpIHsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5
ZXIgPSBhZG9wdE5TKFtbV0tQREZQbHVnaW5TY3JvbGxiYXJMYXllciBhbGxvY10gaW5pdFdpdGhQ
REZQbHVnaW46dGhpc10pOwogICAgICAgICBbbV9jb250YWluZXJMYXllciBhZGRTdWJsYXllcjpt
X2hvcml6b250YWxTY3JvbGxiYXJMYXllci5nZXQoKV07CkBAIC02NjIsOCArNjYyLDcgQEAgdm9p
ZCBQREZQbHVnaW46OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYgogCiAgICAgd2lsbFJlbW92ZVNj
cm9sbGJhcihzY3JvbGxiYXIuZ2V0KCksIG9yaWVudGF0aW9uKTsKICAgICBzY3JvbGxiYXItPnJl
bW92ZUZyb21QYXJlbnQoKTsKLSAgICBzY3JvbGxiYXItPmRpc2Nvbm5lY3RGcm9tU2Nyb2xsYWJs
ZUFyZWEoKTsKLSAgICBzY3JvbGxiYXIgPSAwOworICAgIHNjcm9sbGJhciA9IG51bGxwdHI7CiAK
ICAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewogICAgICAgICBb
bV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247013</attachid>
            <date>2015-02-20 16:57:16 -0800</date>
            <delta_ts>2015-02-20 17:28:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141855-20150220165707.patch</filename>
            <type>text/plain</type>
            <size>79723</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDQ2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNSBAQAorMjAxNS0wMi0yMCAgQnJlbnQg
RnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBTY3JvbGxiYXJzIGFuZCBT
Y3JvbGxBbmltYXRvcnMgbXVzdCBhbHdheXMgaGF2ZSBhIFNjcm9sbGFibGVBcmVhCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4NTUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBjaGFuZ2UgaW4gZnVu
Y3Rpb25hbGl0eS4KKyAgICAgICAgCisgICAgICAgIENoYW5nZSB1c2VycyBvZiB0aGUgc2Nyb2xs
QW5pbWF0b3IoKSBtZXRob2QgdG8gZXhwZWN0IGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2lu
dGVyLiBBbHNvIGdldCByaWQgb2YKKyAgICAgICAgYSBudW1iZXIgb2YgdW5uZWNlc3NhcnkgbnVs
bHB0ciBjaGVja3MuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3Jv
bGxiYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6c2V0
VmFsdWUpOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJNYXRjaGVzQ29ybmVyUHJlc2VudFBzZXVkb0NsYXNz
KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVZpZXc6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNl
dEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvcjo6aGFuZGxlV2hlZWxFdmVudFBoYXNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9Qb3B1cE1l
bnVDbGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6U2Nyb2xsQW5pbWF0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvcjo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yOjp1cGRhdGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMpOgorICAgICAgICAqIHBs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cjo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbGFibGVBcmVhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvck5vbmUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
Tm9uZS5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6Y3JlYXRlU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxhYmxlQXJlYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Ny
b2xsQW5pbWF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpub3RpZnlTY3Jv
bGxQb3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbFBvc2l0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6
aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aGFu
ZGxlVG91Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6bW91c2VF
bnRlcmVkU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjptb3Vz
ZUV4aXRlZFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6ZGlk
QWRkU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjp3aWxsUmVt
b3ZlU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNh
bFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVB
cmVhOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAqIHBsYXRm
b3JtL1Njcm9sbGFibGVBcmVhLmg6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6U2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhcjo6c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhcjo6aXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXI6Om9mZnNldERpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmF1
dG9zY3JvbGxQcmVzc2VkUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdmVU
aHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdXNlTW92ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3VzZUVudGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyOjptb3VzZUV4aXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1v
dXNlVXApOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzaG91bGRQYXJ0aWNpcGF0ZUlu
SGl0VGVzdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmlzV2luZG93QWN0aXZl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpjb252ZXJ0VG9Db250YWluaW5nVmlldyk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhcjo6c2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpkaXNj
b25uZWN0RnJvbVNjcm9sbGFibGVBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9p
b3MvU2Nyb2xsQW5pbWF0b3JJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cklPUzo6aGFuZGxlVG91Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cklPUzo6ZGV0ZXJtaW5lU2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvU2Nyb2xsQW5pbWF0b3JNYWMubW06CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyRGVsZWdhdGUgc2Nyb2xsZXJJbXBQYWlyOnNldENvbnRlbnRBcmVhTmVlZHNEaXNw
bGF5SW5SZWN0Ol0pOgorICAgICAgICAoLVtXZWJTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRl
bGVnYXRlIHNjcm9sbGVySW1wUGFpcjp1cGRhdGVTY3JvbGxlclN0eWxlRm9yTmV3UmVjb21tZW5k
ZWRTY3JvbGxlclN0eWxlOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxiYXJQYWludGVyRGVsZWdh
dGUgc2Nyb2xsQW5pbWF0b3JdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVn
YXRlIGxheWVyXSk6CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBtb3Vz
ZUxvY2F0aW9uSW5TY3JvbGxlckZvclNjcm9sbGVySW1wOl0pOgorICAgICAgICAoLVtXZWJTY3Jv
bGxiYXJQYWludGVyRGVsZWdhdGUgc2V0VXBBbHBoYUFuaW1hdGlvbjpzY3JvbGxlclBhaW50ZXI6
cGFydDphbmltYXRlQWxwaGFUbzpkdXJhdGlvbjpdKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6
OlNjcm9sbEFuaW1hdG9yTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
OjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmFkanVzdFNj
cm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JNYWM6OmFkanVzdFNjcm9sbFBvc2l0aW9uVG9Cb3VuZHNJZk5lY2Vzc2FyeSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsVG8pOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpkaWRBZGRIb3Jpem9udGFsU2Ny
b2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp2ZXJ0aWNhbFNj
cm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
TWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnBpbm5lZEluRGlyZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjppc0FscmVhZHlQaW5uZWRJbkRpcmVjdGlv
bk9mR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6YWxsb3dz
VmVydGljYWxTdHJldGNoaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
OjphbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvck1hYzo6c3RyZXRjaEFtb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvck1hYzo6Y2FuU2Nyb2xsSG9yaXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yTWFjOjpjYW5TY3JvbGxWZXJ0aWNhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yTWFjOjphYnNvbHV0ZVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yTWFjOjppbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRn
ZUNvbnN0cmFpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp1cGRh
dGVTY3JvbGxlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpz
ZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
YXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGVzdHJveVNjcm9sbGJhcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
aXN0Qm94OjpjcmVhdGVTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJv
eDo6ZGVzdHJveVNjcm9sbGJhcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0
LmNwcDoKKyAgICAgICAgKFJlbmRlck1lbnVMaXN0OjpjcmVhdGVTY3JvbGxiYXIpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJTY3JvbGxiYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyOjpjcmVh
dGVDdXN0b21TY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyOjpS
ZW5kZXJTY3JvbGxiYXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmg6CisKIDIwMTUtMDItMjAgIEVucmljYSBDYXN1Y2Np
ICA8ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAgICAgICBbV0syXSBBZGQgc3VwcG9ydCBmb3IgZm9u
dCBwYW5lbCBvbiBPUyBYLgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5U2Nyb2xsYmFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwCShyZXZpc2lvbiAxODA0NTApCisr
KyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC05NiwxMSArOTYsOCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlTY3JvbGxi
YXI6OnNldFZhbHVlKGZsCiAgICAgaWYgKCFtX3Njcm9sbGJhcikKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIGlmICghbV9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIGZsb2F0IG5ld1ZhbHVlID0gdmFsdWUgKiBtX3Njcm9sbGJhci0+bWF4aW11
bSgpOwotICAgIG1fc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxUb09mZnNldFdp
dGhvdXRBbmltYXRpb24obV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCksIG5ld1ZhbHVlKTsKKyAg
ICBtX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24obV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCksIG5ld1ZhbHVlKTsKIH0KICAgICAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNo
ZWNrZXJUZXN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNl
L1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE0IERoaSBBdXJyYWht
YW4gPGRpb3JhaG1hbkByb2NreWJhcnMuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzU4LDcg
KzM1OCw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBzY3JvbGxiYXJNYXRjaGVzTm9CdXQKIAogQUxX
QVlTX0lOTElORSBib29sIHNjcm9sbGJhck1hdGNoZXNDb3JuZXJQcmVzZW50UHNldWRvQ2xhc3Mo
Y29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAg
cmV0dXJuIGNvbnRleHQuc2Nyb2xsYmFyICYmIGNvbnRleHQuc2Nyb2xsYmFyLT5zY3JvbGxhYmxl
QXJlYSgpLT5pc1Njcm9sbENvcm5lclZpc2libGUoKTsKKyAgICByZXR1cm4gY29udGV4dC5zY3Jv
bGxiYXIgJiYgY29udGV4dC5zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkuaXNTY3JvbGxDb3Ju
ZXJWaXNpYmxlKCk7CiB9CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAgKiAg
ICAgICAgICAgICAgICAgICAgIDE5OTkgTGFycyBLbm9sbCA8a25vbGxAa2RlLm9yZz4KICAqICAg
ICAgICAgICAgICAgICAgICAgMTk5OSBBbnR0aSBLb2l2aXN0byA8a29pdmlzdG9Aa2RlLm9yZz4K
ICAqICAgICAgICAgICAgICAgICAgICAgMjAwMCBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9y
Zz4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDEzLTIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAgICAgIChDKSAyMDA2IEdy
YWhhbSBEZW5uaXMgKGdyYWhhbS5kZW5uaXNAZ21haWwuY29tKQogICogICAgICAgICAgIChDKSAy
MDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtNTQyLDE3ICs1NDIsMTcg
QEAgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IEZyYW1lVmlldzo6Y3JlYXRlUwogICAgIC8vIFRyeSB0
aGUgPGJvZHk+IGVsZW1lbnQgZmlyc3QgYXMgYSBzY3JvbGxiYXIgc291cmNlLgogICAgIEhUTUxF
bGVtZW50KiBib2R5ID0gZG9jID8gZG9jLT5ib2R5T3JGcmFtZXNldCgpIDogbnVsbHB0cjsKICAg
ICBpZiAoYm9keSAmJiBib2R5LT5yZW5kZXJlcigpICYmIGJvZHktPnJlbmRlcmVyKCktPnN0eWxl
KCkuaGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKSkKLSAgICAgICAgcmV0dXJuIFJlbmRlclNjcm9s
bGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCBib2R5KTsKKyAg
ICAgICAgcmV0dXJuIFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlz
LCBvcmllbnRhdGlvbiwgYm9keSk7CiAgICAgCiAgICAgLy8gSWYgdGhlIDxib2R5PiBkaWRuJ3Qg
aGF2ZSBhIGN1c3RvbSBzdHlsZSwgdGhlbiB0aGUgcm9vdCBlbGVtZW50IG1pZ2h0LgogICAgIEVs
ZW1lbnQqIGRvY0VsZW1lbnQgPSBkb2MgPyBkb2MtPmRvY3VtZW50RWxlbWVudCgpIDogbnVsbHB0
cjsKICAgICBpZiAoZG9jRWxlbWVudCAmJiBkb2NFbGVtZW50LT5yZW5kZXJlcigpICYmIGRvY0Vs
ZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCkuaGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKSkKLSAg
ICAgICAgcmV0dXJuIFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHRoaXMs
IG9yaWVudGF0aW9uLCBkb2NFbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIFJlbmRlclNjcm9sbGJh
cjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgZG9jRWxlbWVudCk7
CiAgICAgICAgIAogICAgIC8vIElmIHdlIGhhdmUgYW4gb3duaW5nIGlmcmFtZS9mcmFtZSBlbGVt
ZW50LCB0aGVuIGl0IGNhbiBzZXQgdGhlIGN1c3RvbSBzY3JvbGxiYXIgYWxzby4KICAgICBSZW5k
ZXJXaWRnZXQqIGZyYW1lUmVuZGVyZXIgPSBmcmFtZSgpLm93bmVyUmVuZGVyZXIoKTsKICAgICBp
ZiAoZnJhbWVSZW5kZXJlciAmJiBmcmFtZVJlbmRlcmVyLT5zdHlsZSgpLmhhc1BzZXVkb1N0eWxl
KFNDUk9MTEJBUikpCi0gICAgICAgIHJldHVybiBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3Rv
bVNjcm9sbGJhcih0aGlzLCBvcmllbnRhdGlvbiwgMCwgJmZyYW1lKCkpOworICAgICAgICByZXR1
cm4gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0
aW9uLCBudWxscHRyLCAmZnJhbWUoKSk7CiAgICAgCiAgICAgLy8gTm9ib2R5IHNldCBhIGN1c3Rv
bSBzdHlsZSwgc28gd2UganVzdCB1c2UgYSBuYXRpdmUgc2Nyb2xsYmFyLgogICAgIHJldHVybiBT
Y3JvbGxWaWV3OjpjcmVhdGVTY3JvbGxiYXIob3JpZW50YXRpb24pOwpAQCAtMjA4MSw3ICsyMDgx
LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZQogICAgICAgICBp
ZiAoZnJhbWUoKS5wYWdlKCktPnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZp
eGVkUG9zaXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVy
c0FmdGVyU2Nyb2xsaW5nKCk7CiAgICAgICAgIEludFBvaW50IG5ld1Bvc2l0aW9uID0gc2Nyb2xs
UG9zaXRpb24oKTsKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS0+c2V0Q3VycmVudFBvc2l0aW9u
KHNjcm9sbFBvc2l0aW9uKCkpOworICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldEN1cnJlbnRQ
b3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsKICAgICAgICAgc2Nyb2xsUG9zaXRpb25DaGFuZ2Vk
KG9sZFBvc2l0aW9uLCBuZXdQb3NpdGlvbik7CiAgICAgfQogICAgIGlmICh2aXNpYmxlQ29udGVu
dFNpemVEaWRDaGFuZ2UpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAJKHJldmlzaW9uIDE4MDQ1MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjg5LDcgKzI4OSw3IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmhhbmRsZVdoZWVsRXYKICAgICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgZnJhbWVWaWV3LT5zY3JvbGxBbmltYXRvcigpLT5oYW5kbGVXaGVlbEV2ZW50UGhhc2Uo
cGhhc2UpOworICAgIGZyYW1lVmlldy0+c2Nyb2xsQW5pbWF0b3IoKS5oYW5kbGVXaGVlbEV2ZW50
UGhhc2UocGhhc2UpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BvcHVwTWVudUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BvcHVwTWVudUNsaWVudC5oCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Qb3B1cE1lbnVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpLgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAxNSBBcHBsZSBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgRm9udFNlbGVjdG9yKiBmb250U2Vs
ZWN0b3IoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBIb3N0V2luZG93KiBob3N0V2luZG93KCkg
Y29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Ny
b2xsYmFyKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNv
bnRyb2xTaXplKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRl
U2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhJiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJh
ckNvbnRyb2xTaXplKSA9IDA7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3IuY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQ3LDcgKzQ3LDcgQEAgUGFzc093blB0
cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0bwogfQogI2VuZGlmCiAKLVNjcm9sbEFuaW1h
dG9yOjpTY3JvbGxBbmltYXRvcihTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCitTY3Jv
bGxBbmltYXRvcjo6U2Nyb2xsQW5pbWF0b3IoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVh
KQogICAgIDogbV9zY3JvbGxhYmxlQXJlYShzY3JvbGxhYmxlQXJlYSkKICAgICAsIG1fY3VycmVu
dFBvc1goMCkKICAgICAsIG1fY3VycmVudFBvc1koMCkKQEAgLTYxLDcgKzYxLDcgQEAgU2Nyb2xs
QW5pbWF0b3I6On5TY3JvbGxBbmltYXRvcigpCiBib29sIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwo
U2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9h
dCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKQogewogICAgIGZsb2F0KiBjdXJyZW50UG9zID0gKG9y
aWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpID8gJm1fY3VycmVudFBvc1ggOiAmbV9j
dXJyZW50UG9zWTsKLSAgICBmbG9hdCBuZXdQb3MgPSBzdGQ6Om1heChzdGQ6Om1pbigqY3VycmVu
dFBvcyArIChzdGVwICogbXVsdGlwbGllciksIHN0YXRpY19jYXN0PGZsb2F0PihtX3Njcm9sbGFi
bGVBcmVhLT5zY3JvbGxTaXplKG9yaWVudGF0aW9uKSkpLCAwLjBmKTsKKyAgICBmbG9hdCBuZXdQ
b3MgPSBzdGQ6Om1heChzdGQ6Om1pbigqY3VycmVudFBvcyArIChzdGVwICogbXVsdGlwbGllciks
IHN0YXRpY19jYXN0PGZsb2F0PihtX3Njcm9sbGFibGVBcmVhLnNjcm9sbFNpemUob3JpZW50YXRp
b24pKSksIDAuMGYpOwogICAgIGZsb2F0IGRlbHRhID0gKmN1cnJlbnRQb3MgLSBuZXdQb3M7CiAg
ICAgaWYgKCpjdXJyZW50UG9zID09IG5ld1BvcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTE0LDggKzExNCw4IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQoY28K
ICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKIAotICAgIFNjcm9sbGJhciogaG9yaXpvbnRh
bFNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxiYXIoKTsKLSAg
ICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGlj
YWxTY3JvbGxiYXIoKTsKKyAgICBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIgPSBtX3Nj
cm9sbGFibGVBcmVhLmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICBTY3JvbGxiYXIqIHZlcnRp
Y2FsU2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNjcm9sbGJhcigpOwogCiAg
ICAgLy8gQWNjZXB0IHRoZSBldmVudCBpZiB3ZSBoYXZlIGEgc2Nyb2xsYmFyIGluIHRoYXQgZGly
ZWN0aW9uIGFuZCBjYW4gc3RpbGwKICAgICAvLyBzY3JvbGwgYW55IGZ1cnRoZXIuCkBAIC0xMjUs
OCArMTI1LDggQEAgYm9vbCBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudChjbwogICAg
IGJvb2wgaGFuZGxlZCA9IGZhbHNlOwogCiAgICAgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHkgPSBTY3JvbGxCeVBpeGVsOwotICAgIEludFNpemUgbWF4Rm9yd2FyZFNjcm9sbERlbHRhID0g
bV9zY3JvbGxhYmxlQXJlYS0+bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgLSBtX3Njcm9sbGFibGVB
cmVhLT5zY3JvbGxQb3NpdGlvbigpOwotICAgIEludFNpemUgbWF4QmFja3dhcmRTY3JvbGxEZWx0
YSA9IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCkgLSBtX3Njcm9sbGFibGVBcmVh
LT5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKTsKKyAgICBJbnRTaXplIG1heEZvcndhcmRTY3JvbGxE
ZWx0YSA9IG1fc2Nyb2xsYWJsZUFyZWEubWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgLSBtX3Njcm9s
bGFibGVBcmVhLnNjcm9sbFBvc2l0aW9uKCk7CisgICAgSW50U2l6ZSBtYXhCYWNrd2FyZFNjcm9s
bERlbHRhID0gbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxQb3NpdGlvbigpIC0gbV9zY3JvbGxhYmxl
QXJlYS5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKTsKICAgICBpZiAoKGRlbHRhWCA8IDAgJiYgbWF4
Rm9yd2FyZFNjcm9sbERlbHRhLndpZHRoKCkgPiAwKQogICAgICAgICB8fCAoZGVsdGFYID4gMCAm
JiBtYXhCYWNrd2FyZFNjcm9sbERlbHRhLndpZHRoKCkgPiAwKQogICAgICAgICB8fCAoZGVsdGFZ
IDwgMCAmJiBtYXhGb3J3YXJkU2Nyb2xsRGVsdGEuaGVpZ2h0KCkgPiAwKQpAQCAtMTM2LDcgKzEz
Niw3IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQoY28KICAgICAgICAg
aWYgKGRlbHRhWSkgewogICAgICAgICAgICAgaWYgKGUuZ3JhbnVsYXJpdHkoKSA9PSBTY3JvbGxC
eVBhZ2VXaGVlbEV2ZW50KSB7CiAgICAgICAgICAgICAgICAgYm9vbCBuZWdhdGl2ZSA9IGRlbHRh
WSA8IDA7Ci0gICAgICAgICAgICAgICAgZGVsdGFZID0gU2Nyb2xsYmFyOjpwYWdlU3RlcERlbHRh
KG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVIZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgZGVs
dGFZID0gU2Nyb2xsYmFyOjpwYWdlU3RlcERlbHRhKG1fc2Nyb2xsYWJsZUFyZWEudmlzaWJsZUhl
aWdodCgpKTsKICAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCiAgICAgICAgICAgICAgICAg
ICAgIGRlbHRhWSA9IC1kZWx0YVk7CiAgICAgICAgICAgICB9CkBAIC0xNDYsNyArMTQ2LDcgQEAg
Ym9vbCBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudChjbwogICAgICAgICBpZiAoZGVs
dGFYKSB7CiAgICAgICAgICAgICBpZiAoZS5ncmFudWxhcml0eSgpID09IFNjcm9sbEJ5UGFnZVdo
ZWVsRXZlbnQpIHsKICAgICAgICAgICAgICAgICBib29sIG5lZ2F0aXZlID0gZGVsdGFYIDwgMDsK
LSAgICAgICAgICAgICAgICBkZWx0YVggPSBTY3JvbGxiYXI6OnBhZ2VTdGVwRGVsdGEobV9zY3Jv
bGxhYmxlQXJlYS0+dmlzaWJsZVdpZHRoKCkpOworICAgICAgICAgICAgICAgIGRlbHRhWCA9IFNj
cm9sbGJhcjo6cGFnZVN0ZXBEZWx0YShtX3Njcm9sbGFibGVBcmVhLnZpc2libGVXaWR0aCgpKTsK
ICAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCiAgICAgICAgICAgICAgICAgICAgIGRlbHRh
WCA9IC1kZWx0YVg7CiAgICAgICAgICAgICB9CkBAIC0xNzcsMjIgKzE3NywyMiBAQCBGbG9hdFBv
aW50IFNjcm9sbEFuaW1hdG9yOjpjdXJyZW50UG9zaXRpCiB2b2lkIFNjcm9sbEFuaW1hdG9yOjpu
b3RpZnlQb3NpdGlvbkNoYW5nZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkKIHsKICAgICBVTlVT
RURfUEFSQU0oZGVsdGEpOwotICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldFNjcm9sbE9mZnNldEZy
b21BbmltYXRpb24oSW50UG9pbnQobV9jdXJyZW50UG9zWCwgbV9jdXJyZW50UG9zWSkpOworICAg
IG1fc2Nyb2xsYWJsZUFyZWEuc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihJbnRQb2ludCht
X2N1cnJlbnRQb3NYLCBtX2N1cnJlbnRQb3NZKSk7CiB9CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKSAmJiBQTEFURk9STShNQUMpCiB2b2lkIFNjcm9sbEFuaW1hdG9yOjp1cGRhdGVTY3Jv
bGxBbmltYXRvcnNBbmRUaW1lcnMoKQogewogICAgIC8vIEZJWE1FOiBDdXJyZW50bHksIHNjcm9s
bCBzbmFwIGFuaW1hdG9ycyBhcmUgcmVjcmVhdGVkIGV2ZW4gdGhvdWdoIHRoZSBzbmFwIG9mZnNl
dHMgYWxvbmUgY2FuIGJlIHVwZGF0ZWQuCi0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6
b250YWxTbmFwT2Zmc2V0cygpKSB7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbFNuYXBBbmlt
YXRvciA9IHN0ZDo6bWFrZV91bmlxdWU8QXhpc1Njcm9sbFNuYXBBbmltYXRvcj4odGhpcywgbV9z
Y3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzKCksIFNjcm9sbEV2ZW50QXhpczo6
SG9yaXpvbnRhbCk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNuYXBPZmZz
ZXRzKCkpIHsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yID0gc3RkOjpt
YWtlX3VuaXF1ZTxBeGlzU2Nyb2xsU25hcEFuaW1hdG9yPih0aGlzLCBtX3Njcm9sbGFibGVBcmVh
Lmhvcml6b250YWxTbmFwT2Zmc2V0cygpLCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpOwog
ICAgICAgICBtX2hvcml6b250YWxTY3JvbGxTbmFwVGltZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRp
bWVyPigqdGhpcywgJlNjcm9sbEFuaW1hdG9yOjpob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyRmly
ZWQpOwogICAgIH0gZWxzZSBpZiAobV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yKSB7CiAg
ICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbFNuYXBBbmltYXRvciA9IG51bGxwdHI7CiAgICAgICAg
IG1faG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lciA9IG51bGxwdHI7CiAgICAgfQotICAgIGlmICht
X3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkpIHsKLSAgICAgICAgbV92ZXJ0
aWNhbFNjcm9sbFNuYXBBbmltYXRvciA9IHN0ZDo6bWFrZV91bmlxdWU8QXhpc1Njcm9sbFNuYXBB
bmltYXRvcj4odGhpcywgbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTbmFwT2Zmc2V0cygpLCBT
Y3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKTsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYS52ZXJ0
aWNhbFNuYXBPZmZzZXRzKCkpIHsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbFNuYXBBbmltYXRv
ciA9IHN0ZDo6bWFrZV91bmlxdWU8QXhpc1Njcm9sbFNuYXBBbmltYXRvcj4odGhpcywgbV9zY3Jv
bGxhYmxlQXJlYS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCksIFNjcm9sbEV2ZW50QXhpczo6VmVydGlj
YWwpOwogICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcFRpbWVyID0gc3RkOjptYWtlX3VuaXF1
ZTxUaW1lcj4oKnRoaXMsICZTY3JvbGxBbmltYXRvcjo6dmVydGljYWxTY3JvbGxTbmFwVGltZXJG
aXJlZCk7CiAgICAgfSBlbHNlIGlmIChtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yKSB7CiAg
ICAgICAgIG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3IgPSBudWxscHRyOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCShyZXZpc2lvbiAxODA0NTApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCiAgKiBtZXQ6CkBAIC01Niw3ICs1Nyw3IEBAIGNsYXNzIFNjcm9sbEFuaW1hdG9yIHsKICNl
bmRpZgogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzT3duUHRyPFNjcm9sbEFuaW1hdG9yPiBjcmVhdGUoU2Nyb2xsYWJsZUFyZWEqKTsKKyAgICBz
dGF0aWMgUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gY3JlYXRlKFNjcm9sbGFibGVBcmVhJik7
CiAKICAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvcigpOwogCkBAIC02OCw3ICs2OSw3IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24o
Y29uc3QgRmxvYXRQb2ludCYpOwogCi0gICAgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVh
KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYTsgfQorICAgIFNjcm9sbGFibGVBcmVh
JiBzY3JvbGxhYmxlQXJlYSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWE7IH0KIAog
ICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVu
dCYpOwogCkBAIC0xMjUsNyArMTI2LDcgQEAgcHVibGljOgogI2VuZGlmCiAKIHByb3RlY3RlZDoK
LSAgICBleHBsaWNpdCBTY3JvbGxBbmltYXRvcihTY3JvbGxhYmxlQXJlYSopOworICAgIGV4cGxp
Y2l0IFNjcm9sbEFuaW1hdG9yKFNjcm9sbGFibGVBcmVhJik7CiAKICAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5UG9zaXRpb25DaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpOwogCkBAIC0xMzUs
NyArMTM2LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgdmVydGljYWxTY3JvbGxTbmFwVGltZXJG
aXJlZCgpOwogI2VuZGlmCiAKLSAgICBTY3JvbGxhYmxlQXJlYSogbV9zY3JvbGxhYmxlQXJlYTsK
KyAgICBTY3JvbGxhYmxlQXJlYSYgbV9zY3JvbGxhYmxlQXJlYTsKICAgICBmbG9hdCBtX2N1cnJl
bnRQb3NYOyAvLyBXZSBhdm9pZCB1c2luZyBhIEZsb2F0UG9pbnQgaW4gb3JkZXIgdG8gcmVkdWNl
CiAgICAgZmxvYXQgbV9jdXJyZW50UG9zWTsgLy8gc3ViY2xhc3MgY29kZSBjb21wbGV4aXR5Lgog
I2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcAkocmV2aXNpb24g
MTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIw
MTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKQEAgLTUxLDkgKzUyLDkgQEAgY29uc3QgZG91YmxlIGtUaWNrVGltZSA9
IDEgLyBrRnJhbWVSYXRlOwogY29uc3QgZG91YmxlIGtNaW5pbXVtVGltZXJJbnRlcnZhbCA9IC4w
MDE7CiBjb25zdCBkb3VibGUga1pvb21UaWNrcyA9IDExOwogCi1QYXNzT3duUHRyPFNjcm9sbEFu
aW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxl
QXJlYSkKK1Bhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUo
U2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQogewotICAgIGlmIChzY3JvbGxhYmxlQXJl
YSAmJiBzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsQW5pbWF0b3JFbmFibGVkKCkpCisgICAgaWYgKHNj
cm9sbGFibGVBcmVhLnNjcm9sbEFuaW1hdG9yRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IFNjcm9sbEFuaW1hdG9yTm9uZShzY3JvbGxhYmxlQXJlYSkpOwogICAgIHJldHVy
biBhZG9wdFB0cihuZXcgU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJsZUFyZWEpKTsKIH0KQEAgLTQ4
Niw4ICs0ODcsOCBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6ZGlkQWRkSG9yaXpvbnRhCiAK
IHZvaWQgU2Nyb2xsQW5pbWF0b3JOb25lOjp1cGRhdGVWaXNpYmxlTGVuZ3RocygpCiB7Ci0gICAg
bV9ob3Jpem9udGFsRGF0YS51cGRhdGVWaXNpYmxlTGVuZ3RoKHNjcm9sbGFibGVBcmVhKCktPnZp
c2libGVXaWR0aCgpKTsKLSAgICBtX3ZlcnRpY2FsRGF0YS51cGRhdGVWaXNpYmxlTGVuZ3RoKHNj
cm9sbGFibGVBcmVhKCktPnZpc2libGVIZWlnaHQoKSk7CisgICAgbV9ob3Jpem9udGFsRGF0YS51
cGRhdGVWaXNpYmxlTGVuZ3RoKHNjcm9sbGFibGVBcmVhKCkudmlzaWJsZVdpZHRoKCkpOworICAg
IG1fdmVydGljYWxEYXRhLnVwZGF0ZVZpc2libGVMZW5ndGgoc2Nyb2xsYWJsZUFyZWEoKS52aXNp
YmxlSGVpZ2h0KCkpOwogfQogCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVS
KQpAQCAtNTMyLDcgKzUzMyw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JOb25lOjpzdGFydE5leHRU
aW1lcigKICNlbHNlCiB2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6c3RhcnROZXh0VGltZXIoKQog
ewotICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLT5zY2hlZHVsZUFuaW1hdGlvbigpKQorICAgIGlm
IChzY3JvbGxhYmxlQXJlYSgpLnNjaGVkdWxlQW5pbWF0aW9uKCkpCiAgICAgICAgIG1fYW5pbWF0
aW9uQWN0aXZlID0gdHJ1ZTsKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3JOb25lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmgJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTUy
LDcgKzUzLDcgQEAgc3RydWN0IFNjcm9sbEFuaW1hdG9yUGFyYW1ldGVyczsKIAogY2xhc3MgU2Ny
b2xsQW5pbWF0b3JOb25lIDogcHVibGljIFNjcm9sbEFuaW1hdG9yIHsKIHB1YmxpYzoKLSAgICBl
eHBsaWNpdCBTY3JvbGxBbmltYXRvck5vbmUoU2Nyb2xsYWJsZUFyZWEqKTsKKyAgICBleHBsaWNp
dCBTY3JvbGxBbmltYXRvck5vbmUoU2Nyb2xsYWJsZUFyZWEmKTsKICAgICB2aXJ0dWFsIH5TY3Jv
bGxBbmltYXRvck5vbmUoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3Jp
ZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVy
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCShyZXZpc2lvbiAx
ODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzQsNyArMTM0LDcg
QEAgYm9vbCBTY3JvbGxWaWV3OjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcgogCiBQYXNzUmVmUHRy
PFNjcm9sbGJhcj4gU2Nyb2xsVmlldzo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0
aW9uIG9yaWVudGF0aW9uKQogewotICAgIHJldHVybiBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNj
cm9sbGJhcih0aGlzLCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcik7CisgICAgcmV0dXJu
IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgUmVn
dWxhclNjcm9sbGJhcik7CiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsYmFyTW9kZXMo
U2Nyb2xsYmFyTW9kZSBob3Jpem9udGFsTW9kZSwgU2Nyb2xsYmFyTW9kZSB2ZXJ0aWNhbE1vZGUs
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCShyZXZp
c2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAy
MDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDExLCAyMDE0IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAxMSwgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KICAqIAogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC03MCwxMiArNzAs
MTMgQEAgU2Nyb2xsYWJsZUFyZWE6On5TY3JvbGxhYmxlQXJlYSgpCiB7CiB9CiAKLVNjcm9sbEFu
aW1hdG9yKiBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsQW5pbWF0b3IoKSBjb25zdAorU2Nyb2xsQW5p
bWF0b3ImIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxBbmltYXRvcigpIGNvbnN0CiB7CiAgICAgaWYg
KCFtX3Njcm9sbEFuaW1hdG9yKQotICAgICAgICBtX3Njcm9sbEFuaW1hdG9yID0gU2Nyb2xsQW5p
bWF0b3I6OmNyZWF0ZShjb25zdF9jYXN0PFNjcm9sbGFibGVBcmVhKj4odGhpcykpOworICAgICAg
ICBtX3Njcm9sbEFuaW1hdG9yID0gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShjb25zdF9jYXN0PFNj
cm9sbGFibGVBcmVhJj4oKnRoaXMpKTsKIAotICAgIHJldHVybiBtX3Njcm9sbEFuaW1hdG9yLmdl
dCgpOworICAgIEFTU0VSVChtX3Njcm9sbEFuaW1hdG9yKTsKKyAgICByZXR1cm4gKm1fc2Nyb2xs
QW5pbWF0b3IuZ2V0KCk7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbE9yaWdp
bihjb25zdCBJbnRQb2ludCYgb3JpZ2luKQpAQCAtMTI3LDI2ICsxMjgsMjYgQEAgYm9vbCBTY3Jv
bGxhYmxlQXJlYTo6c2Nyb2xsKFNjcm9sbERpcmVjdAogICAgICAgICBtdWx0aXBsaWVyID0gLW11
bHRpcGxpZXI7CiAKICAgICBzdGVwID0gYWRqdXN0U2Nyb2xsU3RlcEZvckZpeGVkQ29udGVudChz
dGVwLCBvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHkpOwotICAgIHJldHVybiBzY3JvbGxBbmltYXRv
cigpLT5zY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsK
KyAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3IoKS5zY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFy
aXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xs
VG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCkKIHsKLSAg
ICBzY3JvbGxBbmltYXRvcigpLT5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24ob2Zmc2V0
KTsKKyAgICBzY3JvbGxBbmltYXRvcigpLnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihv
ZmZzZXQpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhvdXRB
bmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZsb2F0IG9mZnNldCkK
IHsKICAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAg
c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKEZsb2F0UG9pbnQob2Zmc2V0LCBzY3JvbGxB
bmltYXRvcigpLT5jdXJyZW50UG9zaXRpb24oKS55KCkpKTsKKyAgICAgICAgc2Nyb2xsVG9PZmZz
ZXRXaXRob3V0QW5pbWF0aW9uKEZsb2F0UG9pbnQob2Zmc2V0LCBzY3JvbGxBbmltYXRvcigpLmN1
cnJlbnRQb3NpdGlvbigpLnkoKSkpOwogICAgIGVsc2UKLSAgICAgICAgc2Nyb2xsVG9PZmZzZXRX
aXRob3V0QW5pbWF0aW9uKEZsb2F0UG9pbnQoc2Nyb2xsQW5pbWF0b3IoKS0+Y3VycmVudFBvc2l0
aW9uKCkueCgpLCBvZmZzZXQpKTsKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0
aW9uKEZsb2F0UG9pbnQoc2Nyb2xsQW5pbWF0b3IoKS5jdXJyZW50UG9zaXRpb24oKS54KCksIG9m
ZnNldCkpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpub3RpZnlTY3JvbGxQb3NpdGlvbkNo
YW5nZWQoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQogewogICAgIHNjcm9sbFBvc2l0aW9uQ2hh
bmdlZChwb3NpdGlvbik7Ci0gICAgc2Nyb2xsQW5pbWF0b3IoKS0+c2V0Q3VycmVudFBvc2l0aW9u
KHBvc2l0aW9uKTsKKyAgICBzY3JvbGxBbmltYXRvcigpLnNldEN1cnJlbnRQb3NpdGlvbihwb3Np
dGlvbik7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFBvc2l0aW9uQ2hhbmdlZChj
b25zdCBJbnRQb2ludCYgcG9zaXRpb24pCkBAIC0xNzksNyArMTgwLDcgQEAgdm9pZCBTY3JvbGxh
YmxlQXJlYTo6c2Nyb2xsUG9zaXRpb25DaGFuZwogICAgIH0KIAogICAgIGlmIChzY3JvbGxQb3Np
dGlvbigpICE9IG9sZFBvc2l0aW9uKQotICAgICAgICBzY3JvbGxBbmltYXRvcigpLT5ub3RpZnlD
b250ZW50QXJlYVNjcm9sbGVkKHNjcm9sbFBvc2l0aW9uKCkgLSBvbGRQb3NpdGlvbik7CisgICAg
ICAgIHNjcm9sbEFuaW1hdG9yKCkubm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChzY3JvbGxQb3Np
dGlvbigpIC0gb2xkUG9zaXRpb24pOwogfQogCiBib29sIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVX
aGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKQEAgLTE4Nywx
MyArMTg4LDEzIEBAIGJvb2wgU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnQoY28KICAg
ICBpZiAoIWlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yKCktPmhhbmRsZVdoZWVsRXZlbnQod2hl
ZWxFdmVudCk7CisgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yKCkuaGFuZGxlV2hlZWxFdmVudCh3
aGVlbEV2ZW50KTsKIH0KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiBib29sIFNjcm9sbGFi
bGVBcmVhOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hF
dmVudCkKIHsKLSAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3IoKS0+aGFuZGxlVG91Y2hFdmVudCh0
b3VjaEV2ZW50KTsKKyAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3IoKS5oYW5kbGVUb3VjaEV2ZW50
KHRvdWNoRXZlbnQpOwogfQogI2VuZGlmCiAKQEAgLTI1NSwxMiArMjU2LDEyIEBAIHZvaWQgU2Ny
b2xsYWJsZUFyZWE6Om1vdXNlTW92ZWRJbkNvbnRlbnQKIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6
bW91c2VFbnRlcmVkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogewotICAg
IHNjcm9sbEFuaW1hdG9yKCktPm1vdXNlRW50ZXJlZFNjcm9sbGJhcihzY3JvbGxiYXIpOworICAg
IHNjcm9sbEFuaW1hdG9yKCkubW91c2VFbnRlcmVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9CiAK
IHZvaWQgU2Nyb2xsYWJsZUFyZWE6Om1vdXNlRXhpdGVkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Ny
b2xsYmFyKSBjb25zdAogewotICAgIHNjcm9sbEFuaW1hdG9yKCktPm1vdXNlRXhpdGVkU2Nyb2xs
YmFyKHNjcm9sbGJhcik7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS5tb3VzZUV4aXRlZFNjcm9sbGJh
cihzY3JvbGxiYXIpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpjb250ZW50QXJlYURpZFNo
b3coKSBjb25zdApAQCAtMjkxLDkgKzI5Miw5IEBAIGJvb2wgU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bGJhcnNDYW5CZUFjdGkKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmRpZEFkZFNjcm9sbGJhcihTY3Jv
bGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCiB7CiAg
ICAgaWYgKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICBzY3JvbGxB
bmltYXRvcigpLT5kaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgICAgICBz
Y3JvbGxBbmltYXRvcigpLmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiAgICAg
ZWxzZQotICAgICAgICBzY3JvbGxBbmltYXRvcigpLT5kaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFy
KHNjcm9sbGJhcik7CisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuZGlkQWRkSG9yaXpvbnRhbFNj
cm9sbGJhcihzY3JvbGxiYXIpOwogCiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzk3OTcyNTM+IEFw
cEtpdCByZXNldHMgdGhlIHNjcm9sbGJhcidzIHN0eWxlIHdoZW4geW91IGF0dGFjaCBhIHNjcm9s
bGJhcgogICAgIHNldFNjcm9sbGJhck92ZXJsYXlTdHlsZShzY3JvbGxiYXJPdmVybGF5U3R5bGUo
KSk7CkBAIC0zMDIsOSArMzAzLDkgQEAgdm9pZCBTY3JvbGxhYmxlQXJlYTo6ZGlkQWRkU2Nyb2xs
YmFyKFNjcgogdm9pZCBTY3JvbGxhYmxlQXJlYTo6d2lsbFJlbW92ZVNjcm9sbGJhcihTY3JvbGxi
YXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCiB7CiAgICAg
aWYgKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICBzY3JvbGxBbmlt
YXRvcigpLT53aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICAgICAg
c2Nyb2xsQW5pbWF0b3IoKS53aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsK
ICAgICBlbHNlCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCktPndpbGxSZW1vdmVIb3Jpem9udGFs
U2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkud2lsbFJlbW92
ZUhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJl
YTo6Y29udGVudHNSZXNpemVkKCkKQEAgLTM2NSwxMiArMzY2LDEyIEBAIHZvaWQgU2Nyb2xsYWJs
ZUFyZWE6OmludmFsaWRhdGVTY3JvbGxDb3IKIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6dmVydGlj
YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpCiB7Ci0gICAgc2Nyb2xsQW5pbWF0b3IoKS0+dmVy
dGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpOworICAgIHNjcm9sbEFuaW1hdG9yKCkudmVy
dGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVh
Ojpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQogewotICAgIHNjcm9sbEFuaW1h
dG9yKCktPmhvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpOworICAgIHNjcm9sbEFu
aW1hdG9yKCkuaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCk7CiB9CiAKIGJvb2wg
U2Nyb2xsYWJsZUFyZWE6Omhhc0xheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgJKHJldmlzaW9uIDE4
MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgU2Nyb2xsYmFyT3Zlcmxh
eVN0eWxlIHNjcm9sbGJhck92ZXJsYXlTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PFNjcm9sbGJhck92ZXJsYXlTdHlsZT4obV9zY3JvbGxiYXJPdmVybGF5U3R5bGUpOyB9CiAKICAg
ICAvLyBUaGlzIGdldHRlciB3aWxsIGNyZWF0ZSBhIFNjcm9sbEFuaW1hdG9yIGlmIGl0IGRvZXNu
J3QgYWxyZWFkeSBleGlzdC4KLSAgICBXRUJDT1JFX0VYUE9SVCBTY3JvbGxBbmltYXRvciogc2Ny
b2xsQW5pbWF0b3IoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBTY3JvbGxBbmltYXRvciYg
c2Nyb2xsQW5pbWF0b3IoKSBjb25zdDsKIAogICAgIC8vIFRoaXMgZ2V0dGVyIHdpbGwgcmV0dXJu
IG51bGwgaWYgdGhlIFNjcm9sbEFuaW1hdG9yIGhhc24ndCBiZWVuIGNyZWF0ZWQgeWV0LgogICAg
IFNjcm9sbEFuaW1hdG9yKiBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkgY29uc3QgeyByZXR1cm4g
bV9zY3JvbGxBbmltYXRvci5nZXQoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYmFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxiYXIuY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxiYXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDgsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCw3
ICs0NCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiAhUExBVEZPUk0oRUZMKQotUGFz
c1JlZlB0cjxTY3JvbGxiYXI+IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKFNjcm9s
bGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRp
b24sIFNjcm9sbGJhckNvbnRyb2xTaXplIHNpemUpCitQYXNzUmVmUHRyPFNjcm9sbGJhcj4gU2Ny
b2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVB
cmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNp
emUgc2l6ZSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNjcm9sbGJhcihzY3JvbGxhYmxl
QXJlYSwgb3JpZW50YXRpb24sIHNpemUpKTsKIH0KQEAgLTU2LDcgKzU2LDcgQEAgaW50IFNjcm9s
bGJhcjo6bWF4T3ZlcmxhcEJldHdlZW5QYWdlcygpCiAgICAgcmV0dXJuIG1heE92ZXJsYXBCZXR3
ZWVuUGFnZXM7CiB9CiAKLVNjcm9sbGJhcjo6U2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiBzY3Jv
bGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNv
bnRyb2xTaXplIGNvbnRyb2xTaXplLAorU2Nyb2xsYmFyOjpTY3JvbGxiYXIoU2Nyb2xsYWJsZUFy
ZWEmIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Ny
b2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUsCiAgICAgICAgICAgICAgICAgICAgICBTY3Jv
bGxiYXJUaGVtZSogdGhlbWUsIGJvb2wgaXNDdXN0b21TY3JvbGxiYXIpCiAgICAgOiBtX3Njcm9s
bGFibGVBcmVhKHNjcm9sbGFibGVBcmVhKQogICAgICwgbV9vcmllbnRhdGlvbihvcmllbnRhdGlv
bikKQEAgLTkzLDggKzkzLDcgQEAgU2Nyb2xsYmFyOjpTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEq
IHNjcgogICAgIGludCB0aGlja25lc3MgPSBtX3RoZW1lLT5zY3JvbGxiYXJUaGlja25lc3MoY29u
dHJvbFNpemUpOwogICAgIFdpZGdldDo6c2V0RnJhbWVSZWN0KEludFJlY3QoMCwgMCwgdGhpY2tu
ZXNzLCB0aGlja25lc3MpKTsKIAotICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQotICAgICAgICBt
X2N1cnJlbnRQb3MgPSBzdGF0aWNfY2FzdDxmbG9hdD4obV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xs
UG9zaXRpb24odGhpcykpOworICAgIG1fY3VycmVudFBvcyA9IHN0YXRpY19jYXN0PGZsb2F0Piht
X3Njcm9sbGFibGVBcmVhLnNjcm9sbFBvc2l0aW9uKHRoaXMpKTsKIH0KIAogU2Nyb2xsYmFyOjp+
U2Nyb2xsYmFyKCkKQEAgLTEwNiwxMiArMTA1LDEyIEBAIFNjcm9sbGJhcjo6flNjcm9sbGJhcigp
CiAKIFNjcm9sbGJhck92ZXJsYXlTdHlsZSBTY3JvbGxiYXI6OnNjcm9sbGJhck92ZXJsYXlTdHls
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEgPyBtX3Njcm9sbGFibGVB
cmVhLT5zY3JvbGxiYXJPdmVybGF5U3R5bGUoKSA6IFNjcm9sbGJhck92ZXJsYXlTdHlsZURlZmF1
bHQ7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsYmFyT3ZlcmxheVN0eWxlKCk7
CiB9CiAKIGJvb2wgU2Nyb2xsYmFyOjppc1Njcm9sbGFibGVBcmVhQWN0aXZlKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFibGVBcmVhLT5pc0FjdGl2
ZSgpOworICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLmlzQWN0aXZlKCk7CiB9CiAKIGJvb2wg
U2Nyb2xsYmFyOjppc1Njcm9sbFZpZXdTY3JvbGxiYXIoKSBjb25zdApAQCAtMTIxLDkgKzEyMCw3
IEBAIGJvb2wgU2Nyb2xsYmFyOjppc1Njcm9sbFZpZXdTY3JvbGxiYXIoKSAKIAogdm9pZCBTY3Jv
bGxiYXI6Om9mZnNldERpZENoYW5nZSgpCiB7Ci0gICAgQVNTRVJUKG1fc2Nyb2xsYWJsZUFyZWEp
OwotCi0gICAgZmxvYXQgcG9zaXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdD4obV9zY3JvbGxhYmxl
QXJlYS0+c2Nyb2xsUG9zaXRpb24odGhpcykpOworICAgIGZsb2F0IHBvc2l0aW9uID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsUG9zaXRpb24odGhpcykpOwogICAg
IGlmIChwb3NpdGlvbiA9PSBtX2N1cnJlbnRQb3MpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjEx
LDcgKzIwOCw3IEBAIHZvaWQgU2Nyb2xsYmFyOjphdXRvc2Nyb2xsUHJlc3NlZFBhcnQoZG8KICAg
ICB9CiAKICAgICAvLyBIYW5kbGUgdGhlIGFycm93cyBhbmQgdHJhY2suCi0gICAgaWYgKG1fc2Ny
b2xsYWJsZUFyZWEgJiYgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsKHByZXNzZWRQYXJ0U2Nyb2xs
RGlyZWN0aW9uKCksIHByZXNzZWRQYXJ0U2Nyb2xsR3JhbnVsYXJpdHkoKSkpCisgICAgaWYgKG1f
c2Nyb2xsYWJsZUFyZWEuc2Nyb2xsKHByZXNzZWRQYXJ0U2Nyb2xsRGlyZWN0aW9uKCksIHByZXNz
ZWRQYXJ0U2Nyb2xsR3JhbnVsYXJpdHkoKSkpCiAgICAgICAgIHN0YXJ0VGltZXJJZk5lZWRlZChk
ZWxheSk7CiB9CiAKQEAgLTI3MCwyMiArMjY3LDE5IEBAIFNjcm9sbEdyYW51bGFyaXR5IFNjcm9s
bGJhcjo6cHJlc3NlZFBhcnQKIAogdm9pZCBTY3JvbGxiYXI6Om1vdmVUaHVtYihpbnQgcG9zLCBi
b29sIGRyYWdnaW5nRG9jdW1lbnQpCiB7Ci0gICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhKQotICAg
ICAgICByZXR1cm47Ci0KICAgICBpbnQgZGVsdGEgPSBwb3MgLSBtX3ByZXNzZWRQb3M7CiAKICAg
ICBpZiAoZHJhZ2dpbmdEb2N1bWVudCkgewogICAgICAgICBpZiAobV9kcmFnZ2luZ0RvY3VtZW50
KQogICAgICAgICAgICAgZGVsdGEgPSBwb3MgLSBtX2RvY3VtZW50RHJhZ1BvczsKICAgICAgICAg
bV9kcmFnZ2luZ0RvY3VtZW50ID0gdHJ1ZTsKLSAgICAgICAgRmxvYXRQb2ludCBjdXJyZW50UG9z
aXRpb24gPSBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxBbmltYXRvcigpLT5jdXJyZW50UG9zaXRp
b24oKTsKKyAgICAgICAgRmxvYXRQb2ludCBjdXJyZW50UG9zaXRpb24gPSBtX3Njcm9sbGFibGVB
cmVhLnNjcm9sbEFuaW1hdG9yKCkuY3VycmVudFBvc2l0aW9uKCk7CiAgICAgICAgIGludCBkZXN0
aW5hdGlvblBvc2l0aW9uID0gKG1fb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/
IGN1cnJlbnRQb3NpdGlvbi54KCkgOiBjdXJyZW50UG9zaXRpb24ueSgpKSArIGRlbHRhOwogICAg
ICAgICBpZiAoZGVsdGEgPiAwKQogICAgICAgICAgICAgZGVzdGluYXRpb25Qb3NpdGlvbiA9IHN0
ZDo6bWluKGRlc3RpbmF0aW9uUG9zaXRpb24gKyBkZWx0YSwgbWF4aW11bSgpKTsKICAgICAgICAg
ZWxzZSBpZiAoZGVsdGEgPCAwKQogICAgICAgICAgICAgZGVzdGluYXRpb25Qb3NpdGlvbiA9IHN0
ZDo6bWF4KGRlc3RpbmF0aW9uUG9zaXRpb24gKyBkZWx0YSwgMCk7Ci0gICAgICAgIG1fc2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihtX29yaWVudGF0aW9uLCBk
ZXN0aW5hdGlvblBvc2l0aW9uKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxUb09m
ZnNldFdpdGhvdXRBbmltYXRpb24obV9vcmllbnRhdGlvbiwgZGVzdGluYXRpb25Qb3NpdGlvbik7
CiAgICAgICAgIG1fZG9jdW1lbnREcmFnUG9zID0gcG9zOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMzA3LDcgKzMwMSw3IEBAIHZvaWQgU2Nyb2xsYmFyOjptb3ZlVGh1bWIoaW50IHBvcywg
Ym9vbCAKICAgICAKICAgICBpZiAoZGVsdGEpIHsKICAgICAgICAgZmxvYXQgbmV3UG9zaXRpb24g
PSBzdGF0aWNfY2FzdDxmbG9hdD4odGh1bWJQb3MgKyBkZWx0YSkgKiBtYXhpbXVtKCkgLyAodHJh
Y2tMZW4gLSB0aHVtYkxlbik7Ci0gICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFRvT2Zm
c2V0V2l0aG91dEFuaW1hdGlvbihtX29yaWVudGF0aW9uLCBuZXdQb3NpdGlvbik7CisgICAgICAg
IG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG1fb3JpZW50
YXRpb24sIG5ld1Bvc2l0aW9uKTsKICAgICB9CiB9CiAKQEAgLTM0MCwxMCArMzM0LDkgQEAgdm9p
ZCBTY3JvbGxiYXI6OnNldFByZXNzZWRQYXJ0KFNjcm9sbGJhcgogYm9vbCBTY3JvbGxiYXI6Om1v
dXNlTW92ZWQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQpCiB7CiAgICAgaWYgKG1fcHJl
c3NlZFBhcnQgPT0gVGh1bWJQYXJ0KSB7Ci0gICAgICAgIGlmICh0aGVtZSgpLT5zaG91bGRTbmFw
QmFja1RvRHJhZ09yaWdpbih0aGlzLCBldnQpKSB7Ci0gICAgICAgICAgICBpZiAobV9zY3JvbGxh
YmxlQXJlYSkKLSAgICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxUb09mZnNl
dFdpdGhvdXRBbmltYXRpb24obV9vcmllbnRhdGlvbiwgbV9kcmFnT3JpZ2luKTsKLSAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgaWYgKHRoZW1lKCktPnNob3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2lu
KHRoaXMsIGV2dCkpCisgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbFRvT2Zmc2V0
V2l0aG91dEFuaW1hdGlvbihtX29yaWVudGF0aW9uLCBtX2RyYWdPcmlnaW4pOworICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgIG1vdmVUaHVtYihtX29yaWVudGF0aW9uID09IEhvcml6b250YWxT
Y3JvbGxiYXIgPyAKICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0RnJvbUNvbnRhaW5pbmdX
aW5kb3coZXZ0LnBvc2l0aW9uKCkpLngoKSA6CiAgICAgICAgICAgICAgICAgICAgICAgY29udmVy
dEZyb21Db250YWluaW5nV2luZG93KGV2dC5wb3NpdGlvbigpKS55KCksIHRoZW1lKCktPnNob3Vs
ZERyYWdEb2N1bWVudEluc3RlYWRPZlRodW1iKHRoaXMsIGV2dCkpOwpAQCAtMzc5LDE0ICszNzIs
MTIgQEAgYm9vbCBTY3JvbGxiYXI6Om1vdXNlTW92ZWQoY29uc3QgUGxhdGZvcgogCiB2b2lkIFNj
cm9sbGJhcjo6bW91c2VFbnRlcmVkKCkKIHsKLSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKLSAg
ICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+bW91c2VFbnRlcmVkU2Nyb2xsYmFyKHRoaXMpOworICAg
IG1fc2Nyb2xsYWJsZUFyZWEubW91c2VFbnRlcmVkU2Nyb2xsYmFyKHRoaXMpOwogfQogCiBib29s
IFNjcm9sbGJhcjo6bW91c2VFeGl0ZWQoKQogewotICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQot
ICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5tb3VzZUV4aXRlZFNjcm9sbGJhcih0aGlzKTsKKyAg
ICBtX3Njcm9sbGFibGVBcmVhLm1vdXNlRXhpdGVkU2Nyb2xsYmFyKHRoaXMpOwogICAgIHNldEhv
dmVyZWRQYXJ0KE5vUGFydCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zOTgsMTMgKzM4OSwx
MSBAQCBib29sIFNjcm9sbGJhcjo6bW91c2VVcChjb25zdCBQbGF0Zm9ybU1vCiAgICAgbV9kcmFn
Z2luZ0RvY3VtZW50ID0gZmFsc2U7CiAgICAgc3RvcFRpbWVySWZOZWVkZWQoKTsKIAotICAgIGlm
IChtX3Njcm9sbGFibGVBcmVhKSB7Ci0gICAgICAgIC8vIG1faG92ZXJlZFBhcnQgd29uJ3QgYmUg
dXBkYXRlZCB1bnRpbCB0aGUgbmV4dCBtb3VzZU1vdmVkIG9yIG1vdXNlRG93biwgc28gd2UgaGF2
ZSB0byBoaXQgdGVzdAotICAgICAgICAvLyB0byByZWFsbHkga25vdyBpZiB0aGUgbW91c2UgaGFz
IGV4aXRlZCB0aGUgc2Nyb2xsYmFyIG9uIGEgbW91c2VVcC4KLSAgICAgICAgU2Nyb2xsYmFyUGFy
dCBwYXJ0ID0gdGhlbWUoKS0+aGl0VGVzdCh0aGlzLCBtb3VzZUV2ZW50LnBvc2l0aW9uKCkpOwot
ICAgICAgICBpZiAocGFydCA9PSBOb1BhcnQpCi0gICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVh
LT5tb3VzZUV4aXRlZFNjcm9sbGJhcih0aGlzKTsKLSAgICB9CisgICAgLy8gbV9ob3ZlcmVkUGFy
dCB3b24ndCBiZSB1cGRhdGVkIHVudGlsIHRoZSBuZXh0IG1vdXNlTW92ZWQgb3IgbW91c2VEb3du
LCBzbyB3ZSBoYXZlIHRvIGhpdCB0ZXN0CisgICAgLy8gdG8gcmVhbGx5IGtub3cgaWYgdGhlIG1v
dXNlIGhhcyBleGl0ZWQgdGhlIHNjcm9sbGJhciBvbiBhIG1vdXNlVXAuCisgICAgU2Nyb2xsYmFy
UGFydCBwYXJ0ID0gdGhlbWUoKS0+aGl0VGVzdCh0aGlzLCBtb3VzZUV2ZW50LnBvc2l0aW9uKCkp
OworICAgIGlmIChwYXJ0ID09IE5vUGFydCkKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS5tb3Vz
ZUV4aXRlZFNjcm9sbGJhcih0aGlzKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNDk4LDEy
ICs0ODcsMTIgQEAgYm9vbCBTY3JvbGxiYXI6OnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZQogICAg
IC8vIE5vbi1vdmVybGF5IHNjcm9sbGJhcnMgc2hvdWxkIGFsd2F5cyBwYXJ0aWNpcGF0ZSBpbiBo
aXQgdGVzdGluZy4KICAgICBpZiAoIWlzT3ZlcmxheVNjcm9sbGJhcigpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsQW5pbWF0b3IoKS0+
c2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcodGhpcyk7CisgICAgcmV0dXJu
IG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3IoKS5zaG91bGRTY3JvbGxiYXJQYXJ0aWNp
cGF0ZUluSGl0VGVzdGluZyh0aGlzKTsKIH0KIAogYm9vbCBTY3JvbGxiYXI6OmlzV2luZG93QWN0
aXZlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFi
bGVBcmVhLT5pc0FjdGl2ZSgpOworICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLmlzQWN0aXZl
KCk7CiB9CiAKIHZvaWQgU2Nyb2xsYmFyOjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KQpAQCAtNTExLDQwICs1MDAsMjcgQEAgdm9pZCBTY3JvbGxiYXI6OmludmFsaWRhdGVSZWN0
KGNvbnN0IEludAogICAgIGlmIChzdXBwcmVzc0ludmFsaWRhdGlvbigpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKLSAgICAgICAgbV9zY3JvbGxhYmxlQXJl
YS0+aW52YWxpZGF0ZVNjcm9sbGJhcih0aGlzLCByZWN0KTsKKyAgICBtX3Njcm9sbGFibGVBcmVh
LmludmFsaWRhdGVTY3JvbGxiYXIodGhpcywgcmVjdCk7CiB9CiAKIEludFJlY3QgU2Nyb2xsYmFy
Ojpjb252ZXJ0VG9Db250YWluaW5nVmlldyhjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0
CiB7Ci0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIHJldHVybiBtX3Njcm9sbGFi
bGVBcmVhLT5jb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcodGhpcywgbG9jYWxS
ZWN0KTsKLQotICAgIHJldHVybiBXaWRnZXQ6OmNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGxvY2Fs
UmVjdCk7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuY29udmVydEZyb21TY3JvbGxiYXJU
b0NvbnRhaW5pbmdWaWV3KHRoaXMsIGxvY2FsUmVjdCk7CiB9CiAKIEludFJlY3QgU2Nyb2xsYmFy
Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNv
bnN0CiB7Ci0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIHJldHVybiBtX3Njcm9s
bGFibGVBcmVhLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIodGhpcywgcGFy
ZW50UmVjdCk7Ci0KLSAgICByZXR1cm4gV2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3
KHBhcmVudFJlY3QpOworICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXdUb1Njcm9sbGJhcih0aGlzLCBwYXJlbnRSZWN0KTsKIH0KIAogSW50UG9pbnQg
U2Nyb2xsYmFyOjpjb252ZXJ0VG9Db250YWluaW5nVmlldyhjb25zdCBJbnRQb2ludCYgbG9jYWxQ
b2ludCkgY29uc3QKIHsKLSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKLSAgICAgICAgcmV0dXJu
IG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyh0
aGlzLCBsb2NhbFBvaW50KTsKLQotICAgIHJldHVybiBXaWRnZXQ6OmNvbnZlcnRUb0NvbnRhaW5p
bmdWaWV3KGxvY2FsUG9pbnQpOworICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLmNvbnZlcnRG
cm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyh0aGlzLCBsb2NhbFBvaW50KTsKIH0KIAogSW50
UG9pbnQgU2Nyb2xsYmFyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IEludFBvaW50
JiBwYXJlbnRQb2ludCkgY29uc3QKIHsKLSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKLSAgICAg
ICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Nj
cm9sbGJhcih0aGlzLCBwYXJlbnRQb2ludCk7Ci0KLSAgICByZXR1cm4gV2lkZ2V0Ojpjb252ZXJ0
RnJvbUNvbnRhaW5pbmdWaWV3KHBhcmVudFBvaW50KTsKKyAgICByZXR1cm4gbV9zY3JvbGxhYmxl
QXJlYS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIodGhpcywgcGFyZW50UG9p
bnQpOwogfQogCiBib29sIFNjcm9sbGJhcjo6c3VwcG9ydHNVcGRhdGVPblNlY29uZGFyeVRocmVh
ZCgpIGNvbnN0CkBAIC01NTIsOCArNTI4LDggQEAgYm9vbCBTY3JvbGxiYXI6OnN1cHBvcnRzVXBk
YXRlT25TZWNvbmRhcgogICAgIC8vIEl0J3MgdW5mb3J0dW5hdGUgdGhhdCB0aGlzIG5lZWRzIHRv
IGJlIGRvbmUgd2l0aCBhbiBpZmRlZi4gSWRlYWxseSB0aGVyZSB3b3VsZCBiZSBhIHdheSB0byBm
ZWF0dXJlLWRldGVjdAogICAgIC8vIHRoZSBuZWNlc3Nhcnkgc3VwcG9ydCB3aXRoaW4gQXBwS2l0
LgogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNf
T1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEwMDAKLSAgICByZXR1cm4gIW1fc2Nyb2xs
YWJsZUFyZWEtPmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNl
VGVzdGluZygpCi0gICAgICAgICYmIChtX3Njcm9sbGFibGVBcmVhLT5oYXNMYXllckZvclZlcnRp
Y2FsU2Nyb2xsYmFyKCkgfHwgbV9zY3JvbGxhYmxlQXJlYS0+aGFzTGF5ZXJGb3JIb3Jpem9udGFs
U2Nyb2xsYmFyKCkpOworICAgIHJldHVybiAhbV9zY3JvbGxhYmxlQXJlYS5mb3JjZVVwZGF0ZVNj
cm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKQorICAgICAgICAmJiAo
bV9zY3JvbGxhYmxlQXJlYS5oYXNMYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgbV9zY3Jv
bGxhYmxlQXJlYS5oYXNMYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSk7CiAjZWxzZQogICAg
IHJldHVybiBmYWxzZTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFy
LmgJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJh
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNiwgMjAxNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDE0LTIwMTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDUsNyArNDUsNyBA
QCBjbGFzcyBTY3JvbGxiYXIgOiBwdWJsaWMgV2lkZ2V0LAogCiBwdWJsaWM6CiAgICAgLy8gTXVz
dCBiZSBpbXBsZW1lbnRlZCBieSBwbGF0Zm9ybXMgdGhhdCBjYW4ndCBzaW1wbHkgdXNlIHRoZSBT
Y3JvbGxiYXIgYmFzZSBjbGFzcy4gIFJpZ2h0IG5vdyB0aGUgb25seSBwbGF0Zm9ybSB0aGF0IGlz
IG5vdCB1c2luZyB0aGUgYmFzZSBjbGFzcyBpcyBHVEsuCi0gICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBjcmVhdGVOYXRpdmVTY3JvbGxiYXIoU2Nyb2xsYWJs
ZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJv
bFNpemUgc2l6ZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBhc3NSZWZQdHI8U2Nyb2xs
YmFyPiBjcmVhdGVOYXRpdmVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEmLCBTY3JvbGxiYXJPcmll
bnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUpOwogCiAgICAgdmlydHVhbCB+U2Nyb2xsYmFy
KCk7CiAKQEAgLTEwMyw4ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGludCBwYWdlU3Rl
cChpbnQgdmlld1dpZHRoT3JIZWlnaHQpIHsgcmV0dXJuIHBhZ2VTdGVwKHZpZXdXaWR0aE9ySGVp
Z2h0LCB2aWV3V2lkdGhPckhlaWdodCk7IH0KICAgICBzdGF0aWMgZmxvYXQgcGFnZVN0ZXBEZWx0
YShpbnQgd2lkdGhPckhlaWdodCkgeyByZXR1cm4gc3RkOjptYXgoc3RkOjptYXgoc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHdpZHRoT3JIZWlnaHQpICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3RlcFdo
ZW5QYWdpbmcoKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdpZHRoT3JIZWlnaHQpIC0gU2Nyb2xsYmFy
OjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkpLCAxLjBmKTsgfQogCi0gICAgdm9pZCBkaXNjb25u
ZWN0RnJvbVNjcm9sbGFibGVBcmVhKCkgeyBtX3Njcm9sbGFibGVBcmVhID0gMDsgfQotICAgIFNj
cm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJs
ZUFyZWE7IH0KKyAgICBTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEoKSBjb25zdCB7IHJl
dHVybiBtX3Njcm9sbGFibGVBcmVhOyB9CiAKICAgICBpbnQgcHJlc3NlZFBvcygpIGNvbnN0IHsg
cmV0dXJuIG1fcHJlc3NlZFBvczsgfQogCkBAIC0xNTksNyArMTU4LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKCkgY29uc3Qgb3Zl
cnJpZGU7CiAKIHByb3RlY3RlZDoKLSAgICBTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqLCBTY3Jv
bGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUsIFNjcm9sbGJhclRoZW1lKiA9
IDAsIGJvb2wgaXNDdXN0b21TY3JvbGxiYXIgPSBmYWxzZSk7CisgICAgU2Nyb2xsYmFyKFNjcm9s
bGFibGVBcmVhJiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplLCBT
Y3JvbGxiYXJUaGVtZSogPSAwLCBib29sIGlzQ3VzdG9tU2Nyb2xsYmFyID0gZmFsc2UpOwogCiAg
ICAgdm9pZCB1cGRhdGVUaHVtYigpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaHVtYlBvc2l0
aW9uKCk7CkBAIC0xNzIsNyArMTcxLDcgQEAgcHJvdGVjdGVkOgogICAgIFNjcm9sbERpcmVjdGlv
biBwcmVzc2VkUGFydFNjcm9sbERpcmVjdGlvbigpOwogICAgIFNjcm9sbEdyYW51bGFyaXR5IHBy
ZXNzZWRQYXJ0U2Nyb2xsR3JhbnVsYXJpdHkoKTsKIAotICAgIFNjcm9sbGFibGVBcmVhKiBtX3Nj
cm9sbGFibGVBcmVhOworICAgIFNjcm9sbGFibGVBcmVhJiBtX3Njcm9sbGFibGVBcmVhOwogICAg
IFNjcm9sbGJhck9yaWVudGF0aW9uIG1fb3JpZW50YXRpb247CiAgICAgU2Nyb2xsYmFyQ29udHJv
bFNpemUgbV9jb250cm9sU2l6ZTsKICAgICBTY3JvbGxiYXJUaGVtZSogbV90aGVtZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MubW0J
KHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxB
bmltYXRvcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODIsNyArODIsNyBAQCBib29sIFNjcm9sbEFu
aW1hdG9ySU9TOjpoYW5kbGVUb3VjaEV2ZW50CiAgICAgICAgIG1faW5Ub3VjaFNlcXVlbmNlID0g
ZmFsc2U7CiAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlID0gMDsKICAg
ICAgICAgaWYgKG1fc3RhcnRlZFNjcm9sbCkKLSAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhKCkt
PmRpZEVuZFNjcm9sbCgpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEoKS5kaWRFbmRTY3Jv
bGwoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtOTIsNyArOTIsNyBAQCBi
b29sIFNjcm9sbEFuaW1hdG9ySU9TOjpoYW5kbGVUb3VjaEV2ZW50CiAgICAgICAgIG1faW5Ub3Vj
aFNlcXVlbmNlID0gZmFsc2U7CiAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVl
bmNlID0gMDsKICAgICAgICAgaWYgKG1fc3RhcnRlZFNjcm9sbCkKLSAgICAgICAgICAgIHNjcm9s
bGFibGVBcmVhKCktPmRpZEVuZFNjcm9sbCgpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEo
KS5kaWRFbmRTY3JvbGwoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKQEAg
LTEwNSw4ICsxMDUsOCBAQCBib29sIFNjcm9sbEFuaW1hdG9ySU9TOjpoYW5kbGVUb3VjaEV2ZW50
CiAgICAgICAgIGRldGVybWluZVNjcm9sbGFibGVBcmVhRm9yVG91Y2hTZXF1ZW5jZSh0b3VjaERl
bHRhKTsKIAogICAgIGlmICghbV9jb21taXR0ZWRUb1Njcm9sbEF4aXMpIHsKLSAgICAgICAgYm9v
bCBob3Jpem9udGFsbHlTY3JvbGxhYmxlID0gbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsU2l6ZShI
b3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICAgICAgYm9vbCB2ZXJ0aWNhbGx5U2Nyb2xsYWJsZSA9
IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFNpemUoVmVydGljYWxTY3JvbGxiYXIpOworICAgICAg
ICBib29sIGhvcml6b250YWxseVNjcm9sbGFibGUgPSBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbFNp
emUoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgICAgIGJvb2wgdmVydGljYWxseVNjcm9sbGFi
bGUgPSBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbFNpemUoVmVydGljYWxTY3JvbGxiYXIpOwogCiAg
ICAgICAgIGlmICghaG9yaXpvbnRhbGx5U2Nyb2xsYWJsZSAmJiAhdmVydGljYWxseVNjcm9sbGFi
bGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNjAsOSArMTYwLDkgQEAgYm9vbCBT
Y3JvbGxBbmltYXRvcklPUzo6aGFuZGxlVG91Y2hFdmVudAogICAgICAgICBpZiAoIWhhbmRsZWQp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG1fc3RhcnRlZFNjcm9sbCA9IHRy
dWU7Ci0gICAgICAgIHNjcm9sbGFibGVBcmVhKCktPmRpZFN0YXJ0U2Nyb2xsKCk7CisgICAgICAg
IHNjcm9sbGFibGVBcmVhKCkuZGlkU3RhcnRTY3JvbGwoKTsKICAgICB9IGVsc2UgaWYgKGhhbmRs
ZWQpCi0gICAgICAgIHNjcm9sbGFibGVBcmVhKCktPmRpZFVwZGF0ZVNjcm9sbCgpOworICAgICAg
ICBzY3JvbGxhYmxlQXJlYSgpLmRpZFVwZGF0ZVNjcm9sbCgpOwogICAgIAogICAgIHJldHVybiB0
cnVlOwogfQpAQCAtMTcxLDcgKzE3MSw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JJT1M6OmRldGVy
bWluZVNjcm9sbGEKIHsKICAgICBBU1NFUlQoIW1fc2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVl
bmNlKTsKIAotICAgIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSA9IG1fc2Nyb2xsYWJs
ZUFyZWE7CisgICAgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhID0gJm1fc2Nyb2xsYWJs
ZUFyZWE7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYS0+
aXNQaW5uZWRJbkJvdGhEaXJlY3Rpb25zKHNjcm9sbERlbHRhKSkKICAgICAgICAgICAgIGJyZWFr
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9y
TWFjLmgJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9T
Y3JvbGxBbmltYXRvck1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIGNsYXNz
IFNjcm9sbGJhcjsKIGNsYXNzIFNjcm9sbEFuaW1hdG9yTWFjIDogcHVibGljIFNjcm9sbEFuaW1h
dG9yLCBwcml2YXRlIFNjcm9sbENvbnRyb2xsZXJDbGllbnQgewogCiBwdWJsaWM6Ci0gICAgU2Ny
b2xsQW5pbWF0b3JNYWMoU2Nyb2xsYWJsZUFyZWEqKTsKKyAgICBTY3JvbGxBbmltYXRvck1hYyhT
Y3JvbGxhYmxlQXJlYSYpOwogICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yTWFjKCk7CiAKICAg
ICB2b2lkIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnRGb3JTY3JvbGxBbmltYXRpb24oY29uc3QgRmxv
YXRQb2ludCYgbmV3UG9zaXRpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1Njcm9sbEFuaW1hdG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNjksNyArMjY5LDcgQEAgLSAodm9pZClzY3JvbGxlckltcFBhaXI6KGlk
KXNjcm9sbGVySW1wUAogICAgIGlmIChbc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0
YXRlSXNMb2NrZWRdKQogICAgICAgICByZXR1cm47CiAKLSAgICBfc2Nyb2xsYWJsZUFyZWEtPnNj
cm9sbEFuaW1hdG9yKCktPmNvbnRlbnRBcmVhV2lsbFBhaW50KCk7CisgICAgX3Njcm9sbGFibGVB
cmVhLT5zY3JvbGxBbmltYXRvcigpLmNvbnRlbnRBcmVhV2lsbFBhaW50KCk7CiB9CiAKIC0gKHZv
aWQpc2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBhaXIgdXBkYXRlU2Nyb2xsZXJTdHls
ZUZvck5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZTooTlNTY3JvbGxlclN0eWxlKW5ld1JlY29t
bWVuZGVkU2Nyb2xsZXJTdHlsZQpAQCAtMjc5LDcgKzI3OSw3IEBAIC0gKHZvaWQpc2Nyb2xsZXJJ
bXBQYWlyOihpZClzY3JvbGxlckltcFAKIAogICAgIFtzY3JvbGxlckltcFBhaXIgc2V0U2Nyb2xs
ZXJTdHlsZTpuZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGVdOwogCi0gICAgc3RhdGljX2Nhc3Q8
U2Nyb2xsQW5pbWF0b3JNYWMqPihfc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEFuaW1hdG9yKCkpLT51
cGRhdGVTY3JvbGxlclN0eWxlKCk7CisgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsQW5pbWF0b3JNYWMm
Pihfc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEFuaW1hdG9yKCkpLnVwZGF0ZVNjcm9sbGVyU3R5bGUo
KTsKIH0KIAogQGVuZApAQCAtNDE3LDcgKzQxNyw3IEBAIC0gKHZvaWQpY2FuY2VsQW5pbWF0aW9u
cwogCiAtIChTY3JvbGxBbmltYXRvck1hYyopc2Nyb2xsQW5pbWF0b3IKIHsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8U2Nyb2xsQW5pbWF0b3JNYWMqPihfc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJl
YSgpLT5zY3JvbGxBbmltYXRvcigpKTsKKyAgICByZXR1cm4gJnN0YXRpY19jYXN0PFNjcm9sbEFu
aW1hdG9yTWFjJj4oX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5zY3JvbGxBbmltYXRvcigp
KTsKIH0KIAogLSAoTlNSZWN0KWNvbnZlcnRSZWN0VG9CYWNraW5nOihOU1JlY3QpYVJlY3QKQEAg
LTQ0MCw5ICs0NDAsOSBAQCAtIChDQUxheWVyICopbGF5ZXIKIAogICAgIEdyYXBoaWNzTGF5ZXIq
IGxheWVyOwogICAgIGlmIChfc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Ny
b2xsYmFyKQotICAgICAgICBsYXllciA9IF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCktPmxh
eWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICAgICAgbGF5ZXIgPSBfc2Nyb2xsYmFyLT5z
Y3JvbGxhYmxlQXJlYSgpLmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKTsKICAgICBlbHNlCi0g
ICAgICAgIGxheWVyID0gX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+bGF5ZXJGb3JIb3Jp
em9udGFsU2Nyb2xsYmFyKCk7CisgICAgICAgIGxheWVyID0gX3Njcm9sbGJhci0+c2Nyb2xsYWJs
ZUFyZWEoKS5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKTsKIAogICAgIHN0YXRpYyBDQUxh
eWVyICpkdW1teUxheWVyID0gW1tDQUxheWVyIGFsbG9jXSBpbml0XTsKICAgICByZXR1cm4gbGF5
ZXIgPyBsYXllci0+cGxhdGZvcm1MYXllcigpIDogZHVtbXlMYXllcjsKQEAgLTQ1NSw3ICs0NTUs
NyBAQCAtIChOU1BvaW50KW1vdXNlTG9jYXRpb25JblNjcm9sbGVyRm9yU2NyCiAKICAgICBBU1NF
UlRfVU5VU0VEKHNjcm9sbGVySW1wLCBzY3JvbGxlckltcCA9PSBzY3JvbGxiYXJQYWludGVyRm9y
U2Nyb2xsYmFyKF9zY3JvbGxiYXIpKTsKIAotICAgIHJldHVybiBfc2Nyb2xsYmFyLT5jb252ZXJ0
RnJvbUNvbnRhaW5pbmdWaWV3KF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCktPmxhc3RLbm93
bk1vdXNlUG9zaXRpb24oKSk7CisgICAgcmV0dXJuIF9zY3JvbGxiYXItPmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXcoX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5sYXN0S25vd25Nb3VzZVBv
c2l0aW9uKCkpOwogfQogCiAtIChOU1JlY3QpY29udmVydFJlY3RUb0xheWVyOihOU1JlY3QpcmVj
dApAQCAtNDgyLDcgKzQ4Miw3IEBAIC0gKHZvaWQpc2V0VXBBbHBoYUFuaW1hdGlvbjooUmV0YWlu
UHRyPFcKICAgICBpZiAoW3NlbGYgc2Nyb2xsQW5pbWF0b3JdLT5zY3JvbGxiYXJQYWludFRpbWVy
SXNBY3RpdmUoKSAmJiAhbXVzdEFuaW1hdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChf
c2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9u
cygpICYmICFtdXN0QW5pbWF0ZSkgeworICAgIGlmIChfc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJl
YSgpLnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgJiYgIW11c3RBbmltYXRlKSB7CiAg
ICAgICAgIFtzZWxmIHNjcm9sbEFuaW1hdG9yXS0+c3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC02MzQsMTIgKzYzNCwxMiBAQCAtICh2b2lkKWlu
dmFsaWRhdGUKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPFNjcm9sbEFuaW1h
dG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJl
YSkKK1Bhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Ny
b2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcg
U2Nyb2xsQW5pbWF0b3JNYWMoc2Nyb2xsYWJsZUFyZWEpKTsKIH0KIAotU2Nyb2xsQW5pbWF0b3JN
YWM6OlNjcm9sbEFuaW1hdG9yTWFjKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKK1Nj
cm9sbEFuaW1hdG9yTWFjOjpTY3JvbGxBbmltYXRvck1hYyhTY3JvbGxhYmxlQXJlYSYgc2Nyb2xs
YWJsZUFyZWEpCiAgICAgOiBTY3JvbGxBbmltYXRvcihzY3JvbGxhYmxlQXJlYSkKICAgICAsIG1f
aW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIoKnRoaXMsICZTY3JvbGxBbmltYXRvck1hYzo6aW5p
dGlhbFNjcm9sbGJhclBhaW50VGltZXJGaXJlZCkKICAgICAsIG1fc2VuZENvbnRlbnRBcmVhU2Ny
b2xsZWRUaW1lcigqdGhpcywgJlNjcm9sbEFuaW1hdG9yTWFjOjpzZW5kQ29udGVudEFyZWFTY3Jv
bGxlZFRpbWVyRmlyZWQpCkBAIC02NTMsNyArNjUzLDcgQEAgU2Nyb2xsQW5pbWF0b3JNYWM6OlNj
cm9sbEFuaW1hdG9yTWFjKFNjcgogICAgIG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUg
PSBhZG9wdE5TKFtbV2ViU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgYWxsb2NdIGluaXRX
aXRoU2Nyb2xsQW5pbWF0b3I6dGhpc10pOwogICAgIG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyID0g
YWRvcHROUyhbW05TQ2xhc3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxBbmltYXRpb25IZWxwZXIiKSBh
bGxvY10gaW5pdFdpdGhEZWxlZ2F0ZTptX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmdl
dCgpXSk7CiAKLSAgICBtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUgPSBhZG9w
dE5TKFtbV2ViU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdp
dGhTY3JvbGxhYmxlQXJlYTpzY3JvbGxhYmxlQXJlYV0pOworICAgIG1fc2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXJEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGFibGVBcmVhOiZzY3JvbGxhYmxlQXJl
YV0pOwogICAgIG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbTlNDbGFz
c0Zyb21TdHJpbmcoQCJOU1Njcm9sbGVySW1wUGFpciIpIGFsbG9jXSBpbml0XSk7CiAgICAgW21f
c2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgc2V0RGVsZWdhdGU6KGlkKW1fc2Nyb2xsYmFyUGFp
bnRlckNvbnRyb2xsZXJEZWxlZ2F0ZS5nZXQoKV07CiAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXIgc2V0U2Nyb2xsZXJTdHlsZTpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKV07CkBA
IC02OTksMTQgKzY5OSwxNCBAQCBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpzY3JvbGwoU2Nyb2xs
YmFyCiB7CiAgICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gdHJ1ZTsKIAotICAgIGlm
ICghc2Nyb2xsQW5pbWF0aW9uRW5hYmxlZEZvclN5c3RlbSgpIHx8ICFtX3Njcm9sbGFibGVBcmVh
LT5zY3JvbGxBbmltYXRvckVuYWJsZWQoKSkKKyAgICBpZiAoIXNjcm9sbEFuaW1hdGlvbkVuYWJs
ZWRGb3JTeXN0ZW0oKSB8fCAhbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxBbmltYXRvckVuYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwob3JpZW50YXRpb24sIGdy
YW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKIAogICAgIGlmIChncmFudWxhcml0eSA9PSBT
Y3JvbGxCeVBpeGVsKQogICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChvcmll
bnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwogCiAgICAgZmxvYXQgY3Vy
cmVudFBvcyA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2N1cnJlbnRQ
b3NYIDogbV9jdXJyZW50UG9zWTsKLSAgICBmbG9hdCBuZXdQb3MgPSBzdGQ6Om1heDxmbG9hdD4o
c3RkOjptaW48ZmxvYXQ+KGN1cnJlbnRQb3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0aWNf
Y2FzdDxmbG9hdD4obV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsU2l6ZShvcmllbnRhdGlvbikpKSwg
MCk7CisgICAgZmxvYXQgbmV3UG9zID0gc3RkOjptYXg8ZmxvYXQ+KHN0ZDo6bWluPGZsb2F0Pihj
dXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Ny
b2xsYWJsZUFyZWEuc2Nyb2xsU2l6ZShvcmllbnRhdGlvbikpKSwgMCk7CiAgICAgaWYgKGN1cnJl
bnRQb3MgPT0gbmV3UG9zKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTcyOSwyNSArNzI5
LDI1IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNjcm9sbFRvT2Zmc2V0V2kKIAogRmxvYXRQ
b2ludCBTY3JvbGxBbmltYXRvck1hYzo6YWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShj
b25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikgY29uc3QKIHsKLSAgICBpZiAoIW1fc2Nyb2xsYWJs
ZUFyZWEtPmNvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKCkpCisgICAgaWYgKCFtX3Nj
cm9sbGFibGVBcmVhLmNvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKCkpCiAgICAgICAg
IHJldHVybiBwb3NpdGlvbjsKIAotICAgIGZsb2F0IG5ld1ggPSBzdGQ6Om1heDxmbG9hdD4oc3Rk
OjptaW48ZmxvYXQ+KHBvc2l0aW9uLngoKSwgbV9zY3JvbGxhYmxlQXJlYS0+dG90YWxDb250ZW50
c1NpemUoKS53aWR0aCgpIC0gbV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZVdpZHRoKCkpLCAwKTsK
LSAgICBmbG9hdCBuZXdZID0gc3RkOjptYXg8ZmxvYXQ+KHN0ZDo6bWluPGZsb2F0Pihwb3NpdGlv
bi55KCksIG1fc2Nyb2xsYWJsZUFyZWEtPnRvdGFsQ29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSBt
X3Njcm9sbGFibGVBcmVhLT52aXNpYmxlSGVpZ2h0KCkpLCAwKTsKKyAgICBmbG9hdCBuZXdYID0g
c3RkOjptYXg8ZmxvYXQ+KHN0ZDo6bWluPGZsb2F0Pihwb3NpdGlvbi54KCksIG1fc2Nyb2xsYWJs
ZUFyZWEudG90YWxDb250ZW50c1NpemUoKS53aWR0aCgpIC0gbV9zY3JvbGxhYmxlQXJlYS52aXNp
YmxlV2lkdGgoKSksIDApOworICAgIGZsb2F0IG5ld1kgPSBzdGQ6Om1heDxmbG9hdD4oc3RkOjpt
aW48ZmxvYXQ+KHBvc2l0aW9uLnkoKSwgbV9zY3JvbGxhYmxlQXJlYS50b3RhbENvbnRlbnRzU2l6
ZSgpLmhlaWdodCgpIC0gbV9zY3JvbGxhYmxlQXJlYS52aXNpYmxlSGVpZ2h0KCkpLCAwKTsKIAog
ICAgIHJldHVybiBGbG9hdFBvaW50KG5ld1gsIG5ld1kpOwogfQogCiB2b2lkIFNjcm9sbEFuaW1h
dG9yTWFjOjphZGp1c3RTY3JvbGxQb3NpdGlvblRvQm91bmRzSWZOZWNlc3NhcnkoKQogewotICAg
IGJvb2wgY3VycmVudGx5Q29uc3RyYWluc1RvQ29udGVudEVkZ2UgPSBtX3Njcm9sbGFibGVBcmVh
LT5jb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSgpOwotICAgIG1fc2Nyb2xsYWJsZUFy
ZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKHRydWUpOworICAgIGJvb2wg
Y3VycmVudGx5Q29uc3RyYWluc1RvQ29udGVudEVkZ2UgPSBtX3Njcm9sbGFibGVBcmVhLmNvbnN0
cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKCk7CisgICAgbV9zY3JvbGxhYmxlQXJlYS5zZXRD
b25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSh0cnVlKTsKIAogICAgIEludFBvaW50IGN1
cnJlbnRTY3JvbGxQb3NpdGlvbiA9IGFic29sdXRlU2Nyb2xsUG9zaXRpb24oKTsKICAgICBGbG9h
dFBvaW50IG5lYXJlc3RQb2ludFdpdGhpbkJvdW5kcyA9IGFkanVzdFNjcm9sbFBvc2l0aW9uSWZO
ZWNlc3NhcnkoYWJzb2x1dGVTY3JvbGxQb3NpdGlvbigpKTsKICAgICBpbW1lZGlhdGVTY3JvbGxC
eShuZWFyZXN0UG9pbnRXaXRoaW5Cb3VuZHMgLSBjdXJyZW50U2Nyb2xsUG9zaXRpb24pOwogCi0g
ICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2Uo
Y3VycmVudGx5Q29uc3RyYWluc1RvQ29udGVudEVkZ2UpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEu
c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoY3VycmVudGx5Q29uc3RyYWluc1Rv
Q29udGVudEVkZ2UpOwogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjppbW1lZGlhdGVTY3Jv
bGxUbyhjb25zdCBGbG9hdFBvaW50JiBuZXdQb3NpdGlvbikKQEAgLTc1NSw3ICs3NTUsNyBAQCB2
b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjppbW1lZGlhdGVTY3JvbGxUCiAgICAgRmxvYXRQb2ludCBh
ZGp1c3RlZFBvc2l0aW9uID0gYWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShuZXdQb3Np
dGlvbik7CiAgCiAgICAgYm9vbCBwb3NpdGlvbkNoYW5nZWQgPSBhZGp1c3RlZFBvc2l0aW9uLngo
KSAhPSBtX2N1cnJlbnRQb3NYIHx8IGFkanVzdGVkUG9zaXRpb24ueSgpICE9IG1fY3VycmVudFBv
c1k7Ci0gICAgaWYgKCFwb3NpdGlvbkNoYW5nZWQgJiYgIXNjcm9sbGFibGVBcmVhKCktPnNjcm9s
bE9yaWdpbkNoYW5nZWQoKSkKKyAgICBpZiAoIXBvc2l0aW9uQ2hhbmdlZCAmJiAhc2Nyb2xsYWJs
ZUFyZWEoKS5zY3JvbGxPcmlnaW5DaGFuZ2VkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEZs
b2F0U2l6ZSBkZWx0YSA9IEZsb2F0U2l6ZShhZGp1c3RlZFBvc2l0aW9uLngoKSAtIG1fY3VycmVu
dFBvc1gsIGFkanVzdGVkUG9zaXRpb24ueSgpIC0gbV9jdXJyZW50UG9zWSk7CkBAIC05NDIsMTEg
Kzk0MiwxMSBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpkaWRBZGRWZXJ0aWNhbFNjCiAgICAg
bV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXZWJTY3JvbGxi
YXJQYWludGVyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyOnNjcm9sbGJhcl0pOwog
CiAgICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6KGlkKW1fdmVydGljYWxTY3JvbGxiYXJQYWludGVy
RGVsZWdhdGUuZ2V0KCldOwotICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IHNjcm9sbGJh
ci0+c2Nyb2xsYWJsZUFyZWEoKS0+bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgIGlm
IChHcmFwaGljc0xheWVyKiBsYXllciA9IHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5sYXll
ckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpCiAgICAgICAgIFtwYWludGVyIHNldExheWVyOmxheWVy
LT5wbGF0Zm9ybUxheWVyKCldOwogCiAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIg
c2V0VmVydGljYWxTY3JvbGxlckltcDpwYWludGVyXTsKLSAgICBpZiAoc2Nyb2xsYWJsZUFyZWEo
KS0+aW5MaXZlUmVzaXplKCkpCisgICAgaWYgKHNjcm9sbGFibGVBcmVhKCkuaW5MaXZlUmVzaXpl
KCkpCiAgICAgICAgIFtwYWludGVyIHNldEtub2JBbHBoYToxXTsKIH0KIApAQCAtOTc0LDExICs5
NzQsMTEgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6ZGlkQWRkSG9yaXpvbnRhbAogICAgIG1f
aG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXZWJTY3JvbGxi
YXJQYWludGVyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyOnNjcm9sbGJhcl0pOwog
CiAgICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6KGlkKW1faG9yaXpvbnRhbFNjcm9sbGJhclBhaW50
ZXJEZWxlZ2F0ZS5nZXQoKV07Ci0gICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gc2Nyb2xs
YmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkKKyAg
ICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCku
bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCiAgICAgICAgIFtwYWludGVyIHNldExheWVy
OmxheWVyLT5wbGF0Zm9ybUxheWVyKCldOwogCiAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXIgc2V0SG9yaXpvbnRhbFNjcm9sbGVySW1wOnBhaW50ZXJdOwotICAgIGlmIChzY3JvbGxh
YmxlQXJlYSgpLT5pbkxpdmVSZXNpemUoKSkKKyAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS5pbkxp
dmVSZXNpemUoKSkKICAgICAgICAgW3BhaW50ZXIgc2V0S25vYkFscGhhOjFdOwogfQogCkBAIC05
OTgsOCArOTk4LDggQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6d2lsbFJlbW92ZUhvcml6bwog
CiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdl
KCkKIHsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IG1fc2Nyb2xsYWJsZUFyZWEtPmxheWVy
Rm9yVmVydGljYWxTY3JvbGxiYXIoKTsKLSAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IG1fc2Ny
b2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgR3JhcGhpY3NMYXllciogbGF5
ZXIgPSBtX3Njcm9sbGFibGVBcmVhLmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICBT
Y3JvbGxiYXIqIHNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEudmVydGljYWxTY3JvbGxiYXIo
KTsKICAgICBpZiAoIXNjcm9sbGJhcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDEyLDggKzEw
MTIsOCBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjp2ZXJ0aWNhbFNjcm9sbGJhCiAKIHZvaWQg
U2Nyb2xsQW5pbWF0b3JNYWM6Omhvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpCiB7
Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBtX3Njcm9sbGFibGVBcmVhLT5sYXllckZvckhv
cml6b250YWxTY3JvbGxiYXIoKTsKLSAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IG1fc2Nyb2xs
YWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICBHcmFwaGljc0xheWVyKiBsYXll
ciA9IG1fc2Nyb2xsYWJsZUFyZWEubGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAg
U2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLmhvcml6b250YWxTY3JvbGxi
YXIoKTsKICAgICBpZiAoIXNjcm9sbGJhcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDQ4LDcg
KzEwNDgsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpub3RpZnlDb250ZW50QXJlCiAgICAg
aWYgKFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNM
b2NrZWRdKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYS0+aXNI
YW5kbGluZ1doZWVsRXZlbnQoKSkKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYS5pc0hhbmRsaW5n
V2hlZWxFdmVudCgpKQogICAgICAgICBzZW5kQ29udGVudEFyZWFTY3JvbGxlZChkZWx0YSk7CiAg
ICAgZWxzZQogICAgICAgICBzZW5kQ29udGVudEFyZWFTY3JvbGxlZFNvb24oZGVsdGEpOwpAQCAt
MTEwOSwyMSArMTEwOSwyMSBAQCBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpoYW5kbGVXaGVlbEV2
ZW50CiBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpwaW5uZWRJbkRpcmVjdGlvbihmbG9hdCBkZWx0
YVgsIGZsb2F0IGRlbHRhWSkKIHsKICAgICBGbG9hdFNpemUgbGltaXREZWx0YTsKLSAgICBpZiAo
ZmFic2YoZGVsdGFZKSA+PSBmYWJzZihkZWx0YVgpKSB7CisgICAgaWYgKHN0ZDo6ZmFic2YoZGVs
dGFZKSA+PSBmYWJzZihkZWx0YVgpKSB7CiAgICAgICAgIGlmIChkZWx0YVkgPCAwKSB7CiAgICAg
ICAgICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCB1cC4gIE1ha2Ugc3VyZSB3ZSBhcmUg
bm90IHBpbm5lZCB0byB0aGUgdG9wCi0gICAgICAgICAgICBsaW1pdERlbHRhLnNldEhlaWdodCht
X3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVudFJlY3QoKS55KCkgKyBtX3Njcm9sbGFibGVB
cmVhLT5zY3JvbGxPcmlnaW4oKS55KCkpOworICAgICAgICAgICAgbGltaXREZWx0YS5zZXRIZWln
aHQobV9zY3JvbGxhYmxlQXJlYS52aXNpYmxlQ29udGVudFJlY3QoKS55KCkgKyBtX3Njcm9sbGFi
bGVBcmVhLnNjcm9sbE9yaWdpbigpLnkoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCBkb3duLiAgTWFrZSBzdXJlIHdlIGFyZSBub3Qg
cGlubmVkIHRvIHRoZSBib3R0b20KLSAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0SGVpZ2h0KG1f
c2Nyb2xsYWJsZUFyZWEtPnRvdGFsQ29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSAobV9zY3JvbGxh
YmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubWF4WSgpICsgbV9zY3JvbGxhYmxlQXJlYS0+
c2Nyb2xsT3JpZ2luKCkueSgpKSk7CisgICAgICAgICAgICBsaW1pdERlbHRhLnNldEhlaWdodCht
X3Njcm9sbGFibGVBcmVhLnRvdGFsQ29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSAobV9zY3JvbGxh
YmxlQXJlYS52aXNpYmxlQ29udGVudFJlY3QoKS5tYXhZKCkgKyBtX3Njcm9sbGFibGVBcmVhLnNj
cm9sbE9yaWdpbigpLnkoKSkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChkZWx0YVggIT0g
MCkgewogICAgICAgICBpZiAoZGVsdGFYIDwgMCkgewogICAgICAgICAgICAgLy8gV2UgYXJlIHRy
eWluZyB0byBzY3JvbGwgbGVmdC4gIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUg
bGVmdAotICAgICAgICAgICAgbGltaXREZWx0YS5zZXRXaWR0aChtX3Njcm9sbGFibGVBcmVhLT52
aXNpYmxlQ29udGVudFJlY3QoKS54KCkgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmlnaW4o
KS54KCkpOworICAgICAgICAgICAgbGltaXREZWx0YS5zZXRXaWR0aChtX3Njcm9sbGFibGVBcmVh
LnZpc2libGVDb250ZW50UmVjdCgpLngoKSArIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsT3JpZ2lu
KCkueCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcg
dG8gc2Nyb2xsIHJpZ2h0LiAgTWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSByaWdo
dAotICAgICAgICAgICAgbGltaXREZWx0YS5zZXRXaWR0aChtX3Njcm9sbGFibGVBcmVhLT50b3Rh
bENvbnRlbnRzU2l6ZSgpLndpZHRoKCkgLSAobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRl
bnRSZWN0KCkubWF4WCgpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkueCgpKSk7
CisgICAgICAgICAgICBsaW1pdERlbHRhLnNldFdpZHRoKG1fc2Nyb2xsYWJsZUFyZWEudG90YWxD
b250ZW50c1NpemUoKS53aWR0aCgpIC0gKG1fc2Nyb2xsYWJsZUFyZWEudmlzaWJsZUNvbnRlbnRS
ZWN0KCkubWF4WCgpICsgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxPcmlnaW4oKS54KCkpKTsKICAg
ICAgICAgfQogICAgIH0KICAgICAKQEAgLTExNDMsOSArMTE0Myw5IEBAIGJvb2wgU2Nyb2xsQW5p
bWF0b3JNYWM6OmlzQWxyZWFkeVBpbm5lZEkKIHsKICAgICBzd2l0Y2ggKGF4aXMpIHsKICAgICBj
YXNlIFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWw6Ci0gICAgICAgIHJldHVybiAod2hlZWxFdmVu
dC5kZWx0YVkoKSA+IDAgJiYgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsZWRUb1RvcCgpKSB8fCAo
d2hlZWxFdmVudC5kZWx0YVkoKSA8IDAgJiYgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsZWRUb0Jv
dHRvbSgpKTsKKyAgICAgICAgcmV0dXJuICh3aGVlbEV2ZW50LmRlbHRhWSgpID4gMCAmJiBtX3Nj
cm9sbGFibGVBcmVhLnNjcm9sbGVkVG9Ub3AoKSkgfHwgKHdoZWVsRXZlbnQuZGVsdGFZKCkgPCAw
ICYmIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsZWRUb0JvdHRvbSgpKTsKICAgICBjYXNlIFNjcm9s
bEV2ZW50QXhpczo6SG9yaXpvbnRhbDoKLSAgICAgICAgcmV0dXJuICh3aGVlbEV2ZW50LmRlbHRh
WCgpID4gMCAmJiBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxlZFRvTGVmdCgpKSB8fCAod2hlZWxF
dmVudC5kZWx0YVgoKSA8IDAgJiYgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsZWRUb1JpZ2h0KCkp
OworICAgICAgICByZXR1cm4gKHdoZWVsRXZlbnQuZGVsdGFYKCkgPiAwICYmIG1fc2Nyb2xsYWJs
ZUFyZWEuc2Nyb2xsZWRUb0xlZnQoKSkgfHwgKHdoZWVsRXZlbnQuZGVsdGFYKCkgPCAwICYmIG1f
c2Nyb2xsYWJsZUFyZWEuc2Nyb2xsZWRUb1JpZ2h0KCkpOwogICAgIH0KIAogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtMTE2OSwxNSArMTE2OSwxNSBAQCBzdGF0aWMgYm9vbCBnZXN0dXJl
U2hvdWxkQmVnaW5TbmFwKGNvbnN0CiAKIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OmFsbG93c1Zl
cnRpY2FsU3RyZXRjaGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCiB7
Ci0gICAgc3dpdGNoIChtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHko
KSkgeworICAgIHN3aXRjaCAobV9zY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNp
dHkoKSkgewogICAgIGNhc2UgU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYzogewotICAgICAgICBT
Y3JvbGxiYXIqIGhTY3JvbGxlciA9IG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxi
YXIoKTsKLSAgICAgICAgU2Nyb2xsYmFyKiB2U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT52
ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgICAgICBTY3JvbGxiYXIqIGhTY3JvbGxlciA9IG1fc2Ny
b2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgICAgICBTY3JvbGxiYXIqIHZT
Y3JvbGxlciA9IG1fc2Nyb2xsYWJsZUFyZWEudmVydGljYWxTY3JvbGxiYXIoKTsKICAgICAgICAg
Ym9vbCBzY3JvbGxiYXJzQWxsb3dTdHJldGNoaW5nID0gKCh2U2Nyb2xsZXIgJiYgdlNjcm9sbGVy
LT5lbmFibGVkKCkpIHx8ICghaFNjcm9sbGVyIHx8ICFoU2Nyb2xsZXItPmVuYWJsZWQoKSkpOwot
ICAgICAgICBib29sIGV2ZW50UHJldmVudHNTdHJldGNoaW5nID0gbV9zY3JvbGxhYmxlQXJlYS0+
aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpICYmIG5ld0dlc3R1cmVJc1N0
YXJ0aW5nKHdoZWVsRXZlbnQpICYmIGlzQWxyZWFkeVBpbm5lZEluRGlyZWN0aW9uT2ZHZXN0dXJl
KHdoZWVsRXZlbnQsIFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpOworICAgICAgICBib29sIGV2
ZW50UHJldmVudHNTdHJldGNoaW5nID0gbV9zY3JvbGxhYmxlQXJlYS5oYXNTY3JvbGxhYmxlT3JS
dWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkgJiYgbmV3R2VzdHVyZUlzU3RhcnRpbmcod2hlZWxFdmVu
dCkgJiYgaXNBbHJlYWR5UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1cmUod2hlZWxFdmVudCwgU2Ny
b2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCk7CiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAg
ICAgICAgaWYgKCFldmVudFByZXZlbnRzU3RyZXRjaGluZykKLSAgICAgICAgICAgIGV2ZW50UHJl
dmVudHNTdHJldGNoaW5nID0gZ2VzdHVyZVNob3VsZEJlZ2luU25hcCh3aGVlbEV2ZW50LCBtX3Nj
cm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkpOworICAgICAgICAgICAgZXZlbnRQ
cmV2ZW50c1N0cmV0Y2hpbmcgPSBnZXN0dXJlU2hvdWxkQmVnaW5TbmFwKHdoZWVsRXZlbnQsIG1f
c2Nyb2xsYWJsZUFyZWEudmVydGljYWxTbmFwT2Zmc2V0cygpKTsKICNlbmRpZgogICAgICAgICBy
ZXR1cm4gc2Nyb2xsYmFyc0FsbG93U3RyZXRjaGluZyAmJiAhZXZlbnRQcmV2ZW50c1N0cmV0Y2hp
bmc7CiAgICAgfQpAQCAtMTE5MywxNSArMTE5MywxNSBAQCBib29sIFNjcm9sbEFuaW1hdG9yTWFj
OjphbGxvd3NWZXJ0aWNhbFN0CiAKIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OmFsbG93c0hvcml6
b250YWxTdHJldGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKIHsK
LSAgICBzd2l0Y2ggKG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5
KCkpIHsKKyAgICBzd2l0Y2ggKG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNjcm9sbEVsYXN0
aWNpdHkoKSkgewogICAgIGNhc2UgU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYzogewotICAgICAg
ICBTY3JvbGxiYXIqIGhTY3JvbGxlciA9IG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3Jv
bGxiYXIoKTsKLSAgICAgICAgU2Nyb2xsYmFyKiB2U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVh
LT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgICAgICBTY3JvbGxiYXIqIGhTY3JvbGxlciA9IG1f
c2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgICAgICBTY3JvbGxiYXIq
IHZTY3JvbGxlciA9IG1fc2Nyb2xsYWJsZUFyZWEudmVydGljYWxTY3JvbGxiYXIoKTsKICAgICAg
ICAgYm9vbCBzY3JvbGxiYXJzQWxsb3dTdHJldGNoaW5nID0gKChoU2Nyb2xsZXIgJiYgaFNjcm9s
bGVyLT5lbmFibGVkKCkpIHx8ICghdlNjcm9sbGVyIHx8ICF2U2Nyb2xsZXItPmVuYWJsZWQoKSkp
OwotICAgICAgICBib29sIGV2ZW50UHJldmVudHNTdHJldGNoaW5nID0gbV9zY3JvbGxhYmxlQXJl
YS0+aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpICYmIG5ld0dlc3R1cmVJ
c1N0YXJ0aW5nKHdoZWVsRXZlbnQpICYmIGlzQWxyZWFkeVBpbm5lZEluRGlyZWN0aW9uT2ZHZXN0
dXJlKHdoZWVsRXZlbnQsIFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCk7CisgICAgICAgIGJv
b2wgZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmcgPSBtX3Njcm9sbGFibGVBcmVhLmhhc1Njcm9sbGFi
bGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSAmJiBuZXdHZXN0dXJlSXNTdGFydGluZyh3aGVl
bEV2ZW50KSAmJiBpc0FscmVhZHlQaW5uZWRJbkRpcmVjdGlvbk9mR2VzdHVyZSh3aGVlbEV2ZW50
LCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpOwogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCiAgICAgICAgIGlmICghZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmcpCi0gICAgICAgICAgICBl
dmVudFByZXZlbnRzU3RyZXRjaGluZyA9IGdlc3R1cmVTaG91bGRCZWdpblNuYXAod2hlZWxFdmVu
dCwgbV9zY3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkpOworICAgICAgICAg
ICAgZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmcgPSBnZXN0dXJlU2hvdWxkQmVnaW5TbmFwKHdoZWVs
RXZlbnQsIG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkpOwogI2VuZGlm
CiAgICAgICAgIHJldHVybiBzY3JvbGxiYXJzQWxsb3dTdHJldGNoaW5nICYmICFldmVudFByZXZl
bnRzU3RyZXRjaGluZzsKICAgICB9CkBAIC0xMjE3LDcgKzEyMTcsNyBAQCBib29sIFNjcm9sbEFu
aW1hdG9yTWFjOjphbGxvd3NIb3Jpem9udGFsCiAKIEludFNpemUgU2Nyb2xsQW5pbWF0b3JNYWM6
OnN0cmV0Y2hBbW91bnQoKQogewotICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5vdmVyaGFu
Z0Ftb3VudCgpOworICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLm92ZXJoYW5nQW1vdW50KCk7
CiB9CiAKIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OnBpbm5lZEluRGlyZWN0aW9uKGNvbnN0IEZs
b2F0U2l6ZSYgZGlyZWN0aW9uKQpAQCAtMTIyNyw3ICsxMjI3LDcgQEAgYm9vbCBTY3JvbGxBbmlt
YXRvck1hYzo6cGlubmVkSW5EaXJlY3RpbwogCiBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpjYW5T
Y3JvbGxIb3Jpem9udGFsbHkoKQogewotICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gbV9zY3Jv
bGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIFNjcm9sbGJhciogc2Nyb2xs
YmFyID0gbV9zY3JvbGxhYmxlQXJlYS5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CiAgICAgaWYgKCFz
Y3JvbGxiYXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gc2Nyb2xsYmFyLT5l
bmFibGVkKCk7CkBAIC0xMjM1LDcgKzEyMzUsNyBAQCBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpj
YW5TY3JvbGxIb3Jpem9uCiAKIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OmNhblNjcm9sbFZlcnRp
Y2FsbHkoKQogewotICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxlQXJlYS0+
dmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IG1fc2Nyb2xs
YWJsZUFyZWEudmVydGljYWxTY3JvbGxiYXIoKTsKICAgICBpZiAoIXNjcm9sbGJhcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBzY3JvbGxiYXItPmVuYWJsZWQoKTsKQEAgLTEy
NDgsMTQgKzEyNDgsMTQgQEAgYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6c2hvdWxkUnViYmVyQmFu
ZAogCiBJbnRQb2ludCBTY3JvbGxBbmltYXRvck1hYzo6YWJzb2x1dGVTY3JvbGxQb3NpdGlvbigp
CiB7Ci0gICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLmxv
Y2F0aW9uKCkgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmlnaW4oKTsKKyAgICByZXR1cm4g
bV9zY3JvbGxhYmxlQXJlYS52aXNpYmxlQ29udGVudFJlY3QoKS5sb2NhdGlvbigpICsgbV9zY3Jv
bGxhYmxlQXJlYS5zY3JvbGxPcmlnaW4oKTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6
aW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhjb25zdCBGbG9h
dFNpemUmIGRlbHRhKQogewotICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3Jv
bGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKKyAgICBtX3Njcm9sbGFibGVBcmVhLnNldENvbnN0
cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKICAgICBpbW1lZGlhdGVTY3JvbGxC
eShkZWx0YSk7Ci0gICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1Rv
Q29udGVudEVkZ2UodHJ1ZSk7CisgICAgbV9zY3JvbGxhYmxlQXJlYS5zZXRDb25zdHJhaW5zU2Ny
b2xsaW5nVG9Db250ZW50RWRnZSh0cnVlKTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6
aW1tZWRpYXRlU2Nyb2xsQnkoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkKQEAgLTEzMDQsNyArMTMw
NCw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnVwZGF0ZVNjcm9sbGVyU3QKIAogICAgIE5T
U2Nyb2xsZXJTdHlsZSBuZXdTdHlsZSA9IFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIHNj
cm9sbGVyU3R5bGVdOwogCi0gICAgaWYgKFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBz
Y3JvbGxhYmxlQXJlYSgpLT52ZXJ0aWNhbFNjcm9sbGJhcigpKSB7CisgICAgaWYgKFNjcm9sbGJh
ciogdmVydGljYWxTY3JvbGxiYXIgPSBzY3JvbGxhYmxlQXJlYSgpLnZlcnRpY2FsU2Nyb2xsYmFy
KCkpIHsKICAgICAgICAgdmVydGljYWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKIAogICAgICAg
ICBTY3JvbGxiYXJQYWludGVyIG9sZFZlcnRpY2FsUGFpbnRlciA9IFttX3Njcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyIHZlcnRpY2FsU2Nyb2xsZXJJbXBdOwpAQCAtMTMyMiw3ICsxMzIyLDcgQEAg
dm9pZCBTY3JvbGxBbmltYXRvck1hYzo6dXBkYXRlU2Nyb2xsZXJTdAogICAgICAgICB2ZXJ0aWNh
bFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KEludFJlY3QoMCwgMCwgdGhpY2tuZXNzLCB0aGlja25l
c3MpKTsKICAgICB9CiAKLSAgICBpZiAoU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0g
c2Nyb2xsYWJsZUFyZWEoKS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7CisgICAgaWYgKFNjcm9s
bGJhciogaG9yaXpvbnRhbFNjcm9sbGJhciA9IHNjcm9sbGFibGVBcmVhKCkuaG9yaXpvbnRhbFNj
cm9sbGJhcigpKSB7CiAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsK
IAogICAgICAgICBTY3JvbGxiYXJQYWludGVyIG9sZEhvcml6b250YWxQYWludGVyID0gW21fc2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgaG9yaXpvbnRhbFNjcm9sbGVySW1wXTsKQEAgLTEzNDIs
NyArMTM0Miw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnVwZGF0ZVNjcm9sbGVyU3QKIAog
ICAgIC8vIElmIG1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlIGlzIHRydWUsIHRoZW4gdGhlIHBh
Z2UgaXMgcmVzdG9yaW5nIGZyb20gdGhlIHBhZ2UgY2FjaGUsIGFuZCAKICAgICAvLyBhIHJlbGF5
b3V0IHdpbGwgaGFwcGVuIG9uIGl0cyBvd24uIE90aGVyd2lzZSwgd2UgbXVzdCBpbml0aWF0ZSBh
IHJlLWxheW91dCBvdXJzZWx2ZXMuCi0gICAgc2Nyb2xsYWJsZUFyZWEoKS0+c2Nyb2xsYmFyU3R5
bGVDaGFuZ2VkKG5ld1N0eWxlLCAhbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUpOworICAgIHNj
cm9sbGFibGVBcmVhKCkuc2Nyb2xsYmFyU3R5bGVDaGFuZ2VkKG5ld1N0eWxlLCAhbV9uZWVkc1Nj
cm9sbGVyU3R5bGVVcGRhdGUpOwogCiAgICAgbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUgPSBm
YWxzZTsKIH0KQEAgLTEzOTUsMTMgKzEzOTUsMTMgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6
c2VuZENvbnRlbnRBcmVhUwogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c2V0VmlzaWJsZVNjcm9s
bGVyVGh1bWJSZWN0KGNvbnN0IEludFJlY3QmIHNjcm9sbGVyVGh1bWIpCiB7CiAgICAgSW50UmVj
dCByZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSBzY3JvbGxlclRodW1iOwotICAgIGlmIChTY3JvbGxi
YXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxi
YXIoKSkKKyAgICBpZiAoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IG1fc2Nyb2xsYWJs
ZUFyZWEudmVydGljYWxTY3JvbGxiYXIoKSkKICAgICAgICAgcmVjdEluVmlld0Nvb3JkaW5hdGVz
ID0gdmVydGljYWxTY3JvbGxiYXItPmNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KHNjcm9sbGVyVGh1
bWIpOwogCiAgICAgaWYgKHJlY3RJblZpZXdDb29yZGluYXRlcyA9PSBtX3Zpc2libGVTY3JvbGxl
clRodW1iUmVjdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0
VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KHJlY3RJblZpZXdDb29yZGluYXRlcyk7CisgICAgbV9z
Y3JvbGxhYmxlQXJlYS5zZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QocmVjdEluVmlld0Nvb3Jk
aW5hdGVzKTsKICAgICBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVjdCA9IHJlY3RJblZpZXdDb29y
ZGluYXRlczsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNi0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAxOTk4IE5ldHNjYXBlIENvbW11bmljYXRpb25z
IENvcnBvcmF0aW9uLgogICoKQEAgLTMzNiw3ICszMzYsNyBAQCBSZW5kZXJMYXllcjo6UmVuZGVy
TGF5ZXIoUmVuZGVyTGF5ZXJNb2RlCiAgICAgICAgIC8vIFdlIHNhdmUgYW5kIHJlc3RvcmUgb25s
eSB0aGUgc2Nyb2xsT2Zmc2V0IGFzIHRoZSBvdGhlciBzY3JvbGwgdmFsdWVzIGFyZSByZWNhbGN1
bGF0ZWQuCiAgICAgICAgIG1fc2Nyb2xsT2Zmc2V0ID0gZWxlbWVudC0+c2F2ZWRMYXllclNjcm9s
bE9mZnNldCgpOwogICAgICAgICBpZiAoIW1fc2Nyb2xsT2Zmc2V0LmlzWmVybygpKQotICAgICAg
ICAgICAgc2Nyb2xsQW5pbWF0b3IoKS0+c2V0Q3VycmVudFBvc2l0aW9uKEZsb2F0UG9pbnQobV9z
Y3JvbGxPZmZzZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpKTsKKyAgICAgICAg
ICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0Q3VycmVudFBvc2l0aW9uKEZsb2F0UG9pbnQobV9zY3Jv
bGxPZmZzZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpKTsKICAgICAgICAgZWxl
bWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbE9mZnNldChJbnRTaXplKCkpOwogICAgIH0KIH0KQEAg
LTMwNjUsOSArMzA2NSw5IEBAIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJMYXllcjo6Y3Jl
YXQKICAgICBSZW5kZXJFbGVtZW50KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRlcmVyRm9yU2Nyb2xs
YmFyKHJlbmRlcmVyKCkpOwogICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUgPSBhY3R1
YWxSZW5kZXJlci0+aXNCb3goKSAmJiBhY3R1YWxSZW5kZXJlci0+c3R5bGUoKS5oYXNQc2V1ZG9T
dHlsZShTQ1JPTExCQVIpOwogICAgIGlmIChoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSkKLSAgICAg
ICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIodGhpcywg
b3JpZW50YXRpb24sIGFjdHVhbFJlbmRlcmVyLT5lbGVtZW50KCkpOworICAgICAgICB3aWRnZXQg
PSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRp
b24sIGFjdHVhbFJlbmRlcmVyLT5lbGVtZW50KCkpOwogICAgIGVsc2UgewotICAgICAgICB3aWRn
ZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcih0aGlzLCBvcmllbnRhdGlvbiwg
UmVndWxhclNjcm9sbGJhcik7CisgICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0
aXZlU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcik7CiAgICAg
ICAgIGRpZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9uKTsKICAgICB9CiAg
ICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuYWRkQ2hpbGQod2lkZ2V0LmdldCgpKTsK
QEAgLTMwODQsNyArMzA4NCw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmRlc3Ryb3lTY3JvbGxiYXIo
U2Nyb2wKICAgICAgICAgd2lsbFJlbW92ZVNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCksIG9yaWVu
dGF0aW9uKTsKIAogICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIHNjcm9s
bGJhci0+ZGlzY29ubmVjdEZyb21TY3JvbGxhYmxlQXJlYSgpOwogICAgIHNjcm9sbGJhciA9IG51
bGxwdHI7CiB9CiAKQEAgLTM0ODIsOCArMzQ4MSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0
ZVNjcm9sbEluZm9BZnRlckwKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM1OTY0CiAgICAgdXBkYXRlU25hcE9mZnNldHMoKTsKICNpZiBQTEFURk9STShN
QUMpCi0gICAgaWYgKGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgc2Nyb2xsQW5p
bWF0b3IoKS0+dXBkYXRlU2Nyb2xsQW5pbWF0b3JzQW5kVGltZXJzKCk7CisgICAgaWYgKFNjcm9s
bEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAg
ICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT51cGRhdGVTY3JvbGxBbmltYXRvcnNBbmRUaW1l
cnMoKTsKICNlbmRpZgogI2VuZGlmCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDExLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywg
MjAwOCwgMjAxMSwgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
ICAgICAgICAgICAgICAgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtODAy
LDkgKzgwMiw5IEBAIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJMaXN0Qm94OjpjcmUKICAg
ICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7CiAgICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJT
dHlsZSA9IHN0eWxlKCkuaGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKTsKICAgICBpZiAoaGFzQ3Vz
dG9tU2Nyb2xsYmFyU3R5bGUpCi0gICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3Jl
YXRlQ3VzdG9tU2Nyb2xsYmFyKHRoaXMsIFZlcnRpY2FsU2Nyb2xsYmFyLCAmc2VsZWN0RWxlbWVu
dCgpKTsKKyAgICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3Jv
bGxiYXIoKnRoaXMsIFZlcnRpY2FsU2Nyb2xsYmFyLCAmc2VsZWN0RWxlbWVudCgpKTsKICAgICBl
bHNlIHsKLSAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIo
dGhpcywgVmVydGljYWxTY3JvbGxiYXIsIHRoZW1lKCkuc2Nyb2xsYmFyQ29udHJvbFNpemVGb3JQ
YXJ0KExpc3Rib3hQYXJ0KSk7CisgICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0
aXZlU2Nyb2xsYmFyKCp0aGlzLCBWZXJ0aWNhbFNjcm9sbGJhciwgdGhlbWUoKS5zY3JvbGxiYXJD
b250cm9sU2l6ZUZvclBhcnQoTGlzdGJveFBhcnQpKTsKICAgICAgICAgZGlkQWRkU2Nyb2xsYmFy
KHdpZGdldC5nZXQoKSwgVmVydGljYWxTY3JvbGxiYXIpOwogICAgIH0KICAgICB2aWV3KCkuZnJh
bWVWaWV3KCkuYWRkQ2hpbGQod2lkZ2V0LmdldCgpKTsKQEAgLTgxOSw4ICs4MTksNyBAQCB2b2lk
IFJlbmRlckxpc3RCb3g6OmRlc3Ryb3lTY3JvbGxiYXIoKQogICAgIGlmICghbV92QmFyLT5pc0N1
c3RvbVNjcm9sbGJhcigpKQogICAgICAgICBTY3JvbGxhYmxlQXJlYTo6d2lsbFJlbW92ZVNjcm9s
bGJhcihtX3ZCYXIuZ2V0KCksIFZlcnRpY2FsU2Nyb2xsYmFyKTsKICAgICBtX3ZCYXItPnJlbW92
ZUZyb21QYXJlbnQoKTsKLSAgICBtX3ZCYXItPmRpc2Nvbm5lY3RGcm9tU2Nyb2xsYWJsZUFyZWEo
KTsKLSAgICBtX3ZCYXIgPSAwOworICAgIG1fdkJhciA9IG51bGxwdHI7CiB9CiAKIHZvaWQgUmVu
ZGVyTGlzdEJveDo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHJldmlz
aW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgc2VsZWN0IGVsZW1lbnQgcmVuZGVyZXIgaW4gV2ViQ29yZS4KICAqCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
LgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiAgICAgICAgICAgICAgIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBA
IC01NzUsNyArNTc1LDcgQEAgSG9zdFdpbmRvdyogUmVuZGVyTWVudUxpc3Q6Omhvc3RXaW5kb3co
KQogICAgIHJldHVybiB2aWV3KCkuZnJhbWVWaWV3KCkuaG9zdFdpbmRvdygpOwogfQogCi1QYXNz
UmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyTWVudUxpc3Q6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxh
YmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
LCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKK1Bhc3NSZWZQdHI8U2Nyb2xsYmFy
PiBSZW5kZXJNZW51TGlzdDo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxh
YmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRy
b2xTaXplIGNvbnRyb2xTaXplKQogewogICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdldDsKICAg
ICBib29sIGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlID0gc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShT
Q1JPTExCQVIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0
LmgJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
ZW51TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIHNlbGVjdCBlbGVtZW50IHJlbmRlcmVyIGluIFdlYkNvcmUuCiAgKgogICog
Q29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKS4KLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMTMsNyArMTEzLDcgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgbXVsdGlwbGUoKSBjb25zdCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCBIb3N0V2luZG93KiBob3N0V2luZG93KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVh
KiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xs
YWJsZUFyZWEmLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUpIG92
ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIGhhc0xpbmVJZkVtcHR5KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU2Nyb2xsYmFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU2Nyb2xsYmFyLmNwcAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMywgMjAx
NSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM2LDEyICszNiwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJl
ZlB0cjxTY3JvbGxiYXI+IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKFNj
cm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50
YXRpb24sIEVsZW1lbnQqIG93bmVyRWxlbWVudCwgRnJhbWUqIG93bmluZ0ZyYW1lKQorUmVmUHRy
PFNjcm9sbGJhcj4gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIoU2Nyb2xs
YWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlv
biwgRWxlbWVudCogb3duZXJFbGVtZW50LCBGcmFtZSogb3duaW5nRnJhbWUpCiB7CiAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBSZW5kZXJTY3JvbGxiYXIoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0
aW9uLCBvd25lckVsZW1lbnQsIG93bmluZ0ZyYW1lKSk7CiB9CiAKLVJlbmRlclNjcm9sbGJhcjo6
UmVuZGVyU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24sIEVsZW1lbnQqIG93bmVyRWxlbWVudCwgRnJhbWUqIG93
bmluZ0ZyYW1lKQorUmVuZGVyU2Nyb2xsYmFyOjpSZW5kZXJTY3JvbGxiYXIoU2Nyb2xsYWJsZUFy
ZWEmIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgRWxl
bWVudCogb3duZXJFbGVtZW50LCBGcmFtZSogb3duaW5nRnJhbWUpCiAgICAgOiBTY3JvbGxiYXIo
c2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xsYmFyLCBSZW5kZXJTY3Jv
bGxiYXJUaGVtZTo6cmVuZGVyU2Nyb2xsYmFyVGhlbWUoKSwgdHJ1ZSkKICAgICAsIG1fb3duZXJF
bGVtZW50KG93bmVyRWxlbWVudCkKICAgICAsIG1fb3duaW5nRnJhbWUob3duaW5nRnJhbWUpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5oCShyZXZpc2lv
biAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDcgKzQyLDcgQEAgY2xhc3MgUmVuZGVyU3R5
bGU7CiBjbGFzcyBSZW5kZXJTY3JvbGxiYXIgZmluYWwgOiBwdWJsaWMgU2Nyb2xsYmFyIHsKIHB1
YmxpYzoKICAgICBmcmllbmQgY2xhc3MgU2Nyb2xsYmFyOwotICAgIHN0YXRpYyBSZWZQdHI8U2Ny
b2xsYmFyPiBjcmVhdGVDdXN0b21TY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqLCBTY3JvbGxiYXJP
cmllbnRhdGlvbiwgRWxlbWVudCosIEZyYW1lKiBvd25pbmdGcmFtZSA9IG51bGxwdHIpOworICAg
IHN0YXRpYyBSZWZQdHI8U2Nyb2xsYmFyPiBjcmVhdGVDdXN0b21TY3JvbGxiYXIoU2Nyb2xsYWJs
ZUFyZWEmLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgRWxlbWVudCosIEZyYW1lKiBvd25pbmdGcmFt
ZSA9IG51bGxwdHIpOwogICAgIHZpcnR1YWwgflJlbmRlclNjcm9sbGJhcigpOwogCiAgICAgUmVu
ZGVyQm94KiBvd25pbmdSZW5kZXJlcigpIGNvbnN0OwpAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6
CiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gZ2V0U2Nyb2xsYmFyUHNldWRvU3R5bGUoU2Ny
b2xsYmFyUGFydCwgUHNldWRvSWQpOwogCiBwcml2YXRlOgotICAgIFJlbmRlclNjcm9sbGJhcihT
Y3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBFbGVtZW50KiwgRnJhbWUqKTsK
KyAgICBSZW5kZXJTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEmLCBTY3JvbGxiYXJPcmllbnRhdGlv
biwgRWxlbWVudCosIEZyYW1lKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0UGFyZW50KFNjcm9s
bFZpZXcqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlZChib29sKSBvdmVy
cmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZp
ZWxkLmNwcAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNlYXJjaEZpZWxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAxMCwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDggVG9yY2ggTW9i
aWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29t
LykgCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykuCkBAIC0zNDIsNyArMzQyLDcgQEAgSG9zdFdpbmRvdyogUmVuZGVyU2Vh
cmNoRmllbGQ6Omhvc3RXaW5kbwogICAgIHJldHVybiB2aWV3KCkuZnJhbWVWaWV3KCkuaG9zdFdp
bmRvdygpOwogfQogCi1QYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyU2VhcmNoRmllbGQ6OmNy
ZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkK
K1Bhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJTZWFyY2hGaWVsZDo6Y3JlYXRlU2Nyb2xsYmFy
KFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQogewogICAgIFJlZlB0
cjxTY3JvbGxiYXI+IHdpZGdldDsKICAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlID0g
c3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShTQ1JPTExCQVIpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmgJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcsIDIwMDksIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRw
Oi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgogICoKQEAgLTgwLDcgKzgwLDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dEZyb21JdGVtKHVuc2lnbmVkIGxp
c3RJbmRleCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3Rv
cigpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdygp
IGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0
ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxi
YXJDb250cm9sU2l6ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJh
cj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhJiwgU2Nyb2xsYmFyT3JpZW50YXRpb24s
IFNjcm9sbGJhckNvbnRyb2xTaXplKSBvdmVycmlkZTsKIAogICAgIEhUTUxFbGVtZW50KiByZXN1
bHRzQnV0dG9uRWxlbWVudCgpIGNvbnN0OwogICAgIEhUTUxFbGVtZW50KiBjYW5jZWxCdXR0b25F
bGVtZW50KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODA0NjUpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAx
NS0wMi0yMCAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBT
Y3JvbGxiYXJzIGFuZCBTY3JvbGxBbmltYXRvcnMgbXVzdCBhbHdheXMgaGF2ZSBhIFNjcm9sbGFi
bGVBcmVhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDE4NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIENoYW5nZSB1c2VycyBvZiB0aGUgc2Nyb2xsQW5pbWF0b3IoKSBtZXRob2QgdG8gZXhw
ZWN0IGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2ludGVyLgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW06CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdp
bjo6Y3JlYXRlU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpkZXN0cm95
U2Nyb2xsYmFyKToKKwogMjAxNS0wMi0yMCAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtXSzJdIEFkZCBzdXBwb3J0IGZvciBmb250IHBhbmVsIG9uIE9TIFgu
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BE
RlBsdWdpbi5tbQkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSwgMjAxMiwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTY0MSw3ICs2NDEsNyBAQCBjb25zdCBQbHVnaW5WaWV3KiBQREZQbHVnaW46OnBs
dWdpblZpZXcoCiAKIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBQREZQbHVnaW46OmNyZWF0ZVNjcm9s
bGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKLSAgICBSZWZQdHI8U2Ny
b2xsYmFyPiB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcih0aGlzLCBv
cmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcik7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lk
Z2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9u
LCBSZWd1bGFyU2Nyb2xsYmFyKTsKICAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNj
cm9sbGJhcikgewogICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJMYXllciA9IGFkb3B0TlMo
W1tXS1BERlBsdWdpblNjcm9sbGJhckxheWVyIGFsbG9jXSBpbml0V2l0aFBERlBsdWdpbjp0aGlz
XSk7CiAgICAgICAgIFttX2NvbnRhaW5lckxheWVyIGFkZFN1YmxheWVyOm1faG9yaXpvbnRhbFNj
cm9sbGJhckxheWVyLmdldCgpXTsKQEAgLTY2Miw4ICs2NjIsNyBAQCB2b2lkIFBERlBsdWdpbjo6
ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiCiAKICAgICB3aWxsUmVtb3ZlU2Nyb2xsYmFyKHNjcm9s
bGJhci5nZXQoKSwgb3JpZW50YXRpb24pOwogICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVu
dCgpOwotICAgIHNjcm9sbGJhci0+ZGlzY29ubmVjdEZyb21TY3JvbGxhYmxlQXJlYSgpOwotICAg
IHNjcm9sbGJhciA9IDA7CisgICAgc2Nyb2xsYmFyID0gbnVsbHB0cjsKIAogICAgIGlmIChvcmll
bnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CiAgICAgICAgIFttX2hvcml6b250YWxT
Y3JvbGxiYXJMYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247018</attachid>
            <date>2015-02-20 17:28:49 -0800</date>
            <delta_ts>2015-02-20 17:35:34 -0800</delta_ts>
            <desc>Patch v3 (Fixes for Windows and other ports)</desc>
            <filename>bug-141855-20150220172841.patch</filename>
            <type>text/plain</type>
            <size>80918</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDQ2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNSBAQAorMjAxNS0wMi0yMCAgQnJlbnQg
RnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBTY3JvbGxiYXJzIGFuZCBT
Y3JvbGxBbmltYXRvcnMgbXVzdCBhbHdheXMgaGF2ZSBhIFNjcm9sbGFibGVBcmVhCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4NTUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBjaGFuZ2UgaW4gZnVu
Y3Rpb25hbGl0eS4KKyAgICAgICAgCisgICAgICAgIENoYW5nZSB1c2VycyBvZiB0aGUgc2Nyb2xs
QW5pbWF0b3IoKSBtZXRob2QgdG8gZXhwZWN0IGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2lu
dGVyLiBBbHNvIGdldCByaWQgb2YKKyAgICAgICAgYSBudW1iZXIgb2YgdW5uZWNlc3NhcnkgbnVs
bHB0ciBjaGVja3MuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3Jv
bGxiYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6c2V0
VmFsdWUpOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJNYXRjaGVzQ29ybmVyUHJlc2VudFBzZXVkb0NsYXNz
KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVZpZXc6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNl
dEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvcjo6aGFuZGxlV2hlZWxFdmVudFBoYXNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9Qb3B1cE1l
bnVDbGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6U2Nyb2xsQW5pbWF0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvcjo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yOjp1cGRhdGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMpOgorICAgICAgICAqIHBs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cjo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbGFibGVBcmVhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvck5vbmUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
Tm9uZS5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6Y3JlYXRlU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxhYmxlQXJlYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Ny
b2xsQW5pbWF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpub3RpZnlTY3Jv
bGxQb3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbFBvc2l0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6
aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aGFu
ZGxlVG91Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6bW91c2VF
bnRlcmVkU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjptb3Vz
ZUV4aXRlZFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6ZGlk
QWRkU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjp3aWxsUmVt
b3ZlU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNh
bFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVB
cmVhOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAqIHBsYXRm
b3JtL1Njcm9sbGFibGVBcmVhLmg6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6U2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhcjo6c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhcjo6aXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXI6Om9mZnNldERpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmF1
dG9zY3JvbGxQcmVzc2VkUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdmVU
aHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdXNlTW92ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3VzZUVudGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyOjptb3VzZUV4aXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1v
dXNlVXApOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzaG91bGRQYXJ0aWNpcGF0ZUlu
SGl0VGVzdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmlzV2luZG93QWN0aXZl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpjb252ZXJ0VG9Db250YWluaW5nVmlldyk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhcjo6c2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpkaXNj
b25uZWN0RnJvbVNjcm9sbGFibGVBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9p
b3MvU2Nyb2xsQW5pbWF0b3JJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cklPUzo6aGFuZGxlVG91Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cklPUzo6ZGV0ZXJtaW5lU2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvU2Nyb2xsQW5pbWF0b3JNYWMubW06CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyRGVsZWdhdGUgc2Nyb2xsZXJJbXBQYWlyOnNldENvbnRlbnRBcmVhTmVlZHNEaXNw
bGF5SW5SZWN0Ol0pOgorICAgICAgICAoLVtXZWJTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRl
bGVnYXRlIHNjcm9sbGVySW1wUGFpcjp1cGRhdGVTY3JvbGxlclN0eWxlRm9yTmV3UmVjb21tZW5k
ZWRTY3JvbGxlclN0eWxlOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxiYXJQYWludGVyRGVsZWdh
dGUgc2Nyb2xsQW5pbWF0b3JdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVn
YXRlIGxheWVyXSk6CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBtb3Vz
ZUxvY2F0aW9uSW5TY3JvbGxlckZvclNjcm9sbGVySW1wOl0pOgorICAgICAgICAoLVtXZWJTY3Jv
bGxiYXJQYWludGVyRGVsZWdhdGUgc2V0VXBBbHBoYUFuaW1hdGlvbjpzY3JvbGxlclBhaW50ZXI6
cGFydDphbmltYXRlQWxwaGFUbzpkdXJhdGlvbjpdKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6
OlNjcm9sbEFuaW1hdG9yTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
OjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmFkanVzdFNj
cm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JNYWM6OmFkanVzdFNjcm9sbFBvc2l0aW9uVG9Cb3VuZHNJZk5lY2Vzc2FyeSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsVG8pOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpkaWRBZGRIb3Jpem9udGFsU2Ny
b2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp2ZXJ0aWNhbFNj
cm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
TWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnBpbm5lZEluRGlyZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjppc0FscmVhZHlQaW5uZWRJbkRpcmVjdGlv
bk9mR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6YWxsb3dz
VmVydGljYWxTdHJldGNoaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
OjphbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvck1hYzo6c3RyZXRjaEFtb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvck1hYzo6Y2FuU2Nyb2xsSG9yaXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yTWFjOjpjYW5TY3JvbGxWZXJ0aWNhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yTWFjOjphYnNvbHV0ZVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yTWFjOjppbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRn
ZUNvbnN0cmFpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp1cGRh
dGVTY3JvbGxlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpz
ZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
YXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGVzdHJveVNjcm9sbGJhcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
aXN0Qm94OjpjcmVhdGVTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJv
eDo6ZGVzdHJveVNjcm9sbGJhcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0
LmNwcDoKKyAgICAgICAgKFJlbmRlck1lbnVMaXN0OjpjcmVhdGVTY3JvbGxiYXIpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJTY3JvbGxiYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyOjpjcmVh
dGVDdXN0b21TY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyOjpS
ZW5kZXJTY3JvbGxiYXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmg6CisKIDIwMTUtMDItMjAgIEVucmljYSBDYXN1Y2Np
ICA8ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAgICAgICBbV0syXSBBZGQgc3VwcG9ydCBmb3IgZm9u
dCBwYW5lbCBvbiBPUyBYLgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5U2Nyb2xsYmFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwCShyZXZpc2lvbiAxODA0NTApCisr
KyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC05NiwxMSArOTYsOCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlTY3JvbGxi
YXI6OnNldFZhbHVlKGZsCiAgICAgaWYgKCFtX3Njcm9sbGJhcikKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIGlmICghbV9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIGZsb2F0IG5ld1ZhbHVlID0gdmFsdWUgKiBtX3Njcm9sbGJhci0+bWF4aW11
bSgpOwotICAgIG1fc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxUb09mZnNldFdp
dGhvdXRBbmltYXRpb24obV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCksIG5ld1ZhbHVlKTsKKyAg
ICBtX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24obV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCksIG5ld1ZhbHVlKTsKIH0KICAgICAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNo
ZWNrZXJUZXN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNl
L1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE0IERoaSBBdXJyYWht
YW4gPGRpb3JhaG1hbkByb2NreWJhcnMuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzU4LDcg
KzM1OCw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBzY3JvbGxiYXJNYXRjaGVzTm9CdXQKIAogQUxX
QVlTX0lOTElORSBib29sIHNjcm9sbGJhck1hdGNoZXNDb3JuZXJQcmVzZW50UHNldWRvQ2xhc3Mo
Y29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAg
cmV0dXJuIGNvbnRleHQuc2Nyb2xsYmFyICYmIGNvbnRleHQuc2Nyb2xsYmFyLT5zY3JvbGxhYmxl
QXJlYSgpLT5pc1Njcm9sbENvcm5lclZpc2libGUoKTsKKyAgICByZXR1cm4gY29udGV4dC5zY3Jv
bGxiYXIgJiYgY29udGV4dC5zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkuaXNTY3JvbGxDb3Ju
ZXJWaXNpYmxlKCk7CiB9CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAgKiAg
ICAgICAgICAgICAgICAgICAgIDE5OTkgTGFycyBLbm9sbCA8a25vbGxAa2RlLm9yZz4KICAqICAg
ICAgICAgICAgICAgICAgICAgMTk5OSBBbnR0aSBLb2l2aXN0byA8a29pdmlzdG9Aa2RlLm9yZz4K
ICAqICAgICAgICAgICAgICAgICAgICAgMjAwMCBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9y
Zz4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDEzLTIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAgICAgIChDKSAyMDA2IEdy
YWhhbSBEZW5uaXMgKGdyYWhhbS5kZW5uaXNAZ21haWwuY29tKQogICogICAgICAgICAgIChDKSAy
MDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtNTQyLDE3ICs1NDIsMTcg
QEAgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IEZyYW1lVmlldzo6Y3JlYXRlUwogICAgIC8vIFRyeSB0
aGUgPGJvZHk+IGVsZW1lbnQgZmlyc3QgYXMgYSBzY3JvbGxiYXIgc291cmNlLgogICAgIEhUTUxF
bGVtZW50KiBib2R5ID0gZG9jID8gZG9jLT5ib2R5T3JGcmFtZXNldCgpIDogbnVsbHB0cjsKICAg
ICBpZiAoYm9keSAmJiBib2R5LT5yZW5kZXJlcigpICYmIGJvZHktPnJlbmRlcmVyKCktPnN0eWxl
KCkuaGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKSkKLSAgICAgICAgcmV0dXJuIFJlbmRlclNjcm9s
bGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCBib2R5KTsKKyAg
ICAgICAgcmV0dXJuIFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlz
LCBvcmllbnRhdGlvbiwgYm9keSk7CiAgICAgCiAgICAgLy8gSWYgdGhlIDxib2R5PiBkaWRuJ3Qg
aGF2ZSBhIGN1c3RvbSBzdHlsZSwgdGhlbiB0aGUgcm9vdCBlbGVtZW50IG1pZ2h0LgogICAgIEVs
ZW1lbnQqIGRvY0VsZW1lbnQgPSBkb2MgPyBkb2MtPmRvY3VtZW50RWxlbWVudCgpIDogbnVsbHB0
cjsKICAgICBpZiAoZG9jRWxlbWVudCAmJiBkb2NFbGVtZW50LT5yZW5kZXJlcigpICYmIGRvY0Vs
ZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCkuaGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKSkKLSAg
ICAgICAgcmV0dXJuIFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHRoaXMs
IG9yaWVudGF0aW9uLCBkb2NFbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIFJlbmRlclNjcm9sbGJh
cjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgZG9jRWxlbWVudCk7
CiAgICAgICAgIAogICAgIC8vIElmIHdlIGhhdmUgYW4gb3duaW5nIGlmcmFtZS9mcmFtZSBlbGVt
ZW50LCB0aGVuIGl0IGNhbiBzZXQgdGhlIGN1c3RvbSBzY3JvbGxiYXIgYWxzby4KICAgICBSZW5k
ZXJXaWRnZXQqIGZyYW1lUmVuZGVyZXIgPSBmcmFtZSgpLm93bmVyUmVuZGVyZXIoKTsKICAgICBp
ZiAoZnJhbWVSZW5kZXJlciAmJiBmcmFtZVJlbmRlcmVyLT5zdHlsZSgpLmhhc1BzZXVkb1N0eWxl
KFNDUk9MTEJBUikpCi0gICAgICAgIHJldHVybiBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3Rv
bVNjcm9sbGJhcih0aGlzLCBvcmllbnRhdGlvbiwgMCwgJmZyYW1lKCkpOworICAgICAgICByZXR1
cm4gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0
aW9uLCBudWxscHRyLCAmZnJhbWUoKSk7CiAgICAgCiAgICAgLy8gTm9ib2R5IHNldCBhIGN1c3Rv
bSBzdHlsZSwgc28gd2UganVzdCB1c2UgYSBuYXRpdmUgc2Nyb2xsYmFyLgogICAgIHJldHVybiBT
Y3JvbGxWaWV3OjpjcmVhdGVTY3JvbGxiYXIob3JpZW50YXRpb24pOwpAQCAtMjA4MSw3ICsyMDgx
LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZQogICAgICAgICBp
ZiAoZnJhbWUoKS5wYWdlKCktPnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZp
eGVkUG9zaXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVy
c0FmdGVyU2Nyb2xsaW5nKCk7CiAgICAgICAgIEludFBvaW50IG5ld1Bvc2l0aW9uID0gc2Nyb2xs
UG9zaXRpb24oKTsKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS0+c2V0Q3VycmVudFBvc2l0aW9u
KHNjcm9sbFBvc2l0aW9uKCkpOworICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldEN1cnJlbnRQ
b3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsKICAgICAgICAgc2Nyb2xsUG9zaXRpb25DaGFuZ2Vk
KG9sZFBvc2l0aW9uLCBuZXdQb3NpdGlvbik7CiAgICAgfQogICAgIGlmICh2aXNpYmxlQ29udGVu
dFNpemVEaWRDaGFuZ2UpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAJKHJldmlzaW9uIDE4MDQ1MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjg5LDcgKzI4OSw3IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmhhbmRsZVdoZWVsRXYKICAgICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgZnJhbWVWaWV3LT5zY3JvbGxBbmltYXRvcigpLT5oYW5kbGVXaGVlbEV2ZW50UGhhc2Uo
cGhhc2UpOworICAgIGZyYW1lVmlldy0+c2Nyb2xsQW5pbWF0b3IoKS5oYW5kbGVXaGVlbEV2ZW50
UGhhc2UocGhhc2UpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BvcHVwTWVudUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BvcHVwTWVudUNsaWVudC5oCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Qb3B1cE1lbnVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpLgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAxNSBBcHBsZSBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgRm9udFNlbGVjdG9yKiBmb250U2Vs
ZWN0b3IoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBIb3N0V2luZG93KiBob3N0V2luZG93KCkg
Y29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Ny
b2xsYmFyKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNv
bnRyb2xTaXplKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRl
U2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhJiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJh
ckNvbnRyb2xTaXplKSA9IDA7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3IuY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQxLDEzICs0MSwxMyBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAjaWYgIUVOQUJMRShTTU9PVEhfU0NST0xMSU5HKSAmJiAhUExBVEZP
Uk0oSU9TKQotUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0
ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCitQYXNzT3duUHRyPFNjcm9sbEFuaW1h
dG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJl
YSkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVB
cmVhKSk7CiB9CiAjZW5kaWYKIAotU2Nyb2xsQW5pbWF0b3I6OlNjcm9sbEFuaW1hdG9yKFNjcm9s
bGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKK1Njcm9sbEFuaW1hdG9yOjpTY3JvbGxBbmltYXRv
cihTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiAgICAgOiBtX3Njcm9sbGFibGVBcmVh
KHNjcm9sbGFibGVBcmVhKQogICAgICwgbV9jdXJyZW50UG9zWCgwKQogICAgICwgbV9jdXJyZW50
UG9zWSgwKQpAQCAtNjEsNyArNjEsNyBAQCBTY3JvbGxBbmltYXRvcjo6flNjcm9sbEFuaW1hdG9y
KCkKIGJvb2wgU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmll
bnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIp
CiB7CiAgICAgZmxvYXQqIGN1cnJlbnRQb3MgPSAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNj
cm9sbGJhcikgPyAmbV9jdXJyZW50UG9zWCA6ICZtX2N1cnJlbnRQb3NZOwotICAgIGZsb2F0IG5l
d1BvcyA9IHN0ZDo6bWF4KHN0ZDo6bWluKCpjdXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVy
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFNpemUob3JpZW50
YXRpb24pKSksIDAuMGYpOworICAgIGZsb2F0IG5ld1BvcyA9IHN0ZDo6bWF4KHN0ZDo6bWluKCpj
dXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Ny
b2xsYWJsZUFyZWEuc2Nyb2xsU2l6ZShvcmllbnRhdGlvbikpKSwgMC4wZik7CiAgICAgZmxvYXQg
ZGVsdGEgPSAqY3VycmVudFBvcyAtIG5ld1BvczsKICAgICBpZiAoKmN1cnJlbnRQb3MgPT0gbmV3
UG9zKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTQsOCArMTE0LDggQEAgYm9vbCBTY3Jv
bGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudChjbwogICAgICAgICByZXR1cm4gdHJ1ZTsKICNl
bmRpZgogCi0gICAgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxl
QXJlYS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgIFNjcm9sbGJhciogdmVydGljYWxTY3Jv
bGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIFNjcm9s
bGJhciogaG9yaXpvbnRhbFNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNj
cm9sbGJhcigpOworICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBtX3Njcm9sbGFi
bGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFyKCk7CiAKICAgICAvLyBBY2NlcHQgdGhlIGV2ZW50IGlm
IHdlIGhhdmUgYSBzY3JvbGxiYXIgaW4gdGhhdCBkaXJlY3Rpb24gYW5kIGNhbiBzdGlsbAogICAg
IC8vIHNjcm9sbCBhbnkgZnVydGhlci4KQEAgLTEyNSw4ICsxMjUsOCBAQCBib29sIFNjcm9sbEFu
aW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KGNvCiAgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7CiAK
ICAgICBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSA9IFNjcm9sbEJ5UGl4ZWw7Ci0gICAg
SW50U2l6ZSBtYXhGb3J3YXJkU2Nyb2xsRGVsdGEgPSBtX3Njcm9sbGFibGVBcmVhLT5tYXhpbXVt
U2Nyb2xsUG9zaXRpb24oKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCk7Ci0g
ICAgSW50U2l6ZSBtYXhCYWNrd2FyZFNjcm9sbERlbHRhID0gbV9zY3JvbGxhYmxlQXJlYS0+c2Ny
b2xsUG9zaXRpb24oKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPm1pbmltdW1TY3JvbGxQb3NpdGlvbigp
OworICAgIEludFNpemUgbWF4Rm9yd2FyZFNjcm9sbERlbHRhID0gbV9zY3JvbGxhYmxlQXJlYS5t
YXhpbXVtU2Nyb2xsUG9zaXRpb24oKSAtIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsUG9zaXRpb24o
KTsKKyAgICBJbnRTaXplIG1heEJhY2t3YXJkU2Nyb2xsRGVsdGEgPSBtX3Njcm9sbGFibGVBcmVh
LnNjcm9sbFBvc2l0aW9uKCkgLSBtX3Njcm9sbGFibGVBcmVhLm1pbmltdW1TY3JvbGxQb3NpdGlv
bigpOwogICAgIGlmICgoZGVsdGFYIDwgMCAmJiBtYXhGb3J3YXJkU2Nyb2xsRGVsdGEud2lkdGgo
KSA+IDApCiAgICAgICAgIHx8IChkZWx0YVggPiAwICYmIG1heEJhY2t3YXJkU2Nyb2xsRGVsdGEu
d2lkdGgoKSA+IDApCiAgICAgICAgIHx8IChkZWx0YVkgPCAwICYmIG1heEZvcndhcmRTY3JvbGxE
ZWx0YS5oZWlnaHQoKSA+IDApCkBAIC0xMzYsNyArMTM2LDcgQEAgYm9vbCBTY3JvbGxBbmltYXRv
cjo6aGFuZGxlV2hlZWxFdmVudChjbwogICAgICAgICBpZiAoZGVsdGFZKSB7CiAgICAgICAgICAg
ICBpZiAoZS5ncmFudWxhcml0eSgpID09IFNjcm9sbEJ5UGFnZVdoZWVsRXZlbnQpIHsKICAgICAg
ICAgICAgICAgICBib29sIG5lZ2F0aXZlID0gZGVsdGFZIDwgMDsKLSAgICAgICAgICAgICAgICBk
ZWx0YVkgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwRGVsdGEobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJs
ZUhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBkZWx0YVkgPSBTY3JvbGxiYXI6OnBhZ2VTdGVw
RGVsdGEobV9zY3JvbGxhYmxlQXJlYS52aXNpYmxlSGVpZ2h0KCkpOwogICAgICAgICAgICAgICAg
IGlmIChuZWdhdGl2ZSkKICAgICAgICAgICAgICAgICAgICAgZGVsdGFZID0gLWRlbHRhWTsKICAg
ICAgICAgICAgIH0KQEAgLTE0Niw3ICsxNDYsNyBAQCBib29sIFNjcm9sbEFuaW1hdG9yOjpoYW5k
bGVXaGVlbEV2ZW50KGNvCiAgICAgICAgIGlmIChkZWx0YVgpIHsKICAgICAgICAgICAgIGlmIChl
LmdyYW51bGFyaXR5KCkgPT0gU2Nyb2xsQnlQYWdlV2hlZWxFdmVudCkgewogICAgICAgICAgICAg
ICAgIGJvb2wgbmVnYXRpdmUgPSBkZWx0YVggPCAwOwotICAgICAgICAgICAgICAgIGRlbHRhWCA9
IFNjcm9sbGJhcjo6cGFnZVN0ZXBEZWx0YShtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlV2lkdGgo
KSk7CisgICAgICAgICAgICAgICAgZGVsdGFYID0gU2Nyb2xsYmFyOjpwYWdlU3RlcERlbHRhKG1f
c2Nyb2xsYWJsZUFyZWEudmlzaWJsZVdpZHRoKCkpOwogICAgICAgICAgICAgICAgIGlmIChuZWdh
dGl2ZSkKICAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gLWRlbHRhWDsKICAgICAgICAgICAg
IH0KQEAgLTE3NywyMiArMTc3LDIyIEBAIEZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3I6OmN1cnJl
bnRQb3NpdGkKIHZvaWQgU2Nyb2xsQW5pbWF0b3I6Om5vdGlmeVBvc2l0aW9uQ2hhbmdlZChjb25z
dCBGbG9hdFNpemUmIGRlbHRhKQogewogICAgIFVOVVNFRF9QQVJBTShkZWx0YSk7Ci0gICAgbV9z
Y3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihJbnRQb2ludChtX2N1
cnJlbnRQb3NYLCBtX2N1cnJlbnRQb3NZKSk7CisgICAgbV9zY3JvbGxhYmxlQXJlYS5zZXRTY3Jv
bGxPZmZzZXRGcm9tQW5pbWF0aW9uKEludFBvaW50KG1fY3VycmVudFBvc1gsIG1fY3VycmVudFBv
c1kpKTsKIH0KIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1BQykK
IHZvaWQgU2Nyb2xsQW5pbWF0b3I6OnVwZGF0ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycygpCiB7
CiAgICAgLy8gRklYTUU6IEN1cnJlbnRseSwgc2Nyb2xsIHNuYXAgYW5pbWF0b3JzIGFyZSByZWNy
ZWF0ZWQgZXZlbiB0aG91Z2ggdGhlIHNuYXAgb2Zmc2V0cyBhbG9uZSBjYW4gYmUgdXBkYXRlZC4K
LSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkpIHsKLSAg
ICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxB
eGlzU2Nyb2xsU25hcEFuaW1hdG9yPih0aGlzLCBtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFs
U25hcE9mZnNldHMoKSwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKKyAgICBpZiAobV9z
Y3JvbGxhYmxlQXJlYS5ob3Jpem9udGFsU25hcE9mZnNldHMoKSkgeworICAgICAgICBtX2hvcml6
b250YWxTY3JvbGxTbmFwQW5pbWF0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPEF4aXNTY3JvbGxTbmFw
QW5pbWF0b3I+KHRoaXMsIG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCks
IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9s
bFNuYXBUaW1lciA9IHN0ZDo6bWFrZV91bmlxdWU8VGltZXI+KCp0aGlzLCAmU2Nyb2xsQW5pbWF0
b3I6Omhvcml6b250YWxTY3JvbGxTbmFwVGltZXJGaXJlZCk7CiAgICAgfSBlbHNlIGlmIChtX2hv
cml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3IpIHsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xs
U25hcEFuaW1hdG9yID0gbnVsbHB0cjsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25hcFRp
bWVyID0gbnVsbHB0cjsKICAgICB9Ci0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2Fs
U25hcE9mZnNldHMoKSkgewotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yID0g
c3RkOjptYWtlX3VuaXF1ZTxBeGlzU2Nyb2xsU25hcEFuaW1hdG9yPih0aGlzLCBtX3Njcm9sbGFi
bGVBcmVhLT52ZXJ0aWNhbFNuYXBPZmZzZXRzKCksIFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwp
OworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU25hcE9mZnNldHMoKSkgeworICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxBeGlz
U2Nyb2xsU25hcEFuaW1hdG9yPih0aGlzLCBtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU25hcE9m
ZnNldHMoKSwgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCk7CiAgICAgICAgIG1fdmVydGljYWxT
Y3JvbGxTbmFwVGltZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRpbWVyPigqdGhpcywgJlNjcm9sbEFu
aW1hdG9yOjp2ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lckZpcmVkKTsKICAgICB9IGVsc2UgaWYgKG1f
dmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3IpIHsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbFNu
YXBBbmltYXRvciA9IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yLmgJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICog
Q29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICAqIG1ldDoKQEAgLTU2LDcgKzU3
LDcgQEAgY2xhc3MgU2Nyb2xsQW5pbWF0b3IgewogI2VuZGlmCiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+
IGNyZWF0ZShTY3JvbGxhYmxlQXJlYSopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcm9sbEFu
aW1hdG9yPiBjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmKTsKIAogICAgIHZpcnR1YWwgflNjcm9sbEFu
aW1hdG9yKCk7CiAKQEAgLTY4LDcgKzY5LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CiAKLSAg
ICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEoKSBjb25zdCB7IHJldHVybiBtX3Njcm9s
bGFibGVBcmVhOyB9CisgICAgU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYTsgfQogCiAgICAgdmlydHVhbCBib29sIGhhbmRsZVdo
ZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CiAKQEAgLTEyNSw3ICsxMjYsNyBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IFNjcm9sbEFuaW1h
dG9yKFNjcm9sbGFibGVBcmVhKik7CisgICAgZXhwbGljaXQgU2Nyb2xsQW5pbWF0b3IoU2Nyb2xs
YWJsZUFyZWEmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQb3NpdGlvbkNoYW5nZWQoY29u
c3QgRmxvYXRTaXplJiBkZWx0YSk7CiAKQEAgLTEzNSw3ICsxMzYsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCB2ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lckZpcmVkKCk7CiAjZW5kaWYKIAotICAgIFNj
cm9sbGFibGVBcmVhKiBtX3Njcm9sbGFibGVBcmVhOworICAgIFNjcm9sbGFibGVBcmVhJiBtX3Nj
cm9sbGFibGVBcmVhOwogICAgIGZsb2F0IG1fY3VycmVudFBvc1g7IC8vIFdlIGF2b2lkIHVzaW5n
IGEgRmxvYXRQb2ludCBpbiBvcmRlciB0byByZWR1Y2UKICAgICBmbG9hdCBtX2N1cnJlbnRQb3NZ
OyAvLyBzdWJjbGFzcyBjb2RlIGNvbXBsZXhpdHkuCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkgJiYgUExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3JOb25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvck5vbmUuY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNTEsOSAr
NTIsOSBAQCBjb25zdCBkb3VibGUga1RpY2tUaW1lID0gMSAvIGtGcmFtZVJhdGU7CiBjb25zdCBk
b3VibGUga01pbmltdW1UaW1lckludGVydmFsID0gLjAwMTsKIGNvbnN0IGRvdWJsZSBrWm9vbVRp
Y2tzID0gMTE7CiAKLVBhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpj
cmVhdGUoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQorUGFzc093blB0cjxTY3JvbGxB
bmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJs
ZUFyZWEpCiB7Ci0gICAgaWYgKHNjcm9sbGFibGVBcmVhICYmIHNjcm9sbGFibGVBcmVhLT5zY3Jv
bGxBbmltYXRvckVuYWJsZWQoKSkKKyAgICBpZiAoc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0
b3JFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2Nyb2xsQW5pbWF0b3JO
b25lKHNjcm9sbGFibGVBcmVhKSk7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxBbmlt
YXRvcihzY3JvbGxhYmxlQXJlYSkpOwogfQpAQCAtNDg2LDggKzQ4Nyw4IEBAIHZvaWQgU2Nyb2xs
QW5pbWF0b3JOb25lOjpkaWRBZGRIb3Jpem9udGEKIAogdm9pZCBTY3JvbGxBbmltYXRvck5vbmU6
OnVwZGF0ZVZpc2libGVMZW5ndGhzKCkKIHsKLSAgICBtX2hvcml6b250YWxEYXRhLnVwZGF0ZVZp
c2libGVMZW5ndGgoc2Nyb2xsYWJsZUFyZWEoKS0+dmlzaWJsZVdpZHRoKCkpOwotICAgIG1fdmVy
dGljYWxEYXRhLnVwZGF0ZVZpc2libGVMZW5ndGgoc2Nyb2xsYWJsZUFyZWEoKS0+dmlzaWJsZUhl
aWdodCgpKTsKKyAgICBtX2hvcml6b250YWxEYXRhLnVwZGF0ZVZpc2libGVMZW5ndGgoc2Nyb2xs
YWJsZUFyZWEoKS52aXNpYmxlV2lkdGgoKSk7CisgICAgbV92ZXJ0aWNhbERhdGEudXBkYXRlVmlz
aWJsZUxlbmd0aChzY3JvbGxhYmxlQXJlYSgpLnZpc2libGVIZWlnaHQoKSk7CiB9CiAKICNpZiBV
U0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIpCkBAIC01MzIsNyArNTMzLDcgQEAgdm9p
ZCBTY3JvbGxBbmltYXRvck5vbmU6OnN0YXJ0TmV4dFRpbWVyKAogI2Vsc2UKIHZvaWQgU2Nyb2xs
QW5pbWF0b3JOb25lOjpzdGFydE5leHRUaW1lcigpCiB7Ci0gICAgaWYgKHNjcm9sbGFibGVBcmVh
KCktPnNjaGVkdWxlQW5pbWF0aW9uKCkpCisgICAgaWYgKHNjcm9sbGFibGVBcmVhKCkuc2NoZWR1
bGVBbmltYXRpb24oKSkKICAgICAgICAgbV9hbmltYXRpb25BY3RpdmUgPSB0cnVlOwogfQogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUu
aAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3JOb25lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChjKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNTIsNyArNTMsNyBAQCBzdHJ1Y3QgU2Nyb2xs
QW5pbWF0b3JQYXJhbWV0ZXJzOwogCiBjbGFzcyBTY3JvbGxBbmltYXRvck5vbmUgOiBwdWJsaWMg
U2Nyb2xsQW5pbWF0b3IgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNjcm9sbEFuaW1hdG9yTm9u
ZShTY3JvbGxhYmxlQXJlYSopOworICAgIGV4cGxpY2l0IFNjcm9sbEFuaW1hdG9yTm9uZShTY3Jv
bGxhYmxlQXJlYSYpOwogICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yTm9uZSgpOwogCiAgICAg
dmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsVmlldy5jcHAJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTEzNCw3ICsxMzQsNyBAQCBib29sIFNjcm9sbFZpZXc6OnNldEhh
c1ZlcnRpY2FsU2Nyb2xsYmFyCiAKIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBTY3JvbGxWaWV3Ojpj
cmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCiB7Ci0gICAg
cmV0dXJuIFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9u
LCBSZWd1bGFyU2Nyb2xsYmFyKTsKKyAgICByZXR1cm4gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVT
Y3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xsYmFyKTsKIH0KIAogdm9p
ZCBTY3JvbGxWaWV3OjpzZXRTY3JvbGxiYXJNb2RlcyhTY3JvbGxiYXJNb2RlIGhvcml6b250YWxN
b2RlLCBTY3JvbGxiYXJNb2RlIHZlcnRpY2FsTW9kZSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDExLCAyMDE0
LTIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKQEAgLTcwLDEyICs3MCwxMyBAQCBTY3JvbGxhYmxlQXJlYTo6flNj
cm9sbGFibGVBcmVhKCkKIHsKIH0KIAotU2Nyb2xsQW5pbWF0b3IqIFNjcm9sbGFibGVBcmVhOjpz
Y3JvbGxBbmltYXRvcigpIGNvbnN0CitTY3JvbGxBbmltYXRvciYgU2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbEFuaW1hdG9yKCkgY29uc3QKIHsKICAgICBpZiAoIW1fc2Nyb2xsQW5pbWF0b3IpCi0gICAg
ICAgIG1fc2Nyb2xsQW5pbWF0b3IgPSBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKGNvbnN0X2Nhc3Q8
U2Nyb2xsYWJsZUFyZWEqPih0aGlzKSk7CisgICAgICAgIG1fc2Nyb2xsQW5pbWF0b3IgPSBTY3Jv
bGxBbmltYXRvcjo6Y3JlYXRlKGNvbnN0X2Nhc3Q8U2Nyb2xsYWJsZUFyZWEmPigqdGhpcykpOwog
Ci0gICAgcmV0dXJuIG1fc2Nyb2xsQW5pbWF0b3IuZ2V0KCk7CisgICAgQVNTRVJUKG1fc2Nyb2xs
QW5pbWF0b3IpOworICAgIHJldHVybiAqbV9zY3JvbGxBbmltYXRvci5nZXQoKTsKIH0KIAogdm9p
ZCBTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsT3JpZ2luKGNvbnN0IEludFBvaW50JiBvcmlnaW4p
CkBAIC0xMjcsMjYgKzEyOCwyNiBAQCBib29sIFNjcm9sbGFibGVBcmVhOjpzY3JvbGwoU2Nyb2xs
RGlyZWN0CiAgICAgICAgIG11bHRpcGxpZXIgPSAtbXVsdGlwbGllcjsKIAogICAgIHN0ZXAgPSBh
ZGp1c3RTY3JvbGxTdGVwRm9yRml4ZWRDb250ZW50KHN0ZXAsIG9yaWVudGF0aW9uLCBncmFudWxh
cml0eSk7Ci0gICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yKCktPnNjcm9sbChvcmllbnRhdGlvbiwg
Z3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOworICAgIHJldHVybiBzY3JvbGxBbmltYXRv
cigpLnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwog
fQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KQogewotICAgIHNjcm9sbEFuaW1hdG9yKCktPnNjcm9s
bFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihvZmZzZXQpOworICAgIHNjcm9sbEFuaW1hdG9yKCku
c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG9mZnNldCk7CiB9CiAKIHZvaWQgU2Nyb2xs
YWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbiwgZmxvYXQgb2Zmc2V0KQogewogICAgIGlmIChvcmllbnRhdGlvbiA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24oRmxvYXRQb2ludChvZmZzZXQsIHNjcm9sbEFuaW1hdG9yKCktPmN1cnJlbnRQb3NpdGlv
bigpLnkoKSkpOworICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oRmxvYXRQ
b2ludChvZmZzZXQsIHNjcm9sbEFuaW1hdG9yKCkuY3VycmVudFBvc2l0aW9uKCkueSgpKSk7CiAg
ICAgZWxzZQotICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oRmxvYXRQb2lu
dChzY3JvbGxBbmltYXRvcigpLT5jdXJyZW50UG9zaXRpb24oKS54KCksIG9mZnNldCkpOworICAg
ICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oRmxvYXRQb2ludChzY3JvbGxBbmlt
YXRvcigpLmN1cnJlbnRQb3NpdGlvbigpLngoKSwgb2Zmc2V0KSk7CiB9CiAKIHZvaWQgU2Nyb2xs
YWJsZUFyZWE6Om5vdGlmeVNjcm9sbFBvc2l0aW9uQ2hhbmdlZChjb25zdCBJbnRQb2ludCYgcG9z
aXRpb24pCiB7CiAgICAgc2Nyb2xsUG9zaXRpb25DaGFuZ2VkKHBvc2l0aW9uKTsKLSAgICBzY3Jv
bGxBbmltYXRvcigpLT5zZXRDdXJyZW50UG9zaXRpb24ocG9zaXRpb24pOworICAgIHNjcm9sbEFu
aW1hdG9yKCkuc2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0aW9uKTsKIH0KIAogdm9pZCBTY3JvbGxh
YmxlQXJlYTo6c2Nyb2xsUG9zaXRpb25DaGFuZ2VkKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikK
QEAgLTE3OSw3ICsxODAsNyBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxQb3NpdGlvbkNo
YW5nCiAgICAgfQogCiAgICAgaWYgKHNjcm9sbFBvc2l0aW9uKCkgIT0gb2xkUG9zaXRpb24pCi0g
ICAgICAgIHNjcm9sbEFuaW1hdG9yKCktPm5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoc2Nyb2xs
UG9zaXRpb24oKSAtIG9sZFBvc2l0aW9uKTsKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5ub3Rp
ZnlDb250ZW50QXJlYVNjcm9sbGVkKHNjcm9sbFBvc2l0aW9uKCkgLSBvbGRQb3NpdGlvbik7CiB9
CiAKIGJvb2wgU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JiB3aGVlbEV2ZW50KQpAQCAtMTg3LDEzICsxODgsMTMgQEAgYm9vbCBTY3JvbGxh
YmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudChjbwogICAgIGlmICghaXNTY3JvbGxhYmxlT3JSdWJi
ZXJiYW5kYWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc2Nyb2xs
QW5pbWF0b3IoKS0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICByZXR1cm4gc2Ny
b2xsQW5pbWF0b3IoKS5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwogfQogCiAjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKIGJvb2wgU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQo
Y29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50KQogewotICAgIHJldHVybiBzY3Jv
bGxBbmltYXRvcigpLT5oYW5kbGVUb3VjaEV2ZW50KHRvdWNoRXZlbnQpOworICAgIHJldHVybiBz
Y3JvbGxBbmltYXRvcigpLmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7CiB9CiAjZW5kaWYK
IApAQCAtMjU1LDEyICsyNTYsMTIgQEAgdm9pZCBTY3JvbGxhYmxlQXJlYTo6bW91c2VNb3ZlZElu
Q29udGVudAogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjptb3VzZUVudGVyZWRTY3JvbGxiYXIoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0CiB7Ci0gICAgc2Nyb2xsQW5pbWF0b3IoKS0+bW91c2VF
bnRlcmVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS5tb3VzZUVu
dGVyZWRTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6bW91
c2VFeGl0ZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0CiB7Ci0gICAgc2Ny
b2xsQW5pbWF0b3IoKS0+bW91c2VFeGl0ZWRTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICBzY3Jv
bGxBbmltYXRvcigpLm1vdXNlRXhpdGVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9CiAKIHZvaWQg
U2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRBcmVhRGlkU2hvdygpIGNvbnN0CkBAIC0yOTEsOSArMjky
LDkgQEAgYm9vbCBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYmFyc0NhbkJlQWN0aQogdm9pZCBTY3Jv
bGxhYmxlQXJlYTo6ZGlkQWRkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxi
YXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKICAgICBpZiAob3JpZW50YXRpb24gPT0gVmVy
dGljYWxTY3JvbGxiYXIpCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCktPmRpZEFkZFZlcnRpY2Fs
U2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuZGlkQWRkVmVy
dGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKICAgICBlbHNlCi0gICAgICAgIHNjcm9sbEFuaW1h
dG9yKCktPmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICAgICAgc2Ny
b2xsQW5pbWF0b3IoKS5kaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiAKICAg
ICAvLyA8cmRhcjovL3Byb2JsZW0vOTc5NzI1Mz4gQXBwS2l0IHJlc2V0cyB0aGUgc2Nyb2xsYmFy
J3Mgc3R5bGUgd2hlbiB5b3UgYXR0YWNoIGEgc2Nyb2xsYmFyCiAgICAgc2V0U2Nyb2xsYmFyT3Zl
cmxheVN0eWxlKHNjcm9sbGJhck92ZXJsYXlTdHlsZSgpKTsKQEAgLTMwMiw5ICszMDMsOSBAQCB2
b2lkIFNjcm9sbGFibGVBcmVhOjpkaWRBZGRTY3JvbGxiYXIoU2NyCiB2b2lkIFNjcm9sbGFibGVB
cmVhOjp3aWxsUmVtb3ZlU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJP
cmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKICAgICBpZiAob3JpZW50YXRpb24gPT0gVmVydGlj
YWxTY3JvbGxiYXIpCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCktPndpbGxSZW1vdmVWZXJ0aWNh
bFNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxBbmltYXRvcigpLndpbGxSZW1v
dmVWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIpOwogICAgIGVsc2UKLSAgICAgICAgc2Nyb2xs
QW5pbWF0b3IoKS0+d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAg
ICAgICAgc2Nyb2xsQW5pbWF0b3IoKS53aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihzY3Jv
bGxiYXIpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpjb250ZW50c1Jlc2l6ZWQoKQpAQCAt
MzY1LDEyICszNjYsMTIgQEAgdm9pZCBTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbENv
cgogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdl
KCkKIHsKLSAgICBzY3JvbGxBbmltYXRvcigpLT52ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hh
bmdlKCk7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS52ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hh
bmdlKCk7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6Omhvcml6b250YWxTY3JvbGxiYXJMYXll
ckRpZENoYW5nZSgpCiB7Ci0gICAgc2Nyb2xsQW5pbWF0b3IoKS0+aG9yaXpvbnRhbFNjcm9sbGJh
ckxheWVyRGlkQ2hhbmdlKCk7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS5ob3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXJEaWRDaGFuZ2UoKTsKIH0KIAogYm9vbCBTY3JvbGxhYmxlQXJlYTo6aGFzTGF5ZXJG
b3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGFibGVBcmVhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYWJsZUFyZWEuaAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3
IEBAIHB1YmxpYzoKICAgICBTY3JvbGxiYXJPdmVybGF5U3R5bGUgc2Nyb2xsYmFyT3ZlcmxheVN0
eWxlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyT3ZlcmxheVN0eWxlPiht
X3Njcm9sbGJhck92ZXJsYXlTdHlsZSk7IH0KIAogICAgIC8vIFRoaXMgZ2V0dGVyIHdpbGwgY3Jl
YXRlIGEgU2Nyb2xsQW5pbWF0b3IgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LgotICAgIFdF
QkNPUkVfRVhQT1JUIFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvcigpIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIFNjcm9sbEFuaW1hdG9yJiBzY3JvbGxBbmltYXRvcigpIGNvbnN0Owog
CiAgICAgLy8gVGhpcyBnZXR0ZXIgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGUgU2Nyb2xsQW5pbWF0
b3IgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQuCiAgICAgU2Nyb2xsQW5pbWF0b3IqIGV4aXN0aW5n
U2Nyb2xsQW5pbWF0b3IoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbEFuaW1hdG9yLmdldCgpOyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHJldmlzaW9uIDE4MDQ1
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNiwgMjAwOCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDcgKzQ0LDcgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogI2lmICFQTEFURk9STShFRkwpCi1QYXNzUmVmUHRyPFNjcm9sbGJhcj4gU2Nyb2xs
YmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVh
LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUg
c2l6ZSkKK1Bhc3NSZWZQdHI8U2Nyb2xsYmFyPiBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9s
bGJhcihTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9u
IG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKQogewogICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU2Nyb2xsYmFyKHNjcm9sbGFibGVBcmVhLCBvcmllbnRhdGlvbiwgc2l6ZSkp
OwogfQpAQCAtNTYsNyArNTYsNyBAQCBpbnQgU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBh
Z2VzKCkKICAgICByZXR1cm4gbWF4T3ZlcmxhcEJldHdlZW5QYWdlczsKIH0KIAotU2Nyb2xsYmFy
OjpTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUsCitT
Y3JvbGxiYXI6OlNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9s
U2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIFNjcm9sbGJhclRoZW1lKiB0aGVtZSwgYm9vbCBp
c0N1c3RvbVNjcm9sbGJhcikKICAgICA6IG1fc2Nyb2xsYWJsZUFyZWEoc2Nyb2xsYWJsZUFyZWEp
CiAgICAgLCBtX29yaWVudGF0aW9uKG9yaWVudGF0aW9uKQpAQCAtOTMsOCArOTMsNyBAQCBTY3Jv
bGxiYXI6OlNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSogc2NyCiAgICAgaW50IHRoaWNrbmVzcyA9
IG1fdGhlbWUtPnNjcm9sbGJhclRoaWNrbmVzcyhjb250cm9sU2l6ZSk7CiAgICAgV2lkZ2V0Ojpz
ZXRGcmFtZVJlY3QoSW50UmVjdCgwLCAwLCB0aGlja25lc3MsIHRoaWNrbmVzcykpOwogCi0gICAg
aWYgKG1fc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIG1fY3VycmVudFBvcyA9IHN0YXRpY19jYXN0
PGZsb2F0PihtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbih0aGlzKSk7CisgICAgbV9j
dXJyZW50UG9zID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsUG9z
aXRpb24odGhpcykpOwogfQogCiBTY3JvbGxiYXI6On5TY3JvbGxiYXIoKQpAQCAtMTA2LDEyICsx
MDUsMTIgQEAgU2Nyb2xsYmFyOjp+U2Nyb2xsYmFyKCkKIAogU2Nyb2xsYmFyT3ZlcmxheVN0eWxl
IFNjcm9sbGJhcjo6c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9zY3JvbGxhYmxlQXJlYSA/IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbGJhck92ZXJsYXlTdHls
ZSgpIDogU2Nyb2xsYmFyT3ZlcmxheVN0eWxlRGVmYXVsdDsKKyAgICByZXR1cm4gbV9zY3JvbGxh
YmxlQXJlYS5zY3JvbGxiYXJPdmVybGF5U3R5bGUoKTsKIH0KIAogYm9vbCBTY3JvbGxiYXI6Omlz
U2Nyb2xsYWJsZUFyZWFBY3RpdmUoKSBjb25zdAogewotICAgIHJldHVybiBtX3Njcm9sbGFibGVB
cmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmlzQWN0aXZlKCk7CisgICAgcmV0dXJuIG1fc2Nyb2xs
YWJsZUFyZWEuaXNBY3RpdmUoKTsKIH0KIAogYm9vbCBTY3JvbGxiYXI6OmlzU2Nyb2xsVmlld1Nj
cm9sbGJhcigpIGNvbnN0CkBAIC0xMjEsOSArMTIwLDcgQEAgYm9vbCBTY3JvbGxiYXI6OmlzU2Ny
b2xsVmlld1Njcm9sbGJhcigpIAogCiB2b2lkIFNjcm9sbGJhcjo6b2Zmc2V0RGlkQ2hhbmdlKCkK
IHsKLSAgICBBU1NFUlQobV9zY3JvbGxhYmxlQXJlYSk7Ci0KLSAgICBmbG9hdCBwb3NpdGlvbiA9
IHN0YXRpY19jYXN0PGZsb2F0PihtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbih0aGlz
KSk7CisgICAgZmxvYXQgcG9zaXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdD4obV9zY3JvbGxhYmxl
QXJlYS5zY3JvbGxQb3NpdGlvbih0aGlzKSk7CiAgICAgaWYgKHBvc2l0aW9uID09IG1fY3VycmVu
dFBvcykKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMTEsNyArMjA4LDcgQEAgdm9pZCBTY3JvbGxi
YXI6OmF1dG9zY3JvbGxQcmVzc2VkUGFydChkbwogICAgIH0KIAogICAgIC8vIEhhbmRsZSB0aGUg
YXJyb3dzIGFuZCB0cmFjay4KLSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFi
bGVBcmVhLT5zY3JvbGwocHJlc3NlZFBhcnRTY3JvbGxEaXJlY3Rpb24oKSwgcHJlc3NlZFBhcnRT
Y3JvbGxHcmFudWxhcml0eSgpKSkKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYS5zY3JvbGwocHJl
c3NlZFBhcnRTY3JvbGxEaXJlY3Rpb24oKSwgcHJlc3NlZFBhcnRTY3JvbGxHcmFudWxhcml0eSgp
KSkKICAgICAgICAgc3RhcnRUaW1lcklmTmVlZGVkKGRlbGF5KTsKIH0KIApAQCAtMjcwLDIyICsy
NjcsMTkgQEAgU2Nyb2xsR3JhbnVsYXJpdHkgU2Nyb2xsYmFyOjpwcmVzc2VkUGFydAogCiB2b2lk
IFNjcm9sbGJhcjo6bW92ZVRodW1iKGludCBwb3MsIGJvb2wgZHJhZ2dpbmdEb2N1bWVudCkKIHsK
LSAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIHJldHVybjsKLQogICAgIGludCBk
ZWx0YSA9IHBvcyAtIG1fcHJlc3NlZFBvczsKIAogICAgIGlmIChkcmFnZ2luZ0RvY3VtZW50KSB7
CiAgICAgICAgIGlmIChtX2RyYWdnaW5nRG9jdW1lbnQpCiAgICAgICAgICAgICBkZWx0YSA9IHBv
cyAtIG1fZG9jdW1lbnREcmFnUG9zOwogICAgICAgICBtX2RyYWdnaW5nRG9jdW1lbnQgPSB0cnVl
OwotICAgICAgICBGbG9hdFBvaW50IGN1cnJlbnRQb3NpdGlvbiA9IG1fc2Nyb2xsYWJsZUFyZWEt
PnNjcm9sbEFuaW1hdG9yKCktPmN1cnJlbnRQb3NpdGlvbigpOworICAgICAgICBGbG9hdFBvaW50
IGN1cnJlbnRQb3NpdGlvbiA9IG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3IoKS5jdXJy
ZW50UG9zaXRpb24oKTsKICAgICAgICAgaW50IGRlc3RpbmF0aW9uUG9zaXRpb24gPSAobV9vcmll
bnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gY3VycmVudFBvc2l0aW9uLngoKSA6IGN1
cnJlbnRQb3NpdGlvbi55KCkpICsgZGVsdGE7CiAgICAgICAgIGlmIChkZWx0YSA+IDApCiAgICAg
ICAgICAgICBkZXN0aW5hdGlvblBvc2l0aW9uID0gc3RkOjptaW4oZGVzdGluYXRpb25Qb3NpdGlv
biArIGRlbHRhLCBtYXhpbXVtKCkpOwogICAgICAgICBlbHNlIGlmIChkZWx0YSA8IDApCiAgICAg
ICAgICAgICBkZXN0aW5hdGlvblBvc2l0aW9uID0gc3RkOjptYXgoZGVzdGluYXRpb25Qb3NpdGlv
biArIGRlbHRhLCAwKTsKLSAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsVG9PZmZzZXRX
aXRob3V0QW5pbWF0aW9uKG1fb3JpZW50YXRpb24sIGRlc3RpbmF0aW9uUG9zaXRpb24pOworICAg
ICAgICBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihtX29y
aWVudGF0aW9uLCBkZXN0aW5hdGlvblBvc2l0aW9uKTsKICAgICAgICAgbV9kb2N1bWVudERyYWdQ
b3MgPSBwb3M7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMDcsNyArMzAxLDcgQEAgdm9p
ZCBTY3JvbGxiYXI6Om1vdmVUaHVtYihpbnQgcG9zLCBib29sIAogICAgIAogICAgIGlmIChkZWx0
YSkgewogICAgICAgICBmbG9hdCBuZXdQb3NpdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0Pih0aHVt
YlBvcyArIGRlbHRhKSAqIG1heGltdW0oKSAvICh0cmFja0xlbiAtIHRodW1iTGVuKTsKLSAgICAg
ICAgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG1fb3Jp
ZW50YXRpb24sIG5ld1Bvc2l0aW9uKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxU
b09mZnNldFdpdGhvdXRBbmltYXRpb24obV9vcmllbnRhdGlvbiwgbmV3UG9zaXRpb24pOwogICAg
IH0KIH0KIApAQCAtMzQwLDEwICszMzQsOSBAQCB2b2lkIFNjcm9sbGJhcjo6c2V0UHJlc3NlZFBh
cnQoU2Nyb2xsYmFyCiBib29sIFNjcm9sbGJhcjo6bW91c2VNb3ZlZChjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmIGV2dCkKIHsKICAgICBpZiAobV9wcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQpIHsK
LSAgICAgICAgaWYgKHRoZW1lKCktPnNob3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2luKHRoaXMsIGV2
dCkpIHsKLSAgICAgICAgICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQotICAgICAgICAgICAgICAg
IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihtX29yaWVu
dGF0aW9uLCBtX2RyYWdPcmlnaW4pOwotICAgICAgICB9IGVsc2UgeworICAgICAgICBpZiAodGhl
bWUoKS0+c2hvdWxkU25hcEJhY2tUb0RyYWdPcmlnaW4odGhpcywgZXZ0KSkKKyAgICAgICAgICAg
IG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG1fb3JpZW50
YXRpb24sIG1fZHJhZ09yaWdpbik7CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbW92ZVRo
dW1iKG1fb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IAogICAgICAgICAgICAg
ICAgICAgICAgIGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9zaXRpb24oKSkueCgp
IDoKICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0
LnBvc2l0aW9uKCkpLnkoKSwgdGhlbWUoKS0+c2hvdWxkRHJhZ0RvY3VtZW50SW5zdGVhZE9mVGh1
bWIodGhpcywgZXZ0KSk7CkBAIC0zNzksMTQgKzM3MiwxMiBAQCBib29sIFNjcm9sbGJhcjo6bW91
c2VNb3ZlZChjb25zdCBQbGF0Zm9yCiAKIHZvaWQgU2Nyb2xsYmFyOjptb3VzZUVudGVyZWQoKQog
ewotICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQotICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5t
b3VzZUVudGVyZWRTY3JvbGxiYXIodGhpcyk7CisgICAgbV9zY3JvbGxhYmxlQXJlYS5tb3VzZUVu
dGVyZWRTY3JvbGxiYXIodGhpcyk7CiB9CiAKIGJvb2wgU2Nyb2xsYmFyOjptb3VzZUV4aXRlZCgp
CiB7Ci0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEt
Pm1vdXNlRXhpdGVkU2Nyb2xsYmFyKHRoaXMpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEubW91c2VF
eGl0ZWRTY3JvbGxiYXIodGhpcyk7CiAgICAgc2V0SG92ZXJlZFBhcnQoTm9QYXJ0KTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KQEAgLTM5OCwxMyArMzg5LDExIEBAIGJvb2wgU2Nyb2xsYmFyOjptb3Vz
ZVVwKGNvbnN0IFBsYXRmb3JtTW8KICAgICBtX2RyYWdnaW5nRG9jdW1lbnQgPSBmYWxzZTsKICAg
ICBzdG9wVGltZXJJZk5lZWRlZCgpOwogCi0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpIHsKLSAg
ICAgICAgLy8gbV9ob3ZlcmVkUGFydCB3b24ndCBiZSB1cGRhdGVkIHVudGlsIHRoZSBuZXh0IG1v
dXNlTW92ZWQgb3IgbW91c2VEb3duLCBzbyB3ZSBoYXZlIHRvIGhpdCB0ZXN0Ci0gICAgICAgIC8v
IHRvIHJlYWxseSBrbm93IGlmIHRoZSBtb3VzZSBoYXMgZXhpdGVkIHRoZSBzY3JvbGxiYXIgb24g
YSBtb3VzZVVwLgotICAgICAgICBTY3JvbGxiYXJQYXJ0IHBhcnQgPSB0aGVtZSgpLT5oaXRUZXN0
KHRoaXMsIG1vdXNlRXZlbnQucG9zaXRpb24oKSk7Ci0gICAgICAgIGlmIChwYXJ0ID09IE5vUGFy
dCkKLSAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPm1vdXNlRXhpdGVkU2Nyb2xsYmFyKHRo
aXMpOwotICAgIH0KKyAgICAvLyBtX2hvdmVyZWRQYXJ0IHdvbid0IGJlIHVwZGF0ZWQgdW50aWwg
dGhlIG5leHQgbW91c2VNb3ZlZCBvciBtb3VzZURvd24sIHNvIHdlIGhhdmUgdG8gaGl0IHRlc3QK
KyAgICAvLyB0byByZWFsbHkga25vdyBpZiB0aGUgbW91c2UgaGFzIGV4aXRlZCB0aGUgc2Nyb2xs
YmFyIG9uIGEgbW91c2VVcC4KKyAgICBTY3JvbGxiYXJQYXJ0IHBhcnQgPSB0aGVtZSgpLT5oaXRU
ZXN0KHRoaXMsIG1vdXNlRXZlbnQucG9zaXRpb24oKSk7CisgICAgaWYgKHBhcnQgPT0gTm9QYXJ0
KQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLm1vdXNlRXhpdGVkU2Nyb2xsYmFyKHRoaXMpOwog
CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC00OTgsMTIgKzQ4NywxMiBAQCBib29sIFNjcm9sbGJh
cjo6c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlCiAgICAgLy8gTm9uLW92ZXJsYXkgc2Nyb2xsYmFy
cyBzaG91bGQgYWx3YXlzIHBhcnRpY2lwYXRlIGluIGhpdCB0ZXN0aW5nLgogICAgIGlmICghaXNP
dmVybGF5U2Nyb2xsYmFyKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBtX3Nj
cm9sbGFibGVBcmVhLT5zY3JvbGxBbmltYXRvcigpLT5zaG91bGRTY3JvbGxiYXJQYXJ0aWNpcGF0
ZUluSGl0VGVzdGluZyh0aGlzKTsKKyAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxB
bmltYXRvcigpLnNob3VsZFNjcm9sbGJhclBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKHRoaXMpOwog
fQogCiBib29sIFNjcm9sbGJhcjo6aXNXaW5kb3dBY3RpdmUoKSBjb25zdAogewotICAgIHJldHVy
biBtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmlzQWN0aXZlKCk7CisgICAg
cmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuaXNBY3RpdmUoKTsKIH0KIAogdm9pZCBTY3JvbGxiYXI6
OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC01MTEsNDAgKzUwMCwyNyBA
QCB2b2lkIFNjcm9sbGJhcjo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50CiAgICAgaWYgKHN1cHBy
ZXNzSW52YWxpZGF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3Njcm9sbGFi
bGVBcmVhKQotICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5pbnZhbGlkYXRlU2Nyb2xsYmFyKHRo
aXMsIHJlY3QpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEuaW52YWxpZGF0ZVNjcm9sbGJhcih0aGlz
LCByZWN0KTsKIH0KIAogSW50UmVjdCBTY3JvbGxiYXI6OmNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3
KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKIHsKLSAgICBpZiAobV9zY3JvbGxhYmxl
QXJlYSkKLSAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnZlcnRGcm9tU2Nyb2xs
YmFyVG9Db250YWluaW5nVmlldyh0aGlzLCBsb2NhbFJlY3QpOwotCi0gICAgcmV0dXJuIFdpZGdl
dDo6Y29udmVydFRvQ29udGFpbmluZ1ZpZXcobG9jYWxSZWN0KTsKKyAgICByZXR1cm4gbV9zY3Jv
bGxhYmxlQXJlYS5jb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcodGhpcywgbG9j
YWxSZWN0KTsKIH0KIAogSW50UmVjdCBTY3JvbGxiYXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXcoY29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKIHsKLSAgICBpZiAobV9zY3JvbGxh
YmxlQXJlYSkKLSAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXdUb1Njcm9sbGJhcih0aGlzLCBwYXJlbnRSZWN0KTsKLQotICAgIHJldHVybiBX
aWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcocGFyZW50UmVjdCk7CisgICAgcmV0dXJu
IG1fc2Nyb2xsYWJsZUFyZWEuY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKHRo
aXMsIHBhcmVudFJlY3QpOwogfQogCiBJbnRQb2ludCBTY3JvbGxiYXI6OmNvbnZlcnRUb0NvbnRh
aW5pbmdWaWV3KGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdAogewotICAgIGlmICht
X3Njcm9sbGFibGVBcmVhKQotICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+Y29udmVy
dEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KHRoaXMsIGxvY2FsUG9pbnQpOwotCi0gICAg
cmV0dXJuIFdpZGdldDo6Y29udmVydFRvQ29udGFpbmluZ1ZpZXcobG9jYWxQb2ludCk7CisgICAg
cmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdW
aWV3KHRoaXMsIGxvY2FsUG9pbnQpOwogfQogCiBJbnRQb2ludCBTY3JvbGxiYXI6OmNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAogewot
ICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQotICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJl
YS0+Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKHRoaXMsIHBhcmVudFBvaW50
KTsKLQotICAgIHJldHVybiBXaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcocGFyZW50
UG9pbnQpOworICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLmNvbnZlcnRGcm9tQ29udGFpbmlu
Z1ZpZXdUb1Njcm9sbGJhcih0aGlzLCBwYXJlbnRQb2ludCk7CiB9CiAKIGJvb2wgU2Nyb2xsYmFy
OjpzdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKCkgY29uc3QKQEAgLTU1Miw4ICs1Mjgs
OCBAQCBib29sIFNjcm9sbGJhcjo6c3VwcG9ydHNVcGRhdGVPblNlY29uZGFyCiAgICAgLy8gSXQn
cyB1bmZvcnR1bmF0ZSB0aGF0IHRoaXMgbmVlZHMgdG8gYmUgZG9uZSB3aXRoIGFuIGlmZGVmLiBJ
ZGVhbGx5IHRoZXJlIHdvdWxkIGJlIGEgd2F5IHRvIGZlYXR1cmUtZGV0ZWN0CiAgICAgLy8gdGhl
IG5lY2Vzc2FyeSBzdXBwb3J0IHdpdGhpbiBBcHBLaXQuCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9M
TElORykgJiYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwMTAwMAotICAgIHJldHVybiAhbV9zY3JvbGxhYmxlQXJlYS0+Zm9yY2VVcGRhdGVTY3Jv
bGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkKLSAgICAgICAgJiYgKG1f
c2Nyb2xsYWJsZUFyZWEtPmhhc0xheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSB8fCBtX3Njcm9s
bGFibGVBcmVhLT5oYXNMYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSk7CisgICAgcmV0dXJu
ICFtX3Njcm9sbGFibGVBcmVhLmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBl
cmZvcm1hbmNlVGVzdGluZygpCisgICAgICAgICYmIChtX3Njcm9sbGFibGVBcmVhLmhhc0xheWVy
Rm9yVmVydGljYWxTY3JvbGxiYXIoKSB8fCBtX3Njcm9sbGFibGVBcmVhLmhhc0xheWVyRm9ySG9y
aXpvbnRhbFNjcm9sbGJhcigpKTsKICNlbHNlCiAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAkocmV2aXNpb24gMTgwNDUwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDE0IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIw
MTQtMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIFNjcm9sbGJhciA6IHB1Ymxp
YyBXaWRnZXQsCiAKIHB1YmxpYzoKICAgICAvLyBNdXN0IGJlIGltcGxlbWVudGVkIGJ5IHBsYXRm
b3JtcyB0aGF0IGNhbid0IHNpbXBseSB1c2UgdGhlIFNjcm9sbGJhciBiYXNlIGNsYXNzLiAgUmln
aHQgbm93IHRoZSBvbmx5IHBsYXRmb3JtIHRoYXQgaXMgbm90IHVzaW5nIHRoZSBiYXNlIGNsYXNz
IGlzIEdUSy4KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFzc1JlZlB0cjxTY3JvbGxiYXI+
IGNyZWF0ZU5hdGl2ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0
aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZU5hdGl2ZVNjcm9sbGJh
cihTY3JvbGxhYmxlQXJlYSYsIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9s
U2l6ZSk7CiAKICAgICB2aXJ0dWFsIH5TY3JvbGxiYXIoKTsKIApAQCAtMTAzLDggKzEwMyw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgaW50IHBhZ2VTdGVwKGludCB2aWV3V2lkdGhPckhlaWdodCkg
eyByZXR1cm4gcGFnZVN0ZXAodmlld1dpZHRoT3JIZWlnaHQsIHZpZXdXaWR0aE9ySGVpZ2h0KTsg
fQogICAgIHN0YXRpYyBmbG9hdCBwYWdlU3RlcERlbHRhKGludCB3aWR0aE9ySGVpZ2h0KSB7IHJl
dHVybiBzdGQ6Om1heChzdGQ6Om1heChzdGF0aWNfY2FzdDxmbG9hdD4od2lkdGhPckhlaWdodCkg
KiBTY3JvbGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpLCBzdGF0aWNfY2FzdDxm
bG9hdD4od2lkdGhPckhlaWdodCkgLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMo
KSksIDEuMGYpOyB9CiAKLSAgICB2b2lkIGRpc2Nvbm5lY3RGcm9tU2Nyb2xsYWJsZUFyZWEoKSB7
IG1fc2Nyb2xsYWJsZUFyZWEgPSAwOyB9Ci0gICAgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVB
cmVhKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYTsgfQorICAgIFNjcm9sbGFibGVB
cmVhJiBzY3JvbGxhYmxlQXJlYSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWE7IH0K
IAogICAgIGludCBwcmVzc2VkUG9zKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzc2VkUG9zOyB9CiAK
QEAgLTE1OSw3ICsxNTgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVXBk
YXRlT25TZWNvbmRhcnlUaHJlYWQoKSBjb25zdCBvdmVycmlkZTsKIAogcHJvdGVjdGVkOgotICAg
IFNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxi
YXJDb250cm9sU2l6ZSwgU2Nyb2xsYmFyVGhlbWUqID0gMCwgYm9vbCBpc0N1c3RvbVNjcm9sbGJh
ciA9IGZhbHNlKTsKKyAgICBTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEmLCBTY3JvbGxiYXJPcmll
bnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUsIFNjcm9sbGJhclRoZW1lKiA9IDAsIGJvb2wg
aXNDdXN0b21TY3JvbGxiYXIgPSBmYWxzZSk7CiAKICAgICB2b2lkIHVwZGF0ZVRodW1iKCk7CiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRodW1iUG9zaXRpb24oKTsKQEAgLTE3Miw3ICsxNzEsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgU2Nyb2xsRGlyZWN0aW9uIHByZXNzZWRQYXJ0U2Nyb2xsRGlyZWN0
aW9uKCk7CiAgICAgU2Nyb2xsR3JhbnVsYXJpdHkgcHJlc3NlZFBhcnRTY3JvbGxHcmFudWxhcml0
eSgpOwogCi0gICAgU2Nyb2xsYWJsZUFyZWEqIG1fc2Nyb2xsYWJsZUFyZWE7CisgICAgU2Nyb2xs
YWJsZUFyZWEmIG1fc2Nyb2xsYWJsZUFyZWE7CiAgICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gbV9v
cmllbnRhdGlvbjsKICAgICBTY3JvbGxiYXJDb250cm9sU2l6ZSBtX2NvbnRyb2xTaXplOwogICAg
IFNjcm9sbGJhclRoZW1lKiBtX3RoZW1lOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1Njcm9sbEFuaW1hdG9ySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5tbQkocmV2aXNpb24gMTgwNDUwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC04Miw3ICs4Miw3IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JJT1M6OmhhbmRsZVRvdWNoRXZl
bnQKICAgICAgICAgbV9pblRvdWNoU2VxdWVuY2UgPSBmYWxzZTsKICAgICAgICAgbV9zY3JvbGxh
YmxlQXJlYUZvclRvdWNoU2VxdWVuY2UgPSAwOwogICAgICAgICBpZiAobV9zdGFydGVkU2Nyb2xs
KQotICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEoKS0+ZGlkRW5kU2Nyb2xsKCk7CisgICAgICAg
ICAgICBzY3JvbGxhYmxlQXJlYSgpLmRpZEVuZFNjcm9sbCgpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCkBAIC05Miw3ICs5Miw3IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JJT1M6Omhh
bmRsZVRvdWNoRXZlbnQKICAgICAgICAgbV9pblRvdWNoU2VxdWVuY2UgPSBmYWxzZTsKICAgICAg
ICAgbV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UgPSAwOwogICAgICAgICBpZiAobV9z
dGFydGVkU2Nyb2xsKQotICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEoKS0+ZGlkRW5kU2Nyb2xs
KCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSgpLmRpZEVuZFNjcm9sbCgpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIApAQCAtMTA1LDggKzEwNSw4IEBAIGJvb2wgU2Ny
b2xsQW5pbWF0b3JJT1M6OmhhbmRsZVRvdWNoRXZlbnQKICAgICAgICAgZGV0ZXJtaW5lU2Nyb2xs
YWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlKHRvdWNoRGVsdGEpOwogCiAgICAgaWYgKCFtX2NvbW1p
dHRlZFRvU2Nyb2xsQXhpcykgewotICAgICAgICBib29sIGhvcml6b250YWxseVNjcm9sbGFibGUg
PSBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxTaXplKEhvcml6b250YWxTY3JvbGxiYXIpOwotICAg
ICAgICBib29sIHZlcnRpY2FsbHlTY3JvbGxhYmxlID0gbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xs
U2l6ZShWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgICAgIGJvb2wgaG9yaXpvbnRhbGx5U2Nyb2xs
YWJsZSA9IG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsU2l6ZShIb3Jpem9udGFsU2Nyb2xsYmFyKTsK
KyAgICAgICAgYm9vbCB2ZXJ0aWNhbGx5U2Nyb2xsYWJsZSA9IG1fc2Nyb2xsYWJsZUFyZWEuc2Ny
b2xsU2l6ZShWZXJ0aWNhbFNjcm9sbGJhcik7CiAKICAgICAgICAgaWYgKCFob3Jpem9udGFsbHlT
Y3JvbGxhYmxlICYmICF2ZXJ0aWNhbGx5U2Nyb2xsYWJsZSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTE2MCw5ICsxNjAsOSBAQCBib29sIFNjcm9sbEFuaW1hdG9ySU9TOjpoYW5kbGVU
b3VjaEV2ZW50CiAgICAgICAgIGlmICghaGFuZGxlZCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgbV9zdGFydGVkU2Nyb2xsID0gdHJ1ZTsKLSAgICAgICAgc2Nyb2xsYWJsZUFy
ZWEoKS0+ZGlkU3RhcnRTY3JvbGwoKTsKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWEoKS5kaWRTdGFy
dFNjcm9sbCgpOwogICAgIH0gZWxzZSBpZiAoaGFuZGxlZCkKLSAgICAgICAgc2Nyb2xsYWJsZUFy
ZWEoKS0+ZGlkVXBkYXRlU2Nyb2xsKCk7CisgICAgICAgIHNjcm9sbGFibGVBcmVhKCkuZGlkVXBk
YXRlU2Nyb2xsKCk7CiAgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xNzEsNyArMTcxLDcg
QEAgdm9pZCBTY3JvbGxBbmltYXRvcklPUzo6ZGV0ZXJtaW5lU2Nyb2xsYQogewogICAgIEFTU0VS
VCghbV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UpOwogCi0gICAgU2Nyb2xsYWJsZUFy
ZWEqIHNjcm9sbGFibGVBcmVhID0gbV9zY3JvbGxhYmxlQXJlYTsKKyAgICBTY3JvbGxhYmxlQXJl
YSogc2Nyb2xsYWJsZUFyZWEgPSAmbV9zY3JvbGxhYmxlQXJlYTsKICAgICB3aGlsZSAodHJ1ZSkg
ewogICAgICAgICBpZiAoIXNjcm9sbGFibGVBcmVhLT5pc1Bpbm5lZEluQm90aERpcmVjdGlvbnMo
c2Nyb2xsRGVsdGEpKQogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAkocmV2aXNpb24gMTgwNDUwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgY2xhc3MgU2Nyb2xsYmFyOwogY2xhc3MgU2Nyb2xs
QW5pbWF0b3JNYWMgOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3IsIHByaXZhdGUgU2Nyb2xsQ29udHJv
bGxlckNsaWVudCB7CiAKIHB1YmxpYzoKLSAgICBTY3JvbGxBbmltYXRvck1hYyhTY3JvbGxhYmxl
QXJlYSopOworICAgIFNjcm9sbEFuaW1hdG9yTWFjKFNjcm9sbGFibGVBcmVhJik7CiAgICAgdmly
dHVhbCB+U2Nyb2xsQW5pbWF0b3JNYWMoKTsKIAogICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsVG9Q
b2ludEZvclNjcm9sbEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBuZXdQb3NpdGlvbik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFj
Lm1tCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Ny
b2xsQW5pbWF0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2OSw3ICsyNjks
NyBAQCAtICh2b2lkKXNjcm9sbGVySW1wUGFpcjooaWQpc2Nyb2xsZXJJbXBQCiAgICAgaWYgKFtz
Y3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCiAgICAgICAgIHJl
dHVybjsKIAotICAgIF9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsQW5pbWF0b3IoKS0+Y29udGVudEFy
ZWFXaWxsUGFpbnQoKTsKKyAgICBfc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEFuaW1hdG9yKCkuY29u
dGVudEFyZWFXaWxsUGFpbnQoKTsKIH0KIAogLSAodm9pZClzY3JvbGxlckltcFBhaXI6KGlkKXNj
cm9sbGVySW1wUGFpciB1cGRhdGVTY3JvbGxlclN0eWxlRm9yTmV3UmVjb21tZW5kZWRTY3JvbGxl
clN0eWxlOihOU1Njcm9sbGVyU3R5bGUpbmV3UmVjb21tZW5kZWRTY3JvbGxlclN0eWxlCkBAIC0y
NzksNyArMjc5LDcgQEAgLSAodm9pZClzY3JvbGxlckltcFBhaXI6KGlkKXNjcm9sbGVySW1wUAog
CiAgICAgW3Njcm9sbGVySW1wUGFpciBzZXRTY3JvbGxlclN0eWxlOm5ld1JlY29tbWVuZGVkU2Ny
b2xsZXJTdHlsZV07CiAKLSAgICBzdGF0aWNfY2FzdDxTY3JvbGxBbmltYXRvck1hYyo+KF9zY3Jv
bGxhYmxlQXJlYS0+c2Nyb2xsQW5pbWF0b3IoKSktPnVwZGF0ZVNjcm9sbGVyU3R5bGUoKTsKKyAg
ICBzdGF0aWNfY2FzdDxTY3JvbGxBbmltYXRvck1hYyY+KF9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xs
QW5pbWF0b3IoKSkudXBkYXRlU2Nyb2xsZXJTdHlsZSgpOwogfQogCiBAZW5kCkBAIC00MTcsNyAr
NDE3LDcgQEAgLSAodm9pZCljYW5jZWxBbmltYXRpb25zCiAKIC0gKFNjcm9sbEFuaW1hdG9yTWFj
KilzY3JvbGxBbmltYXRvcgogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxTY3JvbGxBbmltYXRv
ck1hYyo+KF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCktPnNjcm9sbEFuaW1hdG9yKCkpOwor
ICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8U2Nyb2xsQW5pbWF0b3JNYWMmPihfc2Nyb2xsYmFyLT5z
Y3JvbGxhYmxlQXJlYSgpLnNjcm9sbEFuaW1hdG9yKCkpOwogfQogCiAtIChOU1JlY3QpY29udmVy
dFJlY3RUb0JhY2tpbmc6KE5TUmVjdClhUmVjdApAQCAtNDQwLDkgKzQ0MCw5IEBAIC0gKENBTGF5
ZXIgKilsYXllcgogCiAgICAgR3JhcGhpY3NMYXllciogbGF5ZXI7CiAgICAgaWYgKF9zY3JvbGxi
YXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgIGxheWVyID0g
X3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigp
OworICAgICAgICBsYXllciA9IF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGF5ZXJGb3JW
ZXJ0aWNhbFNjcm9sbGJhcigpOwogICAgIGVsc2UKLSAgICAgICAgbGF5ZXIgPSBfc2Nyb2xsYmFy
LT5zY3JvbGxhYmxlQXJlYSgpLT5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICAg
ICAgbGF5ZXIgPSBfc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLmxheWVyRm9ySG9yaXpvbnRh
bFNjcm9sbGJhcigpOwogCiAgICAgc3RhdGljIENBTGF5ZXIgKmR1bW15TGF5ZXIgPSBbW0NBTGF5
ZXIgYWxsb2NdIGluaXRdOwogICAgIHJldHVybiBsYXllciA/IGxheWVyLT5wbGF0Zm9ybUxheWVy
KCkgOiBkdW1teUxheWVyOwpAQCAtNDU1LDcgKzQ1NSw3IEBAIC0gKE5TUG9pbnQpbW91c2VMb2Nh
dGlvbkluU2Nyb2xsZXJGb3JTY3IKIAogICAgIEFTU0VSVF9VTlVTRUQoc2Nyb2xsZXJJbXAsIHNj
cm9sbGVySW1wID09IHNjcm9sbGJhclBhaW50ZXJGb3JTY3JvbGxiYXIoX3Njcm9sbGJhcikpOwog
Ci0gICAgcmV0dXJuIF9zY3JvbGxiYXItPmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoX3Njcm9s
bGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+bGFzdEtub3duTW91c2VQb3NpdGlvbigpKTsKKyAgICBy
ZXR1cm4gX3Njcm9sbGJhci0+Y29udmVydEZyb21Db250YWluaW5nVmlldyhfc2Nyb2xsYmFyLT5z
Y3JvbGxhYmxlQXJlYSgpLmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKSk7CiB9CiAKIC0gKE5TUmVj
dCljb252ZXJ0UmVjdFRvTGF5ZXI6KE5TUmVjdClyZWN0CkBAIC00ODIsNyArNDgyLDcgQEAgLSAo
dm9pZClzZXRVcEFscGhhQW5pbWF0aW9uOihSZXRhaW5QdHI8VwogICAgIGlmIChbc2VsZiBzY3Jv
bGxBbmltYXRvcl0tPnNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpICYmICFtdXN0QW5pbWF0
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVh
KCktPnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgJiYgIW11c3RBbmltYXRlKSB7Cisg
ICAgaWYgKF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkuc2hvdWxkU3VzcGVuZFNjcm9sbEFu
aW1hdGlvbnMoKSAmJiAhbXVzdEFuaW1hdGUpIHsKICAgICAgICAgW3NlbGYgc2Nyb2xsQW5pbWF0
b3JdLT5zdGFydFNjcm9sbGJhclBhaW50VGltZXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTYzNCwxMiArNjM0LDEyIEBAIC0gKHZvaWQpaW52YWxpZGF0ZQogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVBhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpjcmVh
dGUoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQorUGFzc093blB0cjxTY3JvbGxBbmlt
YXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFy
ZWEpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxBbmltYXRvck1hYyhzY3JvbGxh
YmxlQXJlYSkpOwogfQogCi1TY3JvbGxBbmltYXRvck1hYzo6U2Nyb2xsQW5pbWF0b3JNYWMoU2Ny
b2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQorU2Nyb2xsQW5pbWF0b3JNYWM6OlNjcm9sbEFu
aW1hdG9yTWFjKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKICAgICA6IFNjcm9sbEFu
aW1hdG9yKHNjcm9sbGFibGVBcmVhKQogICAgICwgbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1l
cigqdGhpcywgJlNjcm9sbEFuaW1hdG9yTWFjOjppbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZp
cmVkKQogICAgICwgbV9zZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyKCp0aGlzLCAmU2Nyb2xs
QW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXJGaXJlZCkKQEAgLTY1Myw3
ICs2NTMsNyBAQCBTY3JvbGxBbmltYXRvck1hYzo6U2Nyb2xsQW5pbWF0b3JNYWMoU2NyCiAgICAg
bV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXZWJTY3JvbGxBbmlt
YXRpb25IZWxwZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxBbmltYXRvcjp0aGlzXSk7
CiAgICAgbV9zY3JvbGxBbmltYXRpb25IZWxwZXIgPSBhZG9wdE5TKFtbTlNDbGFzc0Zyb21TdHJp
bmcoQCJOU1Njcm9sbEFuaW1hdGlvbkhlbHBlciIpIGFsbG9jXSBpbml0V2l0aERlbGVnYXRlOm1f
c2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUuZ2V0KCldKTsKIAotICAgIG1fc2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGFibGVBcmVhOnNjcm9sbGFi
bGVBcmVhXSk7CisgICAgbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlID0gYWRv
cHROUyhbW1dlYlNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUgYWxsb2NdIGluaXRX
aXRoU2Nyb2xsYWJsZUFyZWE6JnNjcm9sbGFibGVBcmVhXSk7CiAgICAgbV9zY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlciA9IGFkb3B0TlMoW1tOU0NsYXNzRnJvbVN0cmluZyhAIk5TU2Nyb2xsZXJJ
bXBQYWlyIikgYWxsb2NdIGluaXRdKTsKICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxl
ciBzZXREZWxlZ2F0ZTooaWQpbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlLmdl
dCgpXTsKICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciBzZXRTY3JvbGxlclN0eWxl
OnJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpXTsKQEAgLTY5OSwxNCArNjk5LDE0IEBAIGJvb2wg
U2Nyb2xsQW5pbWF0b3JNYWM6OnNjcm9sbChTY3JvbGxiYXIKIHsKICAgICBtX2hhdmVTY3JvbGxl
ZFNpbmNlUGFnZUxvYWQgPSB0cnVlOwogCi0gICAgaWYgKCFzY3JvbGxBbmltYXRpb25FbmFibGVk
Rm9yU3lzdGVtKCkgfHwgIW1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEFuaW1hdG9yRW5hYmxlZCgp
KQorICAgIGlmICghc2Nyb2xsQW5pbWF0aW9uRW5hYmxlZEZvclN5c3RlbSgpIHx8ICFtX3Njcm9s
bGFibGVBcmVhLnNjcm9sbEFuaW1hdG9yRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gU2Nyb2xs
QW5pbWF0b3I6OnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxp
ZXIpOwogCiAgICAgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5UGl4ZWwpCiAgICAgICAgIHJl
dHVybiBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3Rl
cCwgbXVsdGlwbGllcik7CiAKICAgICBmbG9hdCBjdXJyZW50UG9zID0gb3JpZW50YXRpb24gPT0g
SG9yaXpvbnRhbFNjcm9sbGJhciA/IG1fY3VycmVudFBvc1ggOiBtX2N1cnJlbnRQb3NZOwotICAg
IGZsb2F0IG5ld1BvcyA9IHN0ZDo6bWF4PGZsb2F0PihzdGQ6Om1pbjxmbG9hdD4oY3VycmVudFBv
cyArIChzdGVwICogbXVsdGlwbGllciksIHN0YXRpY19jYXN0PGZsb2F0PihtX3Njcm9sbGFibGVB
cmVhLT5zY3JvbGxTaXplKG9yaWVudGF0aW9uKSkpLCAwKTsKKyAgICBmbG9hdCBuZXdQb3MgPSBz
dGQ6Om1heDxmbG9hdD4oc3RkOjptaW48ZmxvYXQ+KGN1cnJlbnRQb3MgKyAoc3RlcCAqIG11bHRp
cGxpZXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4obV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxTaXplKG9y
aWVudGF0aW9uKSkpLCAwKTsKICAgICBpZiAoY3VycmVudFBvcyA9PSBuZXdQb3MpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtNzI5LDI1ICs3MjksMjUgQEAgdm9pZCBTY3JvbGxBbmltYXRv
ck1hYzo6c2Nyb2xsVG9PZmZzZXRXaQogCiBGbG9hdFBvaW50IFNjcm9sbEFuaW1hdG9yTWFjOjph
ZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9u
KSBjb25zdAogewotICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYS0+Y29uc3RyYWluc1Njcm9sbGlu
Z1RvQ29udGVudEVkZ2UoKSkKKyAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEuY29uc3RyYWluc1Nj
cm9sbGluZ1RvQ29udGVudEVkZ2UoKSkKICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwogCi0gICAg
ZmxvYXQgbmV3WCA9IHN0ZDo6bWF4PGZsb2F0PihzdGQ6Om1pbjxmbG9hdD4ocG9zaXRpb24ueCgp
LCBtX3Njcm9sbGFibGVBcmVhLT50b3RhbENvbnRlbnRzU2l6ZSgpLndpZHRoKCkgLSBtX3Njcm9s
bGFibGVBcmVhLT52aXNpYmxlV2lkdGgoKSksIDApOwotICAgIGZsb2F0IG5ld1kgPSBzdGQ6Om1h
eDxmbG9hdD4oc3RkOjptaW48ZmxvYXQ+KHBvc2l0aW9uLnkoKSwgbV9zY3JvbGxhYmxlQXJlYS0+
dG90YWxDb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVI
ZWlnaHQoKSksIDApOworICAgIGZsb2F0IG5ld1ggPSBzdGQ6Om1heDxmbG9hdD4oc3RkOjptaW48
ZmxvYXQ+KHBvc2l0aW9uLngoKSwgbV9zY3JvbGxhYmxlQXJlYS50b3RhbENvbnRlbnRzU2l6ZSgp
LndpZHRoKCkgLSBtX3Njcm9sbGFibGVBcmVhLnZpc2libGVXaWR0aCgpKSwgMCk7CisgICAgZmxv
YXQgbmV3WSA9IHN0ZDo6bWF4PGZsb2F0PihzdGQ6Om1pbjxmbG9hdD4ocG9zaXRpb24ueSgpLCBt
X3Njcm9sbGFibGVBcmVhLnRvdGFsQ29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSBtX3Njcm9sbGFi
bGVBcmVhLnZpc2libGVIZWlnaHQoKSksIDApOwogCiAgICAgcmV0dXJuIEZsb2F0UG9pbnQobmV3
WCwgbmV3WSk7CiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmFkanVzdFNjcm9sbFBvc2l0
aW9uVG9Cb3VuZHNJZk5lY2Vzc2FyeSgpCiB7Ci0gICAgYm9vbCBjdXJyZW50bHlDb25zdHJhaW5z
VG9Db250ZW50RWRnZSA9IG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnN0cmFpbnNTY3JvbGxpbmdUb0Nv
bnRlbnRFZGdlKCk7Ci0gICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGlu
Z1RvQ29udGVudEVkZ2UodHJ1ZSk7CisgICAgYm9vbCBjdXJyZW50bHlDb25zdHJhaW5zVG9Db250
ZW50RWRnZSA9IG1fc2Nyb2xsYWJsZUFyZWEuY29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVk
Z2UoKTsKKyAgICBtX3Njcm9sbGFibGVBcmVhLnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRl
bnRFZGdlKHRydWUpOwogCiAgICAgSW50UG9pbnQgY3VycmVudFNjcm9sbFBvc2l0aW9uID0gYWJz
b2x1dGVTY3JvbGxQb3NpdGlvbigpOwogICAgIEZsb2F0UG9pbnQgbmVhcmVzdFBvaW50V2l0aGlu
Qm91bmRzID0gYWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShhYnNvbHV0ZVNjcm9sbFBv
c2l0aW9uKCkpOwogICAgIGltbWVkaWF0ZVNjcm9sbEJ5KG5lYXJlc3RQb2ludFdpdGhpbkJvdW5k
cyAtIGN1cnJlbnRTY3JvbGxQb3NpdGlvbik7CiAKLSAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRD
b25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShjdXJyZW50bHlDb25zdHJhaW5zVG9Db250
ZW50RWRnZSk7CisgICAgbV9zY3JvbGxhYmxlQXJlYS5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9D
b250ZW50RWRnZShjdXJyZW50bHlDb25zdHJhaW5zVG9Db250ZW50RWRnZSk7CiB9CiAKIHZvaWQg
U2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9sbFRvKGNvbnN0IEZsb2F0UG9pbnQmIG5l
d1Bvc2l0aW9uKQpAQCAtNzU1LDcgKzc1NSw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Omlt
bWVkaWF0ZVNjcm9sbFQKICAgICBGbG9hdFBvaW50IGFkanVzdGVkUG9zaXRpb24gPSBhZGp1c3RT
Y3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KG5ld1Bvc2l0aW9uKTsKICAKICAgICBib29sIHBvc2l0
aW9uQ2hhbmdlZCA9IGFkanVzdGVkUG9zaXRpb24ueCgpICE9IG1fY3VycmVudFBvc1ggfHwgYWRq
dXN0ZWRQb3NpdGlvbi55KCkgIT0gbV9jdXJyZW50UG9zWTsKLSAgICBpZiAoIXBvc2l0aW9uQ2hh
bmdlZCAmJiAhc2Nyb2xsYWJsZUFyZWEoKS0+c2Nyb2xsT3JpZ2luQ2hhbmdlZCgpKQorICAgIGlm
ICghcG9zaXRpb25DaGFuZ2VkICYmICFzY3JvbGxhYmxlQXJlYSgpLnNjcm9sbE9yaWdpbkNoYW5n
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRmxvYXRTaXplIGRlbHRhID0gRmxvYXRTaXpl
KGFkanVzdGVkUG9zaXRpb24ueCgpIC0gbV9jdXJyZW50UG9zWCwgYWRqdXN0ZWRQb3NpdGlvbi55
KCkgLSBtX2N1cnJlbnRQb3NZKTsKQEAgLTk0MiwxMSArOTQyLDExIEBAIHZvaWQgU2Nyb2xsQW5p
bWF0b3JNYWM6OmRpZEFkZFZlcnRpY2FsU2MKICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRl
ckRlbGVnYXRlID0gYWRvcHROUyhbW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBhbGxvY10g
aW5pdFdpdGhTY3JvbGxiYXI6c2Nyb2xsYmFyXSk7CiAKICAgICBbcGFpbnRlciBzZXREZWxlZ2F0
ZTooaWQpbV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKV07Ci0gICAgaWYg
KEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5sYXll
ckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0g
c2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkK
ICAgICAgICAgW3BhaW50ZXIgc2V0TGF5ZXI6bGF5ZXItPnBsYXRmb3JtTGF5ZXIoKV07CiAKICAg
ICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciBzZXRWZXJ0aWNhbFNjcm9sbGVySW1wOnBh
aW50ZXJdOwotICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLT5pbkxpdmVSZXNpemUoKSkKKyAgICBp
ZiAoc2Nyb2xsYWJsZUFyZWEoKS5pbkxpdmVSZXNpemUoKSkKICAgICAgICAgW3BhaW50ZXIgc2V0
S25vYkFscGhhOjFdOwogfQogCkBAIC05NzQsMTEgKzk3NCwxMSBAQCB2b2lkIFNjcm9sbEFuaW1h
dG9yTWFjOjpkaWRBZGRIb3Jpem9udGFsCiAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRl
ckRlbGVnYXRlID0gYWRvcHROUyhbW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBhbGxvY10g
aW5pdFdpdGhTY3JvbGxiYXI6c2Nyb2xsYmFyXSk7CiAKICAgICBbcGFpbnRlciBzZXREZWxlZ2F0
ZTooaWQpbV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpXTsKLSAgICBp
ZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCktPmxh
eWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXll
ciA9IHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5sYXllckZvckhvcml6b250YWxTY3JvbGxi
YXIoKSkKICAgICAgICAgW3BhaW50ZXIgc2V0TGF5ZXI6bGF5ZXItPnBsYXRmb3JtTGF5ZXIoKV07
CiAKICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciBzZXRIb3Jpem9udGFsU2Nyb2xs
ZXJJbXA6cGFpbnRlcl07Ci0gICAgaWYgKHNjcm9sbGFibGVBcmVhKCktPmluTGl2ZVJlc2l6ZSgp
KQorICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLmluTGl2ZVJlc2l6ZSgpKQogICAgICAgICBbcGFp
bnRlciBzZXRLbm9iQWxwaGE6MV07CiB9CiAKQEAgLTk5OCw4ICs5OTgsOCBAQCB2b2lkIFNjcm9s
bEFuaW1hdG9yTWFjOjp3aWxsUmVtb3ZlSG9yaXpvCiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6
OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQogewotICAgIEdyYXBoaWNzTGF5ZXIq
IGxheWVyID0gbV9zY3JvbGxhYmxlQXJlYS0+bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpOwot
ICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3Jv
bGxiYXIoKTsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IG1fc2Nyb2xsYWJsZUFyZWEubGF5
ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gbV9z
Y3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNjcm9sbGJhcigpOwogICAgIGlmICghc2Nyb2xsYmFyKQog
ICAgICAgICByZXR1cm47CiAKQEAgLTEwMTIsOCArMTAxMiw4IEBAIHZvaWQgU2Nyb2xsQW5pbWF0
b3JNYWM6OnZlcnRpY2FsU2Nyb2xsYmEKIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aG9yaXpv
bnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkKIHsKLSAgICBHcmFwaGljc0xheWVyKiBsYXll
ciA9IG1fc2Nyb2xsYWJsZUFyZWEtPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAg
IFNjcm9sbGJhciogc2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNjcm9s
bGJhcigpOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbV9zY3JvbGxhYmxlQXJlYS5sYXll
ckZvckhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IG1f
c2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNjcm9sbGJhcigpOwogICAgIGlmICghc2Nyb2xsYmFy
KQogICAgICAgICByZXR1cm47CiAKQEAgLTEwNDgsNyArMTA0OCw3IEBAIHZvaWQgU2Nyb2xsQW5p
bWF0b3JNYWM6Om5vdGlmeUNvbnRlbnRBcmUKICAgICBpZiAoW21fc2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChtX3Njcm9sbGFibGVBcmVhLT5pc0hhbmRsaW5nV2hlZWxFdmVudCgpKQorICAg
IGlmIChtX3Njcm9sbGFibGVBcmVhLmlzSGFuZGxpbmdXaGVlbEV2ZW50KCkpCiAgICAgICAgIHNl
bmRDb250ZW50QXJlYVNjcm9sbGVkKGRlbHRhKTsKICAgICBlbHNlCiAgICAgICAgIHNlbmRDb250
ZW50QXJlYVNjcm9sbGVkU29vbihkZWx0YSk7CkBAIC0xMTA5LDIxICsxMTA5LDIxIEBAIGJvb2wg
U2Nyb2xsQW5pbWF0b3JNYWM6OmhhbmRsZVdoZWVsRXZlbnQKIGJvb2wgU2Nyb2xsQW5pbWF0b3JN
YWM6OnBpbm5lZEluRGlyZWN0aW9uKGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVsdGFZKQogewogICAg
IEZsb2F0U2l6ZSBsaW1pdERlbHRhOwotICAgIGlmIChmYWJzZihkZWx0YVkpID49IGZhYnNmKGRl
bHRhWCkpIHsKKyAgICBpZiAoc3RkOjpmYWJzZihkZWx0YVkpID49IGZhYnNmKGRlbHRhWCkpIHsK
ICAgICAgICAgaWYgKGRlbHRhWSA8IDApIHsKICAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcg
dG8gc2Nyb2xsIHVwLiAgTWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSB0b3AKLSAg
ICAgICAgICAgIGxpbWl0RGVsdGEuc2V0SGVpZ2h0KG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVD
b250ZW50UmVjdCgpLnkoKSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpLnkoKSk7
CisgICAgICAgICAgICBsaW1pdERlbHRhLnNldEhlaWdodChtX3Njcm9sbGFibGVBcmVhLnZpc2li
bGVDb250ZW50UmVjdCgpLnkoKSArIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsT3JpZ2luKCkueSgp
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Ny
b2xsIGRvd24uICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIGJvdHRvbQotICAg
ICAgICAgICAgbGltaXREZWx0YS5zZXRIZWlnaHQobV9zY3JvbGxhYmxlQXJlYS0+dG90YWxDb250
ZW50c1NpemUoKS5oZWlnaHQoKSAtIChtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVudFJl
Y3QoKS5tYXhZKCkgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmlnaW4oKS55KCkpKTsKKyAg
ICAgICAgICAgIGxpbWl0RGVsdGEuc2V0SGVpZ2h0KG1fc2Nyb2xsYWJsZUFyZWEudG90YWxDb250
ZW50c1NpemUoKS5oZWlnaHQoKSAtIChtX3Njcm9sbGFibGVBcmVhLnZpc2libGVDb250ZW50UmVj
dCgpLm1heFkoKSArIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsT3JpZ2luKCkueSgpKSk7CiAgICAg
ICAgIH0KICAgICB9IGVsc2UgaWYgKGRlbHRhWCAhPSAwKSB7CiAgICAgICAgIGlmIChkZWx0YVgg
PCAwKSB7CiAgICAgICAgICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCBsZWZ0LiAgTWFr
ZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSBsZWZ0Ci0gICAgICAgICAgICBsaW1pdERl
bHRhLnNldFdpZHRoKG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLngoKSAr
IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpLngoKSk7CisgICAgICAgICAgICBsaW1p
dERlbHRhLnNldFdpZHRoKG1fc2Nyb2xsYWJsZUFyZWEudmlzaWJsZUNvbnRlbnRSZWN0KCkueCgp
ICsgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxPcmlnaW4oKS54KCkpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwgcmlnaHQuICBNYWtlIHN1
cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIHJpZ2h0Ci0gICAgICAgICAgICBsaW1pdERlbHRh
LnNldFdpZHRoKG1fc2Nyb2xsYWJsZUFyZWEtPnRvdGFsQ29udGVudHNTaXplKCkud2lkdGgoKSAt
IChtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVudFJlY3QoKS5tYXhYKCkgKyBtX3Njcm9s
bGFibGVBcmVhLT5zY3JvbGxPcmlnaW4oKS54KCkpKTsKKyAgICAgICAgICAgIGxpbWl0RGVsdGEu
c2V0V2lkdGgobV9zY3JvbGxhYmxlQXJlYS50b3RhbENvbnRlbnRzU2l6ZSgpLndpZHRoKCkgLSAo
bV9zY3JvbGxhYmxlQXJlYS52aXNpYmxlQ29udGVudFJlY3QoKS5tYXhYKCkgKyBtX3Njcm9sbGFi
bGVBcmVhLnNjcm9sbE9yaWdpbigpLngoKSkpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAt
MTE0Myw5ICsxMTQzLDkgQEAgYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6aXNBbHJlYWR5UGlubmVk
SQogewogICAgIHN3aXRjaCAoYXhpcykgewogICAgIGNhc2UgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0
aWNhbDoKLSAgICAgICAgcmV0dXJuICh3aGVlbEV2ZW50LmRlbHRhWSgpID4gMCAmJiBtX3Njcm9s
bGFibGVBcmVhLT5zY3JvbGxlZFRvVG9wKCkpIHx8ICh3aGVlbEV2ZW50LmRlbHRhWSgpIDwgMCAm
JiBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxlZFRvQm90dG9tKCkpOworICAgICAgICByZXR1cm4g
KHdoZWVsRXZlbnQuZGVsdGFZKCkgPiAwICYmIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsZWRUb1Rv
cCgpKSB8fCAod2hlZWxFdmVudC5kZWx0YVkoKSA8IDAgJiYgbV9zY3JvbGxhYmxlQXJlYS5zY3Jv
bGxlZFRvQm90dG9tKCkpOwogICAgIGNhc2UgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsOgot
ICAgICAgICByZXR1cm4gKHdoZWVsRXZlbnQuZGVsdGFYKCkgPiAwICYmIG1fc2Nyb2xsYWJsZUFy
ZWEtPnNjcm9sbGVkVG9MZWZ0KCkpIHx8ICh3aGVlbEV2ZW50LmRlbHRhWCgpIDwgMCAmJiBtX3Nj
cm9sbGFibGVBcmVhLT5zY3JvbGxlZFRvUmlnaHQoKSk7CisgICAgICAgIHJldHVybiAod2hlZWxF
dmVudC5kZWx0YVgoKSA+IDAgJiYgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxlZFRvTGVmdCgpKSB8
fCAod2hlZWxFdmVudC5kZWx0YVgoKSA8IDAgJiYgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxlZFRv
UmlnaHQoKSk7CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMTY5LDE1
ICsxMTY5LDE1IEBAIHN0YXRpYyBib29sIGdlc3R1cmVTaG91bGRCZWdpblNuYXAoY29uc3QKIAog
Ym9vbCBTY3JvbGxBbmltYXRvck1hYzo6YWxsb3dzVmVydGljYWxTdHJldGNoaW5nKGNvbnN0IFBs
YXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKIHsKLSAgICBzd2l0Y2ggKG1fc2Nyb2xsYWJs
ZUFyZWEtPnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSgpKSB7CisgICAgc3dpdGNoIChtX3Njcm9s
bGFibGVBcmVhLnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSgpKSB7CiAgICAgY2FzZSBTY3JvbGxF
bGFzdGljaXR5QXV0b21hdGljOiB7Ci0gICAgICAgIFNjcm9sbGJhciogaFNjcm9sbGVyID0gbV9z
Y3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgICAgICBTY3JvbGxiYXIq
IHZTY3JvbGxlciA9IG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAg
ICAgIFNjcm9sbGJhciogaFNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS5ob3Jpem9udGFsU2Ny
b2xsYmFyKCk7CisgICAgICAgIFNjcm9sbGJhciogdlNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJl
YS52ZXJ0aWNhbFNjcm9sbGJhcigpOwogICAgICAgICBib29sIHNjcm9sbGJhcnNBbGxvd1N0cmV0
Y2hpbmcgPSAoKHZTY3JvbGxlciAmJiB2U2Nyb2xsZXItPmVuYWJsZWQoKSkgfHwgKCFoU2Nyb2xs
ZXIgfHwgIWhTY3JvbGxlci0+ZW5hYmxlZCgpKSk7Ci0gICAgICAgIGJvb2wgZXZlbnRQcmV2ZW50
c1N0cmV0Y2hpbmcgPSBtX3Njcm9sbGFibGVBcmVhLT5oYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZUFuY2VzdG9yKCkgJiYgbmV3R2VzdHVyZUlzU3RhcnRpbmcod2hlZWxFdmVudCkgJiYgaXNB
bHJlYWR5UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1cmUod2hlZWxFdmVudCwgU2Nyb2xsRXZlbnRB
eGlzOjpWZXJ0aWNhbCk7CisgICAgICAgIGJvb2wgZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmcgPSBt
X3Njcm9sbGFibGVBcmVhLmhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSAm
JiBuZXdHZXN0dXJlSXNTdGFydGluZyh3aGVlbEV2ZW50KSAmJiBpc0FscmVhZHlQaW5uZWRJbkRp
cmVjdGlvbk9mR2VzdHVyZSh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKTsK
ICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgICAgICBpZiAoIWV2ZW50UHJldmVudHNT
dHJldGNoaW5nKQotICAgICAgICAgICAgZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmcgPSBnZXN0dXJl
U2hvdWxkQmVnaW5TbmFwKHdoZWVsRXZlbnQsIG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU25h
cE9mZnNldHMoKSk7CisgICAgICAgICAgICBldmVudFByZXZlbnRzU3RyZXRjaGluZyA9IGdlc3R1
cmVTaG91bGRCZWdpblNuYXAod2hlZWxFdmVudCwgbV9zY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNu
YXBPZmZzZXRzKCkpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiBzY3JvbGxiYXJzQWxsb3dTdHJl
dGNoaW5nICYmICFldmVudFByZXZlbnRzU3RyZXRjaGluZzsKICAgICB9CkBAIC0xMTkzLDE1ICsx
MTkzLDE1IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OmFsbG93c1ZlcnRpY2FsU3QKIAogYm9v
bCBTY3JvbGxBbmltYXRvck1hYzo6YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoY29uc3QgUGxh
dGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQogewotICAgIHN3aXRjaCAobV9zY3JvbGxhYmxl
QXJlYS0+aG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoKSkgeworICAgIHN3aXRjaCAobV9zY3Jv
bGxhYmxlQXJlYS5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSgpKSB7CiAgICAgY2FzZSBTY3Jv
bGxFbGFzdGljaXR5QXV0b21hdGljOiB7Ci0gICAgICAgIFNjcm9sbGJhciogaFNjcm9sbGVyID0g
bV9zY3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgICAgICBTY3JvbGxi
YXIqIHZTY3JvbGxlciA9IG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyKCk7Cisg
ICAgICAgIFNjcm9sbGJhciogaFNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS5ob3Jpem9udGFs
U2Nyb2xsYmFyKCk7CisgICAgICAgIFNjcm9sbGJhciogdlNjcm9sbGVyID0gbV9zY3JvbGxhYmxl
QXJlYS52ZXJ0aWNhbFNjcm9sbGJhcigpOwogICAgICAgICBib29sIHNjcm9sbGJhcnNBbGxvd1N0
cmV0Y2hpbmcgPSAoKGhTY3JvbGxlciAmJiBoU2Nyb2xsZXItPmVuYWJsZWQoKSkgfHwgKCF2U2Ny
b2xsZXIgfHwgIXZTY3JvbGxlci0+ZW5hYmxlZCgpKSk7Ci0gICAgICAgIGJvb2wgZXZlbnRQcmV2
ZW50c1N0cmV0Y2hpbmcgPSBtX3Njcm9sbGFibGVBcmVhLT5oYXNTY3JvbGxhYmxlT3JSdWJiZXJi
YW5kYWJsZUFuY2VzdG9yKCkgJiYgbmV3R2VzdHVyZUlzU3RhcnRpbmcod2hlZWxFdmVudCkgJiYg
aXNBbHJlYWR5UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1cmUod2hlZWxFdmVudCwgU2Nyb2xsRXZl
bnRBeGlzOjpIb3Jpem9udGFsKTsKKyAgICAgICAgYm9vbCBldmVudFByZXZlbnRzU3RyZXRjaGlu
ZyA9IG1fc2Nyb2xsYWJsZUFyZWEuaGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rv
cigpICYmIG5ld0dlc3R1cmVJc1N0YXJ0aW5nKHdoZWVsRXZlbnQpICYmIGlzQWxyZWFkeVBpbm5l
ZEluRGlyZWN0aW9uT2ZHZXN0dXJlKHdoZWVsRXZlbnQsIFNjcm9sbEV2ZW50QXhpczo6SG9yaXpv
bnRhbCk7CiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICAgICAgaWYgKCFldmVudFBy
ZXZlbnRzU3RyZXRjaGluZykKLSAgICAgICAgICAgIGV2ZW50UHJldmVudHNTdHJldGNoaW5nID0g
Z2VzdHVyZVNob3VsZEJlZ2luU25hcCh3aGVlbEV2ZW50LCBtX3Njcm9sbGFibGVBcmVhLT5ob3Jp
em9udGFsU25hcE9mZnNldHMoKSk7CisgICAgICAgICAgICBldmVudFByZXZlbnRzU3RyZXRjaGlu
ZyA9IGdlc3R1cmVTaG91bGRCZWdpblNuYXAod2hlZWxFdmVudCwgbV9zY3JvbGxhYmxlQXJlYS5o
b3Jpem9udGFsU25hcE9mZnNldHMoKSk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuIHNjcm9sbGJh
cnNBbGxvd1N0cmV0Y2hpbmcgJiYgIWV2ZW50UHJldmVudHNTdHJldGNoaW5nOwogICAgIH0KQEAg
LTEyMTcsNyArMTIxNyw3IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OmFsbG93c0hvcml6b250
YWwKIAogSW50U2l6ZSBTY3JvbGxBbmltYXRvck1hYzo6c3RyZXRjaEFtb3VudCgpCiB7Ci0gICAg
cmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPm92ZXJoYW5nQW1vdW50KCk7CisgICAgcmV0dXJuIG1f
c2Nyb2xsYWJsZUFyZWEub3ZlcmhhbmdBbW91bnQoKTsKIH0KIAogYm9vbCBTY3JvbGxBbmltYXRv
ck1hYzo6cGlubmVkSW5EaXJlY3Rpb24oY29uc3QgRmxvYXRTaXplJiBkaXJlY3Rpb24pCkBAIC0x
MjI3LDcgKzEyMjcsNyBAQCBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpwaW5uZWRJbkRpcmVjdGlv
CiAKIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OmNhblNjcm9sbEhvcml6b250YWxseSgpCiB7Ci0g
ICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Ny
b2xsYmFyKCk7CisgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLmhv
cml6b250YWxTY3JvbGxiYXIoKTsKICAgICBpZiAoIXNjcm9sbGJhcikKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIHJldHVybiBzY3JvbGxiYXItPmVuYWJsZWQoKTsKQEAgLTEyMzUsNyArMTIz
NSw3IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OmNhblNjcm9sbEhvcml6b24KIAogYm9vbCBT
Y3JvbGxBbmltYXRvck1hYzo6Y2FuU2Nyb2xsVmVydGljYWxseSgpCiB7Ci0gICAgU2Nyb2xsYmFy
KiBzY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAg
IFNjcm9sbGJhciogc2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNjcm9sbGJh
cigpOwogICAgIGlmICghc2Nyb2xsYmFyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0
dXJuIHNjcm9sbGJhci0+ZW5hYmxlZCgpOwpAQCAtMTI0OCwxNCArMTI0OCwxNCBAQCBib29sIFNj
cm9sbEFuaW1hdG9yTWFjOjpzaG91bGRSdWJiZXJCYW5kCiAKIEludFBvaW50IFNjcm9sbEFuaW1h
dG9yTWFjOjphYnNvbHV0ZVNjcm9sbFBvc2l0aW9uKCkKIHsKLSAgICByZXR1cm4gbV9zY3JvbGxh
YmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubG9jYXRpb24oKSArIG1fc2Nyb2xsYWJsZUFy
ZWEtPnNjcm9sbE9yaWdpbigpOworICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLnZpc2libGVD
b250ZW50UmVjdCgpLmxvY2F0aW9uKCkgKyBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbE9yaWdpbigp
OwogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjppbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRD
b250ZW50RWRnZUNvbnN0cmFpbnRzKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpCiB7Ci0gICAgbV9z
Y3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2Up
OworICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVk
Z2UoZmFsc2UpOwogICAgIGltbWVkaWF0ZVNjcm9sbEJ5KGRlbHRhKTsKLSAgICBtX3Njcm9sbGFi
bGVBcmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSh0cnVlKTsKKyAgICBt
X3Njcm9sbGFibGVBcmVhLnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKHRydWUp
OwogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjppbW1lZGlhdGVTY3JvbGxCeShjb25zdCBG
bG9hdFNpemUmIGRlbHRhKQpAQCAtMTMwNCw3ICsxMzA0LDcgQEAgdm9pZCBTY3JvbGxBbmltYXRv
ck1hYzo6dXBkYXRlU2Nyb2xsZXJTdAogCiAgICAgTlNTY3JvbGxlclN0eWxlIG5ld1N0eWxlID0g
W21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgc2Nyb2xsZXJTdHlsZV07CiAKLSAgICBpZiAo
U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9sbGFibGVBcmVhKCktPnZlcnRpY2Fs
U2Nyb2xsYmFyKCkpIHsKKyAgICBpZiAoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IHNj
cm9sbGFibGVBcmVhKCkudmVydGljYWxTY3JvbGxiYXIoKSkgewogICAgICAgICB2ZXJ0aWNhbFNj
cm9sbGJhci0+aW52YWxpZGF0ZSgpOwogCiAgICAgICAgIFNjcm9sbGJhclBhaW50ZXIgb2xkVmVy
dGljYWxQYWludGVyID0gW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgdmVydGljYWxTY3Jv
bGxlckltcF07CkBAIC0xMzIyLDcgKzEzMjIsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjp1
cGRhdGVTY3JvbGxlclN0CiAgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3Qo
SW50UmVjdCgwLCAwLCB0aGlja25lc3MsIHRoaWNrbmVzcykpOwogICAgIH0KIAotICAgIGlmIChT
Y3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIgPSBzY3JvbGxhYmxlQXJlYSgpLT5ob3Jpem9u
dGFsU2Nyb2xsYmFyKCkpIHsKKyAgICBpZiAoU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFy
ID0gc2Nyb2xsYWJsZUFyZWEoKS5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgaG9y
aXpvbnRhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwogCiAgICAgICAgIFNjcm9sbGJhclBhaW50
ZXIgb2xkSG9yaXpvbnRhbFBhaW50ZXIgPSBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciBo
b3Jpem9udGFsU2Nyb2xsZXJJbXBdOwpAQCAtMTM0Miw3ICsxMzQyLDcgQEAgdm9pZCBTY3JvbGxB
bmltYXRvck1hYzo6dXBkYXRlU2Nyb2xsZXJTdAogCiAgICAgLy8gSWYgbV9uZWVkc1Njcm9sbGVy
U3R5bGVVcGRhdGUgaXMgdHJ1ZSwgdGhlbiB0aGUgcGFnZSBpcyByZXN0b3JpbmcgZnJvbSB0aGUg
cGFnZSBjYWNoZSwgYW5kIAogICAgIC8vIGEgcmVsYXlvdXQgd2lsbCBoYXBwZW4gb24gaXRzIG93
bi4gT3RoZXJ3aXNlLCB3ZSBtdXN0IGluaXRpYXRlIGEgcmUtbGF5b3V0IG91cnNlbHZlcy4KLSAg
ICBzY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxiYXJTdHlsZUNoYW5nZWQobmV3U3R5bGUsICFtX25l
ZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSk7CisgICAgc2Nyb2xsYWJsZUFyZWEoKS5zY3JvbGxiYXJT
dHlsZUNoYW5nZWQobmV3U3R5bGUsICFtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSk7CiAKICAg
ICBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSA9IGZhbHNlOwogfQpAQCAtMTM5NSwxMyArMTM5
NSwxMyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzZW5kQ29udGVudEFyZWFTCiB2b2lkIFNj
cm9sbEFuaW1hdG9yTWFjOjpzZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QoY29uc3QgSW50UmVj
dCYgc2Nyb2xsZXJUaHVtYikKIHsKICAgICBJbnRSZWN0IHJlY3RJblZpZXdDb29yZGluYXRlcyA9
IHNjcm9sbGVyVGh1bWI7Ci0gICAgaWYgKFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBt
X3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgIGlmIChTY3JvbGxiYXIq
IHZlcnRpY2FsU2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNjcm9sbGJhcigp
KQogICAgICAgICByZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB2ZXJ0aWNhbFNjcm9sbGJhci0+Y29u
dmVydFRvQ29udGFpbmluZ1ZpZXcoc2Nyb2xsZXJUaHVtYik7CiAKICAgICBpZiAocmVjdEluVmll
d0Nvb3JkaW5hdGVzID09IG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3Qo
cmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKKyAgICBtX3Njcm9sbGFibGVBcmVhLnNldFZpc2libGVT
Y3JvbGxlclRodW1iUmVjdChyZWN0SW5WaWV3Q29vcmRpbmF0ZXMpOwogICAgIG1fdmlzaWJsZVNj
cm9sbGVyVGh1bWJSZWN0ID0gcmVjdEluVmlld0Nvb3JkaW5hdGVzOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAkocmV2aXNpb24gMTgw
NDUwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3LCAyMDA4LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUgSW5j
LgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKS4KICAqCkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBQb3B1cE1lbnVXaW46
OnNob3coY29uc3QgSW50UmVjdCYgcgogCiAgICAgaWYgKCFtX3Njcm9sbGJhciAmJiB2aXNpYmxl
SXRlbXMoKSA8IGNsaWVudCgpLT5saXN0U2l6ZSgpKSB7CiAgICAgICAgIC8vIFdlIG5lZWQgYSBz
Y3JvbGwgYmFyCi0gICAgICAgIG1fc2Nyb2xsYmFyID0gY2xpZW50KCktPmNyZWF0ZVNjcm9sbGJh
cih0aGlzLCBWZXJ0aWNhbFNjcm9sbGJhciwgU21hbGxTY3JvbGxiYXIpOworICAgICAgICBtX3Nj
cm9sbGJhciA9IGNsaWVudCgpLT5jcmVhdGVTY3JvbGxiYXIoKnRoaXMsIFZlcnRpY2FsU2Nyb2xs
YmFyLCBTbWFsbFNjcm9sbGJhcik7CiAgICAgICAgIG1fc2Nyb2xsYmFyLT5zdHlsZUNoYW5nZWQo
KTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYtMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UG9ydGlvbnMgYXJlIENvcHlyaWdodCAoQykgMTk5OCBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBD
b3Jwb3JhdGlvbi4KICAqCkBAIC0zMzYsNyArMzM2LDcgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxh
eWVyKFJlbmRlckxheWVyTW9kZQogICAgICAgICAvLyBXZSBzYXZlIGFuZCByZXN0b3JlIG9ubHkg
dGhlIHNjcm9sbE9mZnNldCBhcyB0aGUgb3RoZXIgc2Nyb2xsIHZhbHVlcyBhcmUgcmVjYWxjdWxh
dGVkLgogICAgICAgICBtX3Njcm9sbE9mZnNldCA9IGVsZW1lbnQtPnNhdmVkTGF5ZXJTY3JvbGxP
ZmZzZXQoKTsKICAgICAgICAgaWYgKCFtX3Njcm9sbE9mZnNldC5pc1plcm8oKSkKLSAgICAgICAg
ICAgIHNjcm9sbEFuaW1hdG9yKCktPnNldEN1cnJlbnRQb3NpdGlvbihGbG9hdFBvaW50KG1fc2Ny
b2xsT2Zmc2V0LndpZHRoKCksIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKSk7CisgICAgICAgICAg
ICBzY3JvbGxBbmltYXRvcigpLnNldEN1cnJlbnRQb3NpdGlvbihGbG9hdFBvaW50KG1fc2Nyb2xs
T2Zmc2V0LndpZHRoKCksIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKSk7CiAgICAgICAgIGVsZW1l
bnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxPZmZzZXQoSW50U2l6ZSgpKTsKICAgICB9CiB9CkBAIC0z
MDY1LDkgKzMwNjUsOSBAQCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyTGF5ZXI6OmNyZWF0
CiAgICAgUmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJh
cihyZW5kZXJlcigpKTsKICAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlID0gYWN0dWFs
UmVuZGVyZXItPmlzQm94KCkgJiYgYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkuaGFzUHNldWRvU3R5
bGUoU0NST0xMQkFSKTsKICAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCi0gICAgICAg
IHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHRoaXMsIG9y
aWVudGF0aW9uLCBhY3R1YWxSZW5kZXJlci0+ZWxlbWVudCgpKTsKKyAgICAgICAgd2lkZ2V0ID0g
UmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9u
LCBhY3R1YWxSZW5kZXJlci0+ZWxlbWVudCgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgd2lkZ2V0
ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIodGhpcywgb3JpZW50YXRpb24sIFJl
Z3VsYXJTY3JvbGxiYXIpOworICAgICAgICB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2
ZVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpOwogICAgICAg
ICBkaWRBZGRTY3JvbGxiYXIod2lkZ2V0LmdldCgpLCBvcmllbnRhdGlvbik7CiAgICAgfQogICAg
IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmFkZENoaWxkKHdpZGdldC5nZXQoKSk7CkBA
IC0zMDg0LDcgKzMwODQsNiBAQCB2b2lkIFJlbmRlckxheWVyOjpkZXN0cm95U2Nyb2xsYmFyKFNj
cm9sCiAgICAgICAgIHdpbGxSZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpLCBvcmllbnRh
dGlvbik7CiAKICAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICBzY3JvbGxi
YXItPmRpc2Nvbm5lY3RGcm9tU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBzY3JvbGxiYXIgPSBudWxs
cHRyOwogfQogCkBAIC0zNDgyLDggKzM0ODEsOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVT
Y3JvbGxJbmZvQWZ0ZXJMCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzNTk2NAogICAgIHVwZGF0ZVNuYXBPZmZzZXRzKCk7CiAjaWYgUExBVEZPUk0oTUFD
KQotICAgIGlmIChleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHNjcm9sbEFuaW1h
dG9yKCktPnVwZGF0ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycygpOworICAgIGlmIChTY3JvbGxB
bmltYXRvciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAg
ICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+dXBkYXRlU2Nyb2xsQW5pbWF0b3JzQW5kVGltZXJz
KCk7CiAjZW5kaWYKICNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMSwgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIw
MDgsIDIwMTEsIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAg
ICAgICAgICAgICAgIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4g
KGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTgwMiw5
ICs4MDIsOSBAQCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyTGlzdEJveDo6Y3JlCiAgICAg
UmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OwogICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5
bGUgPSBzdHlsZSgpLmhhc1BzZXVkb1N0eWxlKFNDUk9MTEJBUik7CiAgICAgaWYgKGhhc0N1c3Rv
bVNjcm9sbGJhclN0eWxlKQotICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0
ZUN1c3RvbVNjcm9sbGJhcih0aGlzLCBWZXJ0aWNhbFNjcm9sbGJhciwgJnNlbGVjdEVsZW1lbnQo
KSk7CisgICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xs
YmFyKCp0aGlzLCBWZXJ0aWNhbFNjcm9sbGJhciwgJnNlbGVjdEVsZW1lbnQoKSk7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHRo
aXMsIFZlcnRpY2FsU2Nyb2xsYmFyLCB0aGVtZSgpLnNjcm9sbGJhckNvbnRyb2xTaXplRm9yUGFy
dChMaXN0Ym94UGFydCkpOworICAgICAgICB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2
ZVNjcm9sbGJhcigqdGhpcywgVmVydGljYWxTY3JvbGxiYXIsIHRoZW1lKCkuc2Nyb2xsYmFyQ29u
dHJvbFNpemVGb3JQYXJ0KExpc3Rib3hQYXJ0KSk7CiAgICAgICAgIGRpZEFkZFNjcm9sbGJhcih3
aWRnZXQuZ2V0KCksIFZlcnRpY2FsU2Nyb2xsYmFyKTsKICAgICB9CiAgICAgdmlldygpLmZyYW1l
VmlldygpLmFkZENoaWxkKHdpZGdldC5nZXQoKSk7CkBAIC04MTksOCArODE5LDcgQEAgdm9pZCBS
ZW5kZXJMaXN0Qm94OjpkZXN0cm95U2Nyb2xsYmFyKCkKICAgICBpZiAoIW1fdkJhci0+aXNDdXN0
b21TY3JvbGxiYXIoKSkKICAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OndpbGxSZW1vdmVTY3JvbGxi
YXIobV92QmFyLmdldCgpLCBWZXJ0aWNhbFNjcm9sbGJhcik7CiAgICAgbV92QmFyLT5yZW1vdmVG
cm9tUGFyZW50KCk7Ci0gICAgbV92QmFyLT5kaXNjb25uZWN0RnJvbVNjcm9sbGFibGVBcmVhKCk7
Ci0gICAgbV92QmFyID0gMDsKKyAgICBtX3ZCYXIgPSBudWxscHRyOwogfQogCiB2b2lkIFJlbmRl
ckxpc3RCb3g6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCShyZXZpc2lv
biAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIHNlbGVjdCBlbGVtZW50IHJlbmRlcmVyIGluIFdlYkNvcmUuCiAgKgogICogQ29weXJpZ2h0
IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4K
LSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogICAgICAgICAgICAgICAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAt
NTc1LDcgKzU3NSw3IEBAIEhvc3RXaW5kb3cqIFJlbmRlck1lbnVMaXN0Ojpob3N0V2luZG93KCkK
ICAgICByZXR1cm4gdmlldygpLmZyYW1lVmlldygpLmhvc3RXaW5kb3coKTsKIH0KIAotUGFzc1Jl
ZlB0cjxTY3JvbGxiYXI+IFJlbmRlck1lbnVMaXN0OjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYWJs
ZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwg
U2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUpCitQYXNzUmVmUHRyPFNjcm9sbGJhcj4g
UmVuZGVyTWVudUxpc3Q6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJs
ZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9s
U2l6ZSBjb250cm9sU2l6ZSkKIHsKICAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7CiAgICAg
Ym9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9IHN0eWxlKCkuaGFzUHNldWRvU3R5bGUoU0NS
T0xMQkFSKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5o
CShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVu
dUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBzZWxlY3QgZWxlbWVudCByZW5kZXJlciBpbiBXZWJDb3JlLgogICoKICAqIENv
cHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTEzLDcgKzExMyw3IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCBib29sIG11bHRpcGxlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdygpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSos
IFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGFi
bGVBcmVhJiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplKSBvdmVy
cmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNMaW5lSWZFbXB0eSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNjcm9sbGJhci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNjcm9sbGJhci5jcHAJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zNiwxMiArMzYsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWZQ
dHI8U2Nyb2xsYmFyPiBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcihTY3Jv
bGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uLCBFbGVtZW50KiBvd25lckVsZW1lbnQsIEZyYW1lKiBvd25pbmdGcmFtZSkKK1JlZlB0cjxT
Y3JvbGxiYXI+IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKFNjcm9sbGFi
bGVBcmVhJiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24s
IEVsZW1lbnQqIG93bmVyRWxlbWVudCwgRnJhbWUqIG93bmluZ0ZyYW1lKQogewogICAgIHJldHVy
biBhZG9wdFJlZihuZXcgUmVuZGVyU2Nyb2xsYmFyKHNjcm9sbGFibGVBcmVhLCBvcmllbnRhdGlv
biwgb3duZXJFbGVtZW50LCBvd25pbmdGcmFtZSkpOwogfQogCi1SZW5kZXJTY3JvbGxiYXI6OlJl
bmRlclNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uLCBFbGVtZW50KiBvd25lckVsZW1lbnQsIEZyYW1lKiBvd25p
bmdGcmFtZSkKK1JlbmRlclNjcm9sbGJhcjo6UmVuZGVyU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVh
JiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIEVsZW1l
bnQqIG93bmVyRWxlbWVudCwgRnJhbWUqIG93bmluZ0ZyYW1lKQogICAgIDogU2Nyb2xsYmFyKHNj
cm9sbGFibGVBcmVhLCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhciwgUmVuZGVyU2Nyb2xs
YmFyVGhlbWU6OnJlbmRlclNjcm9sbGJhclRoZW1lKCksIHRydWUpCiAgICAgLCBtX293bmVyRWxl
bWVudChvd25lckVsZW1lbnQpCiAgICAgLCBtX293bmluZ0ZyYW1lKG93bmluZ0ZyYW1lKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuaAkocmV2aXNpb24g
MTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDksIDIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Miw3ICs0Miw3IEBAIGNsYXNzIFJlbmRlclN0eWxl
OwogY2xhc3MgUmVuZGVyU2Nyb2xsYmFyIGZpbmFsIDogcHVibGljIFNjcm9sbGJhciB7CiBwdWJs
aWM6CiAgICAgZnJpZW5kIGNsYXNzIFNjcm9sbGJhcjsKLSAgICBzdGF0aWMgUmVmUHRyPFNjcm9s
bGJhcj4gY3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3Jp
ZW50YXRpb24sIEVsZW1lbnQqLCBGcmFtZSogb3duaW5nRnJhbWUgPSBudWxscHRyKTsKKyAgICBz
dGF0aWMgUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKFNjcm9sbGFibGVB
cmVhJiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIEVsZW1lbnQqLCBGcmFtZSogb3duaW5nRnJhbWUg
PSBudWxscHRyKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJTY3JvbGxiYXIoKTsKIAogICAgIFJlbmRl
ckJveCogb3duaW5nUmVuZGVyZXIoKSBjb25zdDsKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgog
ICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGdldFNjcm9sbGJhclBzZXVkb1N0eWxlKFNjcm9s
bGJhclBhcnQsIFBzZXVkb0lkKTsKIAogcHJpdmF0ZToKLSAgICBSZW5kZXJTY3JvbGxiYXIoU2Ny
b2xsYWJsZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgRWxlbWVudCosIEZyYW1lKik7Cisg
ICAgUmVuZGVyU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhJiwgU2Nyb2xsYmFyT3JpZW50YXRpb24s
IEVsZW1lbnQqLCBGcmFtZSopOwogCiAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxW
aWV3Kikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldEVuYWJsZWQoYm9vbCkgb3ZlcnJp
ZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVs
ZC5jcHAJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTZWFyY2hGaWVsZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKioKLSAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMTAsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAgICAgIChDKSAyMDA4IFRvcmNoIE1vYmls
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8p
IAogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpLgpAQCAtMzQyLDcgKzM0Miw3IEBAIEhvc3RXaW5kb3cqIFJlbmRlclNlYXJj
aEZpZWxkOjpob3N0V2luZG8KICAgICByZXR1cm4gdmlldygpLmZyYW1lVmlldygpLmhvc3RXaW5k
b3coKTsKIH0KIAotUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlclNlYXJjaEZpZWxkOjpjcmVh
dGVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUpCitQ
YXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyU2VhcmNoRmllbGQ6OmNyZWF0ZVNjcm9sbGJhcihT
Y3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKIHsKICAgICBSZWZQdHI8
U2Nyb2xsYmFyPiB3aWRnZXQ7CiAgICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9IHN0
eWxlKCkuaGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5oCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
LCAyMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDov
L3d3dy50b3JjaG1vYmlsZS5jb20vKQogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KICAqCkBAIC04MCw3ICs4MCw3IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0
SW5kZXgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3Io
KSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3coKSBj
b25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBjcmVhdGVT
Y3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFy
Q29udHJvbFNpemUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTY3JvbGxiYXI+
IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSYsIFNjcm9sbGJhck9yaWVudGF0aW9uLCBT
Y3JvbGxiYXJDb250cm9sU2l6ZSkgb3ZlcnJpZGU7CiAKICAgICBIVE1MRWxlbWVudCogcmVzdWx0
c0J1dHRvbkVsZW1lbnQoKSBjb25zdDsKICAgICBIVE1MRWxlbWVudCogY2FuY2VsQnV0dG9uRWxl
bWVudCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTgwNDY1KQorKysgU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTUt
MDItMjAgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgU2Ny
b2xsYmFycyBhbmQgU2Nyb2xsQW5pbWF0b3JzIG11c3QgYWx3YXlzIGhhdmUgYSBTY3JvbGxhYmxl
QXJlYQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQx
ODU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAg
ICAgICBDaGFuZ2UgdXNlcnMgb2YgdGhlIHNjcm9sbEFuaW1hdG9yKCkgbWV0aG9kIHRvIGV4cGVj
dCBhIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGEgcG9pbnRlci4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46
OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6ZGVzdHJveVNj
cm9sbGJhcik6CisKIDIwMTUtMDItMjAgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNv
bT4KIAogICAgICAgICBbV0syXSBBZGQgc3VwcG9ydCBmb3IgZm9udCBwYW5lbCBvbiBPUyBYLgpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQ
bHVnaW4ubW0JKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEsIDIwMTIsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC02NDEsNyArNjQxLDcgQEAgY29uc3QgUGx1Z2luVmlldyogUERGUGx1Z2luOjpwbHVn
aW5WaWV3KAogCiBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUERGUGx1Z2luOjpjcmVhdGVTY3JvbGxi
YXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCiB7Ci0gICAgUmVmUHRyPFNjcm9s
bGJhcj4gd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIodGhpcywgb3Jp
ZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpOworICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdl
dCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwg
UmVndWxhclNjcm9sbGJhcik7CiAgICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3Jv
bGxiYXIpIHsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgPSBhZG9wdE5TKFtb
V0tQREZQbHVnaW5TY3JvbGxiYXJMYXllciBhbGxvY10gaW5pdFdpdGhQREZQbHVnaW46dGhpc10p
OwogICAgICAgICBbbV9jb250YWluZXJMYXllciBhZGRTdWJsYXllcjptX2hvcml6b250YWxTY3Jv
bGxiYXJMYXllci5nZXQoKV07CkBAIC02NjIsOCArNjYyLDcgQEAgdm9pZCBQREZQbHVnaW46OmRl
c3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYgogCiAgICAgd2lsbFJlbW92ZVNjcm9sbGJhcihzY3JvbGxi
YXIuZ2V0KCksIG9yaWVudGF0aW9uKTsKICAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQo
KTsKLSAgICBzY3JvbGxiYXItPmRpc2Nvbm5lY3RGcm9tU2Nyb2xsYWJsZUFyZWEoKTsKLSAgICBz
Y3JvbGxiYXIgPSAwOworICAgIHNjcm9sbGJhciA9IG51bGxwdHI7CiAKICAgICBpZiAob3JpZW50
YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewogICAgICAgICBbbV9ob3Jpem9udGFsU2Ny
b2xsYmFyTGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247019</attachid>
            <date>2015-02-20 17:35:37 -0800</date>
            <delta_ts>2015-02-20 17:37:54 -0800</delta_ts>
            <desc>Patch v4 (iOS fixes)</desc>
            <filename>bug-141855-20150220173528.patch</filename>
            <type>text/plain</type>
            <size>82012</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDQ2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNSBAQAorMjAxNS0wMi0yMCAgQnJlbnQg
RnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBTY3JvbGxiYXJzIGFuZCBT
Y3JvbGxBbmltYXRvcnMgbXVzdCBhbHdheXMgaGF2ZSBhIFNjcm9sbGFibGVBcmVhCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4NTUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBjaGFuZ2UgaW4gZnVu
Y3Rpb25hbGl0eS4KKyAgICAgICAgCisgICAgICAgIENoYW5nZSB1c2VycyBvZiB0aGUgc2Nyb2xs
QW5pbWF0b3IoKSBtZXRob2QgdG8gZXhwZWN0IGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2lu
dGVyLiBBbHNvIGdldCByaWQgb2YKKyAgICAgICAgYSBudW1iZXIgb2YgdW5uZWNlc3NhcnkgbnVs
bHB0ciBjaGVja3MuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3Jv
bGxiYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6c2V0
VmFsdWUpOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJNYXRjaGVzQ29ybmVyUHJlc2VudFBzZXVkb0NsYXNz
KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVZpZXc6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNl
dEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvcjo6aGFuZGxlV2hlZWxFdmVudFBoYXNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9Qb3B1cE1l
bnVDbGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6U2Nyb2xsQW5pbWF0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvcjo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yOjp1cGRhdGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMpOgorICAgICAgICAqIHBs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cjo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbGFibGVBcmVhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvck5vbmUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
Tm9uZS5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6Y3JlYXRlU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxhYmxlQXJlYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Ny
b2xsQW5pbWF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpub3RpZnlTY3Jv
bGxQb3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbFBvc2l0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6
aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aGFu
ZGxlVG91Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6bW91c2VF
bnRlcmVkU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjptb3Vz
ZUV4aXRlZFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6ZGlk
QWRkU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjp3aWxsUmVt
b3ZlU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNh
bFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVB
cmVhOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAqIHBsYXRm
b3JtL1Njcm9sbGFibGVBcmVhLmg6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6U2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhcjo6c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhcjo6aXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXI6Om9mZnNldERpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmF1
dG9zY3JvbGxQcmVzc2VkUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdmVU
aHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdXNlTW92ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3VzZUVudGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyOjptb3VzZUV4aXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1v
dXNlVXApOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzaG91bGRQYXJ0aWNpcGF0ZUlu
SGl0VGVzdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmlzV2luZG93QWN0aXZl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpjb252ZXJ0VG9Db250YWluaW5nVmlldyk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhcjo6c2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpkaXNj
b25uZWN0RnJvbVNjcm9sbGFibGVBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9p
b3MvU2Nyb2xsQW5pbWF0b3JJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cklPUzo6aGFuZGxlVG91Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cklPUzo6ZGV0ZXJtaW5lU2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvU2Nyb2xsQW5pbWF0b3JNYWMubW06CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyRGVsZWdhdGUgc2Nyb2xsZXJJbXBQYWlyOnNldENvbnRlbnRBcmVhTmVlZHNEaXNw
bGF5SW5SZWN0Ol0pOgorICAgICAgICAoLVtXZWJTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRl
bGVnYXRlIHNjcm9sbGVySW1wUGFpcjp1cGRhdGVTY3JvbGxlclN0eWxlRm9yTmV3UmVjb21tZW5k
ZWRTY3JvbGxlclN0eWxlOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxiYXJQYWludGVyRGVsZWdh
dGUgc2Nyb2xsQW5pbWF0b3JdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVn
YXRlIGxheWVyXSk6CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBtb3Vz
ZUxvY2F0aW9uSW5TY3JvbGxlckZvclNjcm9sbGVySW1wOl0pOgorICAgICAgICAoLVtXZWJTY3Jv
bGxiYXJQYWludGVyRGVsZWdhdGUgc2V0VXBBbHBoYUFuaW1hdGlvbjpzY3JvbGxlclBhaW50ZXI6
cGFydDphbmltYXRlQWxwaGFUbzpkdXJhdGlvbjpdKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6
OlNjcm9sbEFuaW1hdG9yTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
OjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmFkanVzdFNj
cm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JNYWM6OmFkanVzdFNjcm9sbFBvc2l0aW9uVG9Cb3VuZHNJZk5lY2Vzc2FyeSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsVG8pOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpkaWRBZGRIb3Jpem9udGFsU2Ny
b2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp2ZXJ0aWNhbFNj
cm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
TWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnBpbm5lZEluRGlyZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjppc0FscmVhZHlQaW5uZWRJbkRpcmVjdGlv
bk9mR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6YWxsb3dz
VmVydGljYWxTdHJldGNoaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
OjphbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvck1hYzo6c3RyZXRjaEFtb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvck1hYzo6Y2FuU2Nyb2xsSG9yaXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yTWFjOjpjYW5TY3JvbGxWZXJ0aWNhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yTWFjOjphYnNvbHV0ZVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yTWFjOjppbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRn
ZUNvbnN0cmFpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp1cGRh
dGVTY3JvbGxlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpz
ZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
YXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGVzdHJveVNjcm9sbGJhcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
aXN0Qm94OjpjcmVhdGVTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJv
eDo6ZGVzdHJveVNjcm9sbGJhcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0
LmNwcDoKKyAgICAgICAgKFJlbmRlck1lbnVMaXN0OjpjcmVhdGVTY3JvbGxiYXIpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJTY3JvbGxiYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyOjpjcmVh
dGVDdXN0b21TY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyOjpS
ZW5kZXJTY3JvbGxiYXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmg6CisKIDIwMTUtMDItMjAgIEVucmljYSBDYXN1Y2Np
ICA8ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAgICAgICBbV0syXSBBZGQgc3VwcG9ydCBmb3IgZm9u
dCBwYW5lbCBvbiBPUyBYLgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5U2Nyb2xsYmFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwCShyZXZpc2lvbiAxODA0NTApCisr
KyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC05NiwxMSArOTYsOCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlTY3JvbGxi
YXI6OnNldFZhbHVlKGZsCiAgICAgaWYgKCFtX3Njcm9sbGJhcikKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIGlmICghbV9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIGZsb2F0IG5ld1ZhbHVlID0gdmFsdWUgKiBtX3Njcm9sbGJhci0+bWF4aW11
bSgpOwotICAgIG1fc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxUb09mZnNldFdp
dGhvdXRBbmltYXRpb24obV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCksIG5ld1ZhbHVlKTsKKyAg
ICBtX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24obV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCksIG5ld1ZhbHVlKTsKIH0KICAgICAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNo
ZWNrZXJUZXN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNl
L1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE0IERoaSBBdXJyYWht
YW4gPGRpb3JhaG1hbkByb2NreWJhcnMuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzU4LDcg
KzM1OCw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBzY3JvbGxiYXJNYXRjaGVzTm9CdXQKIAogQUxX
QVlTX0lOTElORSBib29sIHNjcm9sbGJhck1hdGNoZXNDb3JuZXJQcmVzZW50UHNldWRvQ2xhc3Mo
Y29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAg
cmV0dXJuIGNvbnRleHQuc2Nyb2xsYmFyICYmIGNvbnRleHQuc2Nyb2xsYmFyLT5zY3JvbGxhYmxl
QXJlYSgpLT5pc1Njcm9sbENvcm5lclZpc2libGUoKTsKKyAgICByZXR1cm4gY29udGV4dC5zY3Jv
bGxiYXIgJiYgY29udGV4dC5zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkuaXNTY3JvbGxDb3Ju
ZXJWaXNpYmxlKCk7CiB9CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAgKiAg
ICAgICAgICAgICAgICAgICAgIDE5OTkgTGFycyBLbm9sbCA8a25vbGxAa2RlLm9yZz4KICAqICAg
ICAgICAgICAgICAgICAgICAgMTk5OSBBbnR0aSBLb2l2aXN0byA8a29pdmlzdG9Aa2RlLm9yZz4K
ICAqICAgICAgICAgICAgICAgICAgICAgMjAwMCBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9y
Zz4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDEzLTIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAgICAgIChDKSAyMDA2IEdy
YWhhbSBEZW5uaXMgKGdyYWhhbS5kZW5uaXNAZ21haWwuY29tKQogICogICAgICAgICAgIChDKSAy
MDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtNTQyLDE3ICs1NDIsMTcg
QEAgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IEZyYW1lVmlldzo6Y3JlYXRlUwogICAgIC8vIFRyeSB0
aGUgPGJvZHk+IGVsZW1lbnQgZmlyc3QgYXMgYSBzY3JvbGxiYXIgc291cmNlLgogICAgIEhUTUxF
bGVtZW50KiBib2R5ID0gZG9jID8gZG9jLT5ib2R5T3JGcmFtZXNldCgpIDogbnVsbHB0cjsKICAg
ICBpZiAoYm9keSAmJiBib2R5LT5yZW5kZXJlcigpICYmIGJvZHktPnJlbmRlcmVyKCktPnN0eWxl
KCkuaGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKSkKLSAgICAgICAgcmV0dXJuIFJlbmRlclNjcm9s
bGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCBib2R5KTsKKyAg
ICAgICAgcmV0dXJuIFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlz
LCBvcmllbnRhdGlvbiwgYm9keSk7CiAgICAgCiAgICAgLy8gSWYgdGhlIDxib2R5PiBkaWRuJ3Qg
aGF2ZSBhIGN1c3RvbSBzdHlsZSwgdGhlbiB0aGUgcm9vdCBlbGVtZW50IG1pZ2h0LgogICAgIEVs
ZW1lbnQqIGRvY0VsZW1lbnQgPSBkb2MgPyBkb2MtPmRvY3VtZW50RWxlbWVudCgpIDogbnVsbHB0
cjsKICAgICBpZiAoZG9jRWxlbWVudCAmJiBkb2NFbGVtZW50LT5yZW5kZXJlcigpICYmIGRvY0Vs
ZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCkuaGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKSkKLSAg
ICAgICAgcmV0dXJuIFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHRoaXMs
IG9yaWVudGF0aW9uLCBkb2NFbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIFJlbmRlclNjcm9sbGJh
cjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgZG9jRWxlbWVudCk7
CiAgICAgICAgIAogICAgIC8vIElmIHdlIGhhdmUgYW4gb3duaW5nIGlmcmFtZS9mcmFtZSBlbGVt
ZW50LCB0aGVuIGl0IGNhbiBzZXQgdGhlIGN1c3RvbSBzY3JvbGxiYXIgYWxzby4KICAgICBSZW5k
ZXJXaWRnZXQqIGZyYW1lUmVuZGVyZXIgPSBmcmFtZSgpLm93bmVyUmVuZGVyZXIoKTsKICAgICBp
ZiAoZnJhbWVSZW5kZXJlciAmJiBmcmFtZVJlbmRlcmVyLT5zdHlsZSgpLmhhc1BzZXVkb1N0eWxl
KFNDUk9MTEJBUikpCi0gICAgICAgIHJldHVybiBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3Rv
bVNjcm9sbGJhcih0aGlzLCBvcmllbnRhdGlvbiwgMCwgJmZyYW1lKCkpOworICAgICAgICByZXR1
cm4gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0
aW9uLCBudWxscHRyLCAmZnJhbWUoKSk7CiAgICAgCiAgICAgLy8gTm9ib2R5IHNldCBhIGN1c3Rv
bSBzdHlsZSwgc28gd2UganVzdCB1c2UgYSBuYXRpdmUgc2Nyb2xsYmFyLgogICAgIHJldHVybiBT
Y3JvbGxWaWV3OjpjcmVhdGVTY3JvbGxiYXIob3JpZW50YXRpb24pOwpAQCAtMjA4MSw3ICsyMDgx
LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZQogICAgICAgICBp
ZiAoZnJhbWUoKS5wYWdlKCktPnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZp
eGVkUG9zaXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVy
c0FmdGVyU2Nyb2xsaW5nKCk7CiAgICAgICAgIEludFBvaW50IG5ld1Bvc2l0aW9uID0gc2Nyb2xs
UG9zaXRpb24oKTsKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS0+c2V0Q3VycmVudFBvc2l0aW9u
KHNjcm9sbFBvc2l0aW9uKCkpOworICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldEN1cnJlbnRQ
b3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsKICAgICAgICAgc2Nyb2xsUG9zaXRpb25DaGFuZ2Vk
KG9sZFBvc2l0aW9uLCBuZXdQb3NpdGlvbik7CiAgICAgfQogICAgIGlmICh2aXNpYmxlQ29udGVu
dFNpemVEaWRDaGFuZ2UpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAJKHJldmlzaW9uIDE4MDQ1MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjg5LDcgKzI4OSw3IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmhhbmRsZVdoZWVsRXYKICAgICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgZnJhbWVWaWV3LT5zY3JvbGxBbmltYXRvcigpLT5oYW5kbGVXaGVlbEV2ZW50UGhhc2Uo
cGhhc2UpOworICAgIGZyYW1lVmlldy0+c2Nyb2xsQW5pbWF0b3IoKS5oYW5kbGVXaGVlbEV2ZW50
UGhhc2UocGhhc2UpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BvcHVwTWVudUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BvcHVwTWVudUNsaWVudC5oCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Qb3B1cE1lbnVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpLgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAxNSBBcHBsZSBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgRm9udFNlbGVjdG9yKiBmb250U2Vs
ZWN0b3IoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBIb3N0V2luZG93KiBob3N0V2luZG93KCkg
Y29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Ny
b2xsYmFyKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNv
bnRyb2xTaXplKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRl
U2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhJiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJh
ckNvbnRyb2xTaXplKSA9IDA7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3IuY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQxLDEzICs0MSwxMyBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAjaWYgIUVOQUJMRShTTU9PVEhfU0NST0xMSU5HKSAmJiAhUExBVEZP
Uk0oSU9TKQotUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0
ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCitQYXNzT3duUHRyPFNjcm9sbEFuaW1h
dG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJl
YSkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVB
cmVhKSk7CiB9CiAjZW5kaWYKIAotU2Nyb2xsQW5pbWF0b3I6OlNjcm9sbEFuaW1hdG9yKFNjcm9s
bGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKK1Njcm9sbEFuaW1hdG9yOjpTY3JvbGxBbmltYXRv
cihTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiAgICAgOiBtX3Njcm9sbGFibGVBcmVh
KHNjcm9sbGFibGVBcmVhKQogICAgICwgbV9jdXJyZW50UG9zWCgwKQogICAgICwgbV9jdXJyZW50
UG9zWSgwKQpAQCAtNjEsNyArNjEsNyBAQCBTY3JvbGxBbmltYXRvcjo6flNjcm9sbEFuaW1hdG9y
KCkKIGJvb2wgU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmll
bnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIp
CiB7CiAgICAgZmxvYXQqIGN1cnJlbnRQb3MgPSAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNj
cm9sbGJhcikgPyAmbV9jdXJyZW50UG9zWCA6ICZtX2N1cnJlbnRQb3NZOwotICAgIGZsb2F0IG5l
d1BvcyA9IHN0ZDo6bWF4KHN0ZDo6bWluKCpjdXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVy
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFNpemUob3JpZW50
YXRpb24pKSksIDAuMGYpOworICAgIGZsb2F0IG5ld1BvcyA9IHN0ZDo6bWF4KHN0ZDo6bWluKCpj
dXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Ny
b2xsYWJsZUFyZWEuc2Nyb2xsU2l6ZShvcmllbnRhdGlvbikpKSwgMC4wZik7CiAgICAgZmxvYXQg
ZGVsdGEgPSAqY3VycmVudFBvcyAtIG5ld1BvczsKICAgICBpZiAoKmN1cnJlbnRQb3MgPT0gbmV3
UG9zKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTQsOCArMTE0LDggQEAgYm9vbCBTY3Jv
bGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudChjbwogICAgICAgICByZXR1cm4gdHJ1ZTsKICNl
bmRpZgogCi0gICAgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxl
QXJlYS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgIFNjcm9sbGJhciogdmVydGljYWxTY3Jv
bGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIFNjcm9s
bGJhciogaG9yaXpvbnRhbFNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNj
cm9sbGJhcigpOworICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBtX3Njcm9sbGFi
bGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFyKCk7CiAKICAgICAvLyBBY2NlcHQgdGhlIGV2ZW50IGlm
IHdlIGhhdmUgYSBzY3JvbGxiYXIgaW4gdGhhdCBkaXJlY3Rpb24gYW5kIGNhbiBzdGlsbAogICAg
IC8vIHNjcm9sbCBhbnkgZnVydGhlci4KQEAgLTEyNSw4ICsxMjUsOCBAQCBib29sIFNjcm9sbEFu
aW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KGNvCiAgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7CiAK
ICAgICBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSA9IFNjcm9sbEJ5UGl4ZWw7Ci0gICAg
SW50U2l6ZSBtYXhGb3J3YXJkU2Nyb2xsRGVsdGEgPSBtX3Njcm9sbGFibGVBcmVhLT5tYXhpbXVt
U2Nyb2xsUG9zaXRpb24oKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCk7Ci0g
ICAgSW50U2l6ZSBtYXhCYWNrd2FyZFNjcm9sbERlbHRhID0gbV9zY3JvbGxhYmxlQXJlYS0+c2Ny
b2xsUG9zaXRpb24oKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPm1pbmltdW1TY3JvbGxQb3NpdGlvbigp
OworICAgIEludFNpemUgbWF4Rm9yd2FyZFNjcm9sbERlbHRhID0gbV9zY3JvbGxhYmxlQXJlYS5t
YXhpbXVtU2Nyb2xsUG9zaXRpb24oKSAtIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsUG9zaXRpb24o
KTsKKyAgICBJbnRTaXplIG1heEJhY2t3YXJkU2Nyb2xsRGVsdGEgPSBtX3Njcm9sbGFibGVBcmVh
LnNjcm9sbFBvc2l0aW9uKCkgLSBtX3Njcm9sbGFibGVBcmVhLm1pbmltdW1TY3JvbGxQb3NpdGlv
bigpOwogICAgIGlmICgoZGVsdGFYIDwgMCAmJiBtYXhGb3J3YXJkU2Nyb2xsRGVsdGEud2lkdGgo
KSA+IDApCiAgICAgICAgIHx8IChkZWx0YVggPiAwICYmIG1heEJhY2t3YXJkU2Nyb2xsRGVsdGEu
d2lkdGgoKSA+IDApCiAgICAgICAgIHx8IChkZWx0YVkgPCAwICYmIG1heEZvcndhcmRTY3JvbGxE
ZWx0YS5oZWlnaHQoKSA+IDApCkBAIC0xMzYsNyArMTM2LDcgQEAgYm9vbCBTY3JvbGxBbmltYXRv
cjo6aGFuZGxlV2hlZWxFdmVudChjbwogICAgICAgICBpZiAoZGVsdGFZKSB7CiAgICAgICAgICAg
ICBpZiAoZS5ncmFudWxhcml0eSgpID09IFNjcm9sbEJ5UGFnZVdoZWVsRXZlbnQpIHsKICAgICAg
ICAgICAgICAgICBib29sIG5lZ2F0aXZlID0gZGVsdGFZIDwgMDsKLSAgICAgICAgICAgICAgICBk
ZWx0YVkgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwRGVsdGEobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJs
ZUhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBkZWx0YVkgPSBTY3JvbGxiYXI6OnBhZ2VTdGVw
RGVsdGEobV9zY3JvbGxhYmxlQXJlYS52aXNpYmxlSGVpZ2h0KCkpOwogICAgICAgICAgICAgICAg
IGlmIChuZWdhdGl2ZSkKICAgICAgICAgICAgICAgICAgICAgZGVsdGFZID0gLWRlbHRhWTsKICAg
ICAgICAgICAgIH0KQEAgLTE0Niw3ICsxNDYsNyBAQCBib29sIFNjcm9sbEFuaW1hdG9yOjpoYW5k
bGVXaGVlbEV2ZW50KGNvCiAgICAgICAgIGlmIChkZWx0YVgpIHsKICAgICAgICAgICAgIGlmIChl
LmdyYW51bGFyaXR5KCkgPT0gU2Nyb2xsQnlQYWdlV2hlZWxFdmVudCkgewogICAgICAgICAgICAg
ICAgIGJvb2wgbmVnYXRpdmUgPSBkZWx0YVggPCAwOwotICAgICAgICAgICAgICAgIGRlbHRhWCA9
IFNjcm9sbGJhcjo6cGFnZVN0ZXBEZWx0YShtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlV2lkdGgo
KSk7CisgICAgICAgICAgICAgICAgZGVsdGFYID0gU2Nyb2xsYmFyOjpwYWdlU3RlcERlbHRhKG1f
c2Nyb2xsYWJsZUFyZWEudmlzaWJsZVdpZHRoKCkpOwogICAgICAgICAgICAgICAgIGlmIChuZWdh
dGl2ZSkKICAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gLWRlbHRhWDsKICAgICAgICAgICAg
IH0KQEAgLTE3NywyMiArMTc3LDIyIEBAIEZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3I6OmN1cnJl
bnRQb3NpdGkKIHZvaWQgU2Nyb2xsQW5pbWF0b3I6Om5vdGlmeVBvc2l0aW9uQ2hhbmdlZChjb25z
dCBGbG9hdFNpemUmIGRlbHRhKQogewogICAgIFVOVVNFRF9QQVJBTShkZWx0YSk7Ci0gICAgbV9z
Y3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihJbnRQb2ludChtX2N1
cnJlbnRQb3NYLCBtX2N1cnJlbnRQb3NZKSk7CisgICAgbV9zY3JvbGxhYmxlQXJlYS5zZXRTY3Jv
bGxPZmZzZXRGcm9tQW5pbWF0aW9uKEludFBvaW50KG1fY3VycmVudFBvc1gsIG1fY3VycmVudFBv
c1kpKTsKIH0KIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1BQykK
IHZvaWQgU2Nyb2xsQW5pbWF0b3I6OnVwZGF0ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycygpCiB7
CiAgICAgLy8gRklYTUU6IEN1cnJlbnRseSwgc2Nyb2xsIHNuYXAgYW5pbWF0b3JzIGFyZSByZWNy
ZWF0ZWQgZXZlbiB0aG91Z2ggdGhlIHNuYXAgb2Zmc2V0cyBhbG9uZSBjYW4gYmUgdXBkYXRlZC4K
LSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkpIHsKLSAg
ICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxB
eGlzU2Nyb2xsU25hcEFuaW1hdG9yPih0aGlzLCBtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFs
U25hcE9mZnNldHMoKSwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKKyAgICBpZiAobV9z
Y3JvbGxhYmxlQXJlYS5ob3Jpem9udGFsU25hcE9mZnNldHMoKSkgeworICAgICAgICBtX2hvcml6
b250YWxTY3JvbGxTbmFwQW5pbWF0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPEF4aXNTY3JvbGxTbmFw
QW5pbWF0b3I+KHRoaXMsIG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCks
IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9s
bFNuYXBUaW1lciA9IHN0ZDo6bWFrZV91bmlxdWU8VGltZXI+KCp0aGlzLCAmU2Nyb2xsQW5pbWF0
b3I6Omhvcml6b250YWxTY3JvbGxTbmFwVGltZXJGaXJlZCk7CiAgICAgfSBlbHNlIGlmIChtX2hv
cml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3IpIHsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xs
U25hcEFuaW1hdG9yID0gbnVsbHB0cjsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25hcFRp
bWVyID0gbnVsbHB0cjsKICAgICB9Ci0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2Fs
U25hcE9mZnNldHMoKSkgewotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yID0g
c3RkOjptYWtlX3VuaXF1ZTxBeGlzU2Nyb2xsU25hcEFuaW1hdG9yPih0aGlzLCBtX3Njcm9sbGFi
bGVBcmVhLT52ZXJ0aWNhbFNuYXBPZmZzZXRzKCksIFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwp
OworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU25hcE9mZnNldHMoKSkgeworICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxBeGlz
U2Nyb2xsU25hcEFuaW1hdG9yPih0aGlzLCBtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU25hcE9m
ZnNldHMoKSwgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCk7CiAgICAgICAgIG1fdmVydGljYWxT
Y3JvbGxTbmFwVGltZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRpbWVyPigqdGhpcywgJlNjcm9sbEFu
aW1hdG9yOjp2ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lckZpcmVkKTsKICAgICB9IGVsc2UgaWYgKG1f
dmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3IpIHsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbFNu
YXBBbmltYXRvciA9IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yLmgJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICog
Q29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICAqIG1ldDoKQEAgLTU2LDcgKzU3
LDcgQEAgY2xhc3MgU2Nyb2xsQW5pbWF0b3IgewogI2VuZGlmCiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+
IGNyZWF0ZShTY3JvbGxhYmxlQXJlYSopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcm9sbEFu
aW1hdG9yPiBjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmKTsKIAogICAgIHZpcnR1YWwgflNjcm9sbEFu
aW1hdG9yKCk7CiAKQEAgLTY4LDcgKzY5LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CiAKLSAg
ICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEoKSBjb25zdCB7IHJldHVybiBtX3Njcm9s
bGFibGVBcmVhOyB9CisgICAgU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYTsgfQogCiAgICAgdmlydHVhbCBib29sIGhhbmRsZVdo
ZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CiAKQEAgLTEyNSw3ICsxMjYsNyBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IFNjcm9sbEFuaW1h
dG9yKFNjcm9sbGFibGVBcmVhKik7CisgICAgZXhwbGljaXQgU2Nyb2xsQW5pbWF0b3IoU2Nyb2xs
YWJsZUFyZWEmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQb3NpdGlvbkNoYW5nZWQoY29u
c3QgRmxvYXRTaXplJiBkZWx0YSk7CiAKQEAgLTEzNSw3ICsxMzYsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCB2ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lckZpcmVkKCk7CiAjZW5kaWYKIAotICAgIFNj
cm9sbGFibGVBcmVhKiBtX3Njcm9sbGFibGVBcmVhOworICAgIFNjcm9sbGFibGVBcmVhJiBtX3Nj
cm9sbGFibGVBcmVhOwogICAgIGZsb2F0IG1fY3VycmVudFBvc1g7IC8vIFdlIGF2b2lkIHVzaW5n
IGEgRmxvYXRQb2ludCBpbiBvcmRlciB0byByZWR1Y2UKICAgICBmbG9hdCBtX2N1cnJlbnRQb3NZ
OyAvLyBzdWJjbGFzcyBjb2RlIGNvbXBsZXhpdHkuCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkgJiYgUExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3JOb25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvck5vbmUuY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNTEsOSAr
NTIsOSBAQCBjb25zdCBkb3VibGUga1RpY2tUaW1lID0gMSAvIGtGcmFtZVJhdGU7CiBjb25zdCBk
b3VibGUga01pbmltdW1UaW1lckludGVydmFsID0gLjAwMTsKIGNvbnN0IGRvdWJsZSBrWm9vbVRp
Y2tzID0gMTE7CiAKLVBhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpj
cmVhdGUoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQorUGFzc093blB0cjxTY3JvbGxB
bmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJs
ZUFyZWEpCiB7Ci0gICAgaWYgKHNjcm9sbGFibGVBcmVhICYmIHNjcm9sbGFibGVBcmVhLT5zY3Jv
bGxBbmltYXRvckVuYWJsZWQoKSkKKyAgICBpZiAoc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0
b3JFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2Nyb2xsQW5pbWF0b3JO
b25lKHNjcm9sbGFibGVBcmVhKSk7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxBbmlt
YXRvcihzY3JvbGxhYmxlQXJlYSkpOwogfQpAQCAtNDg2LDggKzQ4Nyw4IEBAIHZvaWQgU2Nyb2xs
QW5pbWF0b3JOb25lOjpkaWRBZGRIb3Jpem9udGEKIAogdm9pZCBTY3JvbGxBbmltYXRvck5vbmU6
OnVwZGF0ZVZpc2libGVMZW5ndGhzKCkKIHsKLSAgICBtX2hvcml6b250YWxEYXRhLnVwZGF0ZVZp
c2libGVMZW5ndGgoc2Nyb2xsYWJsZUFyZWEoKS0+dmlzaWJsZVdpZHRoKCkpOwotICAgIG1fdmVy
dGljYWxEYXRhLnVwZGF0ZVZpc2libGVMZW5ndGgoc2Nyb2xsYWJsZUFyZWEoKS0+dmlzaWJsZUhl
aWdodCgpKTsKKyAgICBtX2hvcml6b250YWxEYXRhLnVwZGF0ZVZpc2libGVMZW5ndGgoc2Nyb2xs
YWJsZUFyZWEoKS52aXNpYmxlV2lkdGgoKSk7CisgICAgbV92ZXJ0aWNhbERhdGEudXBkYXRlVmlz
aWJsZUxlbmd0aChzY3JvbGxhYmxlQXJlYSgpLnZpc2libGVIZWlnaHQoKSk7CiB9CiAKICNpZiBV
U0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIpCkBAIC01MzIsNyArNTMzLDcgQEAgdm9p
ZCBTY3JvbGxBbmltYXRvck5vbmU6OnN0YXJ0TmV4dFRpbWVyKAogI2Vsc2UKIHZvaWQgU2Nyb2xs
QW5pbWF0b3JOb25lOjpzdGFydE5leHRUaW1lcigpCiB7Ci0gICAgaWYgKHNjcm9sbGFibGVBcmVh
KCktPnNjaGVkdWxlQW5pbWF0aW9uKCkpCisgICAgaWYgKHNjcm9sbGFibGVBcmVhKCkuc2NoZWR1
bGVBbmltYXRpb24oKSkKICAgICAgICAgbV9hbmltYXRpb25BY3RpdmUgPSB0cnVlOwogfQogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUu
aAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3JOb25lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChjKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNTIsNyArNTMsNyBAQCBzdHJ1Y3QgU2Nyb2xs
QW5pbWF0b3JQYXJhbWV0ZXJzOwogCiBjbGFzcyBTY3JvbGxBbmltYXRvck5vbmUgOiBwdWJsaWMg
U2Nyb2xsQW5pbWF0b3IgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNjcm9sbEFuaW1hdG9yTm9u
ZShTY3JvbGxhYmxlQXJlYSopOworICAgIGV4cGxpY2l0IFNjcm9sbEFuaW1hdG9yTm9uZShTY3Jv
bGxhYmxlQXJlYSYpOwogICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yTm9uZSgpOwogCiAgICAg
dmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsVmlldy5jcHAJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTEzNCw3ICsxMzQsNyBAQCBib29sIFNjcm9sbFZpZXc6OnNldEhh
c1ZlcnRpY2FsU2Nyb2xsYmFyCiAKIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBTY3JvbGxWaWV3Ojpj
cmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCiB7Ci0gICAg
cmV0dXJuIFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9u
LCBSZWd1bGFyU2Nyb2xsYmFyKTsKKyAgICByZXR1cm4gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVT
Y3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xsYmFyKTsKIH0KIAogdm9p
ZCBTY3JvbGxWaWV3OjpzZXRTY3JvbGxiYXJNb2RlcyhTY3JvbGxiYXJNb2RlIGhvcml6b250YWxN
b2RlLCBTY3JvbGxiYXJNb2RlIHZlcnRpY2FsTW9kZSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDExLCAyMDE0
LTIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKQEAgLTcwLDEyICs3MCwxMyBAQCBTY3JvbGxhYmxlQXJlYTo6flNj
cm9sbGFibGVBcmVhKCkKIHsKIH0KIAotU2Nyb2xsQW5pbWF0b3IqIFNjcm9sbGFibGVBcmVhOjpz
Y3JvbGxBbmltYXRvcigpIGNvbnN0CitTY3JvbGxBbmltYXRvciYgU2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbEFuaW1hdG9yKCkgY29uc3QKIHsKICAgICBpZiAoIW1fc2Nyb2xsQW5pbWF0b3IpCi0gICAg
ICAgIG1fc2Nyb2xsQW5pbWF0b3IgPSBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKGNvbnN0X2Nhc3Q8
U2Nyb2xsYWJsZUFyZWEqPih0aGlzKSk7CisgICAgICAgIG1fc2Nyb2xsQW5pbWF0b3IgPSBTY3Jv
bGxBbmltYXRvcjo6Y3JlYXRlKGNvbnN0X2Nhc3Q8U2Nyb2xsYWJsZUFyZWEmPigqdGhpcykpOwog
Ci0gICAgcmV0dXJuIG1fc2Nyb2xsQW5pbWF0b3IuZ2V0KCk7CisgICAgQVNTRVJUKG1fc2Nyb2xs
QW5pbWF0b3IpOworICAgIHJldHVybiAqbV9zY3JvbGxBbmltYXRvci5nZXQoKTsKIH0KIAogdm9p
ZCBTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsT3JpZ2luKGNvbnN0IEludFBvaW50JiBvcmlnaW4p
CkBAIC0xMjcsMjYgKzEyOCwyNiBAQCBib29sIFNjcm9sbGFibGVBcmVhOjpzY3JvbGwoU2Nyb2xs
RGlyZWN0CiAgICAgICAgIG11bHRpcGxpZXIgPSAtbXVsdGlwbGllcjsKIAogICAgIHN0ZXAgPSBh
ZGp1c3RTY3JvbGxTdGVwRm9yRml4ZWRDb250ZW50KHN0ZXAsIG9yaWVudGF0aW9uLCBncmFudWxh
cml0eSk7Ci0gICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yKCktPnNjcm9sbChvcmllbnRhdGlvbiwg
Z3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOworICAgIHJldHVybiBzY3JvbGxBbmltYXRv
cigpLnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwog
fQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KQogewotICAgIHNjcm9sbEFuaW1hdG9yKCktPnNjcm9s
bFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihvZmZzZXQpOworICAgIHNjcm9sbEFuaW1hdG9yKCku
c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG9mZnNldCk7CiB9CiAKIHZvaWQgU2Nyb2xs
YWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbiwgZmxvYXQgb2Zmc2V0KQogewogICAgIGlmIChvcmllbnRhdGlvbiA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24oRmxvYXRQb2ludChvZmZzZXQsIHNjcm9sbEFuaW1hdG9yKCktPmN1cnJlbnRQb3NpdGlv
bigpLnkoKSkpOworICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oRmxvYXRQ
b2ludChvZmZzZXQsIHNjcm9sbEFuaW1hdG9yKCkuY3VycmVudFBvc2l0aW9uKCkueSgpKSk7CiAg
ICAgZWxzZQotICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oRmxvYXRQb2lu
dChzY3JvbGxBbmltYXRvcigpLT5jdXJyZW50UG9zaXRpb24oKS54KCksIG9mZnNldCkpOworICAg
ICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oRmxvYXRQb2ludChzY3JvbGxBbmlt
YXRvcigpLmN1cnJlbnRQb3NpdGlvbigpLngoKSwgb2Zmc2V0KSk7CiB9CiAKIHZvaWQgU2Nyb2xs
YWJsZUFyZWE6Om5vdGlmeVNjcm9sbFBvc2l0aW9uQ2hhbmdlZChjb25zdCBJbnRQb2ludCYgcG9z
aXRpb24pCiB7CiAgICAgc2Nyb2xsUG9zaXRpb25DaGFuZ2VkKHBvc2l0aW9uKTsKLSAgICBzY3Jv
bGxBbmltYXRvcigpLT5zZXRDdXJyZW50UG9zaXRpb24ocG9zaXRpb24pOworICAgIHNjcm9sbEFu
aW1hdG9yKCkuc2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0aW9uKTsKIH0KIAogdm9pZCBTY3JvbGxh
YmxlQXJlYTo6c2Nyb2xsUG9zaXRpb25DaGFuZ2VkKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikK
QEAgLTE3OSw3ICsxODAsNyBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxQb3NpdGlvbkNo
YW5nCiAgICAgfQogCiAgICAgaWYgKHNjcm9sbFBvc2l0aW9uKCkgIT0gb2xkUG9zaXRpb24pCi0g
ICAgICAgIHNjcm9sbEFuaW1hdG9yKCktPm5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoc2Nyb2xs
UG9zaXRpb24oKSAtIG9sZFBvc2l0aW9uKTsKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5ub3Rp
ZnlDb250ZW50QXJlYVNjcm9sbGVkKHNjcm9sbFBvc2l0aW9uKCkgLSBvbGRQb3NpdGlvbik7CiB9
CiAKIGJvb2wgU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JiB3aGVlbEV2ZW50KQpAQCAtMTg3LDEzICsxODgsMTMgQEAgYm9vbCBTY3JvbGxh
YmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudChjbwogICAgIGlmICghaXNTY3JvbGxhYmxlT3JSdWJi
ZXJiYW5kYWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc2Nyb2xs
QW5pbWF0b3IoKS0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICByZXR1cm4gc2Ny
b2xsQW5pbWF0b3IoKS5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwogfQogCiAjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKIGJvb2wgU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQo
Y29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50KQogewotICAgIHJldHVybiBzY3Jv
bGxBbmltYXRvcigpLT5oYW5kbGVUb3VjaEV2ZW50KHRvdWNoRXZlbnQpOworICAgIHJldHVybiBz
Y3JvbGxBbmltYXRvcigpLmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7CiB9CiAjZW5kaWYK
IApAQCAtMjU1LDEyICsyNTYsMTIgQEAgdm9pZCBTY3JvbGxhYmxlQXJlYTo6bW91c2VNb3ZlZElu
Q29udGVudAogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjptb3VzZUVudGVyZWRTY3JvbGxiYXIoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0CiB7Ci0gICAgc2Nyb2xsQW5pbWF0b3IoKS0+bW91c2VF
bnRlcmVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS5tb3VzZUVu
dGVyZWRTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6bW91
c2VFeGl0ZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0CiB7Ci0gICAgc2Ny
b2xsQW5pbWF0b3IoKS0+bW91c2VFeGl0ZWRTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICBzY3Jv
bGxBbmltYXRvcigpLm1vdXNlRXhpdGVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9CiAKIHZvaWQg
U2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRBcmVhRGlkU2hvdygpIGNvbnN0CkBAIC0yOTEsOSArMjky
LDkgQEAgYm9vbCBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYmFyc0NhbkJlQWN0aQogdm9pZCBTY3Jv
bGxhYmxlQXJlYTo6ZGlkQWRkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxi
YXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKICAgICBpZiAob3JpZW50YXRpb24gPT0gVmVy
dGljYWxTY3JvbGxiYXIpCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCktPmRpZEFkZFZlcnRpY2Fs
U2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuZGlkQWRkVmVy
dGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKICAgICBlbHNlCi0gICAgICAgIHNjcm9sbEFuaW1h
dG9yKCktPmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICAgICAgc2Ny
b2xsQW5pbWF0b3IoKS5kaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiAKICAg
ICAvLyA8cmRhcjovL3Byb2JsZW0vOTc5NzI1Mz4gQXBwS2l0IHJlc2V0cyB0aGUgc2Nyb2xsYmFy
J3Mgc3R5bGUgd2hlbiB5b3UgYXR0YWNoIGEgc2Nyb2xsYmFyCiAgICAgc2V0U2Nyb2xsYmFyT3Zl
cmxheVN0eWxlKHNjcm9sbGJhck92ZXJsYXlTdHlsZSgpKTsKQEAgLTMwMiw5ICszMDMsOSBAQCB2
b2lkIFNjcm9sbGFibGVBcmVhOjpkaWRBZGRTY3JvbGxiYXIoU2NyCiB2b2lkIFNjcm9sbGFibGVB
cmVhOjp3aWxsUmVtb3ZlU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJP
cmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKICAgICBpZiAob3JpZW50YXRpb24gPT0gVmVydGlj
YWxTY3JvbGxiYXIpCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCktPndpbGxSZW1vdmVWZXJ0aWNh
bFNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxBbmltYXRvcigpLndpbGxSZW1v
dmVWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIpOwogICAgIGVsc2UKLSAgICAgICAgc2Nyb2xs
QW5pbWF0b3IoKS0+d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAg
ICAgICAgc2Nyb2xsQW5pbWF0b3IoKS53aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihzY3Jv
bGxiYXIpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpjb250ZW50c1Jlc2l6ZWQoKQpAQCAt
MzY1LDEyICszNjYsMTIgQEAgdm9pZCBTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbENv
cgogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdl
KCkKIHsKLSAgICBzY3JvbGxBbmltYXRvcigpLT52ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hh
bmdlKCk7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS52ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hh
bmdlKCk7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6Omhvcml6b250YWxTY3JvbGxiYXJMYXll
ckRpZENoYW5nZSgpCiB7Ci0gICAgc2Nyb2xsQW5pbWF0b3IoKS0+aG9yaXpvbnRhbFNjcm9sbGJh
ckxheWVyRGlkQ2hhbmdlKCk7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS5ob3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXJEaWRDaGFuZ2UoKTsKIH0KIAogYm9vbCBTY3JvbGxhYmxlQXJlYTo6aGFzTGF5ZXJG
b3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGFibGVBcmVhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYWJsZUFyZWEuaAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3
IEBAIHB1YmxpYzoKICAgICBTY3JvbGxiYXJPdmVybGF5U3R5bGUgc2Nyb2xsYmFyT3ZlcmxheVN0
eWxlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyT3ZlcmxheVN0eWxlPiht
X3Njcm9sbGJhck92ZXJsYXlTdHlsZSk7IH0KIAogICAgIC8vIFRoaXMgZ2V0dGVyIHdpbGwgY3Jl
YXRlIGEgU2Nyb2xsQW5pbWF0b3IgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LgotICAgIFdF
QkNPUkVfRVhQT1JUIFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvcigpIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIFNjcm9sbEFuaW1hdG9yJiBzY3JvbGxBbmltYXRvcigpIGNvbnN0Owog
CiAgICAgLy8gVGhpcyBnZXR0ZXIgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGUgU2Nyb2xsQW5pbWF0
b3IgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQuCiAgICAgU2Nyb2xsQW5pbWF0b3IqIGV4aXN0aW5n
U2Nyb2xsQW5pbWF0b3IoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbEFuaW1hdG9yLmdldCgpOyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHJldmlzaW9uIDE4MDQ1
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNiwgMjAwOCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDcgKzQ0LDcgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogI2lmICFQTEFURk9STShFRkwpCi1QYXNzUmVmUHRyPFNjcm9sbGJhcj4gU2Nyb2xs
YmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVh
LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUg
c2l6ZSkKK1Bhc3NSZWZQdHI8U2Nyb2xsYmFyPiBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9s
bGJhcihTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9u
IG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKQogewogICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU2Nyb2xsYmFyKHNjcm9sbGFibGVBcmVhLCBvcmllbnRhdGlvbiwgc2l6ZSkp
OwogfQpAQCAtNTYsNyArNTYsNyBAQCBpbnQgU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBh
Z2VzKCkKICAgICByZXR1cm4gbWF4T3ZlcmxhcEJldHdlZW5QYWdlczsKIH0KIAotU2Nyb2xsYmFy
OjpTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUsCitT
Y3JvbGxiYXI6OlNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9s
U2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIFNjcm9sbGJhclRoZW1lKiB0aGVtZSwgYm9vbCBp
c0N1c3RvbVNjcm9sbGJhcikKICAgICA6IG1fc2Nyb2xsYWJsZUFyZWEoc2Nyb2xsYWJsZUFyZWEp
CiAgICAgLCBtX29yaWVudGF0aW9uKG9yaWVudGF0aW9uKQpAQCAtOTMsOCArOTMsNyBAQCBTY3Jv
bGxiYXI6OlNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSogc2NyCiAgICAgaW50IHRoaWNrbmVzcyA9
IG1fdGhlbWUtPnNjcm9sbGJhclRoaWNrbmVzcyhjb250cm9sU2l6ZSk7CiAgICAgV2lkZ2V0Ojpz
ZXRGcmFtZVJlY3QoSW50UmVjdCgwLCAwLCB0aGlja25lc3MsIHRoaWNrbmVzcykpOwogCi0gICAg
aWYgKG1fc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIG1fY3VycmVudFBvcyA9IHN0YXRpY19jYXN0
PGZsb2F0PihtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbih0aGlzKSk7CisgICAgbV9j
dXJyZW50UG9zID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsUG9z
aXRpb24odGhpcykpOwogfQogCiBTY3JvbGxiYXI6On5TY3JvbGxiYXIoKQpAQCAtMTA2LDEyICsx
MDUsMTIgQEAgU2Nyb2xsYmFyOjp+U2Nyb2xsYmFyKCkKIAogU2Nyb2xsYmFyT3ZlcmxheVN0eWxl
IFNjcm9sbGJhcjo6c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9zY3JvbGxhYmxlQXJlYSA/IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbGJhck92ZXJsYXlTdHls
ZSgpIDogU2Nyb2xsYmFyT3ZlcmxheVN0eWxlRGVmYXVsdDsKKyAgICByZXR1cm4gbV9zY3JvbGxh
YmxlQXJlYS5zY3JvbGxiYXJPdmVybGF5U3R5bGUoKTsKIH0KIAogYm9vbCBTY3JvbGxiYXI6Omlz
U2Nyb2xsYWJsZUFyZWFBY3RpdmUoKSBjb25zdAogewotICAgIHJldHVybiBtX3Njcm9sbGFibGVB
cmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmlzQWN0aXZlKCk7CisgICAgcmV0dXJuIG1fc2Nyb2xs
YWJsZUFyZWEuaXNBY3RpdmUoKTsKIH0KIAogYm9vbCBTY3JvbGxiYXI6OmlzU2Nyb2xsVmlld1Nj
cm9sbGJhcigpIGNvbnN0CkBAIC0xMjEsOSArMTIwLDcgQEAgYm9vbCBTY3JvbGxiYXI6OmlzU2Ny
b2xsVmlld1Njcm9sbGJhcigpIAogCiB2b2lkIFNjcm9sbGJhcjo6b2Zmc2V0RGlkQ2hhbmdlKCkK
IHsKLSAgICBBU1NFUlQobV9zY3JvbGxhYmxlQXJlYSk7Ci0KLSAgICBmbG9hdCBwb3NpdGlvbiA9
IHN0YXRpY19jYXN0PGZsb2F0PihtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbih0aGlz
KSk7CisgICAgZmxvYXQgcG9zaXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdD4obV9zY3JvbGxhYmxl
QXJlYS5zY3JvbGxQb3NpdGlvbih0aGlzKSk7CiAgICAgaWYgKHBvc2l0aW9uID09IG1fY3VycmVu
dFBvcykKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMTEsNyArMjA4LDcgQEAgdm9pZCBTY3JvbGxi
YXI6OmF1dG9zY3JvbGxQcmVzc2VkUGFydChkbwogICAgIH0KIAogICAgIC8vIEhhbmRsZSB0aGUg
YXJyb3dzIGFuZCB0cmFjay4KLSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFi
bGVBcmVhLT5zY3JvbGwocHJlc3NlZFBhcnRTY3JvbGxEaXJlY3Rpb24oKSwgcHJlc3NlZFBhcnRT
Y3JvbGxHcmFudWxhcml0eSgpKSkKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYS5zY3JvbGwocHJl
c3NlZFBhcnRTY3JvbGxEaXJlY3Rpb24oKSwgcHJlc3NlZFBhcnRTY3JvbGxHcmFudWxhcml0eSgp
KSkKICAgICAgICAgc3RhcnRUaW1lcklmTmVlZGVkKGRlbGF5KTsKIH0KIApAQCAtMjcwLDIyICsy
NjcsMTkgQEAgU2Nyb2xsR3JhbnVsYXJpdHkgU2Nyb2xsYmFyOjpwcmVzc2VkUGFydAogCiB2b2lk
IFNjcm9sbGJhcjo6bW92ZVRodW1iKGludCBwb3MsIGJvb2wgZHJhZ2dpbmdEb2N1bWVudCkKIHsK
LSAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIHJldHVybjsKLQogICAgIGludCBk
ZWx0YSA9IHBvcyAtIG1fcHJlc3NlZFBvczsKIAogICAgIGlmIChkcmFnZ2luZ0RvY3VtZW50KSB7
CiAgICAgICAgIGlmIChtX2RyYWdnaW5nRG9jdW1lbnQpCiAgICAgICAgICAgICBkZWx0YSA9IHBv
cyAtIG1fZG9jdW1lbnREcmFnUG9zOwogICAgICAgICBtX2RyYWdnaW5nRG9jdW1lbnQgPSB0cnVl
OwotICAgICAgICBGbG9hdFBvaW50IGN1cnJlbnRQb3NpdGlvbiA9IG1fc2Nyb2xsYWJsZUFyZWEt
PnNjcm9sbEFuaW1hdG9yKCktPmN1cnJlbnRQb3NpdGlvbigpOworICAgICAgICBGbG9hdFBvaW50
IGN1cnJlbnRQb3NpdGlvbiA9IG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3IoKS5jdXJy
ZW50UG9zaXRpb24oKTsKICAgICAgICAgaW50IGRlc3RpbmF0aW9uUG9zaXRpb24gPSAobV9vcmll
bnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gY3VycmVudFBvc2l0aW9uLngoKSA6IGN1
cnJlbnRQb3NpdGlvbi55KCkpICsgZGVsdGE7CiAgICAgICAgIGlmIChkZWx0YSA+IDApCiAgICAg
ICAgICAgICBkZXN0aW5hdGlvblBvc2l0aW9uID0gc3RkOjptaW4oZGVzdGluYXRpb25Qb3NpdGlv
biArIGRlbHRhLCBtYXhpbXVtKCkpOwogICAgICAgICBlbHNlIGlmIChkZWx0YSA8IDApCiAgICAg
ICAgICAgICBkZXN0aW5hdGlvblBvc2l0aW9uID0gc3RkOjptYXgoZGVzdGluYXRpb25Qb3NpdGlv
biArIGRlbHRhLCAwKTsKLSAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsVG9PZmZzZXRX
aXRob3V0QW5pbWF0aW9uKG1fb3JpZW50YXRpb24sIGRlc3RpbmF0aW9uUG9zaXRpb24pOworICAg
ICAgICBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihtX29y
aWVudGF0aW9uLCBkZXN0aW5hdGlvblBvc2l0aW9uKTsKICAgICAgICAgbV9kb2N1bWVudERyYWdQ
b3MgPSBwb3M7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMDcsNyArMzAxLDcgQEAgdm9p
ZCBTY3JvbGxiYXI6Om1vdmVUaHVtYihpbnQgcG9zLCBib29sIAogICAgIAogICAgIGlmIChkZWx0
YSkgewogICAgICAgICBmbG9hdCBuZXdQb3NpdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0Pih0aHVt
YlBvcyArIGRlbHRhKSAqIG1heGltdW0oKSAvICh0cmFja0xlbiAtIHRodW1iTGVuKTsKLSAgICAg
ICAgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG1fb3Jp
ZW50YXRpb24sIG5ld1Bvc2l0aW9uKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxU
b09mZnNldFdpdGhvdXRBbmltYXRpb24obV9vcmllbnRhdGlvbiwgbmV3UG9zaXRpb24pOwogICAg
IH0KIH0KIApAQCAtMzQwLDEwICszMzQsOSBAQCB2b2lkIFNjcm9sbGJhcjo6c2V0UHJlc3NlZFBh
cnQoU2Nyb2xsYmFyCiBib29sIFNjcm9sbGJhcjo6bW91c2VNb3ZlZChjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmIGV2dCkKIHsKICAgICBpZiAobV9wcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQpIHsK
LSAgICAgICAgaWYgKHRoZW1lKCktPnNob3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2luKHRoaXMsIGV2
dCkpIHsKLSAgICAgICAgICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQotICAgICAgICAgICAgICAg
IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihtX29yaWVu
dGF0aW9uLCBtX2RyYWdPcmlnaW4pOwotICAgICAgICB9IGVsc2UgeworICAgICAgICBpZiAodGhl
bWUoKS0+c2hvdWxkU25hcEJhY2tUb0RyYWdPcmlnaW4odGhpcywgZXZ0KSkKKyAgICAgICAgICAg
IG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG1fb3JpZW50
YXRpb24sIG1fZHJhZ09yaWdpbik7CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbW92ZVRo
dW1iKG1fb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IAogICAgICAgICAgICAg
ICAgICAgICAgIGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9zaXRpb24oKSkueCgp
IDoKICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0
LnBvc2l0aW9uKCkpLnkoKSwgdGhlbWUoKS0+c2hvdWxkRHJhZ0RvY3VtZW50SW5zdGVhZE9mVGh1
bWIodGhpcywgZXZ0KSk7CkBAIC0zNzksMTQgKzM3MiwxMiBAQCBib29sIFNjcm9sbGJhcjo6bW91
c2VNb3ZlZChjb25zdCBQbGF0Zm9yCiAKIHZvaWQgU2Nyb2xsYmFyOjptb3VzZUVudGVyZWQoKQog
ewotICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQotICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5t
b3VzZUVudGVyZWRTY3JvbGxiYXIodGhpcyk7CisgICAgbV9zY3JvbGxhYmxlQXJlYS5tb3VzZUVu
dGVyZWRTY3JvbGxiYXIodGhpcyk7CiB9CiAKIGJvb2wgU2Nyb2xsYmFyOjptb3VzZUV4aXRlZCgp
CiB7Ci0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEt
Pm1vdXNlRXhpdGVkU2Nyb2xsYmFyKHRoaXMpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEubW91c2VF
eGl0ZWRTY3JvbGxiYXIodGhpcyk7CiAgICAgc2V0SG92ZXJlZFBhcnQoTm9QYXJ0KTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KQEAgLTM5OCwxMyArMzg5LDExIEBAIGJvb2wgU2Nyb2xsYmFyOjptb3Vz
ZVVwKGNvbnN0IFBsYXRmb3JtTW8KICAgICBtX2RyYWdnaW5nRG9jdW1lbnQgPSBmYWxzZTsKICAg
ICBzdG9wVGltZXJJZk5lZWRlZCgpOwogCi0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpIHsKLSAg
ICAgICAgLy8gbV9ob3ZlcmVkUGFydCB3b24ndCBiZSB1cGRhdGVkIHVudGlsIHRoZSBuZXh0IG1v
dXNlTW92ZWQgb3IgbW91c2VEb3duLCBzbyB3ZSBoYXZlIHRvIGhpdCB0ZXN0Ci0gICAgICAgIC8v
IHRvIHJlYWxseSBrbm93IGlmIHRoZSBtb3VzZSBoYXMgZXhpdGVkIHRoZSBzY3JvbGxiYXIgb24g
YSBtb3VzZVVwLgotICAgICAgICBTY3JvbGxiYXJQYXJ0IHBhcnQgPSB0aGVtZSgpLT5oaXRUZXN0
KHRoaXMsIG1vdXNlRXZlbnQucG9zaXRpb24oKSk7Ci0gICAgICAgIGlmIChwYXJ0ID09IE5vUGFy
dCkKLSAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPm1vdXNlRXhpdGVkU2Nyb2xsYmFyKHRo
aXMpOwotICAgIH0KKyAgICAvLyBtX2hvdmVyZWRQYXJ0IHdvbid0IGJlIHVwZGF0ZWQgdW50aWwg
dGhlIG5leHQgbW91c2VNb3ZlZCBvciBtb3VzZURvd24sIHNvIHdlIGhhdmUgdG8gaGl0IHRlc3QK
KyAgICAvLyB0byByZWFsbHkga25vdyBpZiB0aGUgbW91c2UgaGFzIGV4aXRlZCB0aGUgc2Nyb2xs
YmFyIG9uIGEgbW91c2VVcC4KKyAgICBTY3JvbGxiYXJQYXJ0IHBhcnQgPSB0aGVtZSgpLT5oaXRU
ZXN0KHRoaXMsIG1vdXNlRXZlbnQucG9zaXRpb24oKSk7CisgICAgaWYgKHBhcnQgPT0gTm9QYXJ0
KQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLm1vdXNlRXhpdGVkU2Nyb2xsYmFyKHRoaXMpOwog
CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC00OTgsMTIgKzQ4NywxMiBAQCBib29sIFNjcm9sbGJh
cjo6c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlCiAgICAgLy8gTm9uLW92ZXJsYXkgc2Nyb2xsYmFy
cyBzaG91bGQgYWx3YXlzIHBhcnRpY2lwYXRlIGluIGhpdCB0ZXN0aW5nLgogICAgIGlmICghaXNP
dmVybGF5U2Nyb2xsYmFyKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBtX3Nj
cm9sbGFibGVBcmVhLT5zY3JvbGxBbmltYXRvcigpLT5zaG91bGRTY3JvbGxiYXJQYXJ0aWNpcGF0
ZUluSGl0VGVzdGluZyh0aGlzKTsKKyAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxB
bmltYXRvcigpLnNob3VsZFNjcm9sbGJhclBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKHRoaXMpOwog
fQogCiBib29sIFNjcm9sbGJhcjo6aXNXaW5kb3dBY3RpdmUoKSBjb25zdAogewotICAgIHJldHVy
biBtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmlzQWN0aXZlKCk7CisgICAg
cmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuaXNBY3RpdmUoKTsKIH0KIAogdm9pZCBTY3JvbGxiYXI6
OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC01MTEsNDAgKzUwMCwyNyBA
QCB2b2lkIFNjcm9sbGJhcjo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50CiAgICAgaWYgKHN1cHBy
ZXNzSW52YWxpZGF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3Njcm9sbGFi
bGVBcmVhKQotICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5pbnZhbGlkYXRlU2Nyb2xsYmFyKHRo
aXMsIHJlY3QpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEuaW52YWxpZGF0ZVNjcm9sbGJhcih0aGlz
LCByZWN0KTsKIH0KIAogSW50UmVjdCBTY3JvbGxiYXI6OmNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3
KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKIHsKLSAgICBpZiAobV9zY3JvbGxhYmxl
QXJlYSkKLSAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnZlcnRGcm9tU2Nyb2xs
YmFyVG9Db250YWluaW5nVmlldyh0aGlzLCBsb2NhbFJlY3QpOwotCi0gICAgcmV0dXJuIFdpZGdl
dDo6Y29udmVydFRvQ29udGFpbmluZ1ZpZXcobG9jYWxSZWN0KTsKKyAgICByZXR1cm4gbV9zY3Jv
bGxhYmxlQXJlYS5jb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcodGhpcywgbG9j
YWxSZWN0KTsKIH0KIAogSW50UmVjdCBTY3JvbGxiYXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXcoY29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKIHsKLSAgICBpZiAobV9zY3JvbGxh
YmxlQXJlYSkKLSAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXdUb1Njcm9sbGJhcih0aGlzLCBwYXJlbnRSZWN0KTsKLQotICAgIHJldHVybiBX
aWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcocGFyZW50UmVjdCk7CisgICAgcmV0dXJu
IG1fc2Nyb2xsYWJsZUFyZWEuY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKHRo
aXMsIHBhcmVudFJlY3QpOwogfQogCiBJbnRQb2ludCBTY3JvbGxiYXI6OmNvbnZlcnRUb0NvbnRh
aW5pbmdWaWV3KGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdAogewotICAgIGlmICht
X3Njcm9sbGFibGVBcmVhKQotICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+Y29udmVy
dEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KHRoaXMsIGxvY2FsUG9pbnQpOwotCi0gICAg
cmV0dXJuIFdpZGdldDo6Y29udmVydFRvQ29udGFpbmluZ1ZpZXcobG9jYWxQb2ludCk7CisgICAg
cmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdW
aWV3KHRoaXMsIGxvY2FsUG9pbnQpOwogfQogCiBJbnRQb2ludCBTY3JvbGxiYXI6OmNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAogewot
ICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQotICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJl
YS0+Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKHRoaXMsIHBhcmVudFBvaW50
KTsKLQotICAgIHJldHVybiBXaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcocGFyZW50
UG9pbnQpOworICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLmNvbnZlcnRGcm9tQ29udGFpbmlu
Z1ZpZXdUb1Njcm9sbGJhcih0aGlzLCBwYXJlbnRQb2ludCk7CiB9CiAKIGJvb2wgU2Nyb2xsYmFy
OjpzdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKCkgY29uc3QKQEAgLTU1Miw4ICs1Mjgs
OCBAQCBib29sIFNjcm9sbGJhcjo6c3VwcG9ydHNVcGRhdGVPblNlY29uZGFyCiAgICAgLy8gSXQn
cyB1bmZvcnR1bmF0ZSB0aGF0IHRoaXMgbmVlZHMgdG8gYmUgZG9uZSB3aXRoIGFuIGlmZGVmLiBJ
ZGVhbGx5IHRoZXJlIHdvdWxkIGJlIGEgd2F5IHRvIGZlYXR1cmUtZGV0ZWN0CiAgICAgLy8gdGhl
IG5lY2Vzc2FyeSBzdXBwb3J0IHdpdGhpbiBBcHBLaXQuCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9M
TElORykgJiYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwMTAwMAotICAgIHJldHVybiAhbV9zY3JvbGxhYmxlQXJlYS0+Zm9yY2VVcGRhdGVTY3Jv
bGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkKLSAgICAgICAgJiYgKG1f
c2Nyb2xsYWJsZUFyZWEtPmhhc0xheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSB8fCBtX3Njcm9s
bGFibGVBcmVhLT5oYXNMYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSk7CisgICAgcmV0dXJu
ICFtX3Njcm9sbGFibGVBcmVhLmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBl
cmZvcm1hbmNlVGVzdGluZygpCisgICAgICAgICYmIChtX3Njcm9sbGFibGVBcmVhLmhhc0xheWVy
Rm9yVmVydGljYWxTY3JvbGxiYXIoKSB8fCBtX3Njcm9sbGFibGVBcmVhLmhhc0xheWVyRm9ySG9y
aXpvbnRhbFNjcm9sbGJhcigpKTsKICNlbHNlCiAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAkocmV2aXNpb24gMTgwNDUwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDE0IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIw
MTQtMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIFNjcm9sbGJhciA6IHB1Ymxp
YyBXaWRnZXQsCiAKIHB1YmxpYzoKICAgICAvLyBNdXN0IGJlIGltcGxlbWVudGVkIGJ5IHBsYXRm
b3JtcyB0aGF0IGNhbid0IHNpbXBseSB1c2UgdGhlIFNjcm9sbGJhciBiYXNlIGNsYXNzLiAgUmln
aHQgbm93IHRoZSBvbmx5IHBsYXRmb3JtIHRoYXQgaXMgbm90IHVzaW5nIHRoZSBiYXNlIGNsYXNz
IGlzIEdUSy4KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFzc1JlZlB0cjxTY3JvbGxiYXI+
IGNyZWF0ZU5hdGl2ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0
aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZU5hdGl2ZVNjcm9sbGJh
cihTY3JvbGxhYmxlQXJlYSYsIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9s
U2l6ZSk7CiAKICAgICB2aXJ0dWFsIH5TY3JvbGxiYXIoKTsKIApAQCAtMTAzLDggKzEwMyw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgaW50IHBhZ2VTdGVwKGludCB2aWV3V2lkdGhPckhlaWdodCkg
eyByZXR1cm4gcGFnZVN0ZXAodmlld1dpZHRoT3JIZWlnaHQsIHZpZXdXaWR0aE9ySGVpZ2h0KTsg
fQogICAgIHN0YXRpYyBmbG9hdCBwYWdlU3RlcERlbHRhKGludCB3aWR0aE9ySGVpZ2h0KSB7IHJl
dHVybiBzdGQ6Om1heChzdGQ6Om1heChzdGF0aWNfY2FzdDxmbG9hdD4od2lkdGhPckhlaWdodCkg
KiBTY3JvbGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpLCBzdGF0aWNfY2FzdDxm
bG9hdD4od2lkdGhPckhlaWdodCkgLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMo
KSksIDEuMGYpOyB9CiAKLSAgICB2b2lkIGRpc2Nvbm5lY3RGcm9tU2Nyb2xsYWJsZUFyZWEoKSB7
IG1fc2Nyb2xsYWJsZUFyZWEgPSAwOyB9Ci0gICAgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVB
cmVhKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYTsgfQorICAgIFNjcm9sbGFibGVB
cmVhJiBzY3JvbGxhYmxlQXJlYSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWE7IH0K
IAogICAgIGludCBwcmVzc2VkUG9zKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzc2VkUG9zOyB9CiAK
QEAgLTE1OSw3ICsxNTgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVXBk
YXRlT25TZWNvbmRhcnlUaHJlYWQoKSBjb25zdCBvdmVycmlkZTsKIAogcHJvdGVjdGVkOgotICAg
IFNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxi
YXJDb250cm9sU2l6ZSwgU2Nyb2xsYmFyVGhlbWUqID0gMCwgYm9vbCBpc0N1c3RvbVNjcm9sbGJh
ciA9IGZhbHNlKTsKKyAgICBTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEmLCBTY3JvbGxiYXJPcmll
bnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUsIFNjcm9sbGJhclRoZW1lKiA9IDAsIGJvb2wg
aXNDdXN0b21TY3JvbGxiYXIgPSBmYWxzZSk7CiAKICAgICB2b2lkIHVwZGF0ZVRodW1iKCk7CiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRodW1iUG9zaXRpb24oKTsKQEAgLTE3Miw3ICsxNzEsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgU2Nyb2xsRGlyZWN0aW9uIHByZXNzZWRQYXJ0U2Nyb2xsRGlyZWN0
aW9uKCk7CiAgICAgU2Nyb2xsR3JhbnVsYXJpdHkgcHJlc3NlZFBhcnRTY3JvbGxHcmFudWxhcml0
eSgpOwogCi0gICAgU2Nyb2xsYWJsZUFyZWEqIG1fc2Nyb2xsYWJsZUFyZWE7CisgICAgU2Nyb2xs
YWJsZUFyZWEmIG1fc2Nyb2xsYWJsZUFyZWE7CiAgICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gbV9v
cmllbnRhdGlvbjsKICAgICBTY3JvbGxiYXJDb250cm9sU2l6ZSBtX2NvbnRyb2xTaXplOwogICAg
IFNjcm9sbGJhclRoZW1lKiBtX3RoZW1lOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1Njcm9sbEFuaW1hdG9ySU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLmgJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNiw3ICszNiw3IEBAIGNsYXNzIFBsYXRmb3JtVG91Y2hFdmVudDsKIAogY2xhc3MgU2Nyb2xs
QW5pbWF0b3JJT1MgOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3IgewogcHVibGljOgotICAgIFNjcm9s
bEFuaW1hdG9ySU9TKFNjcm9sbGFibGVBcmVhKik7CisgICAgU2Nyb2xsQW5pbWF0b3JJT1MoU2Ny
b2xsYWJsZUFyZWEmKTsKICAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvcklPUygpOwogCiAjaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9T
Y3JvbGxBbmltYXRvcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MubW0JKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDAsNyArNDAsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1QYXNzT3duUHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRl
KFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKK1Bhc3NPd25QdHI8U2Nyb2xsQW5pbWF0
b3I+IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVh
KQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2Nyb2xsQW5pbWF0b3JJT1Moc2Nyb2xsYWJs
ZUFyZWEpKTsKIH0KQEAgLTgyLDcgKzgyLDcgQEAgYm9vbCBTY3JvbGxBbmltYXRvcklPUzo6aGFu
ZGxlVG91Y2hFdmVudAogICAgICAgICBtX2luVG91Y2hTZXF1ZW5jZSA9IGZhbHNlOwogICAgICAg
ICBtX3Njcm9sbGFibGVBcmVhRm9yVG91Y2hTZXF1ZW5jZSA9IDA7CiAgICAgICAgIGlmIChtX3N0
YXJ0ZWRTY3JvbGwpCi0gICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSgpLT5kaWRFbmRTY3JvbGwo
KTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhKCkuZGlkRW5kU2Nyb2xsKCk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTkyLDcgKzkyLDcgQEAgYm9vbCBTY3JvbGxBbmlt
YXRvcklPUzo6aGFuZGxlVG91Y2hFdmVudAogICAgICAgICBtX2luVG91Y2hTZXF1ZW5jZSA9IGZh
bHNlOwogICAgICAgICBtX3Njcm9sbGFibGVBcmVhRm9yVG91Y2hTZXF1ZW5jZSA9IDA7CiAgICAg
ICAgIGlmIChtX3N0YXJ0ZWRTY3JvbGwpCi0gICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSgpLT5k
aWRFbmRTY3JvbGwoKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhKCkuZGlkRW5kU2Nyb2xs
KCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCkBAIC0xMDUsOCArMTA1LDgg
QEAgYm9vbCBTY3JvbGxBbmltYXRvcklPUzo6aGFuZGxlVG91Y2hFdmVudAogICAgICAgICBkZXRl
cm1pbmVTY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UodG91Y2hEZWx0YSk7CiAKICAgICBp
ZiAoIW1fY29tbWl0dGVkVG9TY3JvbGxBeGlzKSB7Ci0gICAgICAgIGJvb2wgaG9yaXpvbnRhbGx5
U2Nyb2xsYWJsZSA9IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFNpemUoSG9yaXpvbnRhbFNjcm9s
bGJhcik7Ci0gICAgICAgIGJvb2wgdmVydGljYWxseVNjcm9sbGFibGUgPSBtX3Njcm9sbGFibGVB
cmVhLT5zY3JvbGxTaXplKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAgICAgYm9vbCBob3Jpem9u
dGFsbHlTY3JvbGxhYmxlID0gbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxTaXplKEhvcml6b250YWxT
Y3JvbGxiYXIpOworICAgICAgICBib29sIHZlcnRpY2FsbHlTY3JvbGxhYmxlID0gbV9zY3JvbGxh
YmxlQXJlYS5zY3JvbGxTaXplKFZlcnRpY2FsU2Nyb2xsYmFyKTsKIAogICAgICAgICBpZiAoIWhv
cml6b250YWxseVNjcm9sbGFibGUgJiYgIXZlcnRpY2FsbHlTY3JvbGxhYmxlKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMTYwLDkgKzE2MCw5IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JJ
T1M6OmhhbmRsZVRvdWNoRXZlbnQKICAgICAgICAgaWYgKCFoYW5kbGVkKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICBtX3N0YXJ0ZWRTY3JvbGwgPSB0cnVlOwotICAgICAgICBz
Y3JvbGxhYmxlQXJlYSgpLT5kaWRTdGFydFNjcm9sbCgpOworICAgICAgICBzY3JvbGxhYmxlQXJl
YSgpLmRpZFN0YXJ0U2Nyb2xsKCk7CiAgICAgfSBlbHNlIGlmIChoYW5kbGVkKQotICAgICAgICBz
Y3JvbGxhYmxlQXJlYSgpLT5kaWRVcGRhdGVTY3JvbGwoKTsKKyAgICAgICAgc2Nyb2xsYWJsZUFy
ZWEoKS5kaWRVcGRhdGVTY3JvbGwoKTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE3
MSw3ICsxNzEsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9ySU9TOjpkZXRlcm1pbmVTY3JvbGxhCiB7
CiAgICAgQVNTRVJUKCFtX3Njcm9sbGFibGVBcmVhRm9yVG91Y2hTZXF1ZW5jZSk7CiAKLSAgICBT
Y3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEgPSBtX3Njcm9sbGFibGVBcmVhOworICAgIFNj
cm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSA9ICZtX3Njcm9sbGFibGVBcmVhOwogICAgIHdo
aWxlICh0cnVlKSB7CiAgICAgICAgIGlmICghc2Nyb2xsYWJsZUFyZWEtPmlzUGlubmVkSW5Cb3Ro
RGlyZWN0aW9ucyhzY3JvbGxEZWx0YSkpCiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCShyZXZpc2lv
biAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JN
YWMuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBjbGFzcyBTY3JvbGxiYXI7CiBj
bGFzcyBTY3JvbGxBbmltYXRvck1hYyA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciwgcHJpdmF0ZSBT
Y3JvbGxDb250cm9sbGVyQ2xpZW50IHsKIAogcHVibGljOgotICAgIFNjcm9sbEFuaW1hdG9yTWFj
KFNjcm9sbGFibGVBcmVhKik7CisgICAgU2Nyb2xsQW5pbWF0b3JNYWMoU2Nyb2xsYWJsZUFyZWEm
KTsKICAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvck1hYygpOwogCiAgICAgdm9pZCBpbW1lZGlh
dGVTY3JvbGxUb1BvaW50Rm9yU2Nyb2xsQW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG5ld1Bv
c2l0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRv
ck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xs
QW5pbWF0b3JNYWMubW0JKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjY5LDcgKzI2OSw3IEBAIC0gKHZvaWQpc2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFAK
ICAgICBpZiAoW3Njcm9sbGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxBbmltYXRvcigp
LT5jb250ZW50QXJlYVdpbGxQYWludCgpOworICAgIF9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsQW5p
bWF0b3IoKS5jb250ZW50QXJlYVdpbGxQYWludCgpOwogfQogCiAtICh2b2lkKXNjcm9sbGVySW1w
UGFpcjooaWQpc2Nyb2xsZXJJbXBQYWlyIHVwZGF0ZVNjcm9sbGVyU3R5bGVGb3JOZXdSZWNvbW1l
bmRlZFNjcm9sbGVyU3R5bGU6KE5TU2Nyb2xsZXJTdHlsZSluZXdSZWNvbW1lbmRlZFNjcm9sbGVy
U3R5bGUKQEAgLTI3OSw3ICsyNzksNyBAQCAtICh2b2lkKXNjcm9sbGVySW1wUGFpcjooaWQpc2Ny
b2xsZXJJbXBQCiAKICAgICBbc2Nyb2xsZXJJbXBQYWlyIHNldFNjcm9sbGVyU3R5bGU6bmV3UmVj
b21tZW5kZWRTY3JvbGxlclN0eWxlXTsKIAotICAgIHN0YXRpY19jYXN0PFNjcm9sbEFuaW1hdG9y
TWFjKj4oX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxBbmltYXRvcigpKS0+dXBkYXRlU2Nyb2xsZXJT
dHlsZSgpOworICAgIHN0YXRpY19jYXN0PFNjcm9sbEFuaW1hdG9yTWFjJj4oX3Njcm9sbGFibGVB
cmVhLT5zY3JvbGxBbmltYXRvcigpKS51cGRhdGVTY3JvbGxlclN0eWxlKCk7CiB9CiAKIEBlbmQK
QEAgLTQxNyw3ICs0MTcsNyBAQCAtICh2b2lkKWNhbmNlbEFuaW1hdGlvbnMKIAogLSAoU2Nyb2xs
QW5pbWF0b3JNYWMqKXNjcm9sbEFuaW1hdG9yCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFNj
cm9sbEFuaW1hdG9yTWFjKj4oX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+c2Nyb2xsQW5p
bWF0b3IoKSk7CisgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxTY3JvbGxBbmltYXRvck1hYyY+KF9z
Y3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkuc2Nyb2xsQW5pbWF0b3IoKSk7CiB9CiAKIC0gKE5T
UmVjdCljb252ZXJ0UmVjdFRvQmFja2luZzooTlNSZWN0KWFSZWN0CkBAIC00NDAsOSArNDQwLDkg
QEAgLSAoQ0FMYXllciAqKWxheWVyCiAKICAgICBHcmFwaGljc0xheWVyKiBsYXllcjsKICAgICBp
ZiAoX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAg
ICAgbGF5ZXIgPSBfc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5sYXllckZvclZlcnRpY2Fs
U2Nyb2xsYmFyKCk7CisgICAgICAgIGxheWVyID0gX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEo
KS5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCk7CiAgICAgZWxzZQotICAgICAgICBsYXllciA9
IF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCktPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJh
cigpOworICAgICAgICBsYXllciA9IF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGF5ZXJG
b3JIb3Jpem9udGFsU2Nyb2xsYmFyKCk7CiAKICAgICBzdGF0aWMgQ0FMYXllciAqZHVtbXlMYXll
ciA9IFtbQ0FMYXllciBhbGxvY10gaW5pdF07CiAgICAgcmV0dXJuIGxheWVyID8gbGF5ZXItPnBs
YXRmb3JtTGF5ZXIoKSA6IGR1bW15TGF5ZXI7CkBAIC00NTUsNyArNDU1LDcgQEAgLSAoTlNQb2lu
dCltb3VzZUxvY2F0aW9uSW5TY3JvbGxlckZvclNjcgogCiAgICAgQVNTRVJUX1VOVVNFRChzY3Jv
bGxlckltcCwgc2Nyb2xsZXJJbXAgPT0gc2Nyb2xsYmFyUGFpbnRlckZvclNjcm9sbGJhcihfc2Ny
b2xsYmFyKSk7CiAKLSAgICByZXR1cm4gX3Njcm9sbGJhci0+Y29udmVydEZyb21Db250YWluaW5n
Vmlldyhfc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5sYXN0S25vd25Nb3VzZVBvc2l0aW9u
KCkpOworICAgIHJldHVybiBfc2Nyb2xsYmFyLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KF9z
Y3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGFzdEtub3duTW91c2VQb3NpdGlvbigpKTsKIH0K
IAogLSAoTlNSZWN0KWNvbnZlcnRSZWN0VG9MYXllcjooTlNSZWN0KXJlY3QKQEAgLTQ4Miw3ICs0
ODIsNyBAQCAtICh2b2lkKXNldFVwQWxwaGFBbmltYXRpb246KFJldGFpblB0cjxXCiAgICAgaWYg
KFtzZWxmIHNjcm9sbEFuaW1hdG9yXS0+c2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkgJiYg
IW11c3RBbmltYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoX3Njcm9sbGJhci0+c2Ny
b2xsYWJsZUFyZWEoKS0+c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSAmJiAhbXVzdEFu
aW1hdGUpIHsKKyAgICBpZiAoX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5zaG91bGRTdXNw
ZW5kU2Nyb2xsQW5pbWF0aW9ucygpICYmICFtdXN0QW5pbWF0ZSkgewogICAgICAgICBbc2VsZiBz
Y3JvbGxBbmltYXRvcl0tPnN0YXJ0U2Nyb2xsYmFyUGFpbnRUaW1lcigpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtNjM0LDEyICs2MzQsMTIgQEAgLSAodm9pZClpbnZhbGlkYXRlCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5p
bWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCitQYXNzT3duUHRy
PFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBz
Y3JvbGxhYmxlQXJlYSkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbEFuaW1hdG9y
TWFjKHNjcm9sbGFibGVBcmVhKSk7CiB9CiAKLVNjcm9sbEFuaW1hdG9yTWFjOjpTY3JvbGxBbmlt
YXRvck1hYyhTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCitTY3JvbGxBbmltYXRvck1h
Yzo6U2Nyb2xsQW5pbWF0b3JNYWMoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQogICAg
IDogU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJsZUFyZWEpCiAgICAgLCBtX2luaXRpYWxTY3JvbGxi
YXJQYWludFRpbWVyKCp0aGlzLCAmU2Nyb2xsQW5pbWF0b3JNYWM6OmluaXRpYWxTY3JvbGxiYXJQ
YWludFRpbWVyRmlyZWQpCiAgICAgLCBtX3NlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXIoKnRo
aXMsICZTY3JvbGxBbmltYXRvck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lckZpcmVk
KQpAQCAtNjUzLDcgKzY1Myw3IEBAIFNjcm9sbEFuaW1hdG9yTWFjOjpTY3JvbGxBbmltYXRvck1h
YyhTY3IKICAgICBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlID0gYWRvcHROUyhbW1dl
YlNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1h
dG9yOnRoaXNdKTsKICAgICBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlciA9IGFkb3B0TlMoW1tOU0Ns
YXNzRnJvbVN0cmluZyhAIk5TU2Nyb2xsQW5pbWF0aW9uSGVscGVyIikgYWxsb2NdIGluaXRXaXRo
RGVsZWdhdGU6bV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZS5nZXQoKV0pOwogCi0gICAg
bV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlID0gYWRvcHROUyhbW1dlYlNjcm9s
bGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsYWJsZUFy
ZWE6c2Nyb2xsYWJsZUFyZWFdKTsKKyAgICBtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVs
ZWdhdGUgPSBhZG9wdE5TKFtbV2ViU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBh
bGxvY10gaW5pdFdpdGhTY3JvbGxhYmxlQXJlYTomc2Nyb2xsYWJsZUFyZWFdKTsKICAgICBtX3Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyID0gYWRvcHROUyhbW05TQ2xhc3NGcm9tU3RyaW5nKEAi
TlNTY3JvbGxlckltcFBhaXIiKSBhbGxvY10gaW5pdF0pOwogICAgIFttX3Njcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyIHNldERlbGVnYXRlOihpZCltX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVy
RGVsZWdhdGUuZ2V0KCldOwogICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIHNldFNj
cm9sbGVyU3R5bGU6cmVjb21tZW5kZWRTY3JvbGxlclN0eWxlKCldOwpAQCAtNjk5LDE0ICs2OTks
MTQgQEAgYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6c2Nyb2xsKFNjcm9sbGJhcgogewogICAgIG1f
aGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCA9IHRydWU7CiAKLSAgICBpZiAoIXNjcm9sbEFuaW1h
dGlvbkVuYWJsZWRGb3JTeXN0ZW0oKSB8fCAhbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsQW5pbWF0
b3JFbmFibGVkKCkpCisgICAgaWYgKCFzY3JvbGxBbmltYXRpb25FbmFibGVkRm9yU3lzdGVtKCkg
fHwgIW1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3JFbmFibGVkKCkpCiAgICAgICAgIHJl
dHVybiBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3Rl
cCwgbXVsdGlwbGllcik7CiAKICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gU2Nyb2xsQnlQaXhlbCkK
ICAgICAgICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwob3JpZW50YXRpb24sIGdyYW51
bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKIAogICAgIGZsb2F0IGN1cnJlbnRQb3MgPSBvcmll
bnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9jdXJyZW50UG9zWCA6IG1fY3VycmVu
dFBvc1k7Ci0gICAgZmxvYXQgbmV3UG9zID0gc3RkOjptYXg8ZmxvYXQ+KHN0ZDo6bWluPGZsb2F0
PihjdXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1f
c2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFNpemUob3JpZW50YXRpb24pKSksIDApOworICAgIGZsb2F0
IG5ld1BvcyA9IHN0ZDo6bWF4PGZsb2F0PihzdGQ6Om1pbjxmbG9hdD4oY3VycmVudFBvcyArIChz
dGVwICogbXVsdGlwbGllciksIHN0YXRpY19jYXN0PGZsb2F0PihtX3Njcm9sbGFibGVBcmVhLnNj
cm9sbFNpemUob3JpZW50YXRpb24pKSksIDApOwogICAgIGlmIChjdXJyZW50UG9zID09IG5ld1Bv
cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC03MjksMjUgKzcyOSwyNSBAQCB2b2lkIFNj
cm9sbEFuaW1hdG9yTWFjOjpzY3JvbGxUb09mZnNldFdpCiAKIEZsb2F0UG9pbnQgU2Nyb2xsQW5p
bWF0b3JNYWM6OmFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkoY29uc3QgRmxvYXRQb2lu
dCYgcG9zaXRpb24pIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhLT5jb25zdHJh
aW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSgpKQorICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYS5j
b25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSgpKQogICAgICAgICByZXR1cm4gcG9zaXRp
b247CiAKLSAgICBmbG9hdCBuZXdYID0gc3RkOjptYXg8ZmxvYXQ+KHN0ZDo6bWluPGZsb2F0Pihw
b3NpdGlvbi54KCksIG1fc2Nyb2xsYWJsZUFyZWEtPnRvdGFsQ29udGVudHNTaXplKCkud2lkdGgo
KSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVXaWR0aCgpKSwgMCk7Ci0gICAgZmxvYXQgbmV3
WSA9IHN0ZDo6bWF4PGZsb2F0PihzdGQ6Om1pbjxmbG9hdD4ocG9zaXRpb24ueSgpLCBtX3Njcm9s
bGFibGVBcmVhLT50b3RhbENvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gbV9zY3JvbGxhYmxlQXJl
YS0+dmlzaWJsZUhlaWdodCgpKSwgMCk7CisgICAgZmxvYXQgbmV3WCA9IHN0ZDo6bWF4PGZsb2F0
PihzdGQ6Om1pbjxmbG9hdD4ocG9zaXRpb24ueCgpLCBtX3Njcm9sbGFibGVBcmVhLnRvdGFsQ29u
dGVudHNTaXplKCkud2lkdGgoKSAtIG1fc2Nyb2xsYWJsZUFyZWEudmlzaWJsZVdpZHRoKCkpLCAw
KTsKKyAgICBmbG9hdCBuZXdZID0gc3RkOjptYXg8ZmxvYXQ+KHN0ZDo6bWluPGZsb2F0Pihwb3Np
dGlvbi55KCksIG1fc2Nyb2xsYWJsZUFyZWEudG90YWxDb250ZW50c1NpemUoKS5oZWlnaHQoKSAt
IG1fc2Nyb2xsYWJsZUFyZWEudmlzaWJsZUhlaWdodCgpKSwgMCk7CiAKICAgICByZXR1cm4gRmxv
YXRQb2ludChuZXdYLCBuZXdZKTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6YWRqdXN0
U2Nyb2xsUG9zaXRpb25Ub0JvdW5kc0lmTmVjZXNzYXJ5KCkKIHsKLSAgICBib29sIGN1cnJlbnRs
eUNvbnN0cmFpbnNUb0NvbnRlbnRFZGdlID0gbV9zY3JvbGxhYmxlQXJlYS0+Y29uc3RyYWluc1Nj
cm9sbGluZ1RvQ29udGVudEVkZ2UoKTsKLSAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRDb25zdHJh
aW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSh0cnVlKTsKKyAgICBib29sIGN1cnJlbnRseUNvbnN0
cmFpbnNUb0NvbnRlbnRFZGdlID0gbV9zY3JvbGxhYmxlQXJlYS5jb25zdHJhaW5zU2Nyb2xsaW5n
VG9Db250ZW50RWRnZSgpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2V0Q29uc3RyYWluc1Njcm9s
bGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7CiAKICAgICBJbnRQb2ludCBjdXJyZW50U2Nyb2xsUG9z
aXRpb24gPSBhYnNvbHV0ZVNjcm9sbFBvc2l0aW9uKCk7CiAgICAgRmxvYXRQb2ludCBuZWFyZXN0
UG9pbnRXaXRoaW5Cb3VuZHMgPSBhZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KGFic29s
dXRlU2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgaW1tZWRpYXRlU2Nyb2xsQnkobmVhcmVzdFBvaW50
V2l0aGluQm91bmRzIC0gY3VycmVudFNjcm9sbFBvc2l0aW9uKTsKIAotICAgIG1fc2Nyb2xsYWJs
ZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGN1cnJlbnRseUNvbnN0
cmFpbnNUb0NvbnRlbnRFZGdlKTsKKyAgICBtX3Njcm9sbGFibGVBcmVhLnNldENvbnN0cmFpbnNT
Y3JvbGxpbmdUb0NvbnRlbnRFZGdlKGN1cnJlbnRseUNvbnN0cmFpbnNUb0NvbnRlbnRFZGdlKTsK
IH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsVG8oY29uc3QgRmxv
YXRQb2ludCYgbmV3UG9zaXRpb24pCkBAIC03NTUsNyArNzU1LDcgQEAgdm9pZCBTY3JvbGxBbmlt
YXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsVAogICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRQb3NpdGlv
biA9IGFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkobmV3UG9zaXRpb24pOwogIAogICAg
IGJvb2wgcG9zaXRpb25DaGFuZ2VkID0gYWRqdXN0ZWRQb3NpdGlvbi54KCkgIT0gbV9jdXJyZW50
UG9zWCB8fCBhZGp1c3RlZFBvc2l0aW9uLnkoKSAhPSBtX2N1cnJlbnRQb3NZOwotICAgIGlmICgh
cG9zaXRpb25DaGFuZ2VkICYmICFzY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxPcmlnaW5DaGFuZ2Vk
KCkpCisgICAgaWYgKCFwb3NpdGlvbkNoYW5nZWQgJiYgIXNjcm9sbGFibGVBcmVhKCkuc2Nyb2xs
T3JpZ2luQ2hhbmdlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBGbG9hdFNpemUgZGVsdGEg
PSBGbG9hdFNpemUoYWRqdXN0ZWRQb3NpdGlvbi54KCkgLSBtX2N1cnJlbnRQb3NYLCBhZGp1c3Rl
ZFBvc2l0aW9uLnkoKSAtIG1fY3VycmVudFBvc1kpOwpAQCAtOTQyLDExICs5NDIsMTEgQEAgdm9p
ZCBTY3JvbGxBbmltYXRvck1hYzo6ZGlkQWRkVmVydGljYWxTYwogICAgIG1fdmVydGljYWxTY3Jv
bGxiYXJQYWludGVyRGVsZWdhdGUgPSBhZG9wdE5TKFtbV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVn
YXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGJhcjpzY3JvbGxiYXJdKTsKIAogICAgIFtwYWludGVy
IHNldERlbGVnYXRlOihpZCltX3ZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgp
XTsKLSAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBzY3JvbGxiYXItPnNjcm9sbGFibGVB
cmVhKCktPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICBpZiAoR3JhcGhpY3NMYXll
ciogbGF5ZXIgPSBzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGF5ZXJGb3JWZXJ0aWNhbFNj
cm9sbGJhcigpKQogICAgICAgICBbcGFpbnRlciBzZXRMYXllcjpsYXllci0+cGxhdGZvcm1MYXll
cigpXTsKIAogICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIHNldFZlcnRpY2FsU2Ny
b2xsZXJJbXA6cGFpbnRlcl07Ci0gICAgaWYgKHNjcm9sbGFibGVBcmVhKCktPmluTGl2ZVJlc2l6
ZSgpKQorICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLmluTGl2ZVJlc2l6ZSgpKQogICAgICAgICBb
cGFpbnRlciBzZXRLbm9iQWxwaGE6MV07CiB9CiAKQEAgLTk3NCwxMSArOTc0LDExIEBAIHZvaWQg
U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEFkZEhvcml6b250YWwKICAgICBtX2hvcml6b250YWxTY3Jv
bGxiYXJQYWludGVyRGVsZWdhdGUgPSBhZG9wdE5TKFtbV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVn
YXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGJhcjpzY3JvbGxiYXJdKTsKIAogICAgIFtwYWludGVy
IHNldERlbGVnYXRlOihpZCltX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0
KCldOwotICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IHNjcm9sbGJhci0+c2Nyb2xsYWJs
ZUFyZWEoKS0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgaWYgKEdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLmxheWVyRm9ySG9yaXpv
bnRhbFNjcm9sbGJhcigpKQogICAgICAgICBbcGFpbnRlciBzZXRMYXllcjpsYXllci0+cGxhdGZv
cm1MYXllcigpXTsKIAogICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIHNldEhvcml6
b250YWxTY3JvbGxlckltcDpwYWludGVyXTsKLSAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS0+aW5M
aXZlUmVzaXplKCkpCisgICAgaWYgKHNjcm9sbGFibGVBcmVhKCkuaW5MaXZlUmVzaXplKCkpCiAg
ICAgICAgIFtwYWludGVyIHNldEtub2JBbHBoYToxXTsKIH0KIApAQCAtOTk4LDggKzk5OCw4IEBA
IHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OndpbGxSZW1vdmVIb3Jpem8KIAogdm9pZCBTY3JvbGxB
bmltYXRvck1hYzo6dmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpCiB7Ci0gICAgR3Jh
cGhpY3NMYXllciogbGF5ZXIgPSBtX3Njcm9sbGFibGVBcmVhLT5sYXllckZvclZlcnRpY2FsU2Ny
b2xsYmFyKCk7Ci0gICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLT52
ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbV9zY3JvbGxh
YmxlQXJlYS5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFyKCk7CiAgICAgaWYgKCFz
Y3JvbGxiYXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTAxMiw4ICsxMDEyLDggQEAgdm9pZCBT
Y3JvbGxBbmltYXRvck1hYzo6dmVydGljYWxTY3JvbGxiYQogCiB2b2lkIFNjcm9sbEFuaW1hdG9y
TWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQogewotICAgIEdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gbV9zY3JvbGxhYmxlQXJlYS0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xs
YmFyKCk7Ci0gICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLT5ob3Jp
em9udGFsU2Nyb2xsYmFyKCk7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBtX3Njcm9sbGFi
bGVBcmVhLmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIFNjcm9sbGJhciogc2Ny
b2xsYmFyID0gbV9zY3JvbGxhYmxlQXJlYS5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CiAgICAgaWYg
KCFzY3JvbGxiYXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTA0OCw3ICsxMDQ4LDcgQEAgdm9p
ZCBTY3JvbGxBbmltYXRvck1hYzo6bm90aWZ5Q29udGVudEFyZQogICAgIGlmIChbbV9zY3JvbGxi
YXJQYWludGVyQ29udHJvbGxlciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEtPmlzSGFuZGxpbmdXaGVlbEV2
ZW50KCkpCisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEuaXNIYW5kbGluZ1doZWVsRXZlbnQoKSkK
ICAgICAgICAgc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWQoZGVsdGEpOwogICAgIGVsc2UKICAgICAg
ICAgc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRTb29uKGRlbHRhKTsKQEAgLTExMDksMjEgKzExMDks
MjEgQEAgYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6aGFuZGxlV2hlZWxFdmVudAogYm9vbCBTY3Jv
bGxBbmltYXRvck1hYzo6cGlubmVkSW5EaXJlY3Rpb24oZmxvYXQgZGVsdGFYLCBmbG9hdCBkZWx0
YVkpCiB7CiAgICAgRmxvYXRTaXplIGxpbWl0RGVsdGE7Ci0gICAgaWYgKGZhYnNmKGRlbHRhWSkg
Pj0gZmFic2YoZGVsdGFYKSkgeworICAgIGlmIChzdGQ6OmZhYnNmKGRlbHRhWSkgPj0gZmFic2Yo
ZGVsdGFYKSkgewogICAgICAgICBpZiAoZGVsdGFZIDwgMCkgewogICAgICAgICAgICAgLy8gV2Ug
YXJlIHRyeWluZyB0byBzY3JvbGwgdXAuICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8g
dGhlIHRvcAotICAgICAgICAgICAgbGltaXREZWx0YS5zZXRIZWlnaHQobV9zY3JvbGxhYmxlQXJl
YS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkueSgpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3Jp
Z2luKCkueSgpKTsKKyAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0SGVpZ2h0KG1fc2Nyb2xsYWJs
ZUFyZWEudmlzaWJsZUNvbnRlbnRSZWN0KCkueSgpICsgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxP
cmlnaW4oKS55KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gV2UgYXJlIHRy
eWluZyB0byBzY3JvbGwgZG93bi4gIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUg
Ym90dG9tCi0gICAgICAgICAgICBsaW1pdERlbHRhLnNldEhlaWdodChtX3Njcm9sbGFibGVBcmVh
LT50b3RhbENvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gKG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2li
bGVDb250ZW50UmVjdCgpLm1heFkoKSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigp
LnkoKSkpOworICAgICAgICAgICAgbGltaXREZWx0YS5zZXRIZWlnaHQobV9zY3JvbGxhYmxlQXJl
YS50b3RhbENvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gKG1fc2Nyb2xsYWJsZUFyZWEudmlzaWJs
ZUNvbnRlbnRSZWN0KCkubWF4WSgpICsgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxPcmlnaW4oKS55
KCkpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoZGVsdGFYICE9IDApIHsKICAgICAgICAg
aWYgKGRlbHRhWCA8IDApIHsKICAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xs
IGxlZnQuICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIGxlZnQKLSAgICAgICAg
ICAgIGxpbWl0RGVsdGEuc2V0V2lkdGgobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRS
ZWN0KCkueCgpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkueCgpKTsKKyAgICAg
ICAgICAgIGxpbWl0RGVsdGEuc2V0V2lkdGgobV9zY3JvbGxhYmxlQXJlYS52aXNpYmxlQ29udGVu
dFJlY3QoKS54KCkgKyBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbE9yaWdpbigpLngoKSk7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCByaWdo
dC4gIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUgcmlnaHQKLSAgICAgICAgICAg
IGxpbWl0RGVsdGEuc2V0V2lkdGgobV9zY3JvbGxhYmxlQXJlYS0+dG90YWxDb250ZW50c1NpemUo
KS53aWR0aCgpIC0gKG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLm1heFgo
KSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpLngoKSkpOworICAgICAgICAgICAg
bGltaXREZWx0YS5zZXRXaWR0aChtX3Njcm9sbGFibGVBcmVhLnRvdGFsQ29udGVudHNTaXplKCku
d2lkdGgoKSAtIChtX3Njcm9sbGFibGVBcmVhLnZpc2libGVDb250ZW50UmVjdCgpLm1heFgoKSAr
IG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsT3JpZ2luKCkueCgpKSk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgCkBAIC0xMTQzLDkgKzExNDMsOSBAQCBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjppc0Fs
cmVhZHlQaW5uZWRJCiB7CiAgICAgc3dpdGNoIChheGlzKSB7CiAgICAgY2FzZSBTY3JvbGxFdmVu
dEF4aXM6OlZlcnRpY2FsOgotICAgICAgICByZXR1cm4gKHdoZWVsRXZlbnQuZGVsdGFZKCkgPiAw
ICYmIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbGVkVG9Ub3AoKSkgfHwgKHdoZWVsRXZlbnQuZGVs
dGFZKCkgPCAwICYmIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbGVkVG9Cb3R0b20oKSk7CisgICAg
ICAgIHJldHVybiAod2hlZWxFdmVudC5kZWx0YVkoKSA+IDAgJiYgbV9zY3JvbGxhYmxlQXJlYS5z
Y3JvbGxlZFRvVG9wKCkpIHx8ICh3aGVlbEV2ZW50LmRlbHRhWSgpIDwgMCAmJiBtX3Njcm9sbGFi
bGVBcmVhLnNjcm9sbGVkVG9Cb3R0b20oKSk7CiAgICAgY2FzZSBTY3JvbGxFdmVudEF4aXM6Okhv
cml6b250YWw6Ci0gICAgICAgIHJldHVybiAod2hlZWxFdmVudC5kZWx0YVgoKSA+IDAgJiYgbV9z
Y3JvbGxhYmxlQXJlYS0+c2Nyb2xsZWRUb0xlZnQoKSkgfHwgKHdoZWVsRXZlbnQuZGVsdGFYKCkg
PCAwICYmIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbGVkVG9SaWdodCgpKTsKKyAgICAgICAgcmV0
dXJuICh3aGVlbEV2ZW50LmRlbHRhWCgpID4gMCAmJiBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbGVk
VG9MZWZ0KCkpIHx8ICh3aGVlbEV2ZW50LmRlbHRhWCgpIDwgMCAmJiBtX3Njcm9sbGFibGVBcmVh
LnNjcm9sbGVkVG9SaWdodCgpKTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
QEAgLTExNjksMTUgKzExNjksMTUgQEAgc3RhdGljIGJvb2wgZ2VzdHVyZVNob3VsZEJlZ2luU25h
cChjb25zdAogCiBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjphbGxvd3NWZXJ0aWNhbFN0cmV0Y2hp
bmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQogewotICAgIHN3aXRjaCAo
bV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKKyAgICBzd2l0
Y2ggKG1fc2Nyb2xsYWJsZUFyZWEudmVydGljYWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKICAgICBj
YXNlIFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWM6IHsKLSAgICAgICAgU2Nyb2xsYmFyKiBoU2Ny
b2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAgICAg
IFNjcm9sbGJhciogdlNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxi
YXIoKTsKKyAgICAgICAgU2Nyb2xsYmFyKiBoU2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLmhv
cml6b250YWxTY3JvbGxiYXIoKTsKKyAgICAgICAgU2Nyb2xsYmFyKiB2U2Nyb2xsZXIgPSBtX3Nj
cm9sbGFibGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFyKCk7CiAgICAgICAgIGJvb2wgc2Nyb2xsYmFy
c0FsbG93U3RyZXRjaGluZyA9ICgodlNjcm9sbGVyICYmIHZTY3JvbGxlci0+ZW5hYmxlZCgpKSB8
fCAoIWhTY3JvbGxlciB8fCAhaFNjcm9sbGVyLT5lbmFibGVkKCkpKTsKLSAgICAgICAgYm9vbCBl
dmVudFByZXZlbnRzU3RyZXRjaGluZyA9IG1fc2Nyb2xsYWJsZUFyZWEtPmhhc1Njcm9sbGFibGVP
clJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSAmJiBuZXdHZXN0dXJlSXNTdGFydGluZyh3aGVlbEV2
ZW50KSAmJiBpc0FscmVhZHlQaW5uZWRJbkRpcmVjdGlvbk9mR2VzdHVyZSh3aGVlbEV2ZW50LCBT
Y3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKTsKKyAgICAgICAgYm9vbCBldmVudFByZXZlbnRzU3Ry
ZXRjaGluZyA9IG1fc2Nyb2xsYWJsZUFyZWEuaGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVB
bmNlc3RvcigpICYmIG5ld0dlc3R1cmVJc1N0YXJ0aW5nKHdoZWVsRXZlbnQpICYmIGlzQWxyZWFk
eVBpbm5lZEluRGlyZWN0aW9uT2ZHZXN0dXJlKHdoZWVsRXZlbnQsIFNjcm9sbEV2ZW50QXhpczo6
VmVydGljYWwpOwogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAgICAgICAgIGlmICghZXZl
bnRQcmV2ZW50c1N0cmV0Y2hpbmcpCi0gICAgICAgICAgICBldmVudFByZXZlbnRzU3RyZXRjaGlu
ZyA9IGdlc3R1cmVTaG91bGRCZWdpblNuYXAod2hlZWxFdmVudCwgbV9zY3JvbGxhYmxlQXJlYS0+
dmVydGljYWxTbmFwT2Zmc2V0cygpKTsKKyAgICAgICAgICAgIGV2ZW50UHJldmVudHNTdHJldGNo
aW5nID0gZ2VzdHVyZVNob3VsZEJlZ2luU25hcCh3aGVlbEV2ZW50LCBtX3Njcm9sbGFibGVBcmVh
LnZlcnRpY2FsU25hcE9mZnNldHMoKSk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuIHNjcm9sbGJh
cnNBbGxvd1N0cmV0Y2hpbmcgJiYgIWV2ZW50UHJldmVudHNTdHJldGNoaW5nOwogICAgIH0KQEAg
LTExOTMsMTUgKzExOTMsMTUgQEAgYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6YWxsb3dzVmVydGlj
YWxTdAogCiBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjphbGxvd3NIb3Jpem9udGFsU3RyZXRjaGlu
Zyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCiB7Ci0gICAgc3dpdGNoICht
X3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSgpKSB7CisgICAgc3dp
dGNoIChtX3Njcm9sbGFibGVBcmVhLmhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKICAg
ICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWM6IHsKLSAgICAgICAgU2Nyb2xsYmFyKiBo
U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAg
ICAgIFNjcm9sbGJhciogdlNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3Jv
bGxiYXIoKTsKKyAgICAgICAgU2Nyb2xsYmFyKiBoU2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVh
Lmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICAgICAgU2Nyb2xsYmFyKiB2U2Nyb2xsZXIgPSBt
X3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFyKCk7CiAgICAgICAgIGJvb2wgc2Nyb2xs
YmFyc0FsbG93U3RyZXRjaGluZyA9ICgoaFNjcm9sbGVyICYmIGhTY3JvbGxlci0+ZW5hYmxlZCgp
KSB8fCAoIXZTY3JvbGxlciB8fCAhdlNjcm9sbGVyLT5lbmFibGVkKCkpKTsKLSAgICAgICAgYm9v
bCBldmVudFByZXZlbnRzU3RyZXRjaGluZyA9IG1fc2Nyb2xsYWJsZUFyZWEtPmhhc1Njcm9sbGFi
bGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSAmJiBuZXdHZXN0dXJlSXNTdGFydGluZyh3aGVl
bEV2ZW50KSAmJiBpc0FscmVhZHlQaW5uZWRJbkRpcmVjdGlvbk9mR2VzdHVyZSh3aGVlbEV2ZW50
LCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpOworICAgICAgICBib29sIGV2ZW50UHJldmVu
dHNTdHJldGNoaW5nID0gbV9zY3JvbGxhYmxlQXJlYS5oYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZUFuY2VzdG9yKCkgJiYgbmV3R2VzdHVyZUlzU3RhcnRpbmcod2hlZWxFdmVudCkgJiYgaXNB
bHJlYWR5UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1cmUod2hlZWxFdmVudCwgU2Nyb2xsRXZlbnRB
eGlzOjpIb3Jpem9udGFsKTsKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgICAgICBp
ZiAoIWV2ZW50UHJldmVudHNTdHJldGNoaW5nKQotICAgICAgICAgICAgZXZlbnRQcmV2ZW50c1N0
cmV0Y2hpbmcgPSBnZXN0dXJlU2hvdWxkQmVnaW5TbmFwKHdoZWVsRXZlbnQsIG1fc2Nyb2xsYWJs
ZUFyZWEtPmhvcml6b250YWxTbmFwT2Zmc2V0cygpKTsKKyAgICAgICAgICAgIGV2ZW50UHJldmVu
dHNTdHJldGNoaW5nID0gZ2VzdHVyZVNob3VsZEJlZ2luU25hcCh3aGVlbEV2ZW50LCBtX3Njcm9s
bGFibGVBcmVhLmhvcml6b250YWxTbmFwT2Zmc2V0cygpKTsKICNlbmRpZgogICAgICAgICByZXR1
cm4gc2Nyb2xsYmFyc0FsbG93U3RyZXRjaGluZyAmJiAhZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmc7
CiAgICAgfQpAQCAtMTIxNyw3ICsxMjE3LDcgQEAgYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6YWxs
b3dzSG9yaXpvbnRhbAogCiBJbnRTaXplIFNjcm9sbEFuaW1hdG9yTWFjOjpzdHJldGNoQW1vdW50
KCkKIHsKLSAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+b3ZlcmhhbmdBbW91bnQoKTsKKyAg
ICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS5vdmVyaGFuZ0Ftb3VudCgpOwogfQogCiBib29sIFNj
cm9sbEFuaW1hdG9yTWFjOjpwaW5uZWRJbkRpcmVjdGlvbihjb25zdCBGbG9hdFNpemUmIGRpcmVj
dGlvbikKQEAgLTEyMjcsNyArMTIyNyw3IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OnBpbm5l
ZEluRGlyZWN0aW8KIAogYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6Y2FuU2Nyb2xsSG9yaXpvbnRh
bGx5KCkKIHsKLSAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEtPmhv
cml6b250YWxTY3JvbGxiYXIoKTsKKyAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IG1fc2Nyb2xs
YWJsZUFyZWEuaG9yaXpvbnRhbFNjcm9sbGJhcigpOwogICAgIGlmICghc2Nyb2xsYmFyKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHNjcm9sbGJhci0+ZW5hYmxlZCgpOwpAQCAt
MTIzNSw3ICsxMjM1LDcgQEAgYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6Y2FuU2Nyb2xsSG9yaXpv
bgogCiBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpjYW5TY3JvbGxWZXJ0aWNhbGx5KCkKIHsKLSAg
ICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xs
YmFyKCk7CisgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLnZlcnRp
Y2FsU2Nyb2xsYmFyKCk7CiAgICAgaWYgKCFzY3JvbGxiYXIpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICByZXR1cm4gc2Nyb2xsYmFyLT5lbmFibGVkKCk7CkBAIC0xMjQ4LDE0ICsxMjQ4LDE0
IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OnNob3VsZFJ1YmJlckJhbmQKIAogSW50UG9pbnQg
U2Nyb2xsQW5pbWF0b3JNYWM6OmFic29sdXRlU2Nyb2xsUG9zaXRpb24oKQogewotICAgIHJldHVy
biBtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVudFJlY3QoKS5sb2NhdGlvbigpICsgbV9z
Y3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCk7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFy
ZWEudmlzaWJsZUNvbnRlbnRSZWN0KCkubG9jYXRpb24oKSArIG1fc2Nyb2xsYWJsZUFyZWEuc2Ny
b2xsT3JpZ2luKCk7CiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9s
bEJ5V2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkK
IHsKLSAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50
RWRnZShmYWxzZSk7CisgICAgbV9zY3JvbGxhYmxlQXJlYS5zZXRDb25zdHJhaW5zU2Nyb2xsaW5n
VG9Db250ZW50RWRnZShmYWxzZSk7CiAgICAgaW1tZWRpYXRlU2Nyb2xsQnkoZGVsdGEpOwotICAg
IG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKHRy
dWUpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVu
dEVkZ2UodHJ1ZSk7CiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9s
bEJ5KGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpCkBAIC0xMzA0LDcgKzEzMDQsNyBAQCB2b2lkIFNj
cm9sbEFuaW1hdG9yTWFjOjp1cGRhdGVTY3JvbGxlclN0CiAKICAgICBOU1Njcm9sbGVyU3R5bGUg
bmV3U3R5bGUgPSBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciBzY3JvbGxlclN0eWxlXTsK
IAotICAgIGlmIChTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUFyZWEo
KS0+dmVydGljYWxTY3JvbGxiYXIoKSkgeworICAgIGlmIChTY3JvbGxiYXIqIHZlcnRpY2FsU2Ny
b2xsYmFyID0gc2Nyb2xsYWJsZUFyZWEoKS52ZXJ0aWNhbFNjcm9sbGJhcigpKSB7CiAgICAgICAg
IHZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CiAKICAgICAgICAgU2Nyb2xsYmFyUGFp
bnRlciBvbGRWZXJ0aWNhbFBhaW50ZXIgPSBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciB2
ZXJ0aWNhbFNjcm9sbGVySW1wXTsKQEAgLTEzMjIsNyArMTMyMiw3IEBAIHZvaWQgU2Nyb2xsQW5p
bWF0b3JNYWM6OnVwZGF0ZVNjcm9sbGVyU3QKICAgICAgICAgdmVydGljYWxTY3JvbGxiYXItPnNl
dEZyYW1lUmVjdChJbnRSZWN0KDAsIDAsIHRoaWNrbmVzcywgdGhpY2tuZXNzKSk7CiAgICAgfQog
Ci0gICAgaWYgKFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhciA9IHNjcm9sbGFibGVBcmVh
KCktPmhvcml6b250YWxTY3JvbGxiYXIoKSkgeworICAgIGlmIChTY3JvbGxiYXIqIGhvcml6b250
YWxTY3JvbGxiYXIgPSBzY3JvbGxhYmxlQXJlYSgpLmhvcml6b250YWxTY3JvbGxiYXIoKSkgewog
ICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CiAKICAgICAgICAgU2Ny
b2xsYmFyUGFpbnRlciBvbGRIb3Jpem9udGFsUGFpbnRlciA9IFttX3Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyIGhvcml6b250YWxTY3JvbGxlckltcF07CkBAIC0xMzQyLDcgKzEzNDIsNyBAQCB2
b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjp1cGRhdGVTY3JvbGxlclN0CiAKICAgICAvLyBJZiBtX25l
ZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSBpcyB0cnVlLCB0aGVuIHRoZSBwYWdlIGlzIHJlc3Rvcmlu
ZyBmcm9tIHRoZSBwYWdlIGNhY2hlLCBhbmQgCiAgICAgLy8gYSByZWxheW91dCB3aWxsIGhhcHBl
biBvbiBpdHMgb3duLiBPdGhlcndpc2UsIHdlIG11c3QgaW5pdGlhdGUgYSByZS1sYXlvdXQgb3Vy
c2VsdmVzLgotICAgIHNjcm9sbGFibGVBcmVhKCktPnNjcm9sbGJhclN0eWxlQ2hhbmdlZChuZXdT
dHlsZSwgIW1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlKTsKKyAgICBzY3JvbGxhYmxlQXJlYSgp
LnNjcm9sbGJhclN0eWxlQ2hhbmdlZChuZXdTdHlsZSwgIW1fbmVlZHNTY3JvbGxlclN0eWxlVXBk
YXRlKTsKIAogICAgIG1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlID0gZmFsc2U7CiB9CkBAIC0x
Mzk1LDEzICsxMzk1LDEzIEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJl
YVMKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChj
b25zdCBJbnRSZWN0JiBzY3JvbGxlclRodW1iKQogewogICAgIEludFJlY3QgcmVjdEluVmlld0Nv
b3JkaW5hdGVzID0gc2Nyb2xsZXJUaHVtYjsKLSAgICBpZiAoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNj
cm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgaWYg
KFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2Fs
U2Nyb2xsYmFyKCkpCiAgICAgICAgIHJlY3RJblZpZXdDb29yZGluYXRlcyA9IHZlcnRpY2FsU2Ny
b2xsYmFyLT5jb252ZXJ0VG9Db250YWluaW5nVmlldyhzY3JvbGxlclRodW1iKTsKIAogICAgIGlm
IChyZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPT0gbV92aXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldFZpc2libGVTY3JvbGxl
clRodW1iUmVjdChyZWN0SW5WaWV3Q29vcmRpbmF0ZXMpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEu
c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KHJlY3RJblZpZXdDb29yZGluYXRlcyk7CiAgICAg
bV92aXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QgPSByZWN0SW5WaWV3Q29vcmRpbmF0ZXM7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCShy
ZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDExLCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNo
IE1vYmlsZSBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgogICoKQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIFBv
cHVwTWVudVdpbjo6c2hvdyhjb25zdCBJbnRSZWN0JiByCiAKICAgICBpZiAoIW1fc2Nyb2xsYmFy
ICYmIHZpc2libGVJdGVtcygpIDwgY2xpZW50KCktPmxpc3RTaXplKCkpIHsKICAgICAgICAgLy8g
V2UgbmVlZCBhIHNjcm9sbCBiYXIKLSAgICAgICAgbV9zY3JvbGxiYXIgPSBjbGllbnQoKS0+Y3Jl
YXRlU2Nyb2xsYmFyKHRoaXMsIFZlcnRpY2FsU2Nyb2xsYmFyLCBTbWFsbFNjcm9sbGJhcik7Cisg
ICAgICAgIG1fc2Nyb2xsYmFyID0gY2xpZW50KCktPmNyZWF0ZVNjcm9sbGJhcigqdGhpcywgVmVy
dGljYWxTY3JvbGxiYXIsIFNtYWxsU2Nyb2xsYmFyKTsKICAgICAgICAgbV9zY3JvbGxiYXItPnN0
eWxlQ2hhbmdlZCgpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNi0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAxOTk4IE5ldHNjYXBlIENvbW11
bmljYXRpb25zIENvcnBvcmF0aW9uLgogICoKQEAgLTMzNiw3ICszMzYsNyBAQCBSZW5kZXJMYXll
cjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlCiAgICAgICAgIC8vIFdlIHNhdmUgYW5kIHJl
c3RvcmUgb25seSB0aGUgc2Nyb2xsT2Zmc2V0IGFzIHRoZSBvdGhlciBzY3JvbGwgdmFsdWVzIGFy
ZSByZWNhbGN1bGF0ZWQuCiAgICAgICAgIG1fc2Nyb2xsT2Zmc2V0ID0gZWxlbWVudC0+c2F2ZWRM
YXllclNjcm9sbE9mZnNldCgpOwogICAgICAgICBpZiAoIW1fc2Nyb2xsT2Zmc2V0LmlzWmVybygp
KQotICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS0+c2V0Q3VycmVudFBvc2l0aW9uKEZsb2F0
UG9pbnQobV9zY3JvbGxPZmZzZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpKTsK
KyAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0Q3VycmVudFBvc2l0aW9uKEZsb2F0UG9p
bnQobV9zY3JvbGxPZmZzZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpKTsKICAg
ICAgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbE9mZnNldChJbnRTaXplKCkpOwogICAg
IH0KIH0KQEAgLTMwNjUsOSArMzA2NSw5IEBAIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJM
YXllcjo6Y3JlYXQKICAgICBSZW5kZXJFbGVtZW50KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRlcmVy
Rm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpOwogICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5
bGUgPSBhY3R1YWxSZW5kZXJlci0+aXNCb3goKSAmJiBhY3R1YWxSZW5kZXJlci0+c3R5bGUoKS5o
YXNQc2V1ZG9TdHlsZShTQ1JPTExCQVIpOwogICAgIGlmIChoYXNDdXN0b21TY3JvbGxiYXJTdHls
ZSkKLSAgICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxi
YXIodGhpcywgb3JpZW50YXRpb24sIGFjdHVhbFJlbmRlcmVyLT5lbGVtZW50KCkpOworICAgICAg
ICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcigqdGhpcywg
b3JpZW50YXRpb24sIGFjdHVhbFJlbmRlcmVyLT5lbGVtZW50KCkpOwogICAgIGVsc2UgewotICAg
ICAgICB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcih0aGlzLCBvcmll
bnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcik7CisgICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6
Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJh
cik7CiAgICAgICAgIGRpZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9uKTsK
ICAgICB9CiAgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuYWRkQ2hpbGQod2lkZ2V0
LmdldCgpKTsKQEAgLTMwODQsNyArMzA4NCw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmRlc3Ryb3lT
Y3JvbGxiYXIoU2Nyb2wKICAgICAgICAgd2lsbFJlbW92ZVNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0
KCksIG9yaWVudGF0aW9uKTsKIAogICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOwot
ICAgIHNjcm9sbGJhci0+ZGlzY29ubmVjdEZyb21TY3JvbGxhYmxlQXJlYSgpOwogICAgIHNjcm9s
bGJhciA9IG51bGxwdHI7CiB9CiAKQEAgLTM0ODIsOCArMzQ4MSw4IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckwKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0CiAgICAgdXBkYXRlU25hcE9mZnNldHMoKTsKICNpZiBQ
TEFURk9STShNQUMpCi0gICAgaWYgKGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAg
c2Nyb2xsQW5pbWF0b3IoKS0+dXBkYXRlU2Nyb2xsQW5pbWF0b3JzQW5kVGltZXJzKCk7CisgICAg
aWYgKFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0
b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT51cGRhdGVTY3JvbGxBbmltYXRv
cnNBbmRUaW1lcnMoKTsKICNlbmRpZgogI2VuZGlmCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDExLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNywgMjAwOCwgMjAxMSwgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqICAgICAgICAgICAgICAgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApAQCAtODAyLDkgKzgwMiw5IEBAIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJMaXN0Qm94
OjpjcmUKICAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7CiAgICAgYm9vbCBoYXNDdXN0b21T
Y3JvbGxiYXJTdHlsZSA9IHN0eWxlKCkuaGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKTsKICAgICBp
ZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCi0gICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9s
bGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHRoaXMsIFZlcnRpY2FsU2Nyb2xsYmFyLCAmc2Vs
ZWN0RWxlbWVudCgpKTsKKyAgICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVD
dXN0b21TY3JvbGxiYXIoKnRoaXMsIFZlcnRpY2FsU2Nyb2xsYmFyLCAmc2VsZWN0RWxlbWVudCgp
KTsKICAgICBlbHNlIHsKLSAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVT
Y3JvbGxiYXIodGhpcywgVmVydGljYWxTY3JvbGxiYXIsIHRoZW1lKCkuc2Nyb2xsYmFyQ29udHJv
bFNpemVGb3JQYXJ0KExpc3Rib3hQYXJ0KSk7CisgICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6
Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBWZXJ0aWNhbFNjcm9sbGJhciwgdGhlbWUoKS5z
Y3JvbGxiYXJDb250cm9sU2l6ZUZvclBhcnQoTGlzdGJveFBhcnQpKTsKICAgICAgICAgZGlkQWRk
U2Nyb2xsYmFyKHdpZGdldC5nZXQoKSwgVmVydGljYWxTY3JvbGxiYXIpOwogICAgIH0KICAgICB2
aWV3KCkuZnJhbWVWaWV3KCkuYWRkQ2hpbGQod2lkZ2V0LmdldCgpKTsKQEAgLTgxOSw4ICs4MTks
NyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OmRlc3Ryb3lTY3JvbGxiYXIoKQogICAgIGlmICghbV92
QmFyLT5pc0N1c3RvbVNjcm9sbGJhcigpKQogICAgICAgICBTY3JvbGxhYmxlQXJlYTo6d2lsbFJl
bW92ZVNjcm9sbGJhcihtX3ZCYXIuZ2V0KCksIFZlcnRpY2FsU2Nyb2xsYmFyKTsKICAgICBtX3ZC
YXItPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICBtX3ZCYXItPmRpc2Nvbm5lY3RGcm9tU2Nyb2xs
YWJsZUFyZWEoKTsKLSAgICBtX3ZCYXIgPSAwOworICAgIG1fdkJhciA9IG51bGxwdHI7CiB9CiAK
IHZvaWQgUmVuZGVyTGlzdEJveDo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNTY3Jv
bGxiYXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5j
cHAJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
ZW51TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgc2VsZWN0IGVsZW1lbnQgcmVuZGVyZXIgaW4gV2ViQ29yZS4KICAqCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpLgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEw
LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgICAgIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCkBAIC01NzUsNyArNTc1LDcgQEAgSG9zdFdpbmRvdyogUmVuZGVyTWVudUxpc3Q6Omhv
c3RXaW5kb3coKQogICAgIHJldHVybiB2aWV3KCkuZnJhbWVWaWV3KCkuaG9zdFdpbmRvdygpOwog
fQogCi1QYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyTWVudUxpc3Q6OmNyZWF0ZVNjcm9sbGJh
cihTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9y
aWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKK1Bhc3NSZWZQdHI8
U2Nyb2xsYmFyPiBSZW5kZXJNZW51TGlzdDo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVh
JiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9s
bGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQogewogICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdp
ZGdldDsKICAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlID0gc3R5bGUoKS5oYXNQc2V1
ZG9TdHlsZShTQ1JPTExCQVIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1lbnVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1lbnVMaXN0LmgJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNZW51TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIHNlbGVjdCBlbGVtZW50IHJlbmRlcmVyIGluIFdlYkNvcmUu
CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKS4KLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAw
OSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMTMsNyArMTEz
LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgbXVsdGlwbGUoKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCBIb3N0V2luZG93KiBob3N0V2luZG93KCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9s
bGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxi
YXIoU2Nyb2xsYWJsZUFyZWEmLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJv
bFNpemUpIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIGhhc0xpbmVJZkVtcHR5KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmNwcAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEzIEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwg
MjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDEyICszNiwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVJlZlB0cjxTY3JvbGxiYXI+IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Ny
b2xsYmFyKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRp
b24gb3JpZW50YXRpb24sIEVsZW1lbnQqIG93bmVyRWxlbWVudCwgRnJhbWUqIG93bmluZ0ZyYW1l
KQorUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxi
YXIoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBv
cmllbnRhdGlvbiwgRWxlbWVudCogb3duZXJFbGVtZW50LCBGcmFtZSogb3duaW5nRnJhbWUpCiB7
CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW5kZXJTY3JvbGxiYXIoc2Nyb2xsYWJsZUFyZWEs
IG9yaWVudGF0aW9uLCBvd25lckVsZW1lbnQsIG93bmluZ0ZyYW1lKSk7CiB9CiAKLVJlbmRlclNj
cm9sbGJhcjo6UmVuZGVyU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwg
U2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIEVsZW1lbnQqIG93bmVyRWxlbWVudCwg
RnJhbWUqIG93bmluZ0ZyYW1lKQorUmVuZGVyU2Nyb2xsYmFyOjpSZW5kZXJTY3JvbGxiYXIoU2Ny
b2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRh
dGlvbiwgRWxlbWVudCogb3duZXJFbGVtZW50LCBGcmFtZSogb3duaW5nRnJhbWUpCiAgICAgOiBT
Y3JvbGxiYXIoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xsYmFyLCBS
ZW5kZXJTY3JvbGxiYXJUaGVtZTo6cmVuZGVyU2Nyb2xsYmFyVGhlbWUoKSwgdHJ1ZSkKICAgICAs
IG1fb3duZXJFbGVtZW50KG93bmVyRWxlbWVudCkKICAgICAsIG1fb3duaW5nRnJhbWUob3duaW5n
RnJhbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5o
CShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Ny
b2xsYmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDcgKzQyLDcgQEAgY2xhc3Mg
UmVuZGVyU3R5bGU7CiBjbGFzcyBSZW5kZXJTY3JvbGxiYXIgZmluYWwgOiBwdWJsaWMgU2Nyb2xs
YmFyIHsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgU2Nyb2xsYmFyOwotICAgIHN0YXRpYyBS
ZWZQdHI8U2Nyb2xsYmFyPiBjcmVhdGVDdXN0b21TY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqLCBT
Y3JvbGxiYXJPcmllbnRhdGlvbiwgRWxlbWVudCosIEZyYW1lKiBvd25pbmdGcmFtZSA9IG51bGxw
dHIpOworICAgIHN0YXRpYyBSZWZQdHI8U2Nyb2xsYmFyPiBjcmVhdGVDdXN0b21TY3JvbGxiYXIo
U2Nyb2xsYWJsZUFyZWEmLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgRWxlbWVudCosIEZyYW1lKiBv
d25pbmdGcmFtZSA9IG51bGxwdHIpOwogICAgIHZpcnR1YWwgflJlbmRlclNjcm9sbGJhcigpOwog
CiAgICAgUmVuZGVyQm94KiBvd25pbmdSZW5kZXJlcigpIGNvbnN0OwpAQCAtNjIsNyArNjIsNyBA
QCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gZ2V0U2Nyb2xsYmFyUHNldWRv
U3R5bGUoU2Nyb2xsYmFyUGFydCwgUHNldWRvSWQpOwogCiBwcml2YXRlOgotICAgIFJlbmRlclNj
cm9sbGJhcihTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBFbGVtZW50Kiwg
RnJhbWUqKTsKKyAgICBSZW5kZXJTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEmLCBTY3JvbGxiYXJP
cmllbnRhdGlvbiwgRWxlbWVudCosIEZyYW1lKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0UGFy
ZW50KFNjcm9sbFZpZXcqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlZChi
b29sKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFy
Y2hGaWVsZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNlYXJjaEZpZWxkLmNwcAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAxMCwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDgg
VG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2ht
b2JpbGUuY29tLykgCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCkBAIC0zNDIsNyArMzQyLDcgQEAgSG9zdFdpbmRvdyog
UmVuZGVyU2VhcmNoRmllbGQ6Omhvc3RXaW5kbwogICAgIHJldHVybiB2aWV3KCkuZnJhbWVWaWV3
KCkuaG9zdFdpbmRvdygpOwogfQogCi1QYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyU2VhcmNo
RmllbGQ6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNj
cm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250
cm9sU2l6ZSkKK1Bhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJTZWFyY2hGaWVsZDo6Y3JlYXRl
U2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50
YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQogewog
ICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdldDsKICAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJh
clN0eWxlID0gc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShTQ1JPTExCQVIpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmgJKHJldmlzaW9uIDE4MDQ1
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcsIDIwMDksIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgogICoKQEAgLTgw
LDcgKzgwLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dEZyb21JdGVtKHVu
c2lnbmVkIGxpc3RJbmRleCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBGb250U2VsZWN0b3IqIGZv
bnRTZWxlY3RvcigpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdygpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTY3JvbGxi
YXI+IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0aW9u
LCBTY3JvbGxiYXJDb250cm9sU2l6ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhJiwgU2Nyb2xsYmFyT3Jp
ZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplKSBvdmVycmlkZTsKIAogICAgIEhUTUxFbGVt
ZW50KiByZXN1bHRzQnV0dG9uRWxlbWVudCgpIGNvbnN0OwogICAgIEhUTUxFbGVtZW50KiBjYW5j
ZWxCdXR0b25FbGVtZW50KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODA0NjUp
CisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NiBAQAorMjAxNS0wMi0yMCAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKwor
ICAgICAgICBTY3JvbGxiYXJzIGFuZCBTY3JvbGxBbmltYXRvcnMgbXVzdCBhbHdheXMgaGF2ZSBh
IFNjcm9sbGFibGVBcmVhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDE4NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAg
ICAgICAgCisgICAgICAgIENoYW5nZSB1c2VycyBvZiB0aGUgc2Nyb2xsQW5pbWF0b3IoKSBtZXRo
b2QgdG8gZXhwZWN0IGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2ludGVyLgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW06CisgICAgICAgIChXZWJLaXQ6
OlBERlBsdWdpbjo6Y3JlYXRlU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2lu
OjpkZXN0cm95U2Nyb2xsYmFyKToKKwogMjAxNS0wMi0yMCAgRW5yaWNhIENhc3VjY2kgIDxlbnJp
Y2FAYXBwbGUuY29tPgogCiAgICAgICAgIFtXSzJdIEFkZCBzdXBwb3J0IGZvciBmb250IHBhbmVs
IG9uIE9TIFguCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BE
RlBsdWdpbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvUERGL1BERlBsdWdpbi5tbQkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0JKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExLCAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSwgMjAx
MiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTY0MSw3ICs2NDEsNyBAQCBjb25zdCBQbHVnaW5WaWV3KiBQREZQ
bHVnaW46OnBsdWdpblZpZXcoCiAKIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBQREZQbHVnaW46OmNy
ZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKLSAgICBS
ZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJh
cih0aGlzLCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcik7CisgICAgUmVmUHRyPFNjcm9s
bGJhcj4gd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMsIG9y
aWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xsYmFyKTsKICAgICBpZiAob3JpZW50YXRpb24gPT0gSG9y
aXpvbnRhbFNjcm9sbGJhcikgewogICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJMYXllciA9
IGFkb3B0TlMoW1tXS1BERlBsdWdpblNjcm9sbGJhckxheWVyIGFsbG9jXSBpbml0V2l0aFBERlBs
dWdpbjp0aGlzXSk7CiAgICAgICAgIFttX2NvbnRhaW5lckxheWVyIGFkZFN1YmxheWVyOm1faG9y
aXpvbnRhbFNjcm9sbGJhckxheWVyLmdldCgpXTsKQEAgLTY2Miw4ICs2NjIsNyBAQCB2b2lkIFBE
RlBsdWdpbjo6ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiCiAKICAgICB3aWxsUmVtb3ZlU2Nyb2xs
YmFyKHNjcm9sbGJhci5nZXQoKSwgb3JpZW50YXRpb24pOwogICAgIHNjcm9sbGJhci0+cmVtb3Zl
RnJvbVBhcmVudCgpOwotICAgIHNjcm9sbGJhci0+ZGlzY29ubmVjdEZyb21TY3JvbGxhYmxlQXJl
YSgpOwotICAgIHNjcm9sbGJhciA9IDA7CisgICAgc2Nyb2xsYmFyID0gbnVsbHB0cjsKIAogICAg
IGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CiAgICAgICAgIFttX2hv
cml6b250YWxTY3JvbGxiYXJMYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247021</attachid>
            <date>2015-02-20 17:37:57 -0800</date>
            <delta_ts>2015-02-20 17:50:04 -0800</delta_ts>
            <desc>Patch v5 (Efl fix)</desc>
            <filename>bug-141855-20150220173748.patch</filename>
            <type>text/plain</type>
            <size>83270</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDQ2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNSBAQAorMjAxNS0wMi0yMCAgQnJlbnQg
RnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBTY3JvbGxiYXJzIGFuZCBT
Y3JvbGxBbmltYXRvcnMgbXVzdCBhbHdheXMgaGF2ZSBhIFNjcm9sbGFibGVBcmVhCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4NTUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBjaGFuZ2UgaW4gZnVu
Y3Rpb25hbGl0eS4KKyAgICAgICAgCisgICAgICAgIENoYW5nZSB1c2VycyBvZiB0aGUgc2Nyb2xs
QW5pbWF0b3IoKSBtZXRob2QgdG8gZXhwZWN0IGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2lu
dGVyLiBBbHNvIGdldCByaWQgb2YKKyAgICAgICAgYSBudW1iZXIgb2YgdW5uZWNlc3NhcnkgbnVs
bHB0ciBjaGVja3MuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3Jv
bGxiYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6c2V0
VmFsdWUpOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJNYXRjaGVzQ29ybmVyUHJlc2VudFBzZXVkb0NsYXNz
KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVZpZXc6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNl
dEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvcjo6aGFuZGxlV2hlZWxFdmVudFBoYXNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9Qb3B1cE1l
bnVDbGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6U2Nyb2xsQW5pbWF0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvcjo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yOjp1cGRhdGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMpOgorICAgICAgICAqIHBs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cjo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbGFibGVBcmVhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvck5vbmUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
Tm9uZS5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6Y3JlYXRlU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxhYmxlQXJlYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Ny
b2xsQW5pbWF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpub3RpZnlTY3Jv
bGxQb3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbFBvc2l0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6
aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aGFu
ZGxlVG91Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6bW91c2VF
bnRlcmVkU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjptb3Vz
ZUV4aXRlZFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6ZGlk
QWRkU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjp3aWxsUmVt
b3ZlU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNh
bFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVB
cmVhOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAqIHBsYXRm
b3JtL1Njcm9sbGFibGVBcmVhLmg6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6U2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhcjo6c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhcjo6aXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXI6Om9mZnNldERpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmF1
dG9zY3JvbGxQcmVzc2VkUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdmVU
aHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdXNlTW92ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3VzZUVudGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyOjptb3VzZUV4aXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1v
dXNlVXApOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzaG91bGRQYXJ0aWNpcGF0ZUlu
SGl0VGVzdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmlzV2luZG93QWN0aXZl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpjb252ZXJ0VG9Db250YWluaW5nVmlldyk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhcjo6c2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpkaXNj
b25uZWN0RnJvbVNjcm9sbGFibGVBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9p
b3MvU2Nyb2xsQW5pbWF0b3JJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cklPUzo6aGFuZGxlVG91Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cklPUzo6ZGV0ZXJtaW5lU2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvU2Nyb2xsQW5pbWF0b3JNYWMubW06CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyRGVsZWdhdGUgc2Nyb2xsZXJJbXBQYWlyOnNldENvbnRlbnRBcmVhTmVlZHNEaXNw
bGF5SW5SZWN0Ol0pOgorICAgICAgICAoLVtXZWJTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRl
bGVnYXRlIHNjcm9sbGVySW1wUGFpcjp1cGRhdGVTY3JvbGxlclN0eWxlRm9yTmV3UmVjb21tZW5k
ZWRTY3JvbGxlclN0eWxlOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxiYXJQYWludGVyRGVsZWdh
dGUgc2Nyb2xsQW5pbWF0b3JdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVn
YXRlIGxheWVyXSk6CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBtb3Vz
ZUxvY2F0aW9uSW5TY3JvbGxlckZvclNjcm9sbGVySW1wOl0pOgorICAgICAgICAoLVtXZWJTY3Jv
bGxiYXJQYWludGVyRGVsZWdhdGUgc2V0VXBBbHBoYUFuaW1hdGlvbjpzY3JvbGxlclBhaW50ZXI6
cGFydDphbmltYXRlQWxwaGFUbzpkdXJhdGlvbjpdKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6
OlNjcm9sbEFuaW1hdG9yTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
OjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmFkanVzdFNj
cm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JNYWM6OmFkanVzdFNjcm9sbFBvc2l0aW9uVG9Cb3VuZHNJZk5lY2Vzc2FyeSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsVG8pOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpkaWRBZGRIb3Jpem9udGFsU2Ny
b2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp2ZXJ0aWNhbFNj
cm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
TWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnBpbm5lZEluRGlyZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjppc0FscmVhZHlQaW5uZWRJbkRpcmVjdGlv
bk9mR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6YWxsb3dz
VmVydGljYWxTdHJldGNoaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
OjphbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvck1hYzo6c3RyZXRjaEFtb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvck1hYzo6Y2FuU2Nyb2xsSG9yaXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yTWFjOjpjYW5TY3JvbGxWZXJ0aWNhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yTWFjOjphYnNvbHV0ZVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yTWFjOjppbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRn
ZUNvbnN0cmFpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp1cGRh
dGVTY3JvbGxlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpz
ZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
YXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGVzdHJveVNjcm9sbGJhcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
aXN0Qm94OjpjcmVhdGVTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJv
eDo6ZGVzdHJveVNjcm9sbGJhcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0
LmNwcDoKKyAgICAgICAgKFJlbmRlck1lbnVMaXN0OjpjcmVhdGVTY3JvbGxiYXIpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJTY3JvbGxiYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyOjpjcmVh
dGVDdXN0b21TY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyOjpS
ZW5kZXJTY3JvbGxiYXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmg6CisKIDIwMTUtMDItMjAgIEVucmljYSBDYXN1Y2Np
ICA8ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAgICAgICBbV0syXSBBZGQgc3VwcG9ydCBmb3IgZm9u
dCBwYW5lbCBvbiBPUyBYLgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5U2Nyb2xsYmFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwCShyZXZpc2lvbiAxODA0NTApCisr
KyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC05NiwxMSArOTYsOCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlTY3JvbGxi
YXI6OnNldFZhbHVlKGZsCiAgICAgaWYgKCFtX3Njcm9sbGJhcikKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIGlmICghbV9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIGZsb2F0IG5ld1ZhbHVlID0gdmFsdWUgKiBtX3Njcm9sbGJhci0+bWF4aW11
bSgpOwotICAgIG1fc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxUb09mZnNldFdp
dGhvdXRBbmltYXRpb24obV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCksIG5ld1ZhbHVlKTsKKyAg
ICBtX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24obV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCksIG5ld1ZhbHVlKTsKIH0KICAgICAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNo
ZWNrZXJUZXN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNl
L1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE0IERoaSBBdXJyYWht
YW4gPGRpb3JhaG1hbkByb2NreWJhcnMuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzU4LDcg
KzM1OCw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBzY3JvbGxiYXJNYXRjaGVzTm9CdXQKIAogQUxX
QVlTX0lOTElORSBib29sIHNjcm9sbGJhck1hdGNoZXNDb3JuZXJQcmVzZW50UHNldWRvQ2xhc3Mo
Y29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAg
cmV0dXJuIGNvbnRleHQuc2Nyb2xsYmFyICYmIGNvbnRleHQuc2Nyb2xsYmFyLT5zY3JvbGxhYmxl
QXJlYSgpLT5pc1Njcm9sbENvcm5lclZpc2libGUoKTsKKyAgICByZXR1cm4gY29udGV4dC5zY3Jv
bGxiYXIgJiYgY29udGV4dC5zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkuaXNTY3JvbGxDb3Ju
ZXJWaXNpYmxlKCk7CiB9CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAgKiAg
ICAgICAgICAgICAgICAgICAgIDE5OTkgTGFycyBLbm9sbCA8a25vbGxAa2RlLm9yZz4KICAqICAg
ICAgICAgICAgICAgICAgICAgMTk5OSBBbnR0aSBLb2l2aXN0byA8a29pdmlzdG9Aa2RlLm9yZz4K
ICAqICAgICAgICAgICAgICAgICAgICAgMjAwMCBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9y
Zz4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDEzLTIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAgICAgIChDKSAyMDA2IEdy
YWhhbSBEZW5uaXMgKGdyYWhhbS5kZW5uaXNAZ21haWwuY29tKQogICogICAgICAgICAgIChDKSAy
MDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtNTQyLDE3ICs1NDIsMTcg
QEAgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IEZyYW1lVmlldzo6Y3JlYXRlUwogICAgIC8vIFRyeSB0
aGUgPGJvZHk+IGVsZW1lbnQgZmlyc3QgYXMgYSBzY3JvbGxiYXIgc291cmNlLgogICAgIEhUTUxF
bGVtZW50KiBib2R5ID0gZG9jID8gZG9jLT5ib2R5T3JGcmFtZXNldCgpIDogbnVsbHB0cjsKICAg
ICBpZiAoYm9keSAmJiBib2R5LT5yZW5kZXJlcigpICYmIGJvZHktPnJlbmRlcmVyKCktPnN0eWxl
KCkuaGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKSkKLSAgICAgICAgcmV0dXJuIFJlbmRlclNjcm9s
bGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCBib2R5KTsKKyAg
ICAgICAgcmV0dXJuIFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlz
LCBvcmllbnRhdGlvbiwgYm9keSk7CiAgICAgCiAgICAgLy8gSWYgdGhlIDxib2R5PiBkaWRuJ3Qg
aGF2ZSBhIGN1c3RvbSBzdHlsZSwgdGhlbiB0aGUgcm9vdCBlbGVtZW50IG1pZ2h0LgogICAgIEVs
ZW1lbnQqIGRvY0VsZW1lbnQgPSBkb2MgPyBkb2MtPmRvY3VtZW50RWxlbWVudCgpIDogbnVsbHB0
cjsKICAgICBpZiAoZG9jRWxlbWVudCAmJiBkb2NFbGVtZW50LT5yZW5kZXJlcigpICYmIGRvY0Vs
ZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCkuaGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKSkKLSAg
ICAgICAgcmV0dXJuIFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHRoaXMs
IG9yaWVudGF0aW9uLCBkb2NFbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIFJlbmRlclNjcm9sbGJh
cjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgZG9jRWxlbWVudCk7
CiAgICAgICAgIAogICAgIC8vIElmIHdlIGhhdmUgYW4gb3duaW5nIGlmcmFtZS9mcmFtZSBlbGVt
ZW50LCB0aGVuIGl0IGNhbiBzZXQgdGhlIGN1c3RvbSBzY3JvbGxiYXIgYWxzby4KICAgICBSZW5k
ZXJXaWRnZXQqIGZyYW1lUmVuZGVyZXIgPSBmcmFtZSgpLm93bmVyUmVuZGVyZXIoKTsKICAgICBp
ZiAoZnJhbWVSZW5kZXJlciAmJiBmcmFtZVJlbmRlcmVyLT5zdHlsZSgpLmhhc1BzZXVkb1N0eWxl
KFNDUk9MTEJBUikpCi0gICAgICAgIHJldHVybiBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3Rv
bVNjcm9sbGJhcih0aGlzLCBvcmllbnRhdGlvbiwgMCwgJmZyYW1lKCkpOworICAgICAgICByZXR1
cm4gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0
aW9uLCBudWxscHRyLCAmZnJhbWUoKSk7CiAgICAgCiAgICAgLy8gTm9ib2R5IHNldCBhIGN1c3Rv
bSBzdHlsZSwgc28gd2UganVzdCB1c2UgYSBuYXRpdmUgc2Nyb2xsYmFyLgogICAgIHJldHVybiBT
Y3JvbGxWaWV3OjpjcmVhdGVTY3JvbGxiYXIob3JpZW50YXRpb24pOwpAQCAtMjA4MSw3ICsyMDgx
LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZQogICAgICAgICBp
ZiAoZnJhbWUoKS5wYWdlKCktPnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZp
eGVkUG9zaXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVy
c0FmdGVyU2Nyb2xsaW5nKCk7CiAgICAgICAgIEludFBvaW50IG5ld1Bvc2l0aW9uID0gc2Nyb2xs
UG9zaXRpb24oKTsKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS0+c2V0Q3VycmVudFBvc2l0aW9u
KHNjcm9sbFBvc2l0aW9uKCkpOworICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldEN1cnJlbnRQ
b3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsKICAgICAgICAgc2Nyb2xsUG9zaXRpb25DaGFuZ2Vk
KG9sZFBvc2l0aW9uLCBuZXdQb3NpdGlvbik7CiAgICAgfQogICAgIGlmICh2aXNpYmxlQ29udGVu
dFNpemVEaWRDaGFuZ2UpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAJKHJldmlzaW9uIDE4MDQ1MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjg5LDcgKzI4OSw3IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmhhbmRsZVdoZWVsRXYKICAgICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgZnJhbWVWaWV3LT5zY3JvbGxBbmltYXRvcigpLT5oYW5kbGVXaGVlbEV2ZW50UGhhc2Uo
cGhhc2UpOworICAgIGZyYW1lVmlldy0+c2Nyb2xsQW5pbWF0b3IoKS5oYW5kbGVXaGVlbEV2ZW50
UGhhc2UocGhhc2UpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BvcHVwTWVudUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BvcHVwTWVudUNsaWVudC5oCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Qb3B1cE1lbnVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpLgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAxNSBBcHBsZSBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgRm9udFNlbGVjdG9yKiBmb250U2Vs
ZWN0b3IoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBIb3N0V2luZG93KiBob3N0V2luZG93KCkg
Y29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Ny
b2xsYmFyKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNv
bnRyb2xTaXplKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRl
U2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhJiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJh
ckNvbnRyb2xTaXplKSA9IDA7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3IuY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQxLDEzICs0MSwxMyBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAjaWYgIUVOQUJMRShTTU9PVEhfU0NST0xMSU5HKSAmJiAhUExBVEZP
Uk0oSU9TKQotUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0
ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCitQYXNzT3duUHRyPFNjcm9sbEFuaW1h
dG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJl
YSkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVB
cmVhKSk7CiB9CiAjZW5kaWYKIAotU2Nyb2xsQW5pbWF0b3I6OlNjcm9sbEFuaW1hdG9yKFNjcm9s
bGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKK1Njcm9sbEFuaW1hdG9yOjpTY3JvbGxBbmltYXRv
cihTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiAgICAgOiBtX3Njcm9sbGFibGVBcmVh
KHNjcm9sbGFibGVBcmVhKQogICAgICwgbV9jdXJyZW50UG9zWCgwKQogICAgICwgbV9jdXJyZW50
UG9zWSgwKQpAQCAtNjEsNyArNjEsNyBAQCBTY3JvbGxBbmltYXRvcjo6flNjcm9sbEFuaW1hdG9y
KCkKIGJvb2wgU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmll
bnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIp
CiB7CiAgICAgZmxvYXQqIGN1cnJlbnRQb3MgPSAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNj
cm9sbGJhcikgPyAmbV9jdXJyZW50UG9zWCA6ICZtX2N1cnJlbnRQb3NZOwotICAgIGZsb2F0IG5l
d1BvcyA9IHN0ZDo6bWF4KHN0ZDo6bWluKCpjdXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVy
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFNpemUob3JpZW50
YXRpb24pKSksIDAuMGYpOworICAgIGZsb2F0IG5ld1BvcyA9IHN0ZDo6bWF4KHN0ZDo6bWluKCpj
dXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Ny
b2xsYWJsZUFyZWEuc2Nyb2xsU2l6ZShvcmllbnRhdGlvbikpKSwgMC4wZik7CiAgICAgZmxvYXQg
ZGVsdGEgPSAqY3VycmVudFBvcyAtIG5ld1BvczsKICAgICBpZiAoKmN1cnJlbnRQb3MgPT0gbmV3
UG9zKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTQsOCArMTE0LDggQEAgYm9vbCBTY3Jv
bGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudChjbwogICAgICAgICByZXR1cm4gdHJ1ZTsKICNl
bmRpZgogCi0gICAgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxl
QXJlYS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgIFNjcm9sbGJhciogdmVydGljYWxTY3Jv
bGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIFNjcm9s
bGJhciogaG9yaXpvbnRhbFNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNj
cm9sbGJhcigpOworICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBtX3Njcm9sbGFi
bGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFyKCk7CiAKICAgICAvLyBBY2NlcHQgdGhlIGV2ZW50IGlm
IHdlIGhhdmUgYSBzY3JvbGxiYXIgaW4gdGhhdCBkaXJlY3Rpb24gYW5kIGNhbiBzdGlsbAogICAg
IC8vIHNjcm9sbCBhbnkgZnVydGhlci4KQEAgLTEyNSw4ICsxMjUsOCBAQCBib29sIFNjcm9sbEFu
aW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KGNvCiAgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7CiAK
ICAgICBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSA9IFNjcm9sbEJ5UGl4ZWw7Ci0gICAg
SW50U2l6ZSBtYXhGb3J3YXJkU2Nyb2xsRGVsdGEgPSBtX3Njcm9sbGFibGVBcmVhLT5tYXhpbXVt
U2Nyb2xsUG9zaXRpb24oKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCk7Ci0g
ICAgSW50U2l6ZSBtYXhCYWNrd2FyZFNjcm9sbERlbHRhID0gbV9zY3JvbGxhYmxlQXJlYS0+c2Ny
b2xsUG9zaXRpb24oKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPm1pbmltdW1TY3JvbGxQb3NpdGlvbigp
OworICAgIEludFNpemUgbWF4Rm9yd2FyZFNjcm9sbERlbHRhID0gbV9zY3JvbGxhYmxlQXJlYS5t
YXhpbXVtU2Nyb2xsUG9zaXRpb24oKSAtIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsUG9zaXRpb24o
KTsKKyAgICBJbnRTaXplIG1heEJhY2t3YXJkU2Nyb2xsRGVsdGEgPSBtX3Njcm9sbGFibGVBcmVh
LnNjcm9sbFBvc2l0aW9uKCkgLSBtX3Njcm9sbGFibGVBcmVhLm1pbmltdW1TY3JvbGxQb3NpdGlv
bigpOwogICAgIGlmICgoZGVsdGFYIDwgMCAmJiBtYXhGb3J3YXJkU2Nyb2xsRGVsdGEud2lkdGgo
KSA+IDApCiAgICAgICAgIHx8IChkZWx0YVggPiAwICYmIG1heEJhY2t3YXJkU2Nyb2xsRGVsdGEu
d2lkdGgoKSA+IDApCiAgICAgICAgIHx8IChkZWx0YVkgPCAwICYmIG1heEZvcndhcmRTY3JvbGxE
ZWx0YS5oZWlnaHQoKSA+IDApCkBAIC0xMzYsNyArMTM2LDcgQEAgYm9vbCBTY3JvbGxBbmltYXRv
cjo6aGFuZGxlV2hlZWxFdmVudChjbwogICAgICAgICBpZiAoZGVsdGFZKSB7CiAgICAgICAgICAg
ICBpZiAoZS5ncmFudWxhcml0eSgpID09IFNjcm9sbEJ5UGFnZVdoZWVsRXZlbnQpIHsKICAgICAg
ICAgICAgICAgICBib29sIG5lZ2F0aXZlID0gZGVsdGFZIDwgMDsKLSAgICAgICAgICAgICAgICBk
ZWx0YVkgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwRGVsdGEobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJs
ZUhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBkZWx0YVkgPSBTY3JvbGxiYXI6OnBhZ2VTdGVw
RGVsdGEobV9zY3JvbGxhYmxlQXJlYS52aXNpYmxlSGVpZ2h0KCkpOwogICAgICAgICAgICAgICAg
IGlmIChuZWdhdGl2ZSkKICAgICAgICAgICAgICAgICAgICAgZGVsdGFZID0gLWRlbHRhWTsKICAg
ICAgICAgICAgIH0KQEAgLTE0Niw3ICsxNDYsNyBAQCBib29sIFNjcm9sbEFuaW1hdG9yOjpoYW5k
bGVXaGVlbEV2ZW50KGNvCiAgICAgICAgIGlmIChkZWx0YVgpIHsKICAgICAgICAgICAgIGlmIChl
LmdyYW51bGFyaXR5KCkgPT0gU2Nyb2xsQnlQYWdlV2hlZWxFdmVudCkgewogICAgICAgICAgICAg
ICAgIGJvb2wgbmVnYXRpdmUgPSBkZWx0YVggPCAwOwotICAgICAgICAgICAgICAgIGRlbHRhWCA9
IFNjcm9sbGJhcjo6cGFnZVN0ZXBEZWx0YShtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlV2lkdGgo
KSk7CisgICAgICAgICAgICAgICAgZGVsdGFYID0gU2Nyb2xsYmFyOjpwYWdlU3RlcERlbHRhKG1f
c2Nyb2xsYWJsZUFyZWEudmlzaWJsZVdpZHRoKCkpOwogICAgICAgICAgICAgICAgIGlmIChuZWdh
dGl2ZSkKICAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gLWRlbHRhWDsKICAgICAgICAgICAg
IH0KQEAgLTE3NywyMiArMTc3LDIyIEBAIEZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3I6OmN1cnJl
bnRQb3NpdGkKIHZvaWQgU2Nyb2xsQW5pbWF0b3I6Om5vdGlmeVBvc2l0aW9uQ2hhbmdlZChjb25z
dCBGbG9hdFNpemUmIGRlbHRhKQogewogICAgIFVOVVNFRF9QQVJBTShkZWx0YSk7Ci0gICAgbV9z
Y3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihJbnRQb2ludChtX2N1
cnJlbnRQb3NYLCBtX2N1cnJlbnRQb3NZKSk7CisgICAgbV9zY3JvbGxhYmxlQXJlYS5zZXRTY3Jv
bGxPZmZzZXRGcm9tQW5pbWF0aW9uKEludFBvaW50KG1fY3VycmVudFBvc1gsIG1fY3VycmVudFBv
c1kpKTsKIH0KIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1BQykK
IHZvaWQgU2Nyb2xsQW5pbWF0b3I6OnVwZGF0ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycygpCiB7
CiAgICAgLy8gRklYTUU6IEN1cnJlbnRseSwgc2Nyb2xsIHNuYXAgYW5pbWF0b3JzIGFyZSByZWNy
ZWF0ZWQgZXZlbiB0aG91Z2ggdGhlIHNuYXAgb2Zmc2V0cyBhbG9uZSBjYW4gYmUgdXBkYXRlZC4K
LSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkpIHsKLSAg
ICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxB
eGlzU2Nyb2xsU25hcEFuaW1hdG9yPih0aGlzLCBtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFs
U25hcE9mZnNldHMoKSwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKKyAgICBpZiAobV9z
Y3JvbGxhYmxlQXJlYS5ob3Jpem9udGFsU25hcE9mZnNldHMoKSkgeworICAgICAgICBtX2hvcml6
b250YWxTY3JvbGxTbmFwQW5pbWF0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPEF4aXNTY3JvbGxTbmFw
QW5pbWF0b3I+KHRoaXMsIG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCks
IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9s
bFNuYXBUaW1lciA9IHN0ZDo6bWFrZV91bmlxdWU8VGltZXI+KCp0aGlzLCAmU2Nyb2xsQW5pbWF0
b3I6Omhvcml6b250YWxTY3JvbGxTbmFwVGltZXJGaXJlZCk7CiAgICAgfSBlbHNlIGlmIChtX2hv
cml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3IpIHsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xs
U25hcEFuaW1hdG9yID0gbnVsbHB0cjsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25hcFRp
bWVyID0gbnVsbHB0cjsKICAgICB9Ci0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2Fs
U25hcE9mZnNldHMoKSkgewotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yID0g
c3RkOjptYWtlX3VuaXF1ZTxBeGlzU2Nyb2xsU25hcEFuaW1hdG9yPih0aGlzLCBtX3Njcm9sbGFi
bGVBcmVhLT52ZXJ0aWNhbFNuYXBPZmZzZXRzKCksIFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwp
OworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU25hcE9mZnNldHMoKSkgeworICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxBeGlz
U2Nyb2xsU25hcEFuaW1hdG9yPih0aGlzLCBtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU25hcE9m
ZnNldHMoKSwgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCk7CiAgICAgICAgIG1fdmVydGljYWxT
Y3JvbGxTbmFwVGltZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRpbWVyPigqdGhpcywgJlNjcm9sbEFu
aW1hdG9yOjp2ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lckZpcmVkKTsKICAgICB9IGVsc2UgaWYgKG1f
dmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3IpIHsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbFNu
YXBBbmltYXRvciA9IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yLmgJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICog
Q29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICAqIG1ldDoKQEAgLTU2LDcgKzU3
LDcgQEAgY2xhc3MgU2Nyb2xsQW5pbWF0b3IgewogI2VuZGlmCiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+
IGNyZWF0ZShTY3JvbGxhYmxlQXJlYSopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcm9sbEFu
aW1hdG9yPiBjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmKTsKIAogICAgIHZpcnR1YWwgflNjcm9sbEFu
aW1hdG9yKCk7CiAKQEAgLTY4LDcgKzY5LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CiAKLSAg
ICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEoKSBjb25zdCB7IHJldHVybiBtX3Njcm9s
bGFibGVBcmVhOyB9CisgICAgU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYTsgfQogCiAgICAgdmlydHVhbCBib29sIGhhbmRsZVdo
ZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CiAKQEAgLTEyNSw3ICsxMjYsNyBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IFNjcm9sbEFuaW1h
dG9yKFNjcm9sbGFibGVBcmVhKik7CisgICAgZXhwbGljaXQgU2Nyb2xsQW5pbWF0b3IoU2Nyb2xs
YWJsZUFyZWEmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQb3NpdGlvbkNoYW5nZWQoY29u
c3QgRmxvYXRTaXplJiBkZWx0YSk7CiAKQEAgLTEzNSw3ICsxMzYsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCB2ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lckZpcmVkKCk7CiAjZW5kaWYKIAotICAgIFNj
cm9sbGFibGVBcmVhKiBtX3Njcm9sbGFibGVBcmVhOworICAgIFNjcm9sbGFibGVBcmVhJiBtX3Nj
cm9sbGFibGVBcmVhOwogICAgIGZsb2F0IG1fY3VycmVudFBvc1g7IC8vIFdlIGF2b2lkIHVzaW5n
IGEgRmxvYXRQb2ludCBpbiBvcmRlciB0byByZWR1Y2UKICAgICBmbG9hdCBtX2N1cnJlbnRQb3NZ
OyAvLyBzdWJjbGFzcyBjb2RlIGNvbXBsZXhpdHkuCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkgJiYgUExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3JOb25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvck5vbmUuY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNTEsOSAr
NTIsOSBAQCBjb25zdCBkb3VibGUga1RpY2tUaW1lID0gMSAvIGtGcmFtZVJhdGU7CiBjb25zdCBk
b3VibGUga01pbmltdW1UaW1lckludGVydmFsID0gLjAwMTsKIGNvbnN0IGRvdWJsZSBrWm9vbVRp
Y2tzID0gMTE7CiAKLVBhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpj
cmVhdGUoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQorUGFzc093blB0cjxTY3JvbGxB
bmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJs
ZUFyZWEpCiB7Ci0gICAgaWYgKHNjcm9sbGFibGVBcmVhICYmIHNjcm9sbGFibGVBcmVhLT5zY3Jv
bGxBbmltYXRvckVuYWJsZWQoKSkKKyAgICBpZiAoc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0
b3JFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2Nyb2xsQW5pbWF0b3JO
b25lKHNjcm9sbGFibGVBcmVhKSk7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxBbmlt
YXRvcihzY3JvbGxhYmxlQXJlYSkpOwogfQpAQCAtNDg2LDggKzQ4Nyw4IEBAIHZvaWQgU2Nyb2xs
QW5pbWF0b3JOb25lOjpkaWRBZGRIb3Jpem9udGEKIAogdm9pZCBTY3JvbGxBbmltYXRvck5vbmU6
OnVwZGF0ZVZpc2libGVMZW5ndGhzKCkKIHsKLSAgICBtX2hvcml6b250YWxEYXRhLnVwZGF0ZVZp
c2libGVMZW5ndGgoc2Nyb2xsYWJsZUFyZWEoKS0+dmlzaWJsZVdpZHRoKCkpOwotICAgIG1fdmVy
dGljYWxEYXRhLnVwZGF0ZVZpc2libGVMZW5ndGgoc2Nyb2xsYWJsZUFyZWEoKS0+dmlzaWJsZUhl
aWdodCgpKTsKKyAgICBtX2hvcml6b250YWxEYXRhLnVwZGF0ZVZpc2libGVMZW5ndGgoc2Nyb2xs
YWJsZUFyZWEoKS52aXNpYmxlV2lkdGgoKSk7CisgICAgbV92ZXJ0aWNhbERhdGEudXBkYXRlVmlz
aWJsZUxlbmd0aChzY3JvbGxhYmxlQXJlYSgpLnZpc2libGVIZWlnaHQoKSk7CiB9CiAKICNpZiBV
U0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIpCkBAIC01MzIsNyArNTMzLDcgQEAgdm9p
ZCBTY3JvbGxBbmltYXRvck5vbmU6OnN0YXJ0TmV4dFRpbWVyKAogI2Vsc2UKIHZvaWQgU2Nyb2xs
QW5pbWF0b3JOb25lOjpzdGFydE5leHRUaW1lcigpCiB7Ci0gICAgaWYgKHNjcm9sbGFibGVBcmVh
KCktPnNjaGVkdWxlQW5pbWF0aW9uKCkpCisgICAgaWYgKHNjcm9sbGFibGVBcmVhKCkuc2NoZWR1
bGVBbmltYXRpb24oKSkKICAgICAgICAgbV9hbmltYXRpb25BY3RpdmUgPSB0cnVlOwogfQogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUu
aAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3JOb25lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChjKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNTIsNyArNTMsNyBAQCBzdHJ1Y3QgU2Nyb2xs
QW5pbWF0b3JQYXJhbWV0ZXJzOwogCiBjbGFzcyBTY3JvbGxBbmltYXRvck5vbmUgOiBwdWJsaWMg
U2Nyb2xsQW5pbWF0b3IgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNjcm9sbEFuaW1hdG9yTm9u
ZShTY3JvbGxhYmxlQXJlYSopOworICAgIGV4cGxpY2l0IFNjcm9sbEFuaW1hdG9yTm9uZShTY3Jv
bGxhYmxlQXJlYSYpOwogICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yTm9uZSgpOwogCiAgICAg
dmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsVmlldy5jcHAJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTEzNCw3ICsxMzQsNyBAQCBib29sIFNjcm9sbFZpZXc6OnNldEhh
c1ZlcnRpY2FsU2Nyb2xsYmFyCiAKIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBTY3JvbGxWaWV3Ojpj
cmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCiB7Ci0gICAg
cmV0dXJuIFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9u
LCBSZWd1bGFyU2Nyb2xsYmFyKTsKKyAgICByZXR1cm4gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVT
Y3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xsYmFyKTsKIH0KIAogdm9p
ZCBTY3JvbGxWaWV3OjpzZXRTY3JvbGxiYXJNb2RlcyhTY3JvbGxiYXJNb2RlIGhvcml6b250YWxN
b2RlLCBTY3JvbGxiYXJNb2RlIHZlcnRpY2FsTW9kZSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDExLCAyMDE0
LTIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKQEAgLTcwLDEyICs3MCwxMyBAQCBTY3JvbGxhYmxlQXJlYTo6flNj
cm9sbGFibGVBcmVhKCkKIHsKIH0KIAotU2Nyb2xsQW5pbWF0b3IqIFNjcm9sbGFibGVBcmVhOjpz
Y3JvbGxBbmltYXRvcigpIGNvbnN0CitTY3JvbGxBbmltYXRvciYgU2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbEFuaW1hdG9yKCkgY29uc3QKIHsKICAgICBpZiAoIW1fc2Nyb2xsQW5pbWF0b3IpCi0gICAg
ICAgIG1fc2Nyb2xsQW5pbWF0b3IgPSBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKGNvbnN0X2Nhc3Q8
U2Nyb2xsYWJsZUFyZWEqPih0aGlzKSk7CisgICAgICAgIG1fc2Nyb2xsQW5pbWF0b3IgPSBTY3Jv
bGxBbmltYXRvcjo6Y3JlYXRlKGNvbnN0X2Nhc3Q8U2Nyb2xsYWJsZUFyZWEmPigqdGhpcykpOwog
Ci0gICAgcmV0dXJuIG1fc2Nyb2xsQW5pbWF0b3IuZ2V0KCk7CisgICAgQVNTRVJUKG1fc2Nyb2xs
QW5pbWF0b3IpOworICAgIHJldHVybiAqbV9zY3JvbGxBbmltYXRvci5nZXQoKTsKIH0KIAogdm9p
ZCBTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsT3JpZ2luKGNvbnN0IEludFBvaW50JiBvcmlnaW4p
CkBAIC0xMjcsMjYgKzEyOCwyNiBAQCBib29sIFNjcm9sbGFibGVBcmVhOjpzY3JvbGwoU2Nyb2xs
RGlyZWN0CiAgICAgICAgIG11bHRpcGxpZXIgPSAtbXVsdGlwbGllcjsKIAogICAgIHN0ZXAgPSBh
ZGp1c3RTY3JvbGxTdGVwRm9yRml4ZWRDb250ZW50KHN0ZXAsIG9yaWVudGF0aW9uLCBncmFudWxh
cml0eSk7Ci0gICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yKCktPnNjcm9sbChvcmllbnRhdGlvbiwg
Z3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOworICAgIHJldHVybiBzY3JvbGxBbmltYXRv
cigpLnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwog
fQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KQogewotICAgIHNjcm9sbEFuaW1hdG9yKCktPnNjcm9s
bFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihvZmZzZXQpOworICAgIHNjcm9sbEFuaW1hdG9yKCku
c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG9mZnNldCk7CiB9CiAKIHZvaWQgU2Nyb2xs
YWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbiwgZmxvYXQgb2Zmc2V0KQogewogICAgIGlmIChvcmllbnRhdGlvbiA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24oRmxvYXRQb2ludChvZmZzZXQsIHNjcm9sbEFuaW1hdG9yKCktPmN1cnJlbnRQb3NpdGlv
bigpLnkoKSkpOworICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oRmxvYXRQ
b2ludChvZmZzZXQsIHNjcm9sbEFuaW1hdG9yKCkuY3VycmVudFBvc2l0aW9uKCkueSgpKSk7CiAg
ICAgZWxzZQotICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oRmxvYXRQb2lu
dChzY3JvbGxBbmltYXRvcigpLT5jdXJyZW50UG9zaXRpb24oKS54KCksIG9mZnNldCkpOworICAg
ICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oRmxvYXRQb2ludChzY3JvbGxBbmlt
YXRvcigpLmN1cnJlbnRQb3NpdGlvbigpLngoKSwgb2Zmc2V0KSk7CiB9CiAKIHZvaWQgU2Nyb2xs
YWJsZUFyZWE6Om5vdGlmeVNjcm9sbFBvc2l0aW9uQ2hhbmdlZChjb25zdCBJbnRQb2ludCYgcG9z
aXRpb24pCiB7CiAgICAgc2Nyb2xsUG9zaXRpb25DaGFuZ2VkKHBvc2l0aW9uKTsKLSAgICBzY3Jv
bGxBbmltYXRvcigpLT5zZXRDdXJyZW50UG9zaXRpb24ocG9zaXRpb24pOworICAgIHNjcm9sbEFu
aW1hdG9yKCkuc2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0aW9uKTsKIH0KIAogdm9pZCBTY3JvbGxh
YmxlQXJlYTo6c2Nyb2xsUG9zaXRpb25DaGFuZ2VkKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikK
QEAgLTE3OSw3ICsxODAsNyBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxQb3NpdGlvbkNo
YW5nCiAgICAgfQogCiAgICAgaWYgKHNjcm9sbFBvc2l0aW9uKCkgIT0gb2xkUG9zaXRpb24pCi0g
ICAgICAgIHNjcm9sbEFuaW1hdG9yKCktPm5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoc2Nyb2xs
UG9zaXRpb24oKSAtIG9sZFBvc2l0aW9uKTsKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5ub3Rp
ZnlDb250ZW50QXJlYVNjcm9sbGVkKHNjcm9sbFBvc2l0aW9uKCkgLSBvbGRQb3NpdGlvbik7CiB9
CiAKIGJvb2wgU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JiB3aGVlbEV2ZW50KQpAQCAtMTg3LDEzICsxODgsMTMgQEAgYm9vbCBTY3JvbGxh
YmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudChjbwogICAgIGlmICghaXNTY3JvbGxhYmxlT3JSdWJi
ZXJiYW5kYWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc2Nyb2xs
QW5pbWF0b3IoKS0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICByZXR1cm4gc2Ny
b2xsQW5pbWF0b3IoKS5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwogfQogCiAjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKIGJvb2wgU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQo
Y29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50KQogewotICAgIHJldHVybiBzY3Jv
bGxBbmltYXRvcigpLT5oYW5kbGVUb3VjaEV2ZW50KHRvdWNoRXZlbnQpOworICAgIHJldHVybiBz
Y3JvbGxBbmltYXRvcigpLmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7CiB9CiAjZW5kaWYK
IApAQCAtMjU1LDEyICsyNTYsMTIgQEAgdm9pZCBTY3JvbGxhYmxlQXJlYTo6bW91c2VNb3ZlZElu
Q29udGVudAogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjptb3VzZUVudGVyZWRTY3JvbGxiYXIoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0CiB7Ci0gICAgc2Nyb2xsQW5pbWF0b3IoKS0+bW91c2VF
bnRlcmVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS5tb3VzZUVu
dGVyZWRTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6bW91
c2VFeGl0ZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0CiB7Ci0gICAgc2Ny
b2xsQW5pbWF0b3IoKS0+bW91c2VFeGl0ZWRTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICBzY3Jv
bGxBbmltYXRvcigpLm1vdXNlRXhpdGVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9CiAKIHZvaWQg
U2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRBcmVhRGlkU2hvdygpIGNvbnN0CkBAIC0yOTEsOSArMjky
LDkgQEAgYm9vbCBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYmFyc0NhbkJlQWN0aQogdm9pZCBTY3Jv
bGxhYmxlQXJlYTo6ZGlkQWRkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxi
YXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKICAgICBpZiAob3JpZW50YXRpb24gPT0gVmVy
dGljYWxTY3JvbGxiYXIpCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCktPmRpZEFkZFZlcnRpY2Fs
U2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuZGlkQWRkVmVy
dGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKICAgICBlbHNlCi0gICAgICAgIHNjcm9sbEFuaW1h
dG9yKCktPmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICAgICAgc2Ny
b2xsQW5pbWF0b3IoKS5kaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiAKICAg
ICAvLyA8cmRhcjovL3Byb2JsZW0vOTc5NzI1Mz4gQXBwS2l0IHJlc2V0cyB0aGUgc2Nyb2xsYmFy
J3Mgc3R5bGUgd2hlbiB5b3UgYXR0YWNoIGEgc2Nyb2xsYmFyCiAgICAgc2V0U2Nyb2xsYmFyT3Zl
cmxheVN0eWxlKHNjcm9sbGJhck92ZXJsYXlTdHlsZSgpKTsKQEAgLTMwMiw5ICszMDMsOSBAQCB2
b2lkIFNjcm9sbGFibGVBcmVhOjpkaWRBZGRTY3JvbGxiYXIoU2NyCiB2b2lkIFNjcm9sbGFibGVB
cmVhOjp3aWxsUmVtb3ZlU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJP
cmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKICAgICBpZiAob3JpZW50YXRpb24gPT0gVmVydGlj
YWxTY3JvbGxiYXIpCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCktPndpbGxSZW1vdmVWZXJ0aWNh
bFNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxBbmltYXRvcigpLndpbGxSZW1v
dmVWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIpOwogICAgIGVsc2UKLSAgICAgICAgc2Nyb2xs
QW5pbWF0b3IoKS0+d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAg
ICAgICAgc2Nyb2xsQW5pbWF0b3IoKS53aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihzY3Jv
bGxiYXIpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpjb250ZW50c1Jlc2l6ZWQoKQpAQCAt
MzY1LDEyICszNjYsMTIgQEAgdm9pZCBTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbENv
cgogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdl
KCkKIHsKLSAgICBzY3JvbGxBbmltYXRvcigpLT52ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hh
bmdlKCk7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS52ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hh
bmdlKCk7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6Omhvcml6b250YWxTY3JvbGxiYXJMYXll
ckRpZENoYW5nZSgpCiB7Ci0gICAgc2Nyb2xsQW5pbWF0b3IoKS0+aG9yaXpvbnRhbFNjcm9sbGJh
ckxheWVyRGlkQ2hhbmdlKCk7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS5ob3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXJEaWRDaGFuZ2UoKTsKIH0KIAogYm9vbCBTY3JvbGxhYmxlQXJlYTo6aGFzTGF5ZXJG
b3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGFibGVBcmVhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYWJsZUFyZWEuaAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3
IEBAIHB1YmxpYzoKICAgICBTY3JvbGxiYXJPdmVybGF5U3R5bGUgc2Nyb2xsYmFyT3ZlcmxheVN0
eWxlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyT3ZlcmxheVN0eWxlPiht
X3Njcm9sbGJhck92ZXJsYXlTdHlsZSk7IH0KIAogICAgIC8vIFRoaXMgZ2V0dGVyIHdpbGwgY3Jl
YXRlIGEgU2Nyb2xsQW5pbWF0b3IgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LgotICAgIFdF
QkNPUkVfRVhQT1JUIFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvcigpIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIFNjcm9sbEFuaW1hdG9yJiBzY3JvbGxBbmltYXRvcigpIGNvbnN0Owog
CiAgICAgLy8gVGhpcyBnZXR0ZXIgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGUgU2Nyb2xsQW5pbWF0
b3IgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQuCiAgICAgU2Nyb2xsQW5pbWF0b3IqIGV4aXN0aW5n
U2Nyb2xsQW5pbWF0b3IoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbEFuaW1hdG9yLmdldCgpOyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHJldmlzaW9uIDE4MDQ1
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNiwgMjAwOCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDcgKzQ0LDcgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogI2lmICFQTEFURk9STShFRkwpCi1QYXNzUmVmUHRyPFNjcm9sbGJhcj4gU2Nyb2xs
YmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVh
LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUg
c2l6ZSkKK1Bhc3NSZWZQdHI8U2Nyb2xsYmFyPiBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9s
bGJhcihTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9u
IG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKQogewogICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU2Nyb2xsYmFyKHNjcm9sbGFibGVBcmVhLCBvcmllbnRhdGlvbiwgc2l6ZSkp
OwogfQpAQCAtNTYsNyArNTYsNyBAQCBpbnQgU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBh
Z2VzKCkKICAgICByZXR1cm4gbWF4T3ZlcmxhcEJldHdlZW5QYWdlczsKIH0KIAotU2Nyb2xsYmFy
OjpTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUsCitT
Y3JvbGxiYXI6OlNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9s
U2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIFNjcm9sbGJhclRoZW1lKiB0aGVtZSwgYm9vbCBp
c0N1c3RvbVNjcm9sbGJhcikKICAgICA6IG1fc2Nyb2xsYWJsZUFyZWEoc2Nyb2xsYWJsZUFyZWEp
CiAgICAgLCBtX29yaWVudGF0aW9uKG9yaWVudGF0aW9uKQpAQCAtOTMsOCArOTMsNyBAQCBTY3Jv
bGxiYXI6OlNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSogc2NyCiAgICAgaW50IHRoaWNrbmVzcyA9
IG1fdGhlbWUtPnNjcm9sbGJhclRoaWNrbmVzcyhjb250cm9sU2l6ZSk7CiAgICAgV2lkZ2V0Ojpz
ZXRGcmFtZVJlY3QoSW50UmVjdCgwLCAwLCB0aGlja25lc3MsIHRoaWNrbmVzcykpOwogCi0gICAg
aWYgKG1fc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIG1fY3VycmVudFBvcyA9IHN0YXRpY19jYXN0
PGZsb2F0PihtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbih0aGlzKSk7CisgICAgbV9j
dXJyZW50UG9zID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsUG9z
aXRpb24odGhpcykpOwogfQogCiBTY3JvbGxiYXI6On5TY3JvbGxiYXIoKQpAQCAtMTA2LDEyICsx
MDUsMTIgQEAgU2Nyb2xsYmFyOjp+U2Nyb2xsYmFyKCkKIAogU2Nyb2xsYmFyT3ZlcmxheVN0eWxl
IFNjcm9sbGJhcjo6c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9zY3JvbGxhYmxlQXJlYSA/IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbGJhck92ZXJsYXlTdHls
ZSgpIDogU2Nyb2xsYmFyT3ZlcmxheVN0eWxlRGVmYXVsdDsKKyAgICByZXR1cm4gbV9zY3JvbGxh
YmxlQXJlYS5zY3JvbGxiYXJPdmVybGF5U3R5bGUoKTsKIH0KIAogYm9vbCBTY3JvbGxiYXI6Omlz
U2Nyb2xsYWJsZUFyZWFBY3RpdmUoKSBjb25zdAogewotICAgIHJldHVybiBtX3Njcm9sbGFibGVB
cmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmlzQWN0aXZlKCk7CisgICAgcmV0dXJuIG1fc2Nyb2xs
YWJsZUFyZWEuaXNBY3RpdmUoKTsKIH0KIAogYm9vbCBTY3JvbGxiYXI6OmlzU2Nyb2xsVmlld1Nj
cm9sbGJhcigpIGNvbnN0CkBAIC0xMjEsOSArMTIwLDcgQEAgYm9vbCBTY3JvbGxiYXI6OmlzU2Ny
b2xsVmlld1Njcm9sbGJhcigpIAogCiB2b2lkIFNjcm9sbGJhcjo6b2Zmc2V0RGlkQ2hhbmdlKCkK
IHsKLSAgICBBU1NFUlQobV9zY3JvbGxhYmxlQXJlYSk7Ci0KLSAgICBmbG9hdCBwb3NpdGlvbiA9
IHN0YXRpY19jYXN0PGZsb2F0PihtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbih0aGlz
KSk7CisgICAgZmxvYXQgcG9zaXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdD4obV9zY3JvbGxhYmxl
QXJlYS5zY3JvbGxQb3NpdGlvbih0aGlzKSk7CiAgICAgaWYgKHBvc2l0aW9uID09IG1fY3VycmVu
dFBvcykKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMTEsNyArMjA4LDcgQEAgdm9pZCBTY3JvbGxi
YXI6OmF1dG9zY3JvbGxQcmVzc2VkUGFydChkbwogICAgIH0KIAogICAgIC8vIEhhbmRsZSB0aGUg
YXJyb3dzIGFuZCB0cmFjay4KLSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFi
bGVBcmVhLT5zY3JvbGwocHJlc3NlZFBhcnRTY3JvbGxEaXJlY3Rpb24oKSwgcHJlc3NlZFBhcnRT
Y3JvbGxHcmFudWxhcml0eSgpKSkKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYS5zY3JvbGwocHJl
c3NlZFBhcnRTY3JvbGxEaXJlY3Rpb24oKSwgcHJlc3NlZFBhcnRTY3JvbGxHcmFudWxhcml0eSgp
KSkKICAgICAgICAgc3RhcnRUaW1lcklmTmVlZGVkKGRlbGF5KTsKIH0KIApAQCAtMjcwLDIyICsy
NjcsMTkgQEAgU2Nyb2xsR3JhbnVsYXJpdHkgU2Nyb2xsYmFyOjpwcmVzc2VkUGFydAogCiB2b2lk
IFNjcm9sbGJhcjo6bW92ZVRodW1iKGludCBwb3MsIGJvb2wgZHJhZ2dpbmdEb2N1bWVudCkKIHsK
LSAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIHJldHVybjsKLQogICAgIGludCBk
ZWx0YSA9IHBvcyAtIG1fcHJlc3NlZFBvczsKIAogICAgIGlmIChkcmFnZ2luZ0RvY3VtZW50KSB7
CiAgICAgICAgIGlmIChtX2RyYWdnaW5nRG9jdW1lbnQpCiAgICAgICAgICAgICBkZWx0YSA9IHBv
cyAtIG1fZG9jdW1lbnREcmFnUG9zOwogICAgICAgICBtX2RyYWdnaW5nRG9jdW1lbnQgPSB0cnVl
OwotICAgICAgICBGbG9hdFBvaW50IGN1cnJlbnRQb3NpdGlvbiA9IG1fc2Nyb2xsYWJsZUFyZWEt
PnNjcm9sbEFuaW1hdG9yKCktPmN1cnJlbnRQb3NpdGlvbigpOworICAgICAgICBGbG9hdFBvaW50
IGN1cnJlbnRQb3NpdGlvbiA9IG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3IoKS5jdXJy
ZW50UG9zaXRpb24oKTsKICAgICAgICAgaW50IGRlc3RpbmF0aW9uUG9zaXRpb24gPSAobV9vcmll
bnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gY3VycmVudFBvc2l0aW9uLngoKSA6IGN1
cnJlbnRQb3NpdGlvbi55KCkpICsgZGVsdGE7CiAgICAgICAgIGlmIChkZWx0YSA+IDApCiAgICAg
ICAgICAgICBkZXN0aW5hdGlvblBvc2l0aW9uID0gc3RkOjptaW4oZGVzdGluYXRpb25Qb3NpdGlv
biArIGRlbHRhLCBtYXhpbXVtKCkpOwogICAgICAgICBlbHNlIGlmIChkZWx0YSA8IDApCiAgICAg
ICAgICAgICBkZXN0aW5hdGlvblBvc2l0aW9uID0gc3RkOjptYXgoZGVzdGluYXRpb25Qb3NpdGlv
biArIGRlbHRhLCAwKTsKLSAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsVG9PZmZzZXRX
aXRob3V0QW5pbWF0aW9uKG1fb3JpZW50YXRpb24sIGRlc3RpbmF0aW9uUG9zaXRpb24pOworICAg
ICAgICBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihtX29y
aWVudGF0aW9uLCBkZXN0aW5hdGlvblBvc2l0aW9uKTsKICAgICAgICAgbV9kb2N1bWVudERyYWdQ
b3MgPSBwb3M7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMDcsNyArMzAxLDcgQEAgdm9p
ZCBTY3JvbGxiYXI6Om1vdmVUaHVtYihpbnQgcG9zLCBib29sIAogICAgIAogICAgIGlmIChkZWx0
YSkgewogICAgICAgICBmbG9hdCBuZXdQb3NpdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0Pih0aHVt
YlBvcyArIGRlbHRhKSAqIG1heGltdW0oKSAvICh0cmFja0xlbiAtIHRodW1iTGVuKTsKLSAgICAg
ICAgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG1fb3Jp
ZW50YXRpb24sIG5ld1Bvc2l0aW9uKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxU
b09mZnNldFdpdGhvdXRBbmltYXRpb24obV9vcmllbnRhdGlvbiwgbmV3UG9zaXRpb24pOwogICAg
IH0KIH0KIApAQCAtMzQwLDEwICszMzQsOSBAQCB2b2lkIFNjcm9sbGJhcjo6c2V0UHJlc3NlZFBh
cnQoU2Nyb2xsYmFyCiBib29sIFNjcm9sbGJhcjo6bW91c2VNb3ZlZChjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmIGV2dCkKIHsKICAgICBpZiAobV9wcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQpIHsK
LSAgICAgICAgaWYgKHRoZW1lKCktPnNob3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2luKHRoaXMsIGV2
dCkpIHsKLSAgICAgICAgICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQotICAgICAgICAgICAgICAg
IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihtX29yaWVu
dGF0aW9uLCBtX2RyYWdPcmlnaW4pOwotICAgICAgICB9IGVsc2UgeworICAgICAgICBpZiAodGhl
bWUoKS0+c2hvdWxkU25hcEJhY2tUb0RyYWdPcmlnaW4odGhpcywgZXZ0KSkKKyAgICAgICAgICAg
IG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG1fb3JpZW50
YXRpb24sIG1fZHJhZ09yaWdpbik7CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbW92ZVRo
dW1iKG1fb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IAogICAgICAgICAgICAg
ICAgICAgICAgIGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9zaXRpb24oKSkueCgp
IDoKICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0
LnBvc2l0aW9uKCkpLnkoKSwgdGhlbWUoKS0+c2hvdWxkRHJhZ0RvY3VtZW50SW5zdGVhZE9mVGh1
bWIodGhpcywgZXZ0KSk7CkBAIC0zNzksMTQgKzM3MiwxMiBAQCBib29sIFNjcm9sbGJhcjo6bW91
c2VNb3ZlZChjb25zdCBQbGF0Zm9yCiAKIHZvaWQgU2Nyb2xsYmFyOjptb3VzZUVudGVyZWQoKQog
ewotICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQotICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5t
b3VzZUVudGVyZWRTY3JvbGxiYXIodGhpcyk7CisgICAgbV9zY3JvbGxhYmxlQXJlYS5tb3VzZUVu
dGVyZWRTY3JvbGxiYXIodGhpcyk7CiB9CiAKIGJvb2wgU2Nyb2xsYmFyOjptb3VzZUV4aXRlZCgp
CiB7Ci0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEt
Pm1vdXNlRXhpdGVkU2Nyb2xsYmFyKHRoaXMpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEubW91c2VF
eGl0ZWRTY3JvbGxiYXIodGhpcyk7CiAgICAgc2V0SG92ZXJlZFBhcnQoTm9QYXJ0KTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KQEAgLTM5OCwxMyArMzg5LDExIEBAIGJvb2wgU2Nyb2xsYmFyOjptb3Vz
ZVVwKGNvbnN0IFBsYXRmb3JtTW8KICAgICBtX2RyYWdnaW5nRG9jdW1lbnQgPSBmYWxzZTsKICAg
ICBzdG9wVGltZXJJZk5lZWRlZCgpOwogCi0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpIHsKLSAg
ICAgICAgLy8gbV9ob3ZlcmVkUGFydCB3b24ndCBiZSB1cGRhdGVkIHVudGlsIHRoZSBuZXh0IG1v
dXNlTW92ZWQgb3IgbW91c2VEb3duLCBzbyB3ZSBoYXZlIHRvIGhpdCB0ZXN0Ci0gICAgICAgIC8v
IHRvIHJlYWxseSBrbm93IGlmIHRoZSBtb3VzZSBoYXMgZXhpdGVkIHRoZSBzY3JvbGxiYXIgb24g
YSBtb3VzZVVwLgotICAgICAgICBTY3JvbGxiYXJQYXJ0IHBhcnQgPSB0aGVtZSgpLT5oaXRUZXN0
KHRoaXMsIG1vdXNlRXZlbnQucG9zaXRpb24oKSk7Ci0gICAgICAgIGlmIChwYXJ0ID09IE5vUGFy
dCkKLSAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPm1vdXNlRXhpdGVkU2Nyb2xsYmFyKHRo
aXMpOwotICAgIH0KKyAgICAvLyBtX2hvdmVyZWRQYXJ0IHdvbid0IGJlIHVwZGF0ZWQgdW50aWwg
dGhlIG5leHQgbW91c2VNb3ZlZCBvciBtb3VzZURvd24sIHNvIHdlIGhhdmUgdG8gaGl0IHRlc3QK
KyAgICAvLyB0byByZWFsbHkga25vdyBpZiB0aGUgbW91c2UgaGFzIGV4aXRlZCB0aGUgc2Nyb2xs
YmFyIG9uIGEgbW91c2VVcC4KKyAgICBTY3JvbGxiYXJQYXJ0IHBhcnQgPSB0aGVtZSgpLT5oaXRU
ZXN0KHRoaXMsIG1vdXNlRXZlbnQucG9zaXRpb24oKSk7CisgICAgaWYgKHBhcnQgPT0gTm9QYXJ0
KQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLm1vdXNlRXhpdGVkU2Nyb2xsYmFyKHRoaXMpOwog
CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC00OTgsMTIgKzQ4NywxMiBAQCBib29sIFNjcm9sbGJh
cjo6c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlCiAgICAgLy8gTm9uLW92ZXJsYXkgc2Nyb2xsYmFy
cyBzaG91bGQgYWx3YXlzIHBhcnRpY2lwYXRlIGluIGhpdCB0ZXN0aW5nLgogICAgIGlmICghaXNP
dmVybGF5U2Nyb2xsYmFyKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBtX3Nj
cm9sbGFibGVBcmVhLT5zY3JvbGxBbmltYXRvcigpLT5zaG91bGRTY3JvbGxiYXJQYXJ0aWNpcGF0
ZUluSGl0VGVzdGluZyh0aGlzKTsKKyAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxB
bmltYXRvcigpLnNob3VsZFNjcm9sbGJhclBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKHRoaXMpOwog
fQogCiBib29sIFNjcm9sbGJhcjo6aXNXaW5kb3dBY3RpdmUoKSBjb25zdAogewotICAgIHJldHVy
biBtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmlzQWN0aXZlKCk7CisgICAg
cmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuaXNBY3RpdmUoKTsKIH0KIAogdm9pZCBTY3JvbGxiYXI6
OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC01MTEsNDAgKzUwMCwyNyBA
QCB2b2lkIFNjcm9sbGJhcjo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50CiAgICAgaWYgKHN1cHBy
ZXNzSW52YWxpZGF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3Njcm9sbGFi
bGVBcmVhKQotICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5pbnZhbGlkYXRlU2Nyb2xsYmFyKHRo
aXMsIHJlY3QpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEuaW52YWxpZGF0ZVNjcm9sbGJhcih0aGlz
LCByZWN0KTsKIH0KIAogSW50UmVjdCBTY3JvbGxiYXI6OmNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3
KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKIHsKLSAgICBpZiAobV9zY3JvbGxhYmxl
QXJlYSkKLSAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnZlcnRGcm9tU2Nyb2xs
YmFyVG9Db250YWluaW5nVmlldyh0aGlzLCBsb2NhbFJlY3QpOwotCi0gICAgcmV0dXJuIFdpZGdl
dDo6Y29udmVydFRvQ29udGFpbmluZ1ZpZXcobG9jYWxSZWN0KTsKKyAgICByZXR1cm4gbV9zY3Jv
bGxhYmxlQXJlYS5jb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcodGhpcywgbG9j
YWxSZWN0KTsKIH0KIAogSW50UmVjdCBTY3JvbGxiYXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXcoY29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKIHsKLSAgICBpZiAobV9zY3JvbGxh
YmxlQXJlYSkKLSAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXdUb1Njcm9sbGJhcih0aGlzLCBwYXJlbnRSZWN0KTsKLQotICAgIHJldHVybiBX
aWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcocGFyZW50UmVjdCk7CisgICAgcmV0dXJu
IG1fc2Nyb2xsYWJsZUFyZWEuY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKHRo
aXMsIHBhcmVudFJlY3QpOwogfQogCiBJbnRQb2ludCBTY3JvbGxiYXI6OmNvbnZlcnRUb0NvbnRh
aW5pbmdWaWV3KGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdAogewotICAgIGlmICht
X3Njcm9sbGFibGVBcmVhKQotICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+Y29udmVy
dEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KHRoaXMsIGxvY2FsUG9pbnQpOwotCi0gICAg
cmV0dXJuIFdpZGdldDo6Y29udmVydFRvQ29udGFpbmluZ1ZpZXcobG9jYWxQb2ludCk7CisgICAg
cmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdW
aWV3KHRoaXMsIGxvY2FsUG9pbnQpOwogfQogCiBJbnRQb2ludCBTY3JvbGxiYXI6OmNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAogewot
ICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQotICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJl
YS0+Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKHRoaXMsIHBhcmVudFBvaW50
KTsKLQotICAgIHJldHVybiBXaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcocGFyZW50
UG9pbnQpOworICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLmNvbnZlcnRGcm9tQ29udGFpbmlu
Z1ZpZXdUb1Njcm9sbGJhcih0aGlzLCBwYXJlbnRQb2ludCk7CiB9CiAKIGJvb2wgU2Nyb2xsYmFy
OjpzdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKCkgY29uc3QKQEAgLTU1Miw4ICs1Mjgs
OCBAQCBib29sIFNjcm9sbGJhcjo6c3VwcG9ydHNVcGRhdGVPblNlY29uZGFyCiAgICAgLy8gSXQn
cyB1bmZvcnR1bmF0ZSB0aGF0IHRoaXMgbmVlZHMgdG8gYmUgZG9uZSB3aXRoIGFuIGlmZGVmLiBJ
ZGVhbGx5IHRoZXJlIHdvdWxkIGJlIGEgd2F5IHRvIGZlYXR1cmUtZGV0ZWN0CiAgICAgLy8gdGhl
IG5lY2Vzc2FyeSBzdXBwb3J0IHdpdGhpbiBBcHBLaXQuCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9M
TElORykgJiYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwMTAwMAotICAgIHJldHVybiAhbV9zY3JvbGxhYmxlQXJlYS0+Zm9yY2VVcGRhdGVTY3Jv
bGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkKLSAgICAgICAgJiYgKG1f
c2Nyb2xsYWJsZUFyZWEtPmhhc0xheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSB8fCBtX3Njcm9s
bGFibGVBcmVhLT5oYXNMYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSk7CisgICAgcmV0dXJu
ICFtX3Njcm9sbGFibGVBcmVhLmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBl
cmZvcm1hbmNlVGVzdGluZygpCisgICAgICAgICYmIChtX3Njcm9sbGFibGVBcmVhLmhhc0xheWVy
Rm9yVmVydGljYWxTY3JvbGxiYXIoKSB8fCBtX3Njcm9sbGFibGVBcmVhLmhhc0xheWVyRm9ySG9y
aXpvbnRhbFNjcm9sbGJhcigpKTsKICNlbHNlCiAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAkocmV2aXNpb24gMTgwNDUwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDE0IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIw
MTQtMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIFNjcm9sbGJhciA6IHB1Ymxp
YyBXaWRnZXQsCiAKIHB1YmxpYzoKICAgICAvLyBNdXN0IGJlIGltcGxlbWVudGVkIGJ5IHBsYXRm
b3JtcyB0aGF0IGNhbid0IHNpbXBseSB1c2UgdGhlIFNjcm9sbGJhciBiYXNlIGNsYXNzLiAgUmln
aHQgbm93IHRoZSBvbmx5IHBsYXRmb3JtIHRoYXQgaXMgbm90IHVzaW5nIHRoZSBiYXNlIGNsYXNz
IGlzIEdUSy4KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFzc1JlZlB0cjxTY3JvbGxiYXI+
IGNyZWF0ZU5hdGl2ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0
aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZU5hdGl2ZVNjcm9sbGJh
cihTY3JvbGxhYmxlQXJlYSYsIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9s
U2l6ZSk7CiAKICAgICB2aXJ0dWFsIH5TY3JvbGxiYXIoKTsKIApAQCAtMTAzLDggKzEwMyw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgaW50IHBhZ2VTdGVwKGludCB2aWV3V2lkdGhPckhlaWdodCkg
eyByZXR1cm4gcGFnZVN0ZXAodmlld1dpZHRoT3JIZWlnaHQsIHZpZXdXaWR0aE9ySGVpZ2h0KTsg
fQogICAgIHN0YXRpYyBmbG9hdCBwYWdlU3RlcERlbHRhKGludCB3aWR0aE9ySGVpZ2h0KSB7IHJl
dHVybiBzdGQ6Om1heChzdGQ6Om1heChzdGF0aWNfY2FzdDxmbG9hdD4od2lkdGhPckhlaWdodCkg
KiBTY3JvbGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpLCBzdGF0aWNfY2FzdDxm
bG9hdD4od2lkdGhPckhlaWdodCkgLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMo
KSksIDEuMGYpOyB9CiAKLSAgICB2b2lkIGRpc2Nvbm5lY3RGcm9tU2Nyb2xsYWJsZUFyZWEoKSB7
IG1fc2Nyb2xsYWJsZUFyZWEgPSAwOyB9Ci0gICAgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVB
cmVhKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYTsgfQorICAgIFNjcm9sbGFibGVB
cmVhJiBzY3JvbGxhYmxlQXJlYSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWE7IH0K
IAogICAgIGludCBwcmVzc2VkUG9zKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzc2VkUG9zOyB9CiAK
QEAgLTE1OSw3ICsxNTgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVXBk
YXRlT25TZWNvbmRhcnlUaHJlYWQoKSBjb25zdCBvdmVycmlkZTsKIAogcHJvdGVjdGVkOgotICAg
IFNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxi
YXJDb250cm9sU2l6ZSwgU2Nyb2xsYmFyVGhlbWUqID0gMCwgYm9vbCBpc0N1c3RvbVNjcm9sbGJh
ciA9IGZhbHNlKTsKKyAgICBTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEmLCBTY3JvbGxiYXJPcmll
bnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUsIFNjcm9sbGJhclRoZW1lKiA9IDAsIGJvb2wg
aXNDdXN0b21TY3JvbGxiYXIgPSBmYWxzZSk7CiAKICAgICB2b2lkIHVwZGF0ZVRodW1iKCk7CiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRodW1iUG9zaXRpb24oKTsKQEAgLTE3Miw3ICsxNzEsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgU2Nyb2xsRGlyZWN0aW9uIHByZXNzZWRQYXJ0U2Nyb2xsRGlyZWN0
aW9uKCk7CiAgICAgU2Nyb2xsR3JhbnVsYXJpdHkgcHJlc3NlZFBhcnRTY3JvbGxHcmFudWxhcml0
eSgpOwogCi0gICAgU2Nyb2xsYWJsZUFyZWEqIG1fc2Nyb2xsYWJsZUFyZWE7CisgICAgU2Nyb2xs
YWJsZUFyZWEmIG1fc2Nyb2xsYWJsZUFyZWE7CiAgICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gbV9v
cmllbnRhdGlvbjsKICAgICBTY3JvbGxiYXJDb250cm9sU2l6ZSBtX2NvbnRyb2xTaXplOwogICAg
IFNjcm9sbGJhclRoZW1lKiBtX3RoZW1lOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
ZWZsL1Njcm9sbGJhckVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZWZsL1Njcm9sbGJhckVmbC5jcHAJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxiYXJFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxTY3JvbGxiYXI+
IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxh
YmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRy
b2xTaXplIHNpemUpCitQYXNzUmVmUHRyPFNjcm9sbGJhcj4gU2Nyb2xsYmFyOjpjcmVhdGVOYXRp
dmVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgc2l6ZSkKIHsKICAgICBp
ZiAoU2V0dGluZ3M6Om1vY2tTY3JvbGxiYXJzRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNjcm9sbGJhcihzY3JvbGxhYmxlQXJlYSwgb3JpZW50YXRpb24sIHNpemUpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxiYXJFZmwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2Nyb2xsYmFyRWZsLmgJKHJldmlz
aW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxiYXJFZmwu
aAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGludmFsaWRhdGUoKSBvdmVycmlkZTsKIAogcHJvdGVjdGVkOgotICAgIFNjcm9sbGJhckVm
bChTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9s
U2l6ZSk7CisgICAgU2Nyb2xsYmFyRWZsKFNjcm9sbGFibGVBcmVhJiwgU2Nyb2xsYmFyT3JpZW50
YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJl
bnQoU2Nyb2xsVmlldyopIG92ZXJyaWRlOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5oCShyZXZpc2lvbiAxODA0NTApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CiAKIGNsYXNzIFNj
cm9sbEFuaW1hdG9ySU9TIDogcHVibGljIFNjcm9sbEFuaW1hdG9yIHsKIHB1YmxpYzoKLSAgICBT
Y3JvbGxBbmltYXRvcklPUyhTY3JvbGxhYmxlQXJlYSopOworICAgIFNjcm9sbEFuaW1hdG9ySU9T
KFNjcm9sbGFibGVBcmVhJik7CiAgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JJT1MoKTsKIAog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvU2Nyb2xsQW5pbWF0b3JJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLm1tCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQwLDcgKzQwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNy
ZWF0ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCitQYXNzT3duUHRyPFNjcm9sbEFu
aW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxl
QXJlYSkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbEFuaW1hdG9ySU9TKHNjcm9s
bGFibGVBcmVhKSk7CiB9CkBAIC04Miw3ICs4Miw3IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JJT1M6
OmhhbmRsZVRvdWNoRXZlbnQKICAgICAgICAgbV9pblRvdWNoU2VxdWVuY2UgPSBmYWxzZTsKICAg
ICAgICAgbV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UgPSAwOwogICAgICAgICBpZiAo
bV9zdGFydGVkU2Nyb2xsKQotICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEoKS0+ZGlkRW5kU2Ny
b2xsKCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSgpLmRpZEVuZFNjcm9sbCgpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC05Miw3ICs5Miw3IEBAIGJvb2wgU2Nyb2xs
QW5pbWF0b3JJT1M6OmhhbmRsZVRvdWNoRXZlbnQKICAgICAgICAgbV9pblRvdWNoU2VxdWVuY2Ug
PSBmYWxzZTsKICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UgPSAwOwog
ICAgICAgICBpZiAobV9zdGFydGVkU2Nyb2xsKQotICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEo
KS0+ZGlkRW5kU2Nyb2xsKCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSgpLmRpZEVuZFNj
cm9sbCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIApAQCAtMTA1LDggKzEw
NSw4IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JJT1M6OmhhbmRsZVRvdWNoRXZlbnQKICAgICAgICAg
ZGV0ZXJtaW5lU2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlKHRvdWNoRGVsdGEpOwogCiAg
ICAgaWYgKCFtX2NvbW1pdHRlZFRvU2Nyb2xsQXhpcykgewotICAgICAgICBib29sIGhvcml6b250
YWxseVNjcm9sbGFibGUgPSBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxTaXplKEhvcml6b250YWxT
Y3JvbGxiYXIpOwotICAgICAgICBib29sIHZlcnRpY2FsbHlTY3JvbGxhYmxlID0gbV9zY3JvbGxh
YmxlQXJlYS0+c2Nyb2xsU2l6ZShWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgICAgIGJvb2wgaG9y
aXpvbnRhbGx5U2Nyb2xsYWJsZSA9IG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsU2l6ZShIb3Jpem9u
dGFsU2Nyb2xsYmFyKTsKKyAgICAgICAgYm9vbCB2ZXJ0aWNhbGx5U2Nyb2xsYWJsZSA9IG1fc2Ny
b2xsYWJsZUFyZWEuc2Nyb2xsU2l6ZShWZXJ0aWNhbFNjcm9sbGJhcik7CiAKICAgICAgICAgaWYg
KCFob3Jpem9udGFsbHlTY3JvbGxhYmxlICYmICF2ZXJ0aWNhbGx5U2Nyb2xsYWJsZSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE2MCw5ICsxNjAsOSBAQCBib29sIFNjcm9sbEFuaW1h
dG9ySU9TOjpoYW5kbGVUb3VjaEV2ZW50CiAgICAgICAgIGlmICghaGFuZGxlZCkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbV9zdGFydGVkU2Nyb2xsID0gdHJ1ZTsKLSAgICAg
ICAgc2Nyb2xsYWJsZUFyZWEoKS0+ZGlkU3RhcnRTY3JvbGwoKTsKKyAgICAgICAgc2Nyb2xsYWJs
ZUFyZWEoKS5kaWRTdGFydFNjcm9sbCgpOwogICAgIH0gZWxzZSBpZiAoaGFuZGxlZCkKLSAgICAg
ICAgc2Nyb2xsYWJsZUFyZWEoKS0+ZGlkVXBkYXRlU2Nyb2xsKCk7CisgICAgICAgIHNjcm9sbGFi
bGVBcmVhKCkuZGlkVXBkYXRlU2Nyb2xsKCk7CiAgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CkBA
IC0xNzEsNyArMTcxLDcgQEAgdm9pZCBTY3JvbGxBbmltYXRvcklPUzo6ZGV0ZXJtaW5lU2Nyb2xs
YQogewogICAgIEFTU0VSVCghbV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UpOwogCi0g
ICAgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhID0gbV9zY3JvbGxhYmxlQXJlYTsKKyAg
ICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEgPSAmbV9zY3JvbGxhYmxlQXJlYTsKICAg
ICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBpZiAoIXNjcm9sbGFibGVBcmVhLT5pc1Bpbm5lZElu
Qm90aERpcmVjdGlvbnMoc2Nyb2xsRGVsdGEpKQogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAkocmV2
aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1h
dG9yTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgY2xhc3MgU2Nyb2xsYmFy
OwogY2xhc3MgU2Nyb2xsQW5pbWF0b3JNYWMgOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3IsIHByaXZh
dGUgU2Nyb2xsQ29udHJvbGxlckNsaWVudCB7CiAKIHB1YmxpYzoKLSAgICBTY3JvbGxBbmltYXRv
ck1hYyhTY3JvbGxhYmxlQXJlYSopOworICAgIFNjcm9sbEFuaW1hdG9yTWFjKFNjcm9sbGFibGVB
cmVhJik7CiAgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JNYWMoKTsKIAogICAgIHZvaWQgaW1t
ZWRpYXRlU2Nyb2xsVG9Qb2ludEZvclNjcm9sbEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBu
ZXdQb3NpdGlvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5p
bWF0b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Nj
cm9sbEFuaW1hdG9yTWFjLm1tCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI2OSw3ICsyNjksNyBAQCAtICh2b2lkKXNjcm9sbGVySW1wUGFpcjooaWQpc2Nyb2xsZXJJ
bXBQCiAgICAgaWYgKFtzY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tl
ZF0pCiAgICAgICAgIHJldHVybjsKIAotICAgIF9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsQW5pbWF0
b3IoKS0+Y29udGVudEFyZWFXaWxsUGFpbnQoKTsKKyAgICBfc2Nyb2xsYWJsZUFyZWEtPnNjcm9s
bEFuaW1hdG9yKCkuY29udGVudEFyZWFXaWxsUGFpbnQoKTsKIH0KIAogLSAodm9pZClzY3JvbGxl
ckltcFBhaXI6KGlkKXNjcm9sbGVySW1wUGFpciB1cGRhdGVTY3JvbGxlclN0eWxlRm9yTmV3UmVj
b21tZW5kZWRTY3JvbGxlclN0eWxlOihOU1Njcm9sbGVyU3R5bGUpbmV3UmVjb21tZW5kZWRTY3Jv
bGxlclN0eWxlCkBAIC0yNzksNyArMjc5LDcgQEAgLSAodm9pZClzY3JvbGxlckltcFBhaXI6KGlk
KXNjcm9sbGVySW1wUAogCiAgICAgW3Njcm9sbGVySW1wUGFpciBzZXRTY3JvbGxlclN0eWxlOm5l
d1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZV07CiAKLSAgICBzdGF0aWNfY2FzdDxTY3JvbGxBbmlt
YXRvck1hYyo+KF9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsQW5pbWF0b3IoKSktPnVwZGF0ZVNjcm9s
bGVyU3R5bGUoKTsKKyAgICBzdGF0aWNfY2FzdDxTY3JvbGxBbmltYXRvck1hYyY+KF9zY3JvbGxh
YmxlQXJlYS0+c2Nyb2xsQW5pbWF0b3IoKSkudXBkYXRlU2Nyb2xsZXJTdHlsZSgpOwogfQogCiBA
ZW5kCkBAIC00MTcsNyArNDE3LDcgQEAgLSAodm9pZCljYW5jZWxBbmltYXRpb25zCiAKIC0gKFNj
cm9sbEFuaW1hdG9yTWFjKilzY3JvbGxBbmltYXRvcgogewotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxTY3JvbGxBbmltYXRvck1hYyo+KF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCktPnNjcm9s
bEFuaW1hdG9yKCkpOworICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8U2Nyb2xsQW5pbWF0b3JNYWMm
Pihfc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLnNjcm9sbEFuaW1hdG9yKCkpOwogfQogCiAt
IChOU1JlY3QpY29udmVydFJlY3RUb0JhY2tpbmc6KE5TUmVjdClhUmVjdApAQCAtNDQwLDkgKzQ0
MCw5IEBAIC0gKENBTGF5ZXIgKilsYXllcgogCiAgICAgR3JhcGhpY3NMYXllciogbGF5ZXI7CiAg
ICAgaWYgKF9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCi0g
ICAgICAgIGxheWVyID0gX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+bGF5ZXJGb3JWZXJ0
aWNhbFNjcm9sbGJhcigpOworICAgICAgICBsYXllciA9IF9zY3JvbGxiYXItPnNjcm9sbGFibGVB
cmVhKCkubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpOwogICAgIGVsc2UKLSAgICAgICAgbGF5
ZXIgPSBfc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5sYXllckZvckhvcml6b250YWxTY3Jv
bGxiYXIoKTsKKyAgICAgICAgbGF5ZXIgPSBfc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLmxh
eWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpOwogCiAgICAgc3RhdGljIENBTGF5ZXIgKmR1bW15
TGF5ZXIgPSBbW0NBTGF5ZXIgYWxsb2NdIGluaXRdOwogICAgIHJldHVybiBsYXllciA/IGxheWVy
LT5wbGF0Zm9ybUxheWVyKCkgOiBkdW1teUxheWVyOwpAQCAtNDU1LDcgKzQ1NSw3IEBAIC0gKE5T
UG9pbnQpbW91c2VMb2NhdGlvbkluU2Nyb2xsZXJGb3JTY3IKIAogICAgIEFTU0VSVF9VTlVTRUQo
c2Nyb2xsZXJJbXAsIHNjcm9sbGVySW1wID09IHNjcm9sbGJhclBhaW50ZXJGb3JTY3JvbGxiYXIo
X3Njcm9sbGJhcikpOwogCi0gICAgcmV0dXJuIF9zY3JvbGxiYXItPmNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXcoX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+bGFzdEtub3duTW91c2VQb3Np
dGlvbigpKTsKKyAgICByZXR1cm4gX3Njcm9sbGJhci0+Y29udmVydEZyb21Db250YWluaW5nVmll
dyhfc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKSk7
CiB9CiAKIC0gKE5TUmVjdCljb252ZXJ0UmVjdFRvTGF5ZXI6KE5TUmVjdClyZWN0CkBAIC00ODIs
NyArNDgyLDcgQEAgLSAodm9pZClzZXRVcEFscGhhQW5pbWF0aW9uOihSZXRhaW5QdHI8VwogICAg
IGlmIChbc2VsZiBzY3JvbGxBbmltYXRvcl0tPnNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgp
ICYmICFtdXN0QW5pbWF0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKF9zY3JvbGxiYXIt
PnNjcm9sbGFibGVBcmVhKCktPnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgJiYgIW11
c3RBbmltYXRlKSB7CisgICAgaWYgKF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkuc2hvdWxk
U3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSAmJiAhbXVzdEFuaW1hdGUpIHsKICAgICAgICAgW3Nl
bGYgc2Nyb2xsQW5pbWF0b3JdLT5zdGFydFNjcm9sbGJhclBhaW50VGltZXIoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTYzNCwxMiArNjM0LDEyIEBAIC0gKHZvaWQpaW52YWxpZGF0ZQog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9s
bEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQorUGFzc093
blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJl
YSYgc2Nyb2xsYWJsZUFyZWEpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxBbmlt
YXRvck1hYyhzY3JvbGxhYmxlQXJlYSkpOwogfQogCi1TY3JvbGxBbmltYXRvck1hYzo6U2Nyb2xs
QW5pbWF0b3JNYWMoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQorU2Nyb2xsQW5pbWF0
b3JNYWM6OlNjcm9sbEFuaW1hdG9yTWFjKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkK
ICAgICA6IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVhKQogICAgICwgbV9pbml0aWFsU2Ny
b2xsYmFyUGFpbnRUaW1lcigqdGhpcywgJlNjcm9sbEFuaW1hdG9yTWFjOjppbml0aWFsU2Nyb2xs
YmFyUGFpbnRUaW1lckZpcmVkKQogICAgICwgbV9zZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVy
KCp0aGlzLCAmU2Nyb2xsQW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXJG
aXJlZCkKQEAgLTY1Myw3ICs2NTMsNyBAQCBTY3JvbGxBbmltYXRvck1hYzo6U2Nyb2xsQW5pbWF0
b3JNYWMoU2NyCiAgICAgbV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSA9IGFkb3B0TlMo
W1tXZWJTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxB
bmltYXRvcjp0aGlzXSk7CiAgICAgbV9zY3JvbGxBbmltYXRpb25IZWxwZXIgPSBhZG9wdE5TKFtb
TlNDbGFzc0Zyb21TdHJpbmcoQCJOU1Njcm9sbEFuaW1hdGlvbkhlbHBlciIpIGFsbG9jXSBpbml0
V2l0aERlbGVnYXRlOm1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUuZ2V0KCldKTsKIAot
ICAgIG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXZWJT
Y3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGFi
bGVBcmVhOnNjcm9sbGFibGVBcmVhXSk7CisgICAgbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxl
ckRlbGVnYXRlID0gYWRvcHROUyhbW1dlYlNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdh
dGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsYWJsZUFyZWE6JnNjcm9sbGFibGVBcmVhXSk7CiAgICAg
bV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciA9IGFkb3B0TlMoW1tOU0NsYXNzRnJvbVN0cmlu
ZyhAIk5TU2Nyb2xsZXJJbXBQYWlyIikgYWxsb2NdIGluaXRdKTsKICAgICBbbV9zY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlciBzZXREZWxlZ2F0ZTooaWQpbV9zY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlckRlbGVnYXRlLmdldCgpXTsKICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciBz
ZXRTY3JvbGxlclN0eWxlOnJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpXTsKQEAgLTY5OSwxNCAr
Njk5LDE0IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OnNjcm9sbChTY3JvbGxiYXIKIHsKICAg
ICBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSB0cnVlOwogCi0gICAgaWYgKCFzY3JvbGxB
bmltYXRpb25FbmFibGVkRm9yU3lzdGVtKCkgfHwgIW1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEFu
aW1hdG9yRW5hYmxlZCgpKQorICAgIGlmICghc2Nyb2xsQW5pbWF0aW9uRW5hYmxlZEZvclN5c3Rl
bSgpIHx8ICFtX3Njcm9sbGFibGVBcmVhLnNjcm9sbEFuaW1hdG9yRW5hYmxlZCgpKQogICAgICAg
ICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHks
IHN0ZXAsIG11bHRpcGxpZXIpOwogCiAgICAgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5UGl4
ZWwpCiAgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBn
cmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CiAKICAgICBmbG9hdCBjdXJyZW50UG9zID0g
b3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1fY3VycmVudFBvc1ggOiBtX2N1
cnJlbnRQb3NZOwotICAgIGZsb2F0IG5ld1BvcyA9IHN0ZDo6bWF4PGZsb2F0PihzdGQ6Om1pbjxm
bG9hdD4oY3VycmVudFBvcyArIChzdGVwICogbXVsdGlwbGllciksIHN0YXRpY19jYXN0PGZsb2F0
PihtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxTaXplKG9yaWVudGF0aW9uKSkpLCAwKTsKKyAgICBm
bG9hdCBuZXdQb3MgPSBzdGQ6Om1heDxmbG9hdD4oc3RkOjptaW48ZmxvYXQ+KGN1cnJlbnRQb3Mg
KyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4obV9zY3JvbGxhYmxlQXJl
YS5zY3JvbGxTaXplKG9yaWVudGF0aW9uKSkpLCAwKTsKICAgICBpZiAoY3VycmVudFBvcyA9PSBu
ZXdQb3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNzI5LDI1ICs3MjksMjUgQEAgdm9p
ZCBTY3JvbGxBbmltYXRvck1hYzo6c2Nyb2xsVG9PZmZzZXRXaQogCiBGbG9hdFBvaW50IFNjcm9s
bEFuaW1hdG9yTWFjOjphZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KGNvbnN0IEZsb2F0
UG9pbnQmIHBvc2l0aW9uKSBjb25zdAogewotICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYS0+Y29u
c3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoKSkKKyAgICBpZiAoIW1fc2Nyb2xsYWJsZUFy
ZWEuY29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoKSkKICAgICAgICAgcmV0dXJuIHBv
c2l0aW9uOwogCi0gICAgZmxvYXQgbmV3WCA9IHN0ZDo6bWF4PGZsb2F0PihzdGQ6Om1pbjxmbG9h
dD4ocG9zaXRpb24ueCgpLCBtX3Njcm9sbGFibGVBcmVhLT50b3RhbENvbnRlbnRzU2l6ZSgpLndp
ZHRoKCkgLSBtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlV2lkdGgoKSksIDApOwotICAgIGZsb2F0
IG5ld1kgPSBzdGQ6Om1heDxmbG9hdD4oc3RkOjptaW48ZmxvYXQ+KHBvc2l0aW9uLnkoKSwgbV9z
Y3JvbGxhYmxlQXJlYS0+dG90YWxDb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIG1fc2Nyb2xsYWJs
ZUFyZWEtPnZpc2libGVIZWlnaHQoKSksIDApOworICAgIGZsb2F0IG5ld1ggPSBzdGQ6Om1heDxm
bG9hdD4oc3RkOjptaW48ZmxvYXQ+KHBvc2l0aW9uLngoKSwgbV9zY3JvbGxhYmxlQXJlYS50b3Rh
bENvbnRlbnRzU2l6ZSgpLndpZHRoKCkgLSBtX3Njcm9sbGFibGVBcmVhLnZpc2libGVXaWR0aCgp
KSwgMCk7CisgICAgZmxvYXQgbmV3WSA9IHN0ZDo6bWF4PGZsb2F0PihzdGQ6Om1pbjxmbG9hdD4o
cG9zaXRpb24ueSgpLCBtX3Njcm9sbGFibGVBcmVhLnRvdGFsQ29udGVudHNTaXplKCkuaGVpZ2h0
KCkgLSBtX3Njcm9sbGFibGVBcmVhLnZpc2libGVIZWlnaHQoKSksIDApOwogCiAgICAgcmV0dXJu
IEZsb2F0UG9pbnQobmV3WCwgbmV3WSk7CiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmFk
anVzdFNjcm9sbFBvc2l0aW9uVG9Cb3VuZHNJZk5lY2Vzc2FyeSgpCiB7Ci0gICAgYm9vbCBjdXJy
ZW50bHlDb25zdHJhaW5zVG9Db250ZW50RWRnZSA9IG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnN0cmFp
bnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKCk7Ci0gICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29u
c3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7CisgICAgYm9vbCBjdXJyZW50bHlD
b25zdHJhaW5zVG9Db250ZW50RWRnZSA9IG1fc2Nyb2xsYWJsZUFyZWEuY29uc3RyYWluc1Njcm9s
bGluZ1RvQ29udGVudEVkZ2UoKTsKKyAgICBtX3Njcm9sbGFibGVBcmVhLnNldENvbnN0cmFpbnNT
Y3JvbGxpbmdUb0NvbnRlbnRFZGdlKHRydWUpOwogCiAgICAgSW50UG9pbnQgY3VycmVudFNjcm9s
bFBvc2l0aW9uID0gYWJzb2x1dGVTY3JvbGxQb3NpdGlvbigpOwogICAgIEZsb2F0UG9pbnQgbmVh
cmVzdFBvaW50V2l0aGluQm91bmRzID0gYWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShh
YnNvbHV0ZVNjcm9sbFBvc2l0aW9uKCkpOwogICAgIGltbWVkaWF0ZVNjcm9sbEJ5KG5lYXJlc3RQ
b2ludFdpdGhpbkJvdW5kcyAtIGN1cnJlbnRTY3JvbGxQb3NpdGlvbik7CiAKLSAgICBtX3Njcm9s
bGFibGVBcmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShjdXJyZW50bHlD
b25zdHJhaW5zVG9Db250ZW50RWRnZSk7CisgICAgbV9zY3JvbGxhYmxlQXJlYS5zZXRDb25zdHJh
aW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShjdXJyZW50bHlDb25zdHJhaW5zVG9Db250ZW50RWRn
ZSk7CiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9sbFRvKGNvbnN0
IEZsb2F0UG9pbnQmIG5ld1Bvc2l0aW9uKQpAQCAtNzU1LDcgKzc1NSw3IEBAIHZvaWQgU2Nyb2xs
QW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9sbFQKICAgICBGbG9hdFBvaW50IGFkanVzdGVkUG9z
aXRpb24gPSBhZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KG5ld1Bvc2l0aW9uKTsKICAK
ICAgICBib29sIHBvc2l0aW9uQ2hhbmdlZCA9IGFkanVzdGVkUG9zaXRpb24ueCgpICE9IG1fY3Vy
cmVudFBvc1ggfHwgYWRqdXN0ZWRQb3NpdGlvbi55KCkgIT0gbV9jdXJyZW50UG9zWTsKLSAgICBp
ZiAoIXBvc2l0aW9uQ2hhbmdlZCAmJiAhc2Nyb2xsYWJsZUFyZWEoKS0+c2Nyb2xsT3JpZ2luQ2hh
bmdlZCgpKQorICAgIGlmICghcG9zaXRpb25DaGFuZ2VkICYmICFzY3JvbGxhYmxlQXJlYSgpLnNj
cm9sbE9yaWdpbkNoYW5nZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRmxvYXRTaXplIGRl
bHRhID0gRmxvYXRTaXplKGFkanVzdGVkUG9zaXRpb24ueCgpIC0gbV9jdXJyZW50UG9zWCwgYWRq
dXN0ZWRQb3NpdGlvbi55KCkgLSBtX2N1cnJlbnRQb3NZKTsKQEAgLTk0MiwxMSArOTQyLDExIEBA
IHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEFkZFZlcnRpY2FsU2MKICAgICBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlID0gYWRvcHROUyhbW1dlYlNjcm9sbGJhclBhaW50ZXJE
ZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxiYXI6c2Nyb2xsYmFyXSk7CiAKICAgICBbcGFp
bnRlciBzZXREZWxlZ2F0ZTooaWQpbV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5n
ZXQoKV07Ci0gICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gc2Nyb2xsYmFyLT5zY3JvbGxh
YmxlQXJlYSgpLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgaWYgKEdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLmxheWVyRm9yVmVydGlj
YWxTY3JvbGxiYXIoKSkKICAgICAgICAgW3BhaW50ZXIgc2V0TGF5ZXI6bGF5ZXItPnBsYXRmb3Jt
TGF5ZXIoKV07CiAKICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciBzZXRWZXJ0aWNh
bFNjcm9sbGVySW1wOnBhaW50ZXJdOwotICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLT5pbkxpdmVS
ZXNpemUoKSkKKyAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS5pbkxpdmVSZXNpemUoKSkKICAgICAg
ICAgW3BhaW50ZXIgc2V0S25vYkFscGhhOjFdOwogfQogCkBAIC05NzQsMTEgKzk3NCwxMSBAQCB2
b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpkaWRBZGRIb3Jpem9udGFsCiAgICAgbV9ob3Jpem9udGFs
U2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlID0gYWRvcHROUyhbW1dlYlNjcm9sbGJhclBhaW50ZXJE
ZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxiYXI6c2Nyb2xsYmFyXSk7CiAKICAgICBbcGFp
bnRlciBzZXREZWxlZ2F0ZTooaWQpbV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRl
LmdldCgpXTsKLSAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBzY3JvbGxiYXItPnNjcm9s
bGFibGVBcmVhKCktPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAgIGlmIChHcmFw
aGljc0xheWVyKiBsYXllciA9IHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5sYXllckZvckhv
cml6b250YWxTY3JvbGxiYXIoKSkKICAgICAgICAgW3BhaW50ZXIgc2V0TGF5ZXI6bGF5ZXItPnBs
YXRmb3JtTGF5ZXIoKV07CiAKICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciBzZXRI
b3Jpem9udGFsU2Nyb2xsZXJJbXA6cGFpbnRlcl07Ci0gICAgaWYgKHNjcm9sbGFibGVBcmVhKCkt
PmluTGl2ZVJlc2l6ZSgpKQorICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLmluTGl2ZVJlc2l6ZSgp
KQogICAgICAgICBbcGFpbnRlciBzZXRLbm9iQWxwaGE6MV07CiB9CiAKQEAgLTk5OCw4ICs5OTgs
OCBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjp3aWxsUmVtb3ZlSG9yaXpvCiAKIHZvaWQgU2Ny
b2xsQW5pbWF0b3JNYWM6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQogewotICAg
IEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbV9zY3JvbGxhYmxlQXJlYS0+bGF5ZXJGb3JWZXJ0aWNh
bFNjcm9sbGJhcigpOwotICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxlQXJl
YS0+dmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IG1fc2Ny
b2xsYWJsZUFyZWEubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIFNjcm9sbGJhciog
c2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNjcm9sbGJhcigpOwogICAgIGlm
ICghc2Nyb2xsYmFyKQogICAgICAgICByZXR1cm47CiAKQEAgLTEwMTIsOCArMTAxMiw4IEBAIHZv
aWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnZlcnRpY2FsU2Nyb2xsYmEKIAogdm9pZCBTY3JvbGxBbmlt
YXRvck1hYzo6aG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkKIHsKLSAgICBHcmFw
aGljc0xheWVyKiBsYXllciA9IG1fc2Nyb2xsYWJsZUFyZWEtPmxheWVyRm9ySG9yaXpvbnRhbFNj
cm9sbGJhcigpOwotICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxlQXJlYS0+
aG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbV9zY3Jv
bGxhYmxlQXJlYS5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICBTY3JvbGxiYXIq
IHNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNjcm9sbGJhcigpOwogICAg
IGlmICghc2Nyb2xsYmFyKQogICAgICAgICByZXR1cm47CiAKQEAgLTEwNDgsNyArMTA0OCw3IEBA
IHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om5vdGlmeUNvbnRlbnRBcmUKICAgICBpZiAoW21fc2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3Njcm9sbGFibGVBcmVhLT5pc0hhbmRsaW5nV2hl
ZWxFdmVudCgpKQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVhLmlzSGFuZGxpbmdXaGVlbEV2ZW50
KCkpCiAgICAgICAgIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkKGRlbHRhKTsKICAgICBlbHNlCiAg
ICAgICAgIHNlbmRDb250ZW50QXJlYVNjcm9sbGVkU29vbihkZWx0YSk7CkBAIC0xMTA5LDIxICsx
MTA5LDIxIEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OmhhbmRsZVdoZWVsRXZlbnQKIGJvb2wg
U2Nyb2xsQW5pbWF0b3JNYWM6OnBpbm5lZEluRGlyZWN0aW9uKGZsb2F0IGRlbHRhWCwgZmxvYXQg
ZGVsdGFZKQogewogICAgIEZsb2F0U2l6ZSBsaW1pdERlbHRhOwotICAgIGlmIChmYWJzZihkZWx0
YVkpID49IGZhYnNmKGRlbHRhWCkpIHsKKyAgICBpZiAoc3RkOjpmYWJzZihkZWx0YVkpID49IGZh
YnNmKGRlbHRhWCkpIHsKICAgICAgICAgaWYgKGRlbHRhWSA8IDApIHsKICAgICAgICAgICAgIC8v
IFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIHVwLiAgTWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVk
IHRvIHRoZSB0b3AKLSAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0SGVpZ2h0KG1fc2Nyb2xsYWJs
ZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLnkoKSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9s
bE9yaWdpbigpLnkoKSk7CisgICAgICAgICAgICBsaW1pdERlbHRhLnNldEhlaWdodChtX3Njcm9s
bGFibGVBcmVhLnZpc2libGVDb250ZW50UmVjdCgpLnkoKSArIG1fc2Nyb2xsYWJsZUFyZWEuc2Ny
b2xsT3JpZ2luKCkueSgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFdlIGFy
ZSB0cnlpbmcgdG8gc2Nyb2xsIGRvd24uICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8g
dGhlIGJvdHRvbQotICAgICAgICAgICAgbGltaXREZWx0YS5zZXRIZWlnaHQobV9zY3JvbGxhYmxl
QXJlYS0+dG90YWxDb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIChtX3Njcm9sbGFibGVBcmVhLT52
aXNpYmxlQ29udGVudFJlY3QoKS5tYXhZKCkgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmln
aW4oKS55KCkpKTsKKyAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0SGVpZ2h0KG1fc2Nyb2xsYWJs
ZUFyZWEudG90YWxDb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIChtX3Njcm9sbGFibGVBcmVhLnZp
c2libGVDb250ZW50UmVjdCgpLm1heFkoKSArIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsT3JpZ2lu
KCkueSgpKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGRlbHRhWCAhPSAwKSB7CiAgICAg
ICAgIGlmIChkZWx0YVggPCAwKSB7CiAgICAgICAgICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNj
cm9sbCBsZWZ0LiAgTWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSBsZWZ0Ci0gICAg
ICAgICAgICBsaW1pdERlbHRhLnNldFdpZHRoKG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250
ZW50UmVjdCgpLngoKSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpLngoKSk7Cisg
ICAgICAgICAgICBsaW1pdERlbHRhLnNldFdpZHRoKG1fc2Nyb2xsYWJsZUFyZWEudmlzaWJsZUNv
bnRlbnRSZWN0KCkueCgpICsgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxPcmlnaW4oKS54KCkpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwg
cmlnaHQuICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIHJpZ2h0Ci0gICAgICAg
ICAgICBsaW1pdERlbHRhLnNldFdpZHRoKG1fc2Nyb2xsYWJsZUFyZWEtPnRvdGFsQ29udGVudHNT
aXplKCkud2lkdGgoKSAtIChtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVudFJlY3QoKS5t
YXhYKCkgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmlnaW4oKS54KCkpKTsKKyAgICAgICAg
ICAgIGxpbWl0RGVsdGEuc2V0V2lkdGgobV9zY3JvbGxhYmxlQXJlYS50b3RhbENvbnRlbnRzU2l6
ZSgpLndpZHRoKCkgLSAobV9zY3JvbGxhYmxlQXJlYS52aXNpYmxlQ29udGVudFJlY3QoKS5tYXhY
KCkgKyBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbE9yaWdpbigpLngoKSkpOwogICAgICAgICB9CiAg
ICAgfQogICAgIApAQCAtMTE0Myw5ICsxMTQzLDkgQEAgYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6
aXNBbHJlYWR5UGlubmVkSQogewogICAgIHN3aXRjaCAoYXhpcykgewogICAgIGNhc2UgU2Nyb2xs
RXZlbnRBeGlzOjpWZXJ0aWNhbDoKLSAgICAgICAgcmV0dXJuICh3aGVlbEV2ZW50LmRlbHRhWSgp
ID4gMCAmJiBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxlZFRvVG9wKCkpIHx8ICh3aGVlbEV2ZW50
LmRlbHRhWSgpIDwgMCAmJiBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxlZFRvQm90dG9tKCkpOwor
ICAgICAgICByZXR1cm4gKHdoZWVsRXZlbnQuZGVsdGFZKCkgPiAwICYmIG1fc2Nyb2xsYWJsZUFy
ZWEuc2Nyb2xsZWRUb1RvcCgpKSB8fCAod2hlZWxFdmVudC5kZWx0YVkoKSA8IDAgJiYgbV9zY3Jv
bGxhYmxlQXJlYS5zY3JvbGxlZFRvQm90dG9tKCkpOwogICAgIGNhc2UgU2Nyb2xsRXZlbnRBeGlz
OjpIb3Jpem9udGFsOgotICAgICAgICByZXR1cm4gKHdoZWVsRXZlbnQuZGVsdGFYKCkgPiAwICYm
IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbGVkVG9MZWZ0KCkpIHx8ICh3aGVlbEV2ZW50LmRlbHRh
WCgpIDwgMCAmJiBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxlZFRvUmlnaHQoKSk7CisgICAgICAg
IHJldHVybiAod2hlZWxFdmVudC5kZWx0YVgoKSA+IDAgJiYgbV9zY3JvbGxhYmxlQXJlYS5zY3Jv
bGxlZFRvTGVmdCgpKSB8fCAod2hlZWxFdmVudC5kZWx0YVgoKSA8IDAgJiYgbV9zY3JvbGxhYmxl
QXJlYS5zY3JvbGxlZFRvUmlnaHQoKSk7CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC0xMTY5LDE1ICsxMTY5LDE1IEBAIHN0YXRpYyBib29sIGdlc3R1cmVTaG91bGRCZWdp
blNuYXAoY29uc3QKIAogYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6YWxsb3dzVmVydGljYWxTdHJl
dGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKIHsKLSAgICBzd2l0
Y2ggKG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSgpKSB7CisgICAg
c3dpdGNoIChtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSgpKSB7CiAg
ICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljOiB7Ci0gICAgICAgIFNjcm9sbGJhciog
aFNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAg
ICAgICBTY3JvbGxiYXIqIHZTY3JvbGxlciA9IG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Ny
b2xsYmFyKCk7CisgICAgICAgIFNjcm9sbGJhciogaFNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJl
YS5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgICAgIFNjcm9sbGJhciogdlNjcm9sbGVyID0g
bV9zY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNjcm9sbGJhcigpOwogICAgICAgICBib29sIHNjcm9s
bGJhcnNBbGxvd1N0cmV0Y2hpbmcgPSAoKHZTY3JvbGxlciAmJiB2U2Nyb2xsZXItPmVuYWJsZWQo
KSkgfHwgKCFoU2Nyb2xsZXIgfHwgIWhTY3JvbGxlci0+ZW5hYmxlZCgpKSk7Ci0gICAgICAgIGJv
b2wgZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmcgPSBtX3Njcm9sbGFibGVBcmVhLT5oYXNTY3JvbGxh
YmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkgJiYgbmV3R2VzdHVyZUlzU3RhcnRpbmcod2hl
ZWxFdmVudCkgJiYgaXNBbHJlYWR5UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1cmUod2hlZWxFdmVu
dCwgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCk7CisgICAgICAgIGJvb2wgZXZlbnRQcmV2ZW50
c1N0cmV0Y2hpbmcgPSBtX3Njcm9sbGFibGVBcmVhLmhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRh
YmxlQW5jZXN0b3IoKSAmJiBuZXdHZXN0dXJlSXNTdGFydGluZyh3aGVlbEV2ZW50KSAmJiBpc0Fs
cmVhZHlQaW5uZWRJbkRpcmVjdGlvbk9mR2VzdHVyZSh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4
aXM6OlZlcnRpY2FsKTsKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgICAgICBpZiAo
IWV2ZW50UHJldmVudHNTdHJldGNoaW5nKQotICAgICAgICAgICAgZXZlbnRQcmV2ZW50c1N0cmV0
Y2hpbmcgPSBnZXN0dXJlU2hvdWxkQmVnaW5TbmFwKHdoZWVsRXZlbnQsIG1fc2Nyb2xsYWJsZUFy
ZWEtPnZlcnRpY2FsU25hcE9mZnNldHMoKSk7CisgICAgICAgICAgICBldmVudFByZXZlbnRzU3Ry
ZXRjaGluZyA9IGdlc3R1cmVTaG91bGRCZWdpblNuYXAod2hlZWxFdmVudCwgbV9zY3JvbGxhYmxl
QXJlYS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiBzY3Jv
bGxiYXJzQWxsb3dTdHJldGNoaW5nICYmICFldmVudFByZXZlbnRzU3RyZXRjaGluZzsKICAgICB9
CkBAIC0xMTkzLDE1ICsxMTkzLDE1IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OmFsbG93c1Zl
cnRpY2FsU3QKIAogYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6YWxsb3dzSG9yaXpvbnRhbFN0cmV0
Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQogewotICAgIHN3aXRj
aCAobV9zY3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoKSkgeworICAg
IHN3aXRjaCAobV9zY3JvbGxhYmxlQXJlYS5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSgpKSB7
CiAgICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljOiB7Ci0gICAgICAgIFNjcm9sbGJh
ciogaFNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOwot
ICAgICAgICBTY3JvbGxiYXIqIHZTY3JvbGxlciA9IG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2Fs
U2Nyb2xsYmFyKCk7CisgICAgICAgIFNjcm9sbGJhciogaFNjcm9sbGVyID0gbV9zY3JvbGxhYmxl
QXJlYS5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgICAgIFNjcm9sbGJhciogdlNjcm9sbGVy
ID0gbV9zY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNjcm9sbGJhcigpOwogICAgICAgICBib29sIHNj
cm9sbGJhcnNBbGxvd1N0cmV0Y2hpbmcgPSAoKGhTY3JvbGxlciAmJiBoU2Nyb2xsZXItPmVuYWJs
ZWQoKSkgfHwgKCF2U2Nyb2xsZXIgfHwgIXZTY3JvbGxlci0+ZW5hYmxlZCgpKSk7Ci0gICAgICAg
IGJvb2wgZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmcgPSBtX3Njcm9sbGFibGVBcmVhLT5oYXNTY3Jv
bGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkgJiYgbmV3R2VzdHVyZUlzU3RhcnRpbmco
d2hlZWxFdmVudCkgJiYgaXNBbHJlYWR5UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1cmUod2hlZWxF
dmVudCwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKKyAgICAgICAgYm9vbCBldmVudFBy
ZXZlbnRzU3RyZXRjaGluZyA9IG1fc2Nyb2xsYWJsZUFyZWEuaGFzU2Nyb2xsYWJsZU9yUnViYmVy
YmFuZGFibGVBbmNlc3RvcigpICYmIG5ld0dlc3R1cmVJc1N0YXJ0aW5nKHdoZWVsRXZlbnQpICYm
IGlzQWxyZWFkeVBpbm5lZEluRGlyZWN0aW9uT2ZHZXN0dXJlKHdoZWVsRXZlbnQsIFNjcm9sbEV2
ZW50QXhpczo6SG9yaXpvbnRhbCk7CiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICAg
ICAgaWYgKCFldmVudFByZXZlbnRzU3RyZXRjaGluZykKLSAgICAgICAgICAgIGV2ZW50UHJldmVu
dHNTdHJldGNoaW5nID0gZ2VzdHVyZVNob3VsZEJlZ2luU25hcCh3aGVlbEV2ZW50LCBtX3Njcm9s
bGFibGVBcmVhLT5ob3Jpem9udGFsU25hcE9mZnNldHMoKSk7CisgICAgICAgICAgICBldmVudFBy
ZXZlbnRzU3RyZXRjaGluZyA9IGdlc3R1cmVTaG91bGRCZWdpblNuYXAod2hlZWxFdmVudCwgbV9z
Y3JvbGxhYmxlQXJlYS5ob3Jpem9udGFsU25hcE9mZnNldHMoKSk7CiAjZW5kaWYKICAgICAgICAg
cmV0dXJuIHNjcm9sbGJhcnNBbGxvd1N0cmV0Y2hpbmcgJiYgIWV2ZW50UHJldmVudHNTdHJldGNo
aW5nOwogICAgIH0KQEAgLTEyMTcsNyArMTIxNyw3IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6
OmFsbG93c0hvcml6b250YWwKIAogSW50U2l6ZSBTY3JvbGxBbmltYXRvck1hYzo6c3RyZXRjaEFt
b3VudCgpCiB7Ci0gICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPm92ZXJoYW5nQW1vdW50KCk7
CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEub3ZlcmhhbmdBbW91bnQoKTsKIH0KIAogYm9v
bCBTY3JvbGxBbmltYXRvck1hYzo6cGlubmVkSW5EaXJlY3Rpb24oY29uc3QgRmxvYXRTaXplJiBk
aXJlY3Rpb24pCkBAIC0xMjI3LDcgKzEyMjcsNyBAQCBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpw
aW5uZWRJbkRpcmVjdGlvCiAKIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OmNhblNjcm9sbEhvcml6
b250YWxseSgpCiB7Ci0gICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVh
LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBtX3Nj
cm9sbGFibGVBcmVhLmhvcml6b250YWxTY3JvbGxiYXIoKTsKICAgICBpZiAoIXNjcm9sbGJhcikK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBzY3JvbGxiYXItPmVuYWJsZWQoKTsK
QEAgLTEyMzUsNyArMTIzNSw3IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OmNhblNjcm9sbEhv
cml6b24KIAogYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6Y2FuU2Nyb2xsVmVydGljYWxseSgpCiB7
Ci0gICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNj
cm9sbGJhcigpOworICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxlQXJlYS52
ZXJ0aWNhbFNjcm9sbGJhcigpOwogICAgIGlmICghc2Nyb2xsYmFyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgcmV0dXJuIHNjcm9sbGJhci0+ZW5hYmxlZCgpOwpAQCAtMTI0OCwxNCArMTI0
OCwxNCBAQCBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpzaG91bGRSdWJiZXJCYW5kCiAKIEludFBv
aW50IFNjcm9sbEFuaW1hdG9yTWFjOjphYnNvbHV0ZVNjcm9sbFBvc2l0aW9uKCkKIHsKLSAgICBy
ZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubG9jYXRpb24oKSAr
IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpOworICAgIHJldHVybiBtX3Njcm9sbGFi
bGVBcmVhLnZpc2libGVDb250ZW50UmVjdCgpLmxvY2F0aW9uKCkgKyBtX3Njcm9sbGFibGVBcmVh
LnNjcm9sbE9yaWdpbigpOwogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjppbW1lZGlhdGVT
Y3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKGNvbnN0IEZsb2F0U2l6ZSYgZGVs
dGEpCiB7Ci0gICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29u
dGVudEVkZ2UoZmFsc2UpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2V0Q29uc3RyYWluc1Njcm9s
bGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOwogICAgIGltbWVkaWF0ZVNjcm9sbEJ5KGRlbHRhKTsK
LSAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRn
ZSh0cnVlKTsKKyAgICBtX3Njcm9sbGFibGVBcmVhLnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0Nv
bnRlbnRFZGdlKHRydWUpOwogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjppbW1lZGlhdGVT
Y3JvbGxCeShjb25zdCBGbG9hdFNpemUmIGRlbHRhKQpAQCAtMTMwNCw3ICsxMzA0LDcgQEAgdm9p
ZCBTY3JvbGxBbmltYXRvck1hYzo6dXBkYXRlU2Nyb2xsZXJTdAogCiAgICAgTlNTY3JvbGxlclN0
eWxlIG5ld1N0eWxlID0gW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgc2Nyb2xsZXJTdHls
ZV07CiAKLSAgICBpZiAoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9sbGFibGVB
cmVhKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKKyAgICBpZiAoU2Nyb2xsYmFyKiB2ZXJ0aWNh
bFNjcm9sbGJhciA9IHNjcm9sbGFibGVBcmVhKCkudmVydGljYWxTY3JvbGxiYXIoKSkgewogICAg
ICAgICB2ZXJ0aWNhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwogCiAgICAgICAgIFNjcm9sbGJh
clBhaW50ZXIgb2xkVmVydGljYWxQYWludGVyID0gW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xs
ZXIgdmVydGljYWxTY3JvbGxlckltcF07CkBAIC0xMzIyLDcgKzEzMjIsNyBAQCB2b2lkIFNjcm9s
bEFuaW1hdG9yTWFjOjp1cGRhdGVTY3JvbGxlclN0CiAgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFy
LT5zZXRGcmFtZVJlY3QoSW50UmVjdCgwLCAwLCB0aGlja25lc3MsIHRoaWNrbmVzcykpOwogICAg
IH0KIAotICAgIGlmIChTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIgPSBzY3JvbGxhYmxl
QXJlYSgpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKKyAgICBpZiAoU2Nyb2xsYmFyKiBob3Jp
em9udGFsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUFyZWEoKS5ob3Jpem9udGFsU2Nyb2xsYmFyKCkp
IHsKICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwogCiAgICAgICAg
IFNjcm9sbGJhclBhaW50ZXIgb2xkSG9yaXpvbnRhbFBhaW50ZXIgPSBbbV9zY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlciBob3Jpem9udGFsU2Nyb2xsZXJJbXBdOwpAQCAtMTM0Miw3ICsxMzQyLDcg
QEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6dXBkYXRlU2Nyb2xsZXJTdAogCiAgICAgLy8gSWYg
bV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUgaXMgdHJ1ZSwgdGhlbiB0aGUgcGFnZSBpcyByZXN0
b3JpbmcgZnJvbSB0aGUgcGFnZSBjYWNoZSwgYW5kIAogICAgIC8vIGEgcmVsYXlvdXQgd2lsbCBo
YXBwZW4gb24gaXRzIG93bi4gT3RoZXJ3aXNlLCB3ZSBtdXN0IGluaXRpYXRlIGEgcmUtbGF5b3V0
IG91cnNlbHZlcy4KLSAgICBzY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxiYXJTdHlsZUNoYW5nZWQo
bmV3U3R5bGUsICFtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSk7CisgICAgc2Nyb2xsYWJsZUFy
ZWEoKS5zY3JvbGxiYXJTdHlsZUNoYW5nZWQobmV3U3R5bGUsICFtX25lZWRzU2Nyb2xsZXJTdHls
ZVVwZGF0ZSk7CiAKICAgICBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSA9IGZhbHNlOwogfQpA
QCAtMTM5NSwxMyArMTM5NSwxMyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzZW5kQ29udGVu
dEFyZWFTCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJl
Y3QoY29uc3QgSW50UmVjdCYgc2Nyb2xsZXJUaHVtYikKIHsKICAgICBJbnRSZWN0IHJlY3RJblZp
ZXdDb29yZGluYXRlcyA9IHNjcm9sbGVyVGh1bWI7Ci0gICAgaWYgKFNjcm9sbGJhciogdmVydGlj
YWxTY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpKQorICAg
IGlmIChTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxlQXJlYS52ZXJ0
aWNhbFNjcm9sbGJhcigpKQogICAgICAgICByZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB2ZXJ0aWNh
bFNjcm9sbGJhci0+Y29udmVydFRvQ29udGFpbmluZ1ZpZXcoc2Nyb2xsZXJUaHVtYik7CiAKICAg
ICBpZiAocmVjdEluVmlld0Nvb3JkaW5hdGVzID09IG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRWaXNpYmxlU2Ny
b2xsZXJUaHVtYlJlY3QocmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKKyAgICBtX3Njcm9sbGFibGVB
cmVhLnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChyZWN0SW5WaWV3Q29vcmRpbmF0ZXMpOwog
ICAgIG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0ID0gcmVjdEluVmlld0Nvb3JkaW5hdGVzOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNw
cAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVw
TWVudVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMSwgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBU
b3JjaCBNb2JpbGUgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KICAqCkBAIC0xNDIsNyArMTQyLDcgQEAgdm9p
ZCBQb3B1cE1lbnVXaW46OnNob3coY29uc3QgSW50UmVjdCYgcgogCiAgICAgaWYgKCFtX3Njcm9s
bGJhciAmJiB2aXNpYmxlSXRlbXMoKSA8IGNsaWVudCgpLT5saXN0U2l6ZSgpKSB7CiAgICAgICAg
IC8vIFdlIG5lZWQgYSBzY3JvbGwgYmFyCi0gICAgICAgIG1fc2Nyb2xsYmFyID0gY2xpZW50KCkt
PmNyZWF0ZVNjcm9sbGJhcih0aGlzLCBWZXJ0aWNhbFNjcm9sbGJhciwgU21hbGxTY3JvbGxiYXIp
OworICAgICAgICBtX3Njcm9sbGJhciA9IGNsaWVudCgpLT5jcmVhdGVTY3JvbGxiYXIoKnRoaXMs
IFZlcnRpY2FsU2Nyb2xsYmFyLCBTbWFsbFNjcm9sbGJhcik7CiAgICAgICAgIG1fc2Nyb2xsYmFy
LT5zdHlsZUNoYW5nZWQoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgYXJlIENvcHlyaWdodCAoQykgMTk5OCBOZXRzY2FwZSBD
b21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KICAqCkBAIC0zMzYsNyArMzM2LDcgQEAgUmVuZGVy
TGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZQogICAgICAgICAvLyBXZSBzYXZlIGFu
ZCByZXN0b3JlIG9ubHkgdGhlIHNjcm9sbE9mZnNldCBhcyB0aGUgb3RoZXIgc2Nyb2xsIHZhbHVl
cyBhcmUgcmVjYWxjdWxhdGVkLgogICAgICAgICBtX3Njcm9sbE9mZnNldCA9IGVsZW1lbnQtPnNh
dmVkTGF5ZXJTY3JvbGxPZmZzZXQoKTsKICAgICAgICAgaWYgKCFtX3Njcm9sbE9mZnNldC5pc1pl
cm8oKSkKLSAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCktPnNldEN1cnJlbnRQb3NpdGlvbihG
bG9hdFBvaW50KG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCksIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgp
KSk7CisgICAgICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldEN1cnJlbnRQb3NpdGlvbihGbG9h
dFBvaW50KG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCksIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKSk7
CiAgICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxPZmZzZXQoSW50U2l6ZSgpKTsK
ICAgICB9CiB9CkBAIC0zMDY1LDkgKzMwNjUsOSBAQCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVu
ZGVyTGF5ZXI6OmNyZWF0CiAgICAgUmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5k
ZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKICAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJh
clN0eWxlID0gYWN0dWFsUmVuZGVyZXItPmlzQm94KCkgJiYgYWN0dWFsUmVuZGVyZXItPnN0eWxl
KCkuaGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKTsKICAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFy
U3R5bGUpCi0gICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Ny
b2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCBhY3R1YWxSZW5kZXJlci0+ZWxlbWVudCgpKTsKKyAg
ICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIoKnRo
aXMsIG9yaWVudGF0aW9uLCBhY3R1YWxSZW5kZXJlci0+ZWxlbWVudCgpKTsKICAgICBlbHNlIHsK
LSAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIodGhpcywg
b3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpOworICAgICAgICB3aWRnZXQgPSBTY3JvbGxi
YXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3Jv
bGxiYXIpOwogICAgICAgICBkaWRBZGRTY3JvbGxiYXIod2lkZ2V0LmdldCgpLCBvcmllbnRhdGlv
bik7CiAgICAgfQogICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmFkZENoaWxkKHdp
ZGdldC5nZXQoKSk7CkBAIC0zMDg0LDcgKzMwODQsNiBAQCB2b2lkIFJlbmRlckxheWVyOjpkZXN0
cm95U2Nyb2xsYmFyKFNjcm9sCiAgICAgICAgIHdpbGxSZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFy
LmdldCgpLCBvcmllbnRhdGlvbik7CiAKICAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQo
KTsKLSAgICBzY3JvbGxiYXItPmRpc2Nvbm5lY3RGcm9tU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBz
Y3JvbGxiYXIgPSBudWxscHRyOwogfQogCkBAIC0zNDgyLDggKzM0ODEsOCBAQCB2b2lkIFJlbmRl
ckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTk2NAogICAgIHVwZGF0ZVNuYXBPZmZzZXRzKCk7CiAj
aWYgUExBVEZPUk0oTUFDKQotICAgIGlmIChleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAg
ICAgIHNjcm9sbEFuaW1hdG9yKCktPnVwZGF0ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycygpOwor
ICAgIGlmIChTY3JvbGxBbmltYXRvciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFu
aW1hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+dXBkYXRlU2Nyb2xsQW5p
bWF0b3JzQW5kVGltZXJzKCk7CiAjZW5kaWYKICNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gMTgwNDUwKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAx
MSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMTEsIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgICAgIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTgwMiw5ICs4MDIsOSBAQCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyTGlz
dEJveDo6Y3JlCiAgICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OwogICAgIGJvb2wgaGFzQ3Vz
dG9tU2Nyb2xsYmFyU3R5bGUgPSBzdHlsZSgpLmhhc1BzZXVkb1N0eWxlKFNDUk9MTEJBUik7CiAg
ICAgaWYgKGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlKQotICAgICAgICB3aWRnZXQgPSBSZW5kZXJT
Y3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcih0aGlzLCBWZXJ0aWNhbFNjcm9sbGJhciwg
JnNlbGVjdEVsZW1lbnQoKSk7CisgICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3Jl
YXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBWZXJ0aWNhbFNjcm9sbGJhciwgJnNlbGVjdEVsZW1l
bnQoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0
aXZlU2Nyb2xsYmFyKHRoaXMsIFZlcnRpY2FsU2Nyb2xsYmFyLCB0aGVtZSgpLnNjcm9sbGJhckNv
bnRyb2xTaXplRm9yUGFydChMaXN0Ym94UGFydCkpOworICAgICAgICB3aWRnZXQgPSBTY3JvbGxi
YXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcigqdGhpcywgVmVydGljYWxTY3JvbGxiYXIsIHRoZW1l
KCkuc2Nyb2xsYmFyQ29udHJvbFNpemVGb3JQYXJ0KExpc3Rib3hQYXJ0KSk7CiAgICAgICAgIGRp
ZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIFZlcnRpY2FsU2Nyb2xsYmFyKTsKICAgICB9CiAg
ICAgdmlldygpLmZyYW1lVmlldygpLmFkZENoaWxkKHdpZGdldC5nZXQoKSk7CkBAIC04MTksOCAr
ODE5LDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpkZXN0cm95U2Nyb2xsYmFyKCkKICAgICBpZiAo
IW1fdkJhci0+aXNDdXN0b21TY3JvbGxiYXIoKSkKICAgICAgICAgU2Nyb2xsYWJsZUFyZWE6Ondp
bGxSZW1vdmVTY3JvbGxiYXIobV92QmFyLmdldCgpLCBWZXJ0aWNhbFNjcm9sbGJhcik7CiAgICAg
bV92QmFyLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgbV92QmFyLT5kaXNjb25uZWN0RnJvbVNj
cm9sbGFibGVBcmVhKCk7Ci0gICAgbV92QmFyID0gMDsKKyAgICBtX3ZCYXIgPSBudWxscHRyOwog
fQogCiB2b2lkIFJlbmRlckxpc3RCb3g6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFz
U2Nyb2xsYmFyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxp
c3QuY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIHNlbGVjdCBlbGVtZW50IHJlbmRlcmVyIGluIFdlYkNvcmUuCiAg
KgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKS4KLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwg
MjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAgICAgICAgICAyMDA5IFRvcmNoIE1vYmlsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgpAQCAtNTc1LDcgKzU3NSw3IEBAIEhvc3RXaW5kb3cqIFJlbmRlck1lbnVMaXN0
Ojpob3N0V2luZG93KCkKICAgICByZXR1cm4gdmlldygpLmZyYW1lVmlldygpLmhvc3RXaW5kb3co
KTsKIH0KIAotUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlck1lbnVMaXN0OjpjcmVhdGVTY3Jv
bGxiYXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUpCitQYXNzUmVm
UHRyPFNjcm9sbGJhcj4gUmVuZGVyTWVudUxpc3Q6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxl
QXJlYSYgc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBT
Y3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKIHsKICAgICBSZWZQdHI8U2Nyb2xsYmFy
PiB3aWRnZXQ7CiAgICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9IHN0eWxlKCkuaGFz
UHNldWRvU3R5bGUoU0NST0xMQkFSKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNZW51TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNZW51TGlzdC5oCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWVudUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBzZWxlY3QgZWxlbWVudCByZW5kZXJlciBpbiBXZWJD
b3JlLgogICoKICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgs
IDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTEzLDcg
KzExMyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIG11bHRpcGxlKCkgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0IG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdygpIGNvbnN0IG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihT
Y3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6
ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Ny
b2xsYmFyKFNjcm9sbGFibGVBcmVhJiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNv
bnRyb2xTaXplKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNMaW5lSWZFbXB0eSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5jcHAJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMyBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDksIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwxMiArMzYsMTIgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1SZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3Rv
bVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uLCBFbGVtZW50KiBvd25lckVsZW1lbnQsIEZyYW1lKiBvd25pbmdG
cmFtZSkKK1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Ny
b2xsYmFyKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRp
b24gb3JpZW50YXRpb24sIEVsZW1lbnQqIG93bmVyRWxlbWVudCwgRnJhbWUqIG93bmluZ0ZyYW1l
KQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVuZGVyU2Nyb2xsYmFyKHNjcm9sbGFibGVB
cmVhLCBvcmllbnRhdGlvbiwgb3duZXJFbGVtZW50LCBvd25pbmdGcmFtZSkpOwogfQogCi1SZW5k
ZXJTY3JvbGxiYXI6OlJlbmRlclNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFy
ZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBFbGVtZW50KiBvd25lckVsZW1l
bnQsIEZyYW1lKiBvd25pbmdGcmFtZSkKK1JlbmRlclNjcm9sbGJhcjo6UmVuZGVyU2Nyb2xsYmFy
KFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24sIEVsZW1lbnQqIG93bmVyRWxlbWVudCwgRnJhbWUqIG93bmluZ0ZyYW1lKQogICAg
IDogU2Nyb2xsYmFyKHNjcm9sbGFibGVBcmVhLCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJh
ciwgUmVuZGVyU2Nyb2xsYmFyVGhlbWU6OnJlbmRlclNjcm9sbGJhclRoZW1lKCksIHRydWUpCiAg
ICAgLCBtX293bmVyRWxlbWVudChvd25lckVsZW1lbnQpCiAgICAgLCBtX293bmluZ0ZyYW1lKG93
bmluZ0ZyYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJh
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxi
YXIuaAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNjcm9sbGJhci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Miw3ICs0Miw3IEBAIGNs
YXNzIFJlbmRlclN0eWxlOwogY2xhc3MgUmVuZGVyU2Nyb2xsYmFyIGZpbmFsIDogcHVibGljIFNj
cm9sbGJhciB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIFNjcm9sbGJhcjsKLSAgICBzdGF0
aWMgUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVh
KiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIEVsZW1lbnQqLCBGcmFtZSogb3duaW5nRnJhbWUgPSBu
dWxscHRyKTsKKyAgICBzdGF0aWMgUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlQ3VzdG9tU2Nyb2xs
YmFyKFNjcm9sbGFibGVBcmVhJiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIEVsZW1lbnQqLCBGcmFt
ZSogb3duaW5nRnJhbWUgPSBudWxscHRyKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJTY3JvbGxiYXIo
KTsKIAogICAgIFJlbmRlckJveCogb3duaW5nUmVuZGVyZXIoKSBjb25zdDsKQEAgLTYyLDcgKzYy
LDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGdldFNjcm9sbGJhclBz
ZXVkb1N0eWxlKFNjcm9sbGJhclBhcnQsIFBzZXVkb0lkKTsKIAogcHJpdmF0ZToKLSAgICBSZW5k
ZXJTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgRWxlbWVu
dCosIEZyYW1lKik7CisgICAgUmVuZGVyU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhJiwgU2Nyb2xs
YmFyT3JpZW50YXRpb24sIEVsZW1lbnQqLCBGcmFtZSopOwogCiAgICAgdmlydHVhbCB2b2lkIHNl
dFBhcmVudChTY3JvbGxWaWV3Kikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldEVuYWJs
ZWQoYm9vbCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U2VhcmNoRmllbGQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTZWFyY2hGaWVsZC5jcHAJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMTAs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAgICAgIChDKSAy
MDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRv
cmNobW9iaWxlLmNvbS8pIAogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgpAQCAtMzQyLDcgKzM0Miw3IEBAIEhvc3RXaW5k
b3cqIFJlbmRlclNlYXJjaEZpZWxkOjpob3N0V2luZG8KICAgICByZXR1cm4gdmlldygpLmZyYW1l
VmlldygpLmhvc3RXaW5kb3coKTsKIH0KIAotUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlclNl
YXJjaEZpZWxkOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVh
LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUg
Y29udHJvbFNpemUpCitQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyU2VhcmNoRmllbGQ6OmNy
ZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkK
IHsKICAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7CiAgICAgYm9vbCBoYXNDdXN0b21TY3Jv
bGxiYXJTdHlsZSA9IHN0eWxlKCkuaGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5oCShyZXZpc2lvbiAx
ODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3LCAyMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICogQ29weXJpZ2h0IChDKSAy
MDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KICAqCkBA
IC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNldFRleHRGcm9tSXRl
bSh1bnNpZ25lZCBsaXN0SW5kZXgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgRm9udFNlbGVjdG9y
KiBmb250U2VsZWN0b3IoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3coKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2Ny
b2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRh
dGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSYsIFNjcm9sbGJh
ck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSkgb3ZlcnJpZGU7CiAKICAgICBIVE1M
RWxlbWVudCogcmVzdWx0c0J1dHRvbkVsZW1lbnQoKSBjb25zdDsKICAgICBIVE1MRWxlbWVudCog
Y2FuY2VsQnV0dG9uRWxlbWVudCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTgw
NDY1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTYgQEAKKzIwMTUtMDItMjAgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+
CisKKyAgICAgICAgU2Nyb2xsYmFycyBhbmQgU2Nyb2xsQW5pbWF0b3JzIG11c3QgYWx3YXlzIGhh
dmUgYSBTY3JvbGxhYmxlQXJlYQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQxODU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisgICAgICAgIAorICAgICAgICBDaGFuZ2UgdXNlcnMgb2YgdGhlIHNjcm9sbEFuaW1hdG9yKCkg
bWV0aG9kIHRvIGV4cGVjdCBhIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGEgcG9pbnRlci4KKworICAg
ICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tOgorICAgICAgICAoV2Vi
S2l0OjpQREZQbHVnaW46OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJLaXQ6OlBERlBs
dWdpbjo6ZGVzdHJveVNjcm9sbGJhcik6CisKIDIwMTUtMDItMjAgIEVucmljYSBDYXN1Y2NpICA8
ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAgICAgICBbV0syXSBBZGQgc3VwcG9ydCBmb3IgZm9udCBw
YW5lbCBvbiBPUyBYLgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BE
Ri9QREZQbHVnaW4ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9QREZQbHVnaW4ubW0JKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSwgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEs
IDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC02NDEsNyArNjQxLDcgQEAgY29uc3QgUGx1Z2luVmlldyog
UERGUGx1Z2luOjpwbHVnaW5WaWV3KAogCiBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUERGUGx1Z2lu
OjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCiB7Ci0g
ICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3Jv
bGxiYXIodGhpcywgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpOworICAgIFJlZlB0cjxT
Y3JvbGxiYXI+IHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlz
LCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcik7CiAgICAgaWYgKG9yaWVudGF0aW9uID09
IEhvcml6b250YWxTY3JvbGxiYXIpIHsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5
ZXIgPSBhZG9wdE5TKFtbV0tQREZQbHVnaW5TY3JvbGxiYXJMYXllciBhbGxvY10gaW5pdFdpdGhQ
REZQbHVnaW46dGhpc10pOwogICAgICAgICBbbV9jb250YWluZXJMYXllciBhZGRTdWJsYXllcjpt
X2hvcml6b250YWxTY3JvbGxiYXJMYXllci5nZXQoKV07CkBAIC02NjIsOCArNjYyLDcgQEAgdm9p
ZCBQREZQbHVnaW46OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYgogCiAgICAgd2lsbFJlbW92ZVNj
cm9sbGJhcihzY3JvbGxiYXIuZ2V0KCksIG9yaWVudGF0aW9uKTsKICAgICBzY3JvbGxiYXItPnJl
bW92ZUZyb21QYXJlbnQoKTsKLSAgICBzY3JvbGxiYXItPmRpc2Nvbm5lY3RGcm9tU2Nyb2xsYWJs
ZUFyZWEoKTsKLSAgICBzY3JvbGxiYXIgPSAwOworICAgIHNjcm9sbGJhciA9IG51bGxwdHI7CiAK
ICAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewogICAgICAgICBb
bV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247023</attachid>
            <date>2015-02-20 17:50:08 -0800</date>
            <delta_ts>2015-02-20 18:05:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141855-20150220175000.patch</filename>
            <type>text/plain</type>
            <size>83935</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDQ2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNSBAQAorMjAxNS0wMi0yMCAgQnJlbnQg
RnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBTY3JvbGxiYXJzIGFuZCBT
Y3JvbGxBbmltYXRvcnMgbXVzdCBhbHdheXMgaGF2ZSBhIFNjcm9sbGFibGVBcmVhCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4NTUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBjaGFuZ2UgaW4gZnVu
Y3Rpb25hbGl0eS4KKyAgICAgICAgCisgICAgICAgIENoYW5nZSB1c2VycyBvZiB0aGUgc2Nyb2xs
QW5pbWF0b3IoKSBtZXRob2QgdG8gZXhwZWN0IGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2lu
dGVyLiBBbHNvIGdldCByaWQgb2YKKyAgICAgICAgYSBudW1iZXIgb2YgdW5uZWNlc3NhcnkgbnVs
bHB0ciBjaGVja3MuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3Jv
bGxiYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6c2V0
VmFsdWUpOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJNYXRjaGVzQ29ybmVyUHJlc2VudFBzZXVkb0NsYXNz
KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVZpZXc6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNl
dEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvcjo6aGFuZGxlV2hlZWxFdmVudFBoYXNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9Qb3B1cE1l
bnVDbGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6U2Nyb2xsQW5pbWF0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvcjo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yOjp1cGRhdGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMpOgorICAgICAgICAqIHBs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cjo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbGFibGVBcmVhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvck5vbmUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
Tm9uZS5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6Y3JlYXRlU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxhYmxlQXJlYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Ny
b2xsQW5pbWF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpub3RpZnlTY3Jv
bGxQb3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbFBvc2l0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6
aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aGFu
ZGxlVG91Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6bW91c2VF
bnRlcmVkU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjptb3Vz
ZUV4aXRlZFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6ZGlk
QWRkU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjp3aWxsUmVt
b3ZlU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNh
bFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVB
cmVhOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAqIHBsYXRm
b3JtL1Njcm9sbGFibGVBcmVhLmg6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6U2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhcjo6c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhcjo6aXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXI6Om9mZnNldERpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmF1
dG9zY3JvbGxQcmVzc2VkUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdmVU
aHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdXNlTW92ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3VzZUVudGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyOjptb3VzZUV4aXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1v
dXNlVXApOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzaG91bGRQYXJ0aWNpcGF0ZUlu
SGl0VGVzdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmlzV2luZG93QWN0aXZl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpjb252ZXJ0VG9Db250YWluaW5nVmlldyk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhcjo6c2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpkaXNj
b25uZWN0RnJvbVNjcm9sbGFibGVBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9p
b3MvU2Nyb2xsQW5pbWF0b3JJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cklPUzo6aGFuZGxlVG91Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cklPUzo6ZGV0ZXJtaW5lU2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvU2Nyb2xsQW5pbWF0b3JNYWMubW06CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyRGVsZWdhdGUgc2Nyb2xsZXJJbXBQYWlyOnNldENvbnRlbnRBcmVhTmVlZHNEaXNw
bGF5SW5SZWN0Ol0pOgorICAgICAgICAoLVtXZWJTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRl
bGVnYXRlIHNjcm9sbGVySW1wUGFpcjp1cGRhdGVTY3JvbGxlclN0eWxlRm9yTmV3UmVjb21tZW5k
ZWRTY3JvbGxlclN0eWxlOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxiYXJQYWludGVyRGVsZWdh
dGUgc2Nyb2xsQW5pbWF0b3JdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVn
YXRlIGxheWVyXSk6CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBtb3Vz
ZUxvY2F0aW9uSW5TY3JvbGxlckZvclNjcm9sbGVySW1wOl0pOgorICAgICAgICAoLVtXZWJTY3Jv
bGxiYXJQYWludGVyRGVsZWdhdGUgc2V0VXBBbHBoYUFuaW1hdGlvbjpzY3JvbGxlclBhaW50ZXI6
cGFydDphbmltYXRlQWxwaGFUbzpkdXJhdGlvbjpdKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6
OlNjcm9sbEFuaW1hdG9yTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
OjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmFkanVzdFNj
cm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JNYWM6OmFkanVzdFNjcm9sbFBvc2l0aW9uVG9Cb3VuZHNJZk5lY2Vzc2FyeSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsVG8pOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpkaWRBZGRIb3Jpem9udGFsU2Ny
b2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp2ZXJ0aWNhbFNj
cm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
TWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnBpbm5lZEluRGlyZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjppc0FscmVhZHlQaW5uZWRJbkRpcmVjdGlv
bk9mR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6YWxsb3dz
VmVydGljYWxTdHJldGNoaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
OjphbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvck1hYzo6c3RyZXRjaEFtb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvck1hYzo6Y2FuU2Nyb2xsSG9yaXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yTWFjOjpjYW5TY3JvbGxWZXJ0aWNhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yTWFjOjphYnNvbHV0ZVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yTWFjOjppbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRn
ZUNvbnN0cmFpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp1cGRh
dGVTY3JvbGxlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpz
ZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
YXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGVzdHJveVNjcm9sbGJhcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
aXN0Qm94OjpjcmVhdGVTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJv
eDo6ZGVzdHJveVNjcm9sbGJhcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0
LmNwcDoKKyAgICAgICAgKFJlbmRlck1lbnVMaXN0OjpjcmVhdGVTY3JvbGxiYXIpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJTY3JvbGxiYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyOjpjcmVh
dGVDdXN0b21TY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyOjpS
ZW5kZXJTY3JvbGxiYXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmg6CisKIDIwMTUtMDItMjAgIEVucmljYSBDYXN1Y2Np
ICA8ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAgICAgICBbV0syXSBBZGQgc3VwcG9ydCBmb3IgZm9u
dCBwYW5lbCBvbiBPUyBYLgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5U2Nyb2xsYmFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwCShyZXZpc2lvbiAxODA0NTApCisr
KyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC05NiwxMSArOTYsOCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlTY3JvbGxi
YXI6OnNldFZhbHVlKGZsCiAgICAgaWYgKCFtX3Njcm9sbGJhcikKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIGlmICghbV9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIGZsb2F0IG5ld1ZhbHVlID0gdmFsdWUgKiBtX3Njcm9sbGJhci0+bWF4aW11
bSgpOwotICAgIG1fc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxUb09mZnNldFdp
dGhvdXRBbmltYXRpb24obV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCksIG5ld1ZhbHVlKTsKKyAg
ICBtX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24obV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCksIG5ld1ZhbHVlKTsKIH0KICAgICAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNo
ZWNrZXJUZXN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNl
L1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE0IERoaSBBdXJyYWht
YW4gPGRpb3JhaG1hbkByb2NreWJhcnMuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzU4LDcg
KzM1OCw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBzY3JvbGxiYXJNYXRjaGVzTm9CdXQKIAogQUxX
QVlTX0lOTElORSBib29sIHNjcm9sbGJhck1hdGNoZXNDb3JuZXJQcmVzZW50UHNldWRvQ2xhc3Mo
Y29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAg
cmV0dXJuIGNvbnRleHQuc2Nyb2xsYmFyICYmIGNvbnRleHQuc2Nyb2xsYmFyLT5zY3JvbGxhYmxl
QXJlYSgpLT5pc1Njcm9sbENvcm5lclZpc2libGUoKTsKKyAgICByZXR1cm4gY29udGV4dC5zY3Jv
bGxiYXIgJiYgY29udGV4dC5zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkuaXNTY3JvbGxDb3Ju
ZXJWaXNpYmxlKCk7CiB9CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAgKiAg
ICAgICAgICAgICAgICAgICAgIDE5OTkgTGFycyBLbm9sbCA8a25vbGxAa2RlLm9yZz4KICAqICAg
ICAgICAgICAgICAgICAgICAgMTk5OSBBbnR0aSBLb2l2aXN0byA8a29pdmlzdG9Aa2RlLm9yZz4K
ICAqICAgICAgICAgICAgICAgICAgICAgMjAwMCBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9y
Zz4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDEzLTIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAgICAgIChDKSAyMDA2IEdy
YWhhbSBEZW5uaXMgKGdyYWhhbS5kZW5uaXNAZ21haWwuY29tKQogICogICAgICAgICAgIChDKSAy
MDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtNTQyLDE3ICs1NDIsMTcg
QEAgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IEZyYW1lVmlldzo6Y3JlYXRlUwogICAgIC8vIFRyeSB0
aGUgPGJvZHk+IGVsZW1lbnQgZmlyc3QgYXMgYSBzY3JvbGxiYXIgc291cmNlLgogICAgIEhUTUxF
bGVtZW50KiBib2R5ID0gZG9jID8gZG9jLT5ib2R5T3JGcmFtZXNldCgpIDogbnVsbHB0cjsKICAg
ICBpZiAoYm9keSAmJiBib2R5LT5yZW5kZXJlcigpICYmIGJvZHktPnJlbmRlcmVyKCktPnN0eWxl
KCkuaGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKSkKLSAgICAgICAgcmV0dXJuIFJlbmRlclNjcm9s
bGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCBib2R5KTsKKyAg
ICAgICAgcmV0dXJuIFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlz
LCBvcmllbnRhdGlvbiwgYm9keSk7CiAgICAgCiAgICAgLy8gSWYgdGhlIDxib2R5PiBkaWRuJ3Qg
aGF2ZSBhIGN1c3RvbSBzdHlsZSwgdGhlbiB0aGUgcm9vdCBlbGVtZW50IG1pZ2h0LgogICAgIEVs
ZW1lbnQqIGRvY0VsZW1lbnQgPSBkb2MgPyBkb2MtPmRvY3VtZW50RWxlbWVudCgpIDogbnVsbHB0
cjsKICAgICBpZiAoZG9jRWxlbWVudCAmJiBkb2NFbGVtZW50LT5yZW5kZXJlcigpICYmIGRvY0Vs
ZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCkuaGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKSkKLSAg
ICAgICAgcmV0dXJuIFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHRoaXMs
IG9yaWVudGF0aW9uLCBkb2NFbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIFJlbmRlclNjcm9sbGJh
cjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgZG9jRWxlbWVudCk7
CiAgICAgICAgIAogICAgIC8vIElmIHdlIGhhdmUgYW4gb3duaW5nIGlmcmFtZS9mcmFtZSBlbGVt
ZW50LCB0aGVuIGl0IGNhbiBzZXQgdGhlIGN1c3RvbSBzY3JvbGxiYXIgYWxzby4KICAgICBSZW5k
ZXJXaWRnZXQqIGZyYW1lUmVuZGVyZXIgPSBmcmFtZSgpLm93bmVyUmVuZGVyZXIoKTsKICAgICBp
ZiAoZnJhbWVSZW5kZXJlciAmJiBmcmFtZVJlbmRlcmVyLT5zdHlsZSgpLmhhc1BzZXVkb1N0eWxl
KFNDUk9MTEJBUikpCi0gICAgICAgIHJldHVybiBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3Rv
bVNjcm9sbGJhcih0aGlzLCBvcmllbnRhdGlvbiwgMCwgJmZyYW1lKCkpOworICAgICAgICByZXR1
cm4gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0
aW9uLCBudWxscHRyLCAmZnJhbWUoKSk7CiAgICAgCiAgICAgLy8gTm9ib2R5IHNldCBhIGN1c3Rv
bSBzdHlsZSwgc28gd2UganVzdCB1c2UgYSBuYXRpdmUgc2Nyb2xsYmFyLgogICAgIHJldHVybiBT
Y3JvbGxWaWV3OjpjcmVhdGVTY3JvbGxiYXIob3JpZW50YXRpb24pOwpAQCAtMjA4MSw3ICsyMDgx
LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZQogICAgICAgICBp
ZiAoZnJhbWUoKS5wYWdlKCktPnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZp
eGVkUG9zaXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVy
c0FmdGVyU2Nyb2xsaW5nKCk7CiAgICAgICAgIEludFBvaW50IG5ld1Bvc2l0aW9uID0gc2Nyb2xs
UG9zaXRpb24oKTsKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS0+c2V0Q3VycmVudFBvc2l0aW9u
KHNjcm9sbFBvc2l0aW9uKCkpOworICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldEN1cnJlbnRQ
b3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsKICAgICAgICAgc2Nyb2xsUG9zaXRpb25DaGFuZ2Vk
KG9sZFBvc2l0aW9uLCBuZXdQb3NpdGlvbik7CiAgICAgfQogICAgIGlmICh2aXNpYmxlQ29udGVu
dFNpemVEaWRDaGFuZ2UpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAJKHJldmlzaW9uIDE4MDQ1MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjg5LDcgKzI4OSw3IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmhhbmRsZVdoZWVsRXYKICAgICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgZnJhbWVWaWV3LT5zY3JvbGxBbmltYXRvcigpLT5oYW5kbGVXaGVlbEV2ZW50UGhhc2Uo
cGhhc2UpOworICAgIGZyYW1lVmlldy0+c2Nyb2xsQW5pbWF0b3IoKS5oYW5kbGVXaGVlbEV2ZW50
UGhhc2UocGhhc2UpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BvcHVwTWVudUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BvcHVwTWVudUNsaWVudC5oCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Qb3B1cE1lbnVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpLgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAxNSBBcHBsZSBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgRm9udFNlbGVjdG9yKiBmb250U2Vs
ZWN0b3IoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBIb3N0V2luZG93KiBob3N0V2luZG93KCkg
Y29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Ny
b2xsYmFyKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNv
bnRyb2xTaXplKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRl
U2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhJiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJh
ckNvbnRyb2xTaXplKSA9IDA7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3IuY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQxLDEzICs0MSwxMyBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAjaWYgIUVOQUJMRShTTU9PVEhfU0NST0xMSU5HKSAmJiAhUExBVEZP
Uk0oSU9TKQotUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0
ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCitQYXNzT3duUHRyPFNjcm9sbEFuaW1h
dG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJl
YSkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVB
cmVhKSk7CiB9CiAjZW5kaWYKIAotU2Nyb2xsQW5pbWF0b3I6OlNjcm9sbEFuaW1hdG9yKFNjcm9s
bGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKK1Njcm9sbEFuaW1hdG9yOjpTY3JvbGxBbmltYXRv
cihTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiAgICAgOiBtX3Njcm9sbGFibGVBcmVh
KHNjcm9sbGFibGVBcmVhKQogICAgICwgbV9jdXJyZW50UG9zWCgwKQogICAgICwgbV9jdXJyZW50
UG9zWSgwKQpAQCAtNjEsNyArNjEsNyBAQCBTY3JvbGxBbmltYXRvcjo6flNjcm9sbEFuaW1hdG9y
KCkKIGJvb2wgU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmll
bnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIp
CiB7CiAgICAgZmxvYXQqIGN1cnJlbnRQb3MgPSAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNj
cm9sbGJhcikgPyAmbV9jdXJyZW50UG9zWCA6ICZtX2N1cnJlbnRQb3NZOwotICAgIGZsb2F0IG5l
d1BvcyA9IHN0ZDo6bWF4KHN0ZDo6bWluKCpjdXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVy
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFNpemUob3JpZW50
YXRpb24pKSksIDAuMGYpOworICAgIGZsb2F0IG5ld1BvcyA9IHN0ZDo6bWF4KHN0ZDo6bWluKCpj
dXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Ny
b2xsYWJsZUFyZWEuc2Nyb2xsU2l6ZShvcmllbnRhdGlvbikpKSwgMC4wZik7CiAgICAgZmxvYXQg
ZGVsdGEgPSAqY3VycmVudFBvcyAtIG5ld1BvczsKICAgICBpZiAoKmN1cnJlbnRQb3MgPT0gbmV3
UG9zKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTQsOCArMTE0LDggQEAgYm9vbCBTY3Jv
bGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudChjbwogICAgICAgICByZXR1cm4gdHJ1ZTsKICNl
bmRpZgogCi0gICAgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxl
QXJlYS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgIFNjcm9sbGJhciogdmVydGljYWxTY3Jv
bGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIFNjcm9s
bGJhciogaG9yaXpvbnRhbFNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNj
cm9sbGJhcigpOworICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBtX3Njcm9sbGFi
bGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFyKCk7CiAKICAgICAvLyBBY2NlcHQgdGhlIGV2ZW50IGlm
IHdlIGhhdmUgYSBzY3JvbGxiYXIgaW4gdGhhdCBkaXJlY3Rpb24gYW5kIGNhbiBzdGlsbAogICAg
IC8vIHNjcm9sbCBhbnkgZnVydGhlci4KQEAgLTEyNSw4ICsxMjUsOCBAQCBib29sIFNjcm9sbEFu
aW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KGNvCiAgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7CiAK
ICAgICBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSA9IFNjcm9sbEJ5UGl4ZWw7Ci0gICAg
SW50U2l6ZSBtYXhGb3J3YXJkU2Nyb2xsRGVsdGEgPSBtX3Njcm9sbGFibGVBcmVhLT5tYXhpbXVt
U2Nyb2xsUG9zaXRpb24oKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCk7Ci0g
ICAgSW50U2l6ZSBtYXhCYWNrd2FyZFNjcm9sbERlbHRhID0gbV9zY3JvbGxhYmxlQXJlYS0+c2Ny
b2xsUG9zaXRpb24oKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPm1pbmltdW1TY3JvbGxQb3NpdGlvbigp
OworICAgIEludFNpemUgbWF4Rm9yd2FyZFNjcm9sbERlbHRhID0gbV9zY3JvbGxhYmxlQXJlYS5t
YXhpbXVtU2Nyb2xsUG9zaXRpb24oKSAtIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsUG9zaXRpb24o
KTsKKyAgICBJbnRTaXplIG1heEJhY2t3YXJkU2Nyb2xsRGVsdGEgPSBtX3Njcm9sbGFibGVBcmVh
LnNjcm9sbFBvc2l0aW9uKCkgLSBtX3Njcm9sbGFibGVBcmVhLm1pbmltdW1TY3JvbGxQb3NpdGlv
bigpOwogICAgIGlmICgoZGVsdGFYIDwgMCAmJiBtYXhGb3J3YXJkU2Nyb2xsRGVsdGEud2lkdGgo
KSA+IDApCiAgICAgICAgIHx8IChkZWx0YVggPiAwICYmIG1heEJhY2t3YXJkU2Nyb2xsRGVsdGEu
d2lkdGgoKSA+IDApCiAgICAgICAgIHx8IChkZWx0YVkgPCAwICYmIG1heEZvcndhcmRTY3JvbGxE
ZWx0YS5oZWlnaHQoKSA+IDApCkBAIC0xMzYsNyArMTM2LDcgQEAgYm9vbCBTY3JvbGxBbmltYXRv
cjo6aGFuZGxlV2hlZWxFdmVudChjbwogICAgICAgICBpZiAoZGVsdGFZKSB7CiAgICAgICAgICAg
ICBpZiAoZS5ncmFudWxhcml0eSgpID09IFNjcm9sbEJ5UGFnZVdoZWVsRXZlbnQpIHsKICAgICAg
ICAgICAgICAgICBib29sIG5lZ2F0aXZlID0gZGVsdGFZIDwgMDsKLSAgICAgICAgICAgICAgICBk
ZWx0YVkgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwRGVsdGEobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJs
ZUhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBkZWx0YVkgPSBTY3JvbGxiYXI6OnBhZ2VTdGVw
RGVsdGEobV9zY3JvbGxhYmxlQXJlYS52aXNpYmxlSGVpZ2h0KCkpOwogICAgICAgICAgICAgICAg
IGlmIChuZWdhdGl2ZSkKICAgICAgICAgICAgICAgICAgICAgZGVsdGFZID0gLWRlbHRhWTsKICAg
ICAgICAgICAgIH0KQEAgLTE0Niw3ICsxNDYsNyBAQCBib29sIFNjcm9sbEFuaW1hdG9yOjpoYW5k
bGVXaGVlbEV2ZW50KGNvCiAgICAgICAgIGlmIChkZWx0YVgpIHsKICAgICAgICAgICAgIGlmIChl
LmdyYW51bGFyaXR5KCkgPT0gU2Nyb2xsQnlQYWdlV2hlZWxFdmVudCkgewogICAgICAgICAgICAg
ICAgIGJvb2wgbmVnYXRpdmUgPSBkZWx0YVggPCAwOwotICAgICAgICAgICAgICAgIGRlbHRhWCA9
IFNjcm9sbGJhcjo6cGFnZVN0ZXBEZWx0YShtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlV2lkdGgo
KSk7CisgICAgICAgICAgICAgICAgZGVsdGFYID0gU2Nyb2xsYmFyOjpwYWdlU3RlcERlbHRhKG1f
c2Nyb2xsYWJsZUFyZWEudmlzaWJsZVdpZHRoKCkpOwogICAgICAgICAgICAgICAgIGlmIChuZWdh
dGl2ZSkKICAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gLWRlbHRhWDsKICAgICAgICAgICAg
IH0KQEAgLTE3NywyMiArMTc3LDIyIEBAIEZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3I6OmN1cnJl
bnRQb3NpdGkKIHZvaWQgU2Nyb2xsQW5pbWF0b3I6Om5vdGlmeVBvc2l0aW9uQ2hhbmdlZChjb25z
dCBGbG9hdFNpemUmIGRlbHRhKQogewogICAgIFVOVVNFRF9QQVJBTShkZWx0YSk7Ci0gICAgbV9z
Y3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihJbnRQb2ludChtX2N1
cnJlbnRQb3NYLCBtX2N1cnJlbnRQb3NZKSk7CisgICAgbV9zY3JvbGxhYmxlQXJlYS5zZXRTY3Jv
bGxPZmZzZXRGcm9tQW5pbWF0aW9uKEludFBvaW50KG1fY3VycmVudFBvc1gsIG1fY3VycmVudFBv
c1kpKTsKIH0KIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1BQykK
IHZvaWQgU2Nyb2xsQW5pbWF0b3I6OnVwZGF0ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycygpCiB7
CiAgICAgLy8gRklYTUU6IEN1cnJlbnRseSwgc2Nyb2xsIHNuYXAgYW5pbWF0b3JzIGFyZSByZWNy
ZWF0ZWQgZXZlbiB0aG91Z2ggdGhlIHNuYXAgb2Zmc2V0cyBhbG9uZSBjYW4gYmUgdXBkYXRlZC4K
LSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkpIHsKLSAg
ICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxB
eGlzU2Nyb2xsU25hcEFuaW1hdG9yPih0aGlzLCBtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFs
U25hcE9mZnNldHMoKSwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKKyAgICBpZiAobV9z
Y3JvbGxhYmxlQXJlYS5ob3Jpem9udGFsU25hcE9mZnNldHMoKSkgeworICAgICAgICBtX2hvcml6
b250YWxTY3JvbGxTbmFwQW5pbWF0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPEF4aXNTY3JvbGxTbmFw
QW5pbWF0b3I+KHRoaXMsIG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCks
IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9s
bFNuYXBUaW1lciA9IHN0ZDo6bWFrZV91bmlxdWU8VGltZXI+KCp0aGlzLCAmU2Nyb2xsQW5pbWF0
b3I6Omhvcml6b250YWxTY3JvbGxTbmFwVGltZXJGaXJlZCk7CiAgICAgfSBlbHNlIGlmIChtX2hv
cml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3IpIHsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xs
U25hcEFuaW1hdG9yID0gbnVsbHB0cjsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25hcFRp
bWVyID0gbnVsbHB0cjsKICAgICB9Ci0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2Fs
U25hcE9mZnNldHMoKSkgewotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yID0g
c3RkOjptYWtlX3VuaXF1ZTxBeGlzU2Nyb2xsU25hcEFuaW1hdG9yPih0aGlzLCBtX3Njcm9sbGFi
bGVBcmVhLT52ZXJ0aWNhbFNuYXBPZmZzZXRzKCksIFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwp
OworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU25hcE9mZnNldHMoKSkgeworICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxBeGlz
U2Nyb2xsU25hcEFuaW1hdG9yPih0aGlzLCBtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU25hcE9m
ZnNldHMoKSwgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCk7CiAgICAgICAgIG1fdmVydGljYWxT
Y3JvbGxTbmFwVGltZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRpbWVyPigqdGhpcywgJlNjcm9sbEFu
aW1hdG9yOjp2ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lckZpcmVkKTsKICAgICB9IGVsc2UgaWYgKG1f
dmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3IpIHsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbFNu
YXBBbmltYXRvciA9IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yLmgJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICog
Q29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICAqIG1ldDoKQEAgLTU2LDcgKzU3
LDcgQEAgY2xhc3MgU2Nyb2xsQW5pbWF0b3IgewogI2VuZGlmCiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+
IGNyZWF0ZShTY3JvbGxhYmxlQXJlYSopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcm9sbEFu
aW1hdG9yPiBjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmKTsKIAogICAgIHZpcnR1YWwgflNjcm9sbEFu
aW1hdG9yKCk7CiAKQEAgLTY4LDcgKzY5LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CiAKLSAg
ICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEoKSBjb25zdCB7IHJldHVybiBtX3Njcm9s
bGFibGVBcmVhOyB9CisgICAgU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYTsgfQogCiAgICAgdmlydHVhbCBib29sIGhhbmRsZVdo
ZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CiAKQEAgLTEyNSw3ICsxMjYsNyBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IFNjcm9sbEFuaW1h
dG9yKFNjcm9sbGFibGVBcmVhKik7CisgICAgZXhwbGljaXQgU2Nyb2xsQW5pbWF0b3IoU2Nyb2xs
YWJsZUFyZWEmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQb3NpdGlvbkNoYW5nZWQoY29u
c3QgRmxvYXRTaXplJiBkZWx0YSk7CiAKQEAgLTEzNSw3ICsxMzYsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCB2ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lckZpcmVkKCk7CiAjZW5kaWYKIAotICAgIFNj
cm9sbGFibGVBcmVhKiBtX3Njcm9sbGFibGVBcmVhOworICAgIFNjcm9sbGFibGVBcmVhJiBtX3Nj
cm9sbGFibGVBcmVhOwogICAgIGZsb2F0IG1fY3VycmVudFBvc1g7IC8vIFdlIGF2b2lkIHVzaW5n
IGEgRmxvYXRQb2ludCBpbiBvcmRlciB0byByZWR1Y2UKICAgICBmbG9hdCBtX2N1cnJlbnRQb3NZ
OyAvLyBzdWJjbGFzcyBjb2RlIGNvbXBsZXhpdHkuCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkgJiYgUExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3JOb25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvck5vbmUuY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNTEsOSAr
NTIsOSBAQCBjb25zdCBkb3VibGUga1RpY2tUaW1lID0gMSAvIGtGcmFtZVJhdGU7CiBjb25zdCBk
b3VibGUga01pbmltdW1UaW1lckludGVydmFsID0gLjAwMTsKIGNvbnN0IGRvdWJsZSBrWm9vbVRp
Y2tzID0gMTE7CiAKLVBhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpj
cmVhdGUoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQorUGFzc093blB0cjxTY3JvbGxB
bmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJs
ZUFyZWEpCiB7Ci0gICAgaWYgKHNjcm9sbGFibGVBcmVhICYmIHNjcm9sbGFibGVBcmVhLT5zY3Jv
bGxBbmltYXRvckVuYWJsZWQoKSkKKyAgICBpZiAoc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0
b3JFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2Nyb2xsQW5pbWF0b3JO
b25lKHNjcm9sbGFibGVBcmVhKSk7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxBbmlt
YXRvcihzY3JvbGxhYmxlQXJlYSkpOwogfQpAQCAtNDg2LDggKzQ4Nyw4IEBAIHZvaWQgU2Nyb2xs
QW5pbWF0b3JOb25lOjpkaWRBZGRIb3Jpem9udGEKIAogdm9pZCBTY3JvbGxBbmltYXRvck5vbmU6
OnVwZGF0ZVZpc2libGVMZW5ndGhzKCkKIHsKLSAgICBtX2hvcml6b250YWxEYXRhLnVwZGF0ZVZp
c2libGVMZW5ndGgoc2Nyb2xsYWJsZUFyZWEoKS0+dmlzaWJsZVdpZHRoKCkpOwotICAgIG1fdmVy
dGljYWxEYXRhLnVwZGF0ZVZpc2libGVMZW5ndGgoc2Nyb2xsYWJsZUFyZWEoKS0+dmlzaWJsZUhl
aWdodCgpKTsKKyAgICBtX2hvcml6b250YWxEYXRhLnVwZGF0ZVZpc2libGVMZW5ndGgoc2Nyb2xs
YWJsZUFyZWEoKS52aXNpYmxlV2lkdGgoKSk7CisgICAgbV92ZXJ0aWNhbERhdGEudXBkYXRlVmlz
aWJsZUxlbmd0aChzY3JvbGxhYmxlQXJlYSgpLnZpc2libGVIZWlnaHQoKSk7CiB9CiAKICNpZiBV
U0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIpCkBAIC01MzIsNyArNTMzLDcgQEAgdm9p
ZCBTY3JvbGxBbmltYXRvck5vbmU6OnN0YXJ0TmV4dFRpbWVyKAogI2Vsc2UKIHZvaWQgU2Nyb2xs
QW5pbWF0b3JOb25lOjpzdGFydE5leHRUaW1lcigpCiB7Ci0gICAgaWYgKHNjcm9sbGFibGVBcmVh
KCktPnNjaGVkdWxlQW5pbWF0aW9uKCkpCisgICAgaWYgKHNjcm9sbGFibGVBcmVhKCkuc2NoZWR1
bGVBbmltYXRpb24oKSkKICAgICAgICAgbV9hbmltYXRpb25BY3RpdmUgPSB0cnVlOwogfQogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUu
aAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3JOb25lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChjKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNTIsNyArNTMsNyBAQCBzdHJ1Y3QgU2Nyb2xs
QW5pbWF0b3JQYXJhbWV0ZXJzOwogCiBjbGFzcyBTY3JvbGxBbmltYXRvck5vbmUgOiBwdWJsaWMg
U2Nyb2xsQW5pbWF0b3IgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNjcm9sbEFuaW1hdG9yTm9u
ZShTY3JvbGxhYmxlQXJlYSopOworICAgIGV4cGxpY2l0IFNjcm9sbEFuaW1hdG9yTm9uZShTY3Jv
bGxhYmxlQXJlYSYpOwogICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yTm9uZSgpOwogCiAgICAg
dmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsVmlldy5jcHAJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTEzNCw3ICsxMzQsNyBAQCBib29sIFNjcm9sbFZpZXc6OnNldEhh
c1ZlcnRpY2FsU2Nyb2xsYmFyCiAKIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBTY3JvbGxWaWV3Ojpj
cmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCiB7Ci0gICAg
cmV0dXJuIFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9u
LCBSZWd1bGFyU2Nyb2xsYmFyKTsKKyAgICByZXR1cm4gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVT
Y3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xsYmFyKTsKIH0KIAogdm9p
ZCBTY3JvbGxWaWV3OjpzZXRTY3JvbGxiYXJNb2RlcyhTY3JvbGxiYXJNb2RlIGhvcml6b250YWxN
b2RlLCBTY3JvbGxiYXJNb2RlIHZlcnRpY2FsTW9kZSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDExLCAyMDE0
LTIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKQEAgLTcwLDEyICs3MCwxMyBAQCBTY3JvbGxhYmxlQXJlYTo6flNj
cm9sbGFibGVBcmVhKCkKIHsKIH0KIAotU2Nyb2xsQW5pbWF0b3IqIFNjcm9sbGFibGVBcmVhOjpz
Y3JvbGxBbmltYXRvcigpIGNvbnN0CitTY3JvbGxBbmltYXRvciYgU2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbEFuaW1hdG9yKCkgY29uc3QKIHsKICAgICBpZiAoIW1fc2Nyb2xsQW5pbWF0b3IpCi0gICAg
ICAgIG1fc2Nyb2xsQW5pbWF0b3IgPSBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKGNvbnN0X2Nhc3Q8
U2Nyb2xsYWJsZUFyZWEqPih0aGlzKSk7CisgICAgICAgIG1fc2Nyb2xsQW5pbWF0b3IgPSBTY3Jv
bGxBbmltYXRvcjo6Y3JlYXRlKGNvbnN0X2Nhc3Q8U2Nyb2xsYWJsZUFyZWEmPigqdGhpcykpOwog
Ci0gICAgcmV0dXJuIG1fc2Nyb2xsQW5pbWF0b3IuZ2V0KCk7CisgICAgQVNTRVJUKG1fc2Nyb2xs
QW5pbWF0b3IpOworICAgIHJldHVybiAqbV9zY3JvbGxBbmltYXRvci5nZXQoKTsKIH0KIAogdm9p
ZCBTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsT3JpZ2luKGNvbnN0IEludFBvaW50JiBvcmlnaW4p
CkBAIC0xMjcsMjYgKzEyOCwyNiBAQCBib29sIFNjcm9sbGFibGVBcmVhOjpzY3JvbGwoU2Nyb2xs
RGlyZWN0CiAgICAgICAgIG11bHRpcGxpZXIgPSAtbXVsdGlwbGllcjsKIAogICAgIHN0ZXAgPSBh
ZGp1c3RTY3JvbGxTdGVwRm9yRml4ZWRDb250ZW50KHN0ZXAsIG9yaWVudGF0aW9uLCBncmFudWxh
cml0eSk7Ci0gICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yKCktPnNjcm9sbChvcmllbnRhdGlvbiwg
Z3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOworICAgIHJldHVybiBzY3JvbGxBbmltYXRv
cigpLnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwog
fQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KQogewotICAgIHNjcm9sbEFuaW1hdG9yKCktPnNjcm9s
bFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihvZmZzZXQpOworICAgIHNjcm9sbEFuaW1hdG9yKCku
c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG9mZnNldCk7CiB9CiAKIHZvaWQgU2Nyb2xs
YWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbiwgZmxvYXQgb2Zmc2V0KQogewogICAgIGlmIChvcmllbnRhdGlvbiA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24oRmxvYXRQb2ludChvZmZzZXQsIHNjcm9sbEFuaW1hdG9yKCktPmN1cnJlbnRQb3NpdGlv
bigpLnkoKSkpOworICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oRmxvYXRQ
b2ludChvZmZzZXQsIHNjcm9sbEFuaW1hdG9yKCkuY3VycmVudFBvc2l0aW9uKCkueSgpKSk7CiAg
ICAgZWxzZQotICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oRmxvYXRQb2lu
dChzY3JvbGxBbmltYXRvcigpLT5jdXJyZW50UG9zaXRpb24oKS54KCksIG9mZnNldCkpOworICAg
ICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oRmxvYXRQb2ludChzY3JvbGxBbmlt
YXRvcigpLmN1cnJlbnRQb3NpdGlvbigpLngoKSwgb2Zmc2V0KSk7CiB9CiAKIHZvaWQgU2Nyb2xs
YWJsZUFyZWE6Om5vdGlmeVNjcm9sbFBvc2l0aW9uQ2hhbmdlZChjb25zdCBJbnRQb2ludCYgcG9z
aXRpb24pCiB7CiAgICAgc2Nyb2xsUG9zaXRpb25DaGFuZ2VkKHBvc2l0aW9uKTsKLSAgICBzY3Jv
bGxBbmltYXRvcigpLT5zZXRDdXJyZW50UG9zaXRpb24ocG9zaXRpb24pOworICAgIHNjcm9sbEFu
aW1hdG9yKCkuc2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0aW9uKTsKIH0KIAogdm9pZCBTY3JvbGxh
YmxlQXJlYTo6c2Nyb2xsUG9zaXRpb25DaGFuZ2VkKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikK
QEAgLTE3OSw3ICsxODAsNyBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxQb3NpdGlvbkNo
YW5nCiAgICAgfQogCiAgICAgaWYgKHNjcm9sbFBvc2l0aW9uKCkgIT0gb2xkUG9zaXRpb24pCi0g
ICAgICAgIHNjcm9sbEFuaW1hdG9yKCktPm5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoc2Nyb2xs
UG9zaXRpb24oKSAtIG9sZFBvc2l0aW9uKTsKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5ub3Rp
ZnlDb250ZW50QXJlYVNjcm9sbGVkKHNjcm9sbFBvc2l0aW9uKCkgLSBvbGRQb3NpdGlvbik7CiB9
CiAKIGJvb2wgU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JiB3aGVlbEV2ZW50KQpAQCAtMTg3LDEzICsxODgsMTMgQEAgYm9vbCBTY3JvbGxh
YmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudChjbwogICAgIGlmICghaXNTY3JvbGxhYmxlT3JSdWJi
ZXJiYW5kYWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc2Nyb2xs
QW5pbWF0b3IoKS0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICByZXR1cm4gc2Ny
b2xsQW5pbWF0b3IoKS5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwogfQogCiAjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKIGJvb2wgU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQo
Y29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50KQogewotICAgIHJldHVybiBzY3Jv
bGxBbmltYXRvcigpLT5oYW5kbGVUb3VjaEV2ZW50KHRvdWNoRXZlbnQpOworICAgIHJldHVybiBz
Y3JvbGxBbmltYXRvcigpLmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7CiB9CiAjZW5kaWYK
IApAQCAtMjU1LDEyICsyNTYsMTIgQEAgdm9pZCBTY3JvbGxhYmxlQXJlYTo6bW91c2VNb3ZlZElu
Q29udGVudAogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjptb3VzZUVudGVyZWRTY3JvbGxiYXIoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0CiB7Ci0gICAgc2Nyb2xsQW5pbWF0b3IoKS0+bW91c2VF
bnRlcmVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS5tb3VzZUVu
dGVyZWRTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6bW91
c2VFeGl0ZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0CiB7Ci0gICAgc2Ny
b2xsQW5pbWF0b3IoKS0+bW91c2VFeGl0ZWRTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICBzY3Jv
bGxBbmltYXRvcigpLm1vdXNlRXhpdGVkU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9CiAKIHZvaWQg
U2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRBcmVhRGlkU2hvdygpIGNvbnN0CkBAIC0yOTEsOSArMjky
LDkgQEAgYm9vbCBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYmFyc0NhbkJlQWN0aQogdm9pZCBTY3Jv
bGxhYmxlQXJlYTo6ZGlkQWRkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxi
YXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKICAgICBpZiAob3JpZW50YXRpb24gPT0gVmVy
dGljYWxTY3JvbGxiYXIpCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCktPmRpZEFkZFZlcnRpY2Fs
U2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuZGlkQWRkVmVy
dGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKICAgICBlbHNlCi0gICAgICAgIHNjcm9sbEFuaW1h
dG9yKCktPmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICAgICAgc2Ny
b2xsQW5pbWF0b3IoKS5kaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiAKICAg
ICAvLyA8cmRhcjovL3Byb2JsZW0vOTc5NzI1Mz4gQXBwS2l0IHJlc2V0cyB0aGUgc2Nyb2xsYmFy
J3Mgc3R5bGUgd2hlbiB5b3UgYXR0YWNoIGEgc2Nyb2xsYmFyCiAgICAgc2V0U2Nyb2xsYmFyT3Zl
cmxheVN0eWxlKHNjcm9sbGJhck92ZXJsYXlTdHlsZSgpKTsKQEAgLTMwMiw5ICszMDMsOSBAQCB2
b2lkIFNjcm9sbGFibGVBcmVhOjpkaWRBZGRTY3JvbGxiYXIoU2NyCiB2b2lkIFNjcm9sbGFibGVB
cmVhOjp3aWxsUmVtb3ZlU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJP
cmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKICAgICBpZiAob3JpZW50YXRpb24gPT0gVmVydGlj
YWxTY3JvbGxiYXIpCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCktPndpbGxSZW1vdmVWZXJ0aWNh
bFNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgICAgICBzY3JvbGxBbmltYXRvcigpLndpbGxSZW1v
dmVWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIpOwogICAgIGVsc2UKLSAgICAgICAgc2Nyb2xs
QW5pbWF0b3IoKS0+d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAg
ICAgICAgc2Nyb2xsQW5pbWF0b3IoKS53aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihzY3Jv
bGxiYXIpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpjb250ZW50c1Jlc2l6ZWQoKQpAQCAt
MzY1LDEyICszNjYsMTIgQEAgdm9pZCBTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbENv
cgogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdl
KCkKIHsKLSAgICBzY3JvbGxBbmltYXRvcigpLT52ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hh
bmdlKCk7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS52ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hh
bmdlKCk7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6Omhvcml6b250YWxTY3JvbGxiYXJMYXll
ckRpZENoYW5nZSgpCiB7Ci0gICAgc2Nyb2xsQW5pbWF0b3IoKS0+aG9yaXpvbnRhbFNjcm9sbGJh
ckxheWVyRGlkQ2hhbmdlKCk7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS5ob3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXJEaWRDaGFuZ2UoKTsKIH0KIAogYm9vbCBTY3JvbGxhYmxlQXJlYTo6aGFzTGF5ZXJG
b3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGFibGVBcmVhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYWJsZUFyZWEuaAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3
IEBAIHB1YmxpYzoKICAgICBTY3JvbGxiYXJPdmVybGF5U3R5bGUgc2Nyb2xsYmFyT3ZlcmxheVN0
eWxlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyT3ZlcmxheVN0eWxlPiht
X3Njcm9sbGJhck92ZXJsYXlTdHlsZSk7IH0KIAogICAgIC8vIFRoaXMgZ2V0dGVyIHdpbGwgY3Jl
YXRlIGEgU2Nyb2xsQW5pbWF0b3IgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LgotICAgIFdF
QkNPUkVfRVhQT1JUIFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvcigpIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIFNjcm9sbEFuaW1hdG9yJiBzY3JvbGxBbmltYXRvcigpIGNvbnN0Owog
CiAgICAgLy8gVGhpcyBnZXR0ZXIgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGUgU2Nyb2xsQW5pbWF0
b3IgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQuCiAgICAgU2Nyb2xsQW5pbWF0b3IqIGV4aXN0aW5n
U2Nyb2xsQW5pbWF0b3IoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbEFuaW1hdG9yLmdldCgpOyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHJldmlzaW9uIDE4MDQ1
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNiwgMjAwOCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDcgKzQ0LDcgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogI2lmICFQTEFURk9STShFRkwpCi1QYXNzUmVmUHRyPFNjcm9sbGJhcj4gU2Nyb2xs
YmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVh
LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUg
c2l6ZSkKK1Bhc3NSZWZQdHI8U2Nyb2xsYmFyPiBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9s
bGJhcihTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9u
IG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKQogewogICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU2Nyb2xsYmFyKHNjcm9sbGFibGVBcmVhLCBvcmllbnRhdGlvbiwgc2l6ZSkp
OwogfQpAQCAtNTYsNyArNTYsNyBAQCBpbnQgU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBh
Z2VzKCkKICAgICByZXR1cm4gbWF4T3ZlcmxhcEJldHdlZW5QYWdlczsKIH0KIAotU2Nyb2xsYmFy
OjpTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUsCitT
Y3JvbGxiYXI6OlNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9s
U2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIFNjcm9sbGJhclRoZW1lKiB0aGVtZSwgYm9vbCBp
c0N1c3RvbVNjcm9sbGJhcikKICAgICA6IG1fc2Nyb2xsYWJsZUFyZWEoc2Nyb2xsYWJsZUFyZWEp
CiAgICAgLCBtX29yaWVudGF0aW9uKG9yaWVudGF0aW9uKQpAQCAtOTMsOCArOTMsNyBAQCBTY3Jv
bGxiYXI6OlNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSogc2NyCiAgICAgaW50IHRoaWNrbmVzcyA9
IG1fdGhlbWUtPnNjcm9sbGJhclRoaWNrbmVzcyhjb250cm9sU2l6ZSk7CiAgICAgV2lkZ2V0Ojpz
ZXRGcmFtZVJlY3QoSW50UmVjdCgwLCAwLCB0aGlja25lc3MsIHRoaWNrbmVzcykpOwogCi0gICAg
aWYgKG1fc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIG1fY3VycmVudFBvcyA9IHN0YXRpY19jYXN0
PGZsb2F0PihtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbih0aGlzKSk7CisgICAgbV9j
dXJyZW50UG9zID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsUG9z
aXRpb24odGhpcykpOwogfQogCiBTY3JvbGxiYXI6On5TY3JvbGxiYXIoKQpAQCAtMTA2LDEyICsx
MDUsMTIgQEAgU2Nyb2xsYmFyOjp+U2Nyb2xsYmFyKCkKIAogU2Nyb2xsYmFyT3ZlcmxheVN0eWxl
IFNjcm9sbGJhcjo6c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9zY3JvbGxhYmxlQXJlYSA/IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbGJhck92ZXJsYXlTdHls
ZSgpIDogU2Nyb2xsYmFyT3ZlcmxheVN0eWxlRGVmYXVsdDsKKyAgICByZXR1cm4gbV9zY3JvbGxh
YmxlQXJlYS5zY3JvbGxiYXJPdmVybGF5U3R5bGUoKTsKIH0KIAogYm9vbCBTY3JvbGxiYXI6Omlz
U2Nyb2xsYWJsZUFyZWFBY3RpdmUoKSBjb25zdAogewotICAgIHJldHVybiBtX3Njcm9sbGFibGVB
cmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmlzQWN0aXZlKCk7CisgICAgcmV0dXJuIG1fc2Nyb2xs
YWJsZUFyZWEuaXNBY3RpdmUoKTsKIH0KIAogYm9vbCBTY3JvbGxiYXI6OmlzU2Nyb2xsVmlld1Nj
cm9sbGJhcigpIGNvbnN0CkBAIC0xMjEsOSArMTIwLDcgQEAgYm9vbCBTY3JvbGxiYXI6OmlzU2Ny
b2xsVmlld1Njcm9sbGJhcigpIAogCiB2b2lkIFNjcm9sbGJhcjo6b2Zmc2V0RGlkQ2hhbmdlKCkK
IHsKLSAgICBBU1NFUlQobV9zY3JvbGxhYmxlQXJlYSk7Ci0KLSAgICBmbG9hdCBwb3NpdGlvbiA9
IHN0YXRpY19jYXN0PGZsb2F0PihtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbih0aGlz
KSk7CisgICAgZmxvYXQgcG9zaXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdD4obV9zY3JvbGxhYmxl
QXJlYS5zY3JvbGxQb3NpdGlvbih0aGlzKSk7CiAgICAgaWYgKHBvc2l0aW9uID09IG1fY3VycmVu
dFBvcykKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMTEsNyArMjA4LDcgQEAgdm9pZCBTY3JvbGxi
YXI6OmF1dG9zY3JvbGxQcmVzc2VkUGFydChkbwogICAgIH0KIAogICAgIC8vIEhhbmRsZSB0aGUg
YXJyb3dzIGFuZCB0cmFjay4KLSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFi
bGVBcmVhLT5zY3JvbGwocHJlc3NlZFBhcnRTY3JvbGxEaXJlY3Rpb24oKSwgcHJlc3NlZFBhcnRT
Y3JvbGxHcmFudWxhcml0eSgpKSkKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYS5zY3JvbGwocHJl
c3NlZFBhcnRTY3JvbGxEaXJlY3Rpb24oKSwgcHJlc3NlZFBhcnRTY3JvbGxHcmFudWxhcml0eSgp
KSkKICAgICAgICAgc3RhcnRUaW1lcklmTmVlZGVkKGRlbGF5KTsKIH0KIApAQCAtMjcwLDIyICsy
NjcsMTkgQEAgU2Nyb2xsR3JhbnVsYXJpdHkgU2Nyb2xsYmFyOjpwcmVzc2VkUGFydAogCiB2b2lk
IFNjcm9sbGJhcjo6bW92ZVRodW1iKGludCBwb3MsIGJvb2wgZHJhZ2dpbmdEb2N1bWVudCkKIHsK
LSAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIHJldHVybjsKLQogICAgIGludCBk
ZWx0YSA9IHBvcyAtIG1fcHJlc3NlZFBvczsKIAogICAgIGlmIChkcmFnZ2luZ0RvY3VtZW50KSB7
CiAgICAgICAgIGlmIChtX2RyYWdnaW5nRG9jdW1lbnQpCiAgICAgICAgICAgICBkZWx0YSA9IHBv
cyAtIG1fZG9jdW1lbnREcmFnUG9zOwogICAgICAgICBtX2RyYWdnaW5nRG9jdW1lbnQgPSB0cnVl
OwotICAgICAgICBGbG9hdFBvaW50IGN1cnJlbnRQb3NpdGlvbiA9IG1fc2Nyb2xsYWJsZUFyZWEt
PnNjcm9sbEFuaW1hdG9yKCktPmN1cnJlbnRQb3NpdGlvbigpOworICAgICAgICBGbG9hdFBvaW50
IGN1cnJlbnRQb3NpdGlvbiA9IG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3IoKS5jdXJy
ZW50UG9zaXRpb24oKTsKICAgICAgICAgaW50IGRlc3RpbmF0aW9uUG9zaXRpb24gPSAobV9vcmll
bnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gY3VycmVudFBvc2l0aW9uLngoKSA6IGN1
cnJlbnRQb3NpdGlvbi55KCkpICsgZGVsdGE7CiAgICAgICAgIGlmIChkZWx0YSA+IDApCiAgICAg
ICAgICAgICBkZXN0aW5hdGlvblBvc2l0aW9uID0gc3RkOjptaW4oZGVzdGluYXRpb25Qb3NpdGlv
biArIGRlbHRhLCBtYXhpbXVtKCkpOwogICAgICAgICBlbHNlIGlmIChkZWx0YSA8IDApCiAgICAg
ICAgICAgICBkZXN0aW5hdGlvblBvc2l0aW9uID0gc3RkOjptYXgoZGVzdGluYXRpb25Qb3NpdGlv
biArIGRlbHRhLCAwKTsKLSAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsVG9PZmZzZXRX
aXRob3V0QW5pbWF0aW9uKG1fb3JpZW50YXRpb24sIGRlc3RpbmF0aW9uUG9zaXRpb24pOworICAg
ICAgICBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihtX29y
aWVudGF0aW9uLCBkZXN0aW5hdGlvblBvc2l0aW9uKTsKICAgICAgICAgbV9kb2N1bWVudERyYWdQ
b3MgPSBwb3M7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMDcsNyArMzAxLDcgQEAgdm9p
ZCBTY3JvbGxiYXI6Om1vdmVUaHVtYihpbnQgcG9zLCBib29sIAogICAgIAogICAgIGlmIChkZWx0
YSkgewogICAgICAgICBmbG9hdCBuZXdQb3NpdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0Pih0aHVt
YlBvcyArIGRlbHRhKSAqIG1heGltdW0oKSAvICh0cmFja0xlbiAtIHRodW1iTGVuKTsKLSAgICAg
ICAgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG1fb3Jp
ZW50YXRpb24sIG5ld1Bvc2l0aW9uKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxU
b09mZnNldFdpdGhvdXRBbmltYXRpb24obV9vcmllbnRhdGlvbiwgbmV3UG9zaXRpb24pOwogICAg
IH0KIH0KIApAQCAtMzQwLDEwICszMzQsOSBAQCB2b2lkIFNjcm9sbGJhcjo6c2V0UHJlc3NlZFBh
cnQoU2Nyb2xsYmFyCiBib29sIFNjcm9sbGJhcjo6bW91c2VNb3ZlZChjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmIGV2dCkKIHsKICAgICBpZiAobV9wcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQpIHsK
LSAgICAgICAgaWYgKHRoZW1lKCktPnNob3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2luKHRoaXMsIGV2
dCkpIHsKLSAgICAgICAgICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQotICAgICAgICAgICAgICAg
IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihtX29yaWVu
dGF0aW9uLCBtX2RyYWdPcmlnaW4pOwotICAgICAgICB9IGVsc2UgeworICAgICAgICBpZiAodGhl
bWUoKS0+c2hvdWxkU25hcEJhY2tUb0RyYWdPcmlnaW4odGhpcywgZXZ0KSkKKyAgICAgICAgICAg
IG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG1fb3JpZW50
YXRpb24sIG1fZHJhZ09yaWdpbik7CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbW92ZVRo
dW1iKG1fb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IAogICAgICAgICAgICAg
ICAgICAgICAgIGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9zaXRpb24oKSkueCgp
IDoKICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0
LnBvc2l0aW9uKCkpLnkoKSwgdGhlbWUoKS0+c2hvdWxkRHJhZ0RvY3VtZW50SW5zdGVhZE9mVGh1
bWIodGhpcywgZXZ0KSk7CkBAIC0zNzksMTQgKzM3MiwxMiBAQCBib29sIFNjcm9sbGJhcjo6bW91
c2VNb3ZlZChjb25zdCBQbGF0Zm9yCiAKIHZvaWQgU2Nyb2xsYmFyOjptb3VzZUVudGVyZWQoKQog
ewotICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQotICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5t
b3VzZUVudGVyZWRTY3JvbGxiYXIodGhpcyk7CisgICAgbV9zY3JvbGxhYmxlQXJlYS5tb3VzZUVu
dGVyZWRTY3JvbGxiYXIodGhpcyk7CiB9CiAKIGJvb2wgU2Nyb2xsYmFyOjptb3VzZUV4aXRlZCgp
CiB7Ci0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEt
Pm1vdXNlRXhpdGVkU2Nyb2xsYmFyKHRoaXMpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEubW91c2VF
eGl0ZWRTY3JvbGxiYXIodGhpcyk7CiAgICAgc2V0SG92ZXJlZFBhcnQoTm9QYXJ0KTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KQEAgLTM5OCwxMyArMzg5LDExIEBAIGJvb2wgU2Nyb2xsYmFyOjptb3Vz
ZVVwKGNvbnN0IFBsYXRmb3JtTW8KICAgICBtX2RyYWdnaW5nRG9jdW1lbnQgPSBmYWxzZTsKICAg
ICBzdG9wVGltZXJJZk5lZWRlZCgpOwogCi0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpIHsKLSAg
ICAgICAgLy8gbV9ob3ZlcmVkUGFydCB3b24ndCBiZSB1cGRhdGVkIHVudGlsIHRoZSBuZXh0IG1v
dXNlTW92ZWQgb3IgbW91c2VEb3duLCBzbyB3ZSBoYXZlIHRvIGhpdCB0ZXN0Ci0gICAgICAgIC8v
IHRvIHJlYWxseSBrbm93IGlmIHRoZSBtb3VzZSBoYXMgZXhpdGVkIHRoZSBzY3JvbGxiYXIgb24g
YSBtb3VzZVVwLgotICAgICAgICBTY3JvbGxiYXJQYXJ0IHBhcnQgPSB0aGVtZSgpLT5oaXRUZXN0
KHRoaXMsIG1vdXNlRXZlbnQucG9zaXRpb24oKSk7Ci0gICAgICAgIGlmIChwYXJ0ID09IE5vUGFy
dCkKLSAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPm1vdXNlRXhpdGVkU2Nyb2xsYmFyKHRo
aXMpOwotICAgIH0KKyAgICAvLyBtX2hvdmVyZWRQYXJ0IHdvbid0IGJlIHVwZGF0ZWQgdW50aWwg
dGhlIG5leHQgbW91c2VNb3ZlZCBvciBtb3VzZURvd24sIHNvIHdlIGhhdmUgdG8gaGl0IHRlc3QK
KyAgICAvLyB0byByZWFsbHkga25vdyBpZiB0aGUgbW91c2UgaGFzIGV4aXRlZCB0aGUgc2Nyb2xs
YmFyIG9uIGEgbW91c2VVcC4KKyAgICBTY3JvbGxiYXJQYXJ0IHBhcnQgPSB0aGVtZSgpLT5oaXRU
ZXN0KHRoaXMsIG1vdXNlRXZlbnQucG9zaXRpb24oKSk7CisgICAgaWYgKHBhcnQgPT0gTm9QYXJ0
KQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLm1vdXNlRXhpdGVkU2Nyb2xsYmFyKHRoaXMpOwog
CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC00OTgsMTIgKzQ4NywxMiBAQCBib29sIFNjcm9sbGJh
cjo6c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlCiAgICAgLy8gTm9uLW92ZXJsYXkgc2Nyb2xsYmFy
cyBzaG91bGQgYWx3YXlzIHBhcnRpY2lwYXRlIGluIGhpdCB0ZXN0aW5nLgogICAgIGlmICghaXNP
dmVybGF5U2Nyb2xsYmFyKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBtX3Nj
cm9sbGFibGVBcmVhLT5zY3JvbGxBbmltYXRvcigpLT5zaG91bGRTY3JvbGxiYXJQYXJ0aWNpcGF0
ZUluSGl0VGVzdGluZyh0aGlzKTsKKyAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxB
bmltYXRvcigpLnNob3VsZFNjcm9sbGJhclBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKHRoaXMpOwog
fQogCiBib29sIFNjcm9sbGJhcjo6aXNXaW5kb3dBY3RpdmUoKSBjb25zdAogewotICAgIHJldHVy
biBtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmlzQWN0aXZlKCk7CisgICAg
cmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuaXNBY3RpdmUoKTsKIH0KIAogdm9pZCBTY3JvbGxiYXI6
OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC01MTEsNDAgKzUwMCwyNyBA
QCB2b2lkIFNjcm9sbGJhcjo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50CiAgICAgaWYgKHN1cHBy
ZXNzSW52YWxpZGF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3Njcm9sbGFi
bGVBcmVhKQotICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5pbnZhbGlkYXRlU2Nyb2xsYmFyKHRo
aXMsIHJlY3QpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEuaW52YWxpZGF0ZVNjcm9sbGJhcih0aGlz
LCByZWN0KTsKIH0KIAogSW50UmVjdCBTY3JvbGxiYXI6OmNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3
KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKIHsKLSAgICBpZiAobV9zY3JvbGxhYmxl
QXJlYSkKLSAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnZlcnRGcm9tU2Nyb2xs
YmFyVG9Db250YWluaW5nVmlldyh0aGlzLCBsb2NhbFJlY3QpOwotCi0gICAgcmV0dXJuIFdpZGdl
dDo6Y29udmVydFRvQ29udGFpbmluZ1ZpZXcobG9jYWxSZWN0KTsKKyAgICByZXR1cm4gbV9zY3Jv
bGxhYmxlQXJlYS5jb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcodGhpcywgbG9j
YWxSZWN0KTsKIH0KIAogSW50UmVjdCBTY3JvbGxiYXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXcoY29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKIHsKLSAgICBpZiAobV9zY3JvbGxh
YmxlQXJlYSkKLSAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXdUb1Njcm9sbGJhcih0aGlzLCBwYXJlbnRSZWN0KTsKLQotICAgIHJldHVybiBX
aWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcocGFyZW50UmVjdCk7CisgICAgcmV0dXJu
IG1fc2Nyb2xsYWJsZUFyZWEuY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKHRo
aXMsIHBhcmVudFJlY3QpOwogfQogCiBJbnRQb2ludCBTY3JvbGxiYXI6OmNvbnZlcnRUb0NvbnRh
aW5pbmdWaWV3KGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdAogewotICAgIGlmICht
X3Njcm9sbGFibGVBcmVhKQotICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+Y29udmVy
dEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KHRoaXMsIGxvY2FsUG9pbnQpOwotCi0gICAg
cmV0dXJuIFdpZGdldDo6Y29udmVydFRvQ29udGFpbmluZ1ZpZXcobG9jYWxQb2ludCk7CisgICAg
cmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdW
aWV3KHRoaXMsIGxvY2FsUG9pbnQpOwogfQogCiBJbnRQb2ludCBTY3JvbGxiYXI6OmNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAogewot
ICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQotICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJl
YS0+Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKHRoaXMsIHBhcmVudFBvaW50
KTsKLQotICAgIHJldHVybiBXaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcocGFyZW50
UG9pbnQpOworICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLmNvbnZlcnRGcm9tQ29udGFpbmlu
Z1ZpZXdUb1Njcm9sbGJhcih0aGlzLCBwYXJlbnRQb2ludCk7CiB9CiAKIGJvb2wgU2Nyb2xsYmFy
OjpzdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKCkgY29uc3QKQEAgLTU1Miw4ICs1Mjgs
OCBAQCBib29sIFNjcm9sbGJhcjo6c3VwcG9ydHNVcGRhdGVPblNlY29uZGFyCiAgICAgLy8gSXQn
cyB1bmZvcnR1bmF0ZSB0aGF0IHRoaXMgbmVlZHMgdG8gYmUgZG9uZSB3aXRoIGFuIGlmZGVmLiBJ
ZGVhbGx5IHRoZXJlIHdvdWxkIGJlIGEgd2F5IHRvIGZlYXR1cmUtZGV0ZWN0CiAgICAgLy8gdGhl
IG5lY2Vzc2FyeSBzdXBwb3J0IHdpdGhpbiBBcHBLaXQuCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9M
TElORykgJiYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwMTAwMAotICAgIHJldHVybiAhbV9zY3JvbGxhYmxlQXJlYS0+Zm9yY2VVcGRhdGVTY3Jv
bGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkKLSAgICAgICAgJiYgKG1f
c2Nyb2xsYWJsZUFyZWEtPmhhc0xheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSB8fCBtX3Njcm9s
bGFibGVBcmVhLT5oYXNMYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSk7CisgICAgcmV0dXJu
ICFtX3Njcm9sbGFibGVBcmVhLmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBl
cmZvcm1hbmNlVGVzdGluZygpCisgICAgICAgICYmIChtX3Njcm9sbGFibGVBcmVhLmhhc0xheWVy
Rm9yVmVydGljYWxTY3JvbGxiYXIoKSB8fCBtX3Njcm9sbGFibGVBcmVhLmhhc0xheWVyRm9ySG9y
aXpvbnRhbFNjcm9sbGJhcigpKTsKICNlbHNlCiAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAkocmV2aXNpb24gMTgwNDUwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDE0IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIw
MTQtMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIFNjcm9sbGJhciA6IHB1Ymxp
YyBXaWRnZXQsCiAKIHB1YmxpYzoKICAgICAvLyBNdXN0IGJlIGltcGxlbWVudGVkIGJ5IHBsYXRm
b3JtcyB0aGF0IGNhbid0IHNpbXBseSB1c2UgdGhlIFNjcm9sbGJhciBiYXNlIGNsYXNzLiAgUmln
aHQgbm93IHRoZSBvbmx5IHBsYXRmb3JtIHRoYXQgaXMgbm90IHVzaW5nIHRoZSBiYXNlIGNsYXNz
IGlzIEdUSy4KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFzc1JlZlB0cjxTY3JvbGxiYXI+
IGNyZWF0ZU5hdGl2ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0
aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZU5hdGl2ZVNjcm9sbGJh
cihTY3JvbGxhYmxlQXJlYSYsIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9s
U2l6ZSk7CiAKICAgICB2aXJ0dWFsIH5TY3JvbGxiYXIoKTsKIApAQCAtMTAzLDggKzEwMyw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgaW50IHBhZ2VTdGVwKGludCB2aWV3V2lkdGhPckhlaWdodCkg
eyByZXR1cm4gcGFnZVN0ZXAodmlld1dpZHRoT3JIZWlnaHQsIHZpZXdXaWR0aE9ySGVpZ2h0KTsg
fQogICAgIHN0YXRpYyBmbG9hdCBwYWdlU3RlcERlbHRhKGludCB3aWR0aE9ySGVpZ2h0KSB7IHJl
dHVybiBzdGQ6Om1heChzdGQ6Om1heChzdGF0aWNfY2FzdDxmbG9hdD4od2lkdGhPckhlaWdodCkg
KiBTY3JvbGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpLCBzdGF0aWNfY2FzdDxm
bG9hdD4od2lkdGhPckhlaWdodCkgLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMo
KSksIDEuMGYpOyB9CiAKLSAgICB2b2lkIGRpc2Nvbm5lY3RGcm9tU2Nyb2xsYWJsZUFyZWEoKSB7
IG1fc2Nyb2xsYWJsZUFyZWEgPSAwOyB9Ci0gICAgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVB
cmVhKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYTsgfQorICAgIFNjcm9sbGFibGVB
cmVhJiBzY3JvbGxhYmxlQXJlYSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWE7IH0K
IAogICAgIGludCBwcmVzc2VkUG9zKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzc2VkUG9zOyB9CiAK
QEAgLTE1OSw3ICsxNTgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVXBk
YXRlT25TZWNvbmRhcnlUaHJlYWQoKSBjb25zdCBvdmVycmlkZTsKIAogcHJvdGVjdGVkOgotICAg
IFNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxi
YXJDb250cm9sU2l6ZSwgU2Nyb2xsYmFyVGhlbWUqID0gMCwgYm9vbCBpc0N1c3RvbVNjcm9sbGJh
ciA9IGZhbHNlKTsKKyAgICBTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEmLCBTY3JvbGxiYXJPcmll
bnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUsIFNjcm9sbGJhclRoZW1lKiA9IDAsIGJvb2wg
aXNDdXN0b21TY3JvbGxiYXIgPSBmYWxzZSk7CiAKICAgICB2b2lkIHVwZGF0ZVRodW1iKCk7CiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRodW1iUG9zaXRpb24oKTsKQEAgLTE3Miw3ICsxNzEsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgU2Nyb2xsRGlyZWN0aW9uIHByZXNzZWRQYXJ0U2Nyb2xsRGlyZWN0
aW9uKCk7CiAgICAgU2Nyb2xsR3JhbnVsYXJpdHkgcHJlc3NlZFBhcnRTY3JvbGxHcmFudWxhcml0
eSgpOwogCi0gICAgU2Nyb2xsYWJsZUFyZWEqIG1fc2Nyb2xsYWJsZUFyZWE7CisgICAgU2Nyb2xs
YWJsZUFyZWEmIG1fc2Nyb2xsYWJsZUFyZWE7CiAgICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gbV9v
cmllbnRhdGlvbjsKICAgICBTY3JvbGxiYXJDb250cm9sU2l6ZSBtX2NvbnRyb2xTaXplOwogICAg
IFNjcm9sbGJhclRoZW1lKiBtX3RoZW1lOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
ZWZsL1Njcm9sbGJhckVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZWZsL1Njcm9sbGJhckVmbC5jcHAJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxiYXJFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwx
NSArMjgsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPFNjcm9sbGJh
cj4gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9s
bGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29u
dHJvbFNpemUgc2l6ZSkKK1Bhc3NSZWZQdHI8U2Nyb2xsYmFyPiBTY3JvbGxiYXI6OmNyZWF0ZU5h
dGl2ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKQogewogICAg
IGlmIChTZXR0aW5nczo6bW9ja1Njcm9sbGJhcnNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU2Nyb2xsYmFyKHNjcm9sbGFibGVBcmVhLCBvcmllbnRhdGlvbiwgc2l6ZSkp
OwogCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY3JvbGxiYXJFZmwoc2Nyb2xsYWJsZUFyZWEs
IG9yaWVudGF0aW9uLCBzaXplKSk7CiB9CitTY3JvbGxiYXJFZmw6OlNjcm9sbGJhckVmbChTY3Jv
bGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKIAotU2Nyb2xsYmFyRWZsOjpT
Y3JvbGxiYXJFZmwoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUpCiAg
ICAgOiBTY3JvbGxiYXIoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uLCBjb250cm9sU2l6ZSkK
IHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxiYXJFZmwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2Nyb2xsYmFyRWZsLmgJ
KHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxi
YXJFZmwuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGludmFsaWRhdGUoKSBvdmVycmlkZTsKIAogcHJvdGVjdGVkOgotICAgIFNjcm9s
bGJhckVmbChTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJD
b250cm9sU2l6ZSk7CisgICAgU2Nyb2xsYmFyRWZsKFNjcm9sbGFibGVBcmVhJiwgU2Nyb2xsYmFy
T3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplKTsKIAogICAgIHZpcnR1YWwgdm9pZCBz
ZXRQYXJlbnQoU2Nyb2xsVmlldyopIG92ZXJyaWRlOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5oCShyZXZpc2lvbiAxODA0NTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CiAKIGNs
YXNzIFNjcm9sbEFuaW1hdG9ySU9TIDogcHVibGljIFNjcm9sbEFuaW1hdG9yIHsKIHB1YmxpYzoK
LSAgICBTY3JvbGxBbmltYXRvcklPUyhTY3JvbGxhYmxlQXJlYSopOworICAgIFNjcm9sbEFuaW1h
dG9ySU9TKFNjcm9sbGFibGVBcmVhJik7CiAgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JJT1Mo
KTsKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLm1tCShyZXZpc2lvbiAxODA0NTApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MubW0JKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQwLDEyICs0MCwxMiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmlt
YXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKK1Bhc3NPd25QdHI8
U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNj
cm9sbGFibGVBcmVhKQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2Nyb2xsQW5pbWF0b3JJ
T1Moc2Nyb2xsYWJsZUFyZWEpKTsKIH0KIAotU2Nyb2xsQW5pbWF0b3JJT1M6OlNjcm9sbEFuaW1h
dG9ySU9TKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKK1Njcm9sbEFuaW1hdG9ySU9T
OjpTY3JvbGxBbmltYXRvcklPUyhTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiAgICAg
OiBTY3JvbGxBbmltYXRvcihzY3JvbGxhYmxlQXJlYSkKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQogICAgICwgbV90b3VjaFNjcm9sbEF4aXNMYXRjaChBeGlzTGF0Y2hOb3RDb21wdXRlZCkKQEAg
LTgyLDcgKzgyLDcgQEAgYm9vbCBTY3JvbGxBbmltYXRvcklPUzo6aGFuZGxlVG91Y2hFdmVudAog
ICAgICAgICBtX2luVG91Y2hTZXF1ZW5jZSA9IGZhbHNlOwogICAgICAgICBtX3Njcm9sbGFibGVB
cmVhRm9yVG91Y2hTZXF1ZW5jZSA9IDA7CiAgICAgICAgIGlmIChtX3N0YXJ0ZWRTY3JvbGwpCi0g
ICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSgpLT5kaWRFbmRTY3JvbGwoKTsKKyAgICAgICAgICAg
IHNjcm9sbGFibGVBcmVhKCkuZGlkRW5kU2Nyb2xsKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKQEAgLTkyLDcgKzkyLDcgQEAgYm9vbCBTY3JvbGxBbmltYXRvcklPUzo6aGFuZGxl
VG91Y2hFdmVudAogICAgICAgICBtX2luVG91Y2hTZXF1ZW5jZSA9IGZhbHNlOwogICAgICAgICBt
X3Njcm9sbGFibGVBcmVhRm9yVG91Y2hTZXF1ZW5jZSA9IDA7CiAgICAgICAgIGlmIChtX3N0YXJ0
ZWRTY3JvbGwpCi0gICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSgpLT5kaWRFbmRTY3JvbGwoKTsK
KyAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhKCkuZGlkRW5kU2Nyb2xsKCk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAgICAgCkBAIC0xMDUsOCArMTA1LDggQEAgYm9vbCBTY3JvbGxB
bmltYXRvcklPUzo6aGFuZGxlVG91Y2hFdmVudAogICAgICAgICBkZXRlcm1pbmVTY3JvbGxhYmxl
QXJlYUZvclRvdWNoU2VxdWVuY2UodG91Y2hEZWx0YSk7CiAKICAgICBpZiAoIW1fY29tbWl0dGVk
VG9TY3JvbGxBeGlzKSB7Ci0gICAgICAgIGJvb2wgaG9yaXpvbnRhbGx5U2Nyb2xsYWJsZSA9IG1f
c2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFNpemUoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgICAg
IGJvb2wgdmVydGljYWxseVNjcm9sbGFibGUgPSBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxTaXpl
KFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAgICAgYm9vbCBob3Jpem9udGFsbHlTY3JvbGxhYmxl
ID0gbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxTaXplKEhvcml6b250YWxTY3JvbGxiYXIpOworICAg
ICAgICBib29sIHZlcnRpY2FsbHlTY3JvbGxhYmxlID0gbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxT
aXplKFZlcnRpY2FsU2Nyb2xsYmFyKTsKIAogICAgICAgICBpZiAoIWhvcml6b250YWxseVNjcm9s
bGFibGUgJiYgIXZlcnRpY2FsbHlTY3JvbGxhYmxlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMTYwLDkgKzE2MCw5IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JJT1M6OmhhbmRsZVRvdWNo
RXZlbnQKICAgICAgICAgaWYgKCFoYW5kbGVkKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBtX3N0YXJ0ZWRTY3JvbGwgPSB0cnVlOwotICAgICAgICBzY3JvbGxhYmxlQXJlYSgp
LT5kaWRTdGFydFNjcm9sbCgpOworICAgICAgICBzY3JvbGxhYmxlQXJlYSgpLmRpZFN0YXJ0U2Ny
b2xsKCk7CiAgICAgfSBlbHNlIGlmIChoYW5kbGVkKQotICAgICAgICBzY3JvbGxhYmxlQXJlYSgp
LT5kaWRVcGRhdGVTY3JvbGwoKTsKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWEoKS5kaWRVcGRhdGVT
Y3JvbGwoKTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE3MSw3ICsxNzEsNyBAQCB2
b2lkIFNjcm9sbEFuaW1hdG9ySU9TOjpkZXRlcm1pbmVTY3JvbGxhCiB7CiAgICAgQVNTRVJUKCFt
X3Njcm9sbGFibGVBcmVhRm9yVG91Y2hTZXF1ZW5jZSk7CiAKLSAgICBTY3JvbGxhYmxlQXJlYSog
c2Nyb2xsYWJsZUFyZWEgPSBtX3Njcm9sbGFibGVBcmVhOworICAgIFNjcm9sbGFibGVBcmVhKiBz
Y3JvbGxhYmxlQXJlYSA9ICZtX3Njcm9sbGFibGVBcmVhOwogICAgIHdoaWxlICh0cnVlKSB7CiAg
ICAgICAgIGlmICghc2Nyb2xsYWJsZUFyZWEtPmlzUGlubmVkSW5Cb3RoRGlyZWN0aW9ucyhzY3Jv
bGxEZWx0YSkpCiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCShyZXZpc2lvbiAxODA0NTApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAkod29ya2luZyBj
b3B5KQpAQCAtNTMsNyArNTMsNyBAQCBjbGFzcyBTY3JvbGxiYXI7CiBjbGFzcyBTY3JvbGxBbmlt
YXRvck1hYyA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciwgcHJpdmF0ZSBTY3JvbGxDb250cm9sbGVy
Q2xpZW50IHsKIAogcHVibGljOgotICAgIFNjcm9sbEFuaW1hdG9yTWFjKFNjcm9sbGFibGVBcmVh
Kik7CisgICAgU2Nyb2xsQW5pbWF0b3JNYWMoU2Nyb2xsYWJsZUFyZWEmKTsKICAgICB2aXJ0dWFs
IH5TY3JvbGxBbmltYXRvck1hYygpOwogCiAgICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxUb1BvaW50
Rm9yU2Nyb2xsQW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG5ld1Bvc2l0aW9uKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0J
KHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxB
bmltYXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjY5LDcgKzI2OSw3IEBA
IC0gKHZvaWQpc2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFAKICAgICBpZiAoW3Njcm9s
bGVySW1wUGFpciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxBbmltYXRvcigpLT5jb250ZW50QXJlYVdp
bGxQYWludCgpOworICAgIF9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsQW5pbWF0b3IoKS5jb250ZW50
QXJlYVdpbGxQYWludCgpOwogfQogCiAtICh2b2lkKXNjcm9sbGVySW1wUGFpcjooaWQpc2Nyb2xs
ZXJJbXBQYWlyIHVwZGF0ZVNjcm9sbGVyU3R5bGVGb3JOZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5
bGU6KE5TU2Nyb2xsZXJTdHlsZSluZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUKQEAgLTI3OSw3
ICsyNzksNyBAQCAtICh2b2lkKXNjcm9sbGVySW1wUGFpcjooaWQpc2Nyb2xsZXJJbXBQCiAKICAg
ICBbc2Nyb2xsZXJJbXBQYWlyIHNldFNjcm9sbGVyU3R5bGU6bmV3UmVjb21tZW5kZWRTY3JvbGxl
clN0eWxlXTsKIAotICAgIHN0YXRpY19jYXN0PFNjcm9sbEFuaW1hdG9yTWFjKj4oX3Njcm9sbGFi
bGVBcmVhLT5zY3JvbGxBbmltYXRvcigpKS0+dXBkYXRlU2Nyb2xsZXJTdHlsZSgpOworICAgIHN0
YXRpY19jYXN0PFNjcm9sbEFuaW1hdG9yTWFjJj4oX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxBbmlt
YXRvcigpKS51cGRhdGVTY3JvbGxlclN0eWxlKCk7CiB9CiAKIEBlbmQKQEAgLTQxNyw3ICs0MTcs
NyBAQCAtICh2b2lkKWNhbmNlbEFuaW1hdGlvbnMKIAogLSAoU2Nyb2xsQW5pbWF0b3JNYWMqKXNj
cm9sbEFuaW1hdG9yCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFNjcm9sbEFuaW1hdG9yTWFj
Kj4oX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+c2Nyb2xsQW5pbWF0b3IoKSk7CisgICAg
cmV0dXJuICZzdGF0aWNfY2FzdDxTY3JvbGxBbmltYXRvck1hYyY+KF9zY3JvbGxiYXItPnNjcm9s
bGFibGVBcmVhKCkuc2Nyb2xsQW5pbWF0b3IoKSk7CiB9CiAKIC0gKE5TUmVjdCljb252ZXJ0UmVj
dFRvQmFja2luZzooTlNSZWN0KWFSZWN0CkBAIC00NDAsOSArNDQwLDkgQEAgLSAoQ0FMYXllciAq
KWxheWVyCiAKICAgICBHcmFwaGljc0xheWVyKiBsYXllcjsKICAgICBpZiAoX3Njcm9sbGJhci0+
b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgbGF5ZXIgPSBfc2Ny
b2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCk7Cisg
ICAgICAgIGxheWVyID0gX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5sYXllckZvclZlcnRp
Y2FsU2Nyb2xsYmFyKCk7CiAgICAgZWxzZQotICAgICAgICBsYXllciA9IF9zY3JvbGxiYXItPnNj
cm9sbGFibGVBcmVhKCktPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgICAgICBs
YXllciA9IF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGF5ZXJGb3JIb3Jpem9udGFsU2Ny
b2xsYmFyKCk7CiAKICAgICBzdGF0aWMgQ0FMYXllciAqZHVtbXlMYXllciA9IFtbQ0FMYXllciBh
bGxvY10gaW5pdF07CiAgICAgcmV0dXJuIGxheWVyID8gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6
IGR1bW15TGF5ZXI7CkBAIC00NTUsNyArNDU1LDcgQEAgLSAoTlNQb2ludCltb3VzZUxvY2F0aW9u
SW5TY3JvbGxlckZvclNjcgogCiAgICAgQVNTRVJUX1VOVVNFRChzY3JvbGxlckltcCwgc2Nyb2xs
ZXJJbXAgPT0gc2Nyb2xsYmFyUGFpbnRlckZvclNjcm9sbGJhcihfc2Nyb2xsYmFyKSk7CiAKLSAg
ICByZXR1cm4gX3Njcm9sbGJhci0+Y29udmVydEZyb21Db250YWluaW5nVmlldyhfc2Nyb2xsYmFy
LT5zY3JvbGxhYmxlQXJlYSgpLT5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCkpOworICAgIHJldHVy
biBfc2Nyb2xsYmFyLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KF9zY3JvbGxiYXItPnNjcm9s
bGFibGVBcmVhKCkubGFzdEtub3duTW91c2VQb3NpdGlvbigpKTsKIH0KIAogLSAoTlNSZWN0KWNv
bnZlcnRSZWN0VG9MYXllcjooTlNSZWN0KXJlY3QKQEAgLTQ4Miw3ICs0ODIsNyBAQCAtICh2b2lk
KXNldFVwQWxwaGFBbmltYXRpb246KFJldGFpblB0cjxXCiAgICAgaWYgKFtzZWxmIHNjcm9sbEFu
aW1hdG9yXS0+c2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkgJiYgIW11c3RBbmltYXRlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+
c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSAmJiAhbXVzdEFuaW1hdGUpIHsKKyAgICBp
ZiAoX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0
aW9ucygpICYmICFtdXN0QW5pbWF0ZSkgewogICAgICAgICBbc2VsZiBzY3JvbGxBbmltYXRvcl0t
PnN0YXJ0U2Nyb2xsYmFyUGFpbnRUaW1lcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
NjM0LDEyICs2MzQsMTIgQEAgLSAodm9pZClpbnZhbGlkYXRlCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShT
Y3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCitQYXNzT3duUHRyPFNjcm9sbEFuaW1hdG9y
PiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkK
IHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbEFuaW1hdG9yTWFjKHNjcm9sbGFibGVB
cmVhKSk7CiB9CiAKLVNjcm9sbEFuaW1hdG9yTWFjOjpTY3JvbGxBbmltYXRvck1hYyhTY3JvbGxh
YmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCitTY3JvbGxBbmltYXRvck1hYzo6U2Nyb2xsQW5pbWF0
b3JNYWMoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQogICAgIDogU2Nyb2xsQW5pbWF0
b3Ioc2Nyb2xsYWJsZUFyZWEpCiAgICAgLCBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyKCp0
aGlzLCAmU2Nyb2xsQW5pbWF0b3JNYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQp
CiAgICAgLCBtX3NlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXIoKnRoaXMsICZTY3JvbGxBbmlt
YXRvck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lckZpcmVkKQpAQCAtNjUzLDcgKzY1
Myw3IEBAIFNjcm9sbEFuaW1hdG9yTWFjOjpTY3JvbGxBbmltYXRvck1hYyhTY3IKICAgICBtX3Nj
cm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlID0gYWRvcHROUyhbW1dlYlNjcm9sbEFuaW1hdGlv
bkhlbHBlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsKICAg
ICBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlciA9IGFkb3B0TlMoW1tOU0NsYXNzRnJvbVN0cmluZyhA
Ik5TU2Nyb2xsQW5pbWF0aW9uSGVscGVyIikgYWxsb2NdIGluaXRXaXRoRGVsZWdhdGU6bV9zY3Jv
bGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZS5nZXQoKV0pOwogCi0gICAgbV9zY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlckRlbGVnYXRlID0gYWRvcHROUyhbW1dlYlNjcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsYWJsZUFyZWE6c2Nyb2xsYWJsZUFy
ZWFdKTsKKyAgICBtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUgPSBhZG9wdE5T
KFtbV2ViU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhT
Y3JvbGxhYmxlQXJlYTomc2Nyb2xsYWJsZUFyZWFdKTsKICAgICBtX3Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyID0gYWRvcHROUyhbW05TQ2xhc3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxlckltcFBh
aXIiKSBhbGxvY10gaW5pdF0pOwogICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIHNl
dERlbGVnYXRlOihpZCltX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUuZ2V0KCld
OwogICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIHNldFNjcm9sbGVyU3R5bGU6cmVj
b21tZW5kZWRTY3JvbGxlclN0eWxlKCldOwpAQCAtNjk5LDE0ICs2OTksMTQgQEAgYm9vbCBTY3Jv
bGxBbmltYXRvck1hYzo6c2Nyb2xsKFNjcm9sbGJhcgogewogICAgIG1faGF2ZVNjcm9sbGVkU2lu
Y2VQYWdlTG9hZCA9IHRydWU7CiAKLSAgICBpZiAoIXNjcm9sbEFuaW1hdGlvbkVuYWJsZWRGb3JT
eXN0ZW0oKSB8fCAhbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsQW5pbWF0b3JFbmFibGVkKCkpCisg
ICAgaWYgKCFzY3JvbGxBbmltYXRpb25FbmFibGVkRm9yU3lzdGVtKCkgfHwgIW1fc2Nyb2xsYWJs
ZUFyZWEuc2Nyb2xsQW5pbWF0b3JFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBTY3JvbGxBbmlt
YXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7
CiAKICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gU2Nyb2xsQnlQaXhlbCkKICAgICAgICAgcmV0dXJu
IFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBt
dWx0aXBsaWVyKTsKIAogICAgIGZsb2F0IGN1cnJlbnRQb3MgPSBvcmllbnRhdGlvbiA9PSBIb3Jp
em9udGFsU2Nyb2xsYmFyID8gbV9jdXJyZW50UG9zWCA6IG1fY3VycmVudFBvc1k7Ci0gICAgZmxv
YXQgbmV3UG9zID0gc3RkOjptYXg8ZmxvYXQ+KHN0ZDo6bWluPGZsb2F0PihjdXJyZW50UG9zICsg
KHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYWJsZUFyZWEt
PnNjcm9sbFNpemUob3JpZW50YXRpb24pKSksIDApOworICAgIGZsb2F0IG5ld1BvcyA9IHN0ZDo6
bWF4PGZsb2F0PihzdGQ6Om1pbjxmbG9hdD4oY3VycmVudFBvcyArIChzdGVwICogbXVsdGlwbGll
ciksIHN0YXRpY19jYXN0PGZsb2F0PihtX3Njcm9sbGFibGVBcmVhLnNjcm9sbFNpemUob3JpZW50
YXRpb24pKSksIDApOwogICAgIGlmIChjdXJyZW50UG9zID09IG5ld1BvcykKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCkBAIC03MjksMjUgKzcyOSwyNSBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFj
OjpzY3JvbGxUb09mZnNldFdpCiAKIEZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3JNYWM6OmFkanVz
dFNjcm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkoY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pIGNv
bnN0CiB7Ci0gICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhLT5jb25zdHJhaW5zU2Nyb2xsaW5nVG9D
b250ZW50RWRnZSgpKQorICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYS5jb25zdHJhaW5zU2Nyb2xs
aW5nVG9Db250ZW50RWRnZSgpKQogICAgICAgICByZXR1cm4gcG9zaXRpb247CiAKLSAgICBmbG9h
dCBuZXdYID0gc3RkOjptYXg8ZmxvYXQ+KHN0ZDo6bWluPGZsb2F0Pihwb3NpdGlvbi54KCksIG1f
c2Nyb2xsYWJsZUFyZWEtPnRvdGFsQ29udGVudHNTaXplKCkud2lkdGgoKSAtIG1fc2Nyb2xsYWJs
ZUFyZWEtPnZpc2libGVXaWR0aCgpKSwgMCk7Ci0gICAgZmxvYXQgbmV3WSA9IHN0ZDo6bWF4PGZs
b2F0PihzdGQ6Om1pbjxmbG9hdD4ocG9zaXRpb24ueSgpLCBtX3Njcm9sbGFibGVBcmVhLT50b3Rh
bENvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gbV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUhlaWdo
dCgpKSwgMCk7CisgICAgZmxvYXQgbmV3WCA9IHN0ZDo6bWF4PGZsb2F0PihzdGQ6Om1pbjxmbG9h
dD4ocG9zaXRpb24ueCgpLCBtX3Njcm9sbGFibGVBcmVhLnRvdGFsQ29udGVudHNTaXplKCkud2lk
dGgoKSAtIG1fc2Nyb2xsYWJsZUFyZWEudmlzaWJsZVdpZHRoKCkpLCAwKTsKKyAgICBmbG9hdCBu
ZXdZID0gc3RkOjptYXg8ZmxvYXQ+KHN0ZDo6bWluPGZsb2F0Pihwb3NpdGlvbi55KCksIG1fc2Ny
b2xsYWJsZUFyZWEudG90YWxDb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIG1fc2Nyb2xsYWJsZUFy
ZWEudmlzaWJsZUhlaWdodCgpKSwgMCk7CiAKICAgICByZXR1cm4gRmxvYXRQb2ludChuZXdYLCBu
ZXdZKTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6YWRqdXN0U2Nyb2xsUG9zaXRpb25U
b0JvdW5kc0lmTmVjZXNzYXJ5KCkKIHsKLSAgICBib29sIGN1cnJlbnRseUNvbnN0cmFpbnNUb0Nv
bnRlbnRFZGdlID0gbV9zY3JvbGxhYmxlQXJlYS0+Y29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVu
dEVkZ2UoKTsKLSAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9D
b250ZW50RWRnZSh0cnVlKTsKKyAgICBib29sIGN1cnJlbnRseUNvbnN0cmFpbnNUb0NvbnRlbnRF
ZGdlID0gbV9zY3JvbGxhYmxlQXJlYS5jb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSgp
OworICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVk
Z2UodHJ1ZSk7CiAKICAgICBJbnRQb2ludCBjdXJyZW50U2Nyb2xsUG9zaXRpb24gPSBhYnNvbHV0
ZVNjcm9sbFBvc2l0aW9uKCk7CiAgICAgRmxvYXRQb2ludCBuZWFyZXN0UG9pbnRXaXRoaW5Cb3Vu
ZHMgPSBhZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KGFic29sdXRlU2Nyb2xsUG9zaXRp
b24oKSk7CiAgICAgaW1tZWRpYXRlU2Nyb2xsQnkobmVhcmVzdFBvaW50V2l0aGluQm91bmRzIC0g
Y3VycmVudFNjcm9sbFBvc2l0aW9uKTsKIAotICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0
cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGN1cnJlbnRseUNvbnN0cmFpbnNUb0NvbnRlbnRF
ZGdlKTsKKyAgICBtX3Njcm9sbGFibGVBcmVhLnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRl
bnRFZGdlKGN1cnJlbnRseUNvbnN0cmFpbnNUb0NvbnRlbnRFZGdlKTsKIH0KIAogdm9pZCBTY3Jv
bGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsVG8oY29uc3QgRmxvYXRQb2ludCYgbmV3UG9z
aXRpb24pCkBAIC03NTUsNyArNzU1LDcgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRp
YXRlU2Nyb2xsVAogICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRQb3NpdGlvbiA9IGFkanVzdFNjcm9s
bFBvc2l0aW9uSWZOZWNlc3NhcnkobmV3UG9zaXRpb24pOwogIAogICAgIGJvb2wgcG9zaXRpb25D
aGFuZ2VkID0gYWRqdXN0ZWRQb3NpdGlvbi54KCkgIT0gbV9jdXJyZW50UG9zWCB8fCBhZGp1c3Rl
ZFBvc2l0aW9uLnkoKSAhPSBtX2N1cnJlbnRQb3NZOwotICAgIGlmICghcG9zaXRpb25DaGFuZ2Vk
ICYmICFzY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxPcmlnaW5DaGFuZ2VkKCkpCisgICAgaWYgKCFw
b3NpdGlvbkNoYW5nZWQgJiYgIXNjcm9sbGFibGVBcmVhKCkuc2Nyb2xsT3JpZ2luQ2hhbmdlZCgp
KQogICAgICAgICByZXR1cm47CiAKICAgICBGbG9hdFNpemUgZGVsdGEgPSBGbG9hdFNpemUoYWRq
dXN0ZWRQb3NpdGlvbi54KCkgLSBtX2N1cnJlbnRQb3NYLCBhZGp1c3RlZFBvc2l0aW9uLnkoKSAt
IG1fY3VycmVudFBvc1kpOwpAQCAtOTQyLDExICs5NDIsMTEgQEAgdm9pZCBTY3JvbGxBbmltYXRv
ck1hYzo6ZGlkQWRkVmVydGljYWxTYwogICAgIG1fdmVydGljYWxTY3JvbGxiYXJQYWludGVyRGVs
ZWdhdGUgPSBhZG9wdE5TKFtbV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGFsbG9jXSBpbml0
V2l0aFNjcm9sbGJhcjpzY3JvbGxiYXJdKTsKIAogICAgIFtwYWludGVyIHNldERlbGVnYXRlOihp
ZCltX3ZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpXTsKLSAgICBpZiAoR3Jh
cGhpY3NMYXllciogbGF5ZXIgPSBzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCktPmxheWVyRm9y
VmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBzY3Jv
bGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKQogICAg
ICAgICBbcGFpbnRlciBzZXRMYXllcjpsYXllci0+cGxhdGZvcm1MYXllcigpXTsKIAogICAgIFtt
X3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIHNldFZlcnRpY2FsU2Nyb2xsZXJJbXA6cGFpbnRl
cl07Ci0gICAgaWYgKHNjcm9sbGFibGVBcmVhKCktPmluTGl2ZVJlc2l6ZSgpKQorICAgIGlmIChz
Y3JvbGxhYmxlQXJlYSgpLmluTGl2ZVJlc2l6ZSgpKQogICAgICAgICBbcGFpbnRlciBzZXRLbm9i
QWxwaGE6MV07CiB9CiAKQEAgLTk3NCwxMSArOTc0LDExIEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JN
YWM6OmRpZEFkZEhvcml6b250YWwKICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyRGVs
ZWdhdGUgPSBhZG9wdE5TKFtbV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGFsbG9jXSBpbml0
V2l0aFNjcm9sbGJhcjpzY3JvbGxiYXJdKTsKIAogICAgIFtwYWludGVyIHNldERlbGVnYXRlOihp
ZCltX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCldOwotICAgIGlmIChH
cmFwaGljc0xheWVyKiBsYXllciA9IHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+bGF5ZXJG
b3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0g
c2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigp
KQogICAgICAgICBbcGFpbnRlciBzZXRMYXllcjpsYXllci0+cGxhdGZvcm1MYXllcigpXTsKIAog
ICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIHNldEhvcml6b250YWxTY3JvbGxlcklt
cDpwYWludGVyXTsKLSAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS0+aW5MaXZlUmVzaXplKCkpCisg
ICAgaWYgKHNjcm9sbGFibGVBcmVhKCkuaW5MaXZlUmVzaXplKCkpCiAgICAgICAgIFtwYWludGVy
IHNldEtub2JBbHBoYToxXTsKIH0KIApAQCAtOTk4LDggKzk5OCw4IEBAIHZvaWQgU2Nyb2xsQW5p
bWF0b3JNYWM6OndpbGxSZW1vdmVIb3Jpem8KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6dmVy
dGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpCiB7Ci0gICAgR3JhcGhpY3NMYXllciogbGF5
ZXIgPSBtX3Njcm9sbGFibGVBcmVhLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCk7Ci0gICAg
U2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJh
cigpOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbV9zY3JvbGxhYmxlQXJlYS5sYXllckZv
clZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBtX3Njcm9s
bGFibGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFyKCk7CiAgICAgaWYgKCFzY3JvbGxiYXIpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtMTAxMiw4ICsxMDEyLDggQEAgdm9pZCBTY3JvbGxBbmltYXRvck1h
Yzo6dmVydGljYWxTY3JvbGxiYQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpob3Jpem9udGFs
U2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKQogewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0g
bV9zY3JvbGxhYmxlQXJlYS0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAgU2Ny
b2xsYmFyKiBzY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFy
KCk7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBtX3Njcm9sbGFibGVBcmVhLmxheWVyRm9y
SG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gbV9zY3Jv
bGxhYmxlQXJlYS5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CiAgICAgaWYgKCFzY3JvbGxiYXIpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMTA0OCw3ICsxMDQ4LDcgQEAgdm9pZCBTY3JvbGxBbmltYXRv
ck1hYzo6bm90aWZ5Q29udGVudEFyZQogICAgIGlmIChbbV9zY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEtPmlzSGFuZGxpbmdXaGVlbEV2ZW50KCkpCisgICAgaWYg
KG1fc2Nyb2xsYWJsZUFyZWEuaXNIYW5kbGluZ1doZWVsRXZlbnQoKSkKICAgICAgICAgc2VuZENv
bnRlbnRBcmVhU2Nyb2xsZWQoZGVsdGEpOwogICAgIGVsc2UKICAgICAgICAgc2VuZENvbnRlbnRB
cmVhU2Nyb2xsZWRTb29uKGRlbHRhKTsKQEAgLTExMDksMjEgKzExMDksMjEgQEAgYm9vbCBTY3Jv
bGxBbmltYXRvck1hYzo6aGFuZGxlV2hlZWxFdmVudAogYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6
cGlubmVkSW5EaXJlY3Rpb24oZmxvYXQgZGVsdGFYLCBmbG9hdCBkZWx0YVkpCiB7CiAgICAgRmxv
YXRTaXplIGxpbWl0RGVsdGE7Ci0gICAgaWYgKGZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVsdGFY
KSkgeworICAgIGlmIChzdGQ6OmZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVsdGFYKSkgewogICAg
ICAgICBpZiAoZGVsdGFZIDwgMCkgewogICAgICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0byBz
Y3JvbGwgdXAuICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIHRvcAotICAgICAg
ICAgICAgbGltaXREZWx0YS5zZXRIZWlnaHQobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRl
bnRSZWN0KCkueSgpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkueSgpKTsKKyAg
ICAgICAgICAgIGxpbWl0RGVsdGEuc2V0SGVpZ2h0KG1fc2Nyb2xsYWJsZUFyZWEudmlzaWJsZUNv
bnRlbnRSZWN0KCkueSgpICsgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxPcmlnaW4oKS55KCkpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwg
ZG93bi4gIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUgYm90dG9tCi0gICAgICAg
ICAgICBsaW1pdERlbHRhLnNldEhlaWdodChtX3Njcm9sbGFibGVBcmVhLT50b3RhbENvbnRlbnRz
U2l6ZSgpLmhlaWdodCgpIC0gKG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgp
Lm1heFkoKSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpLnkoKSkpOworICAgICAg
ICAgICAgbGltaXREZWx0YS5zZXRIZWlnaHQobV9zY3JvbGxhYmxlQXJlYS50b3RhbENvbnRlbnRz
U2l6ZSgpLmhlaWdodCgpIC0gKG1fc2Nyb2xsYWJsZUFyZWEudmlzaWJsZUNvbnRlbnRSZWN0KCku
bWF4WSgpICsgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxPcmlnaW4oKS55KCkpKTsKICAgICAgICAg
fQogICAgIH0gZWxzZSBpZiAoZGVsdGFYICE9IDApIHsKICAgICAgICAgaWYgKGRlbHRhWCA8IDAp
IHsKICAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIGxlZnQuICBNYWtlIHN1
cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIGxlZnQKLSAgICAgICAgICAgIGxpbWl0RGVsdGEu
c2V0V2lkdGgobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkueCgpICsgbV9z
Y3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkueCgpKTsKKyAgICAgICAgICAgIGxpbWl0RGVs
dGEuc2V0V2lkdGgobV9zY3JvbGxhYmxlQXJlYS52aXNpYmxlQ29udGVudFJlY3QoKS54KCkgKyBt
X3Njcm9sbGFibGVBcmVhLnNjcm9sbE9yaWdpbigpLngoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCByaWdodC4gIE1ha2Ugc3VyZSB3
ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUgcmlnaHQKLSAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0
V2lkdGgobV9zY3JvbGxhYmxlQXJlYS0+dG90YWxDb250ZW50c1NpemUoKS53aWR0aCgpIC0gKG1f
c2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLm1heFgoKSArIG1fc2Nyb2xsYWJs
ZUFyZWEtPnNjcm9sbE9yaWdpbigpLngoKSkpOworICAgICAgICAgICAgbGltaXREZWx0YS5zZXRX
aWR0aChtX3Njcm9sbGFibGVBcmVhLnRvdGFsQ29udGVudHNTaXplKCkud2lkdGgoKSAtIChtX3Nj
cm9sbGFibGVBcmVhLnZpc2libGVDb250ZW50UmVjdCgpLm1heFgoKSArIG1fc2Nyb2xsYWJsZUFy
ZWEuc2Nyb2xsT3JpZ2luKCkueCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0xMTQz
LDkgKzExNDMsOSBAQCBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjppc0FscmVhZHlQaW5uZWRJCiB7
CiAgICAgc3dpdGNoIChheGlzKSB7CiAgICAgY2FzZSBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2Fs
OgotICAgICAgICByZXR1cm4gKHdoZWVsRXZlbnQuZGVsdGFZKCkgPiAwICYmIG1fc2Nyb2xsYWJs
ZUFyZWEtPnNjcm9sbGVkVG9Ub3AoKSkgfHwgKHdoZWVsRXZlbnQuZGVsdGFZKCkgPCAwICYmIG1f
c2Nyb2xsYWJsZUFyZWEtPnNjcm9sbGVkVG9Cb3R0b20oKSk7CisgICAgICAgIHJldHVybiAod2hl
ZWxFdmVudC5kZWx0YVkoKSA+IDAgJiYgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxlZFRvVG9wKCkp
IHx8ICh3aGVlbEV2ZW50LmRlbHRhWSgpIDwgMCAmJiBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbGVk
VG9Cb3R0b20oKSk7CiAgICAgY2FzZSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWw6Ci0gICAg
ICAgIHJldHVybiAod2hlZWxFdmVudC5kZWx0YVgoKSA+IDAgJiYgbV9zY3JvbGxhYmxlQXJlYS0+
c2Nyb2xsZWRUb0xlZnQoKSkgfHwgKHdoZWVsRXZlbnQuZGVsdGFYKCkgPCAwICYmIG1fc2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbGVkVG9SaWdodCgpKTsKKyAgICAgICAgcmV0dXJuICh3aGVlbEV2ZW50
LmRlbHRhWCgpID4gMCAmJiBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbGVkVG9MZWZ0KCkpIHx8ICh3
aGVlbEV2ZW50LmRlbHRhWCgpIDwgMCAmJiBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbGVkVG9SaWdo
dCgpKTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTExNjksMTUgKzEx
NjksMTUgQEAgc3RhdGljIGJvb2wgZ2VzdHVyZVNob3VsZEJlZ2luU25hcChjb25zdAogCiBib29s
IFNjcm9sbEFuaW1hdG9yTWFjOjphbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQogewotICAgIHN3aXRjaCAobV9zY3JvbGxhYmxlQXJl
YS0+dmVydGljYWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKKyAgICBzd2l0Y2ggKG1fc2Nyb2xsYWJs
ZUFyZWEudmVydGljYWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKICAgICBjYXNlIFNjcm9sbEVsYXN0
aWNpdHlBdXRvbWF0aWM6IHsKLSAgICAgICAgU2Nyb2xsYmFyKiBoU2Nyb2xsZXIgPSBtX3Njcm9s
bGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAgICAgIFNjcm9sbGJhciogdlNj
cm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICAgICAg
U2Nyb2xsYmFyKiBoU2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLmhvcml6b250YWxTY3JvbGxi
YXIoKTsKKyAgICAgICAgU2Nyb2xsYmFyKiB2U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLnZl
cnRpY2FsU2Nyb2xsYmFyKCk7CiAgICAgICAgIGJvb2wgc2Nyb2xsYmFyc0FsbG93U3RyZXRjaGlu
ZyA9ICgodlNjcm9sbGVyICYmIHZTY3JvbGxlci0+ZW5hYmxlZCgpKSB8fCAoIWhTY3JvbGxlciB8
fCAhaFNjcm9sbGVyLT5lbmFibGVkKCkpKTsKLSAgICAgICAgYm9vbCBldmVudFByZXZlbnRzU3Ry
ZXRjaGluZyA9IG1fc2Nyb2xsYWJsZUFyZWEtPmhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxl
QW5jZXN0b3IoKSAmJiBuZXdHZXN0dXJlSXNTdGFydGluZyh3aGVlbEV2ZW50KSAmJiBpc0FscmVh
ZHlQaW5uZWRJbkRpcmVjdGlvbk9mR2VzdHVyZSh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6
OlZlcnRpY2FsKTsKKyAgICAgICAgYm9vbCBldmVudFByZXZlbnRzU3RyZXRjaGluZyA9IG1fc2Ny
b2xsYWJsZUFyZWEuaGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpICYmIG5l
d0dlc3R1cmVJc1N0YXJ0aW5nKHdoZWVsRXZlbnQpICYmIGlzQWxyZWFkeVBpbm5lZEluRGlyZWN0
aW9uT2ZHZXN0dXJlKHdoZWVsRXZlbnQsIFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpOwogI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAgICAgICAgIGlmICghZXZlbnRQcmV2ZW50c1N0cmV0
Y2hpbmcpCi0gICAgICAgICAgICBldmVudFByZXZlbnRzU3RyZXRjaGluZyA9IGdlc3R1cmVTaG91
bGRCZWdpblNuYXAod2hlZWxFdmVudCwgbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTbmFwT2Zm
c2V0cygpKTsKKyAgICAgICAgICAgIGV2ZW50UHJldmVudHNTdHJldGNoaW5nID0gZ2VzdHVyZVNo
b3VsZEJlZ2luU25hcCh3aGVlbEV2ZW50LCBtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU25hcE9m
ZnNldHMoKSk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuIHNjcm9sbGJhcnNBbGxvd1N0cmV0Y2hp
bmcgJiYgIWV2ZW50UHJldmVudHNTdHJldGNoaW5nOwogICAgIH0KQEAgLTExOTMsMTUgKzExOTMs
MTUgQEAgYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6YWxsb3dzVmVydGljYWxTdAogCiBib29sIFNj
cm9sbEFuaW1hdG9yTWFjOjphbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyhjb25zdCBQbGF0Zm9y
bVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCiB7Ci0gICAgc3dpdGNoIChtX3Njcm9sbGFibGVBcmVh
LT5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSgpKSB7CisgICAgc3dpdGNoIChtX3Njcm9sbGFi
bGVBcmVhLmhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKICAgICBjYXNlIFNjcm9sbEVs
YXN0aWNpdHlBdXRvbWF0aWM6IHsKLSAgICAgICAgU2Nyb2xsYmFyKiBoU2Nyb2xsZXIgPSBtX3Nj
cm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAgICAgIFNjcm9sbGJhciog
dlNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICAg
ICAgU2Nyb2xsYmFyKiBoU2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLmhvcml6b250YWxTY3Jv
bGxiYXIoKTsKKyAgICAgICAgU2Nyb2xsYmFyKiB2U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVh
LnZlcnRpY2FsU2Nyb2xsYmFyKCk7CiAgICAgICAgIGJvb2wgc2Nyb2xsYmFyc0FsbG93U3RyZXRj
aGluZyA9ICgoaFNjcm9sbGVyICYmIGhTY3JvbGxlci0+ZW5hYmxlZCgpKSB8fCAoIXZTY3JvbGxl
ciB8fCAhdlNjcm9sbGVyLT5lbmFibGVkKCkpKTsKLSAgICAgICAgYm9vbCBldmVudFByZXZlbnRz
U3RyZXRjaGluZyA9IG1fc2Nyb2xsYWJsZUFyZWEtPmhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRh
YmxlQW5jZXN0b3IoKSAmJiBuZXdHZXN0dXJlSXNTdGFydGluZyh3aGVlbEV2ZW50KSAmJiBpc0Fs
cmVhZHlQaW5uZWRJbkRpcmVjdGlvbk9mR2VzdHVyZSh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4
aXM6Okhvcml6b250YWwpOworICAgICAgICBib29sIGV2ZW50UHJldmVudHNTdHJldGNoaW5nID0g
bV9zY3JvbGxhYmxlQXJlYS5oYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkg
JiYgbmV3R2VzdHVyZUlzU3RhcnRpbmcod2hlZWxFdmVudCkgJiYgaXNBbHJlYWR5UGlubmVkSW5E
aXJlY3Rpb25PZkdlc3R1cmUod2hlZWxFdmVudCwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFs
KTsKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgICAgICBpZiAoIWV2ZW50UHJldmVu
dHNTdHJldGNoaW5nKQotICAgICAgICAgICAgZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmcgPSBnZXN0
dXJlU2hvdWxkQmVnaW5TbmFwKHdoZWVsRXZlbnQsIG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250
YWxTbmFwT2Zmc2V0cygpKTsKKyAgICAgICAgICAgIGV2ZW50UHJldmVudHNTdHJldGNoaW5nID0g
Z2VzdHVyZVNob3VsZEJlZ2luU25hcCh3aGVlbEV2ZW50LCBtX3Njcm9sbGFibGVBcmVhLmhvcml6
b250YWxTbmFwT2Zmc2V0cygpKTsKICNlbmRpZgogICAgICAgICByZXR1cm4gc2Nyb2xsYmFyc0Fs
bG93U3RyZXRjaGluZyAmJiAhZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmc7CiAgICAgfQpAQCAtMTIx
Nyw3ICsxMjE3LDcgQEAgYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6YWxsb3dzSG9yaXpvbnRhbAog
CiBJbnRTaXplIFNjcm9sbEFuaW1hdG9yTWFjOjpzdHJldGNoQW1vdW50KCkKIHsKLSAgICByZXR1
cm4gbV9zY3JvbGxhYmxlQXJlYS0+b3ZlcmhhbmdBbW91bnQoKTsKKyAgICByZXR1cm4gbV9zY3Jv
bGxhYmxlQXJlYS5vdmVyaGFuZ0Ftb3VudCgpOwogfQogCiBib29sIFNjcm9sbEFuaW1hdG9yTWFj
OjpwaW5uZWRJbkRpcmVjdGlvbihjb25zdCBGbG9hdFNpemUmIGRpcmVjdGlvbikKQEAgLTEyMjcs
NyArMTIyNyw3IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OnBpbm5lZEluRGlyZWN0aW8KIAog
Ym9vbCBTY3JvbGxBbmltYXRvck1hYzo6Y2FuU2Nyb2xsSG9yaXpvbnRhbGx5KCkKIHsKLSAgICBT
Y3JvbGxiYXIqIHNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxi
YXIoKTsKKyAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpv
bnRhbFNjcm9sbGJhcigpOwogICAgIGlmICghc2Nyb2xsYmFyKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgcmV0dXJuIHNjcm9sbGJhci0+ZW5hYmxlZCgpOwpAQCAtMTIzNSw3ICsxMjM1LDcg
QEAgYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6Y2FuU2Nyb2xsSG9yaXpvbgogCiBib29sIFNjcm9s
bEFuaW1hdG9yTWFjOjpjYW5TY3JvbGxWZXJ0aWNhbGx5KCkKIHsKLSAgICBTY3JvbGxiYXIqIHNj
cm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgU2Ny
b2xsYmFyKiBzY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFyKCk7
CiAgICAgaWYgKCFzY3JvbGxiYXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4g
c2Nyb2xsYmFyLT5lbmFibGVkKCk7CkBAIC0xMjQ4LDE0ICsxMjQ4LDE0IEBAIGJvb2wgU2Nyb2xs
QW5pbWF0b3JNYWM6OnNob3VsZFJ1YmJlckJhbmQKIAogSW50UG9pbnQgU2Nyb2xsQW5pbWF0b3JN
YWM6OmFic29sdXRlU2Nyb2xsUG9zaXRpb24oKQogewotICAgIHJldHVybiBtX3Njcm9sbGFibGVB
cmVhLT52aXNpYmxlQ29udGVudFJlY3QoKS5sb2NhdGlvbigpICsgbV9zY3JvbGxhYmxlQXJlYS0+
c2Nyb2xsT3JpZ2luKCk7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEudmlzaWJsZUNvbnRl
bnRSZWN0KCkubG9jYXRpb24oKSArIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsT3JpZ2luKCk7CiB9
CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91dENvbnRl
bnRFZGdlQ29uc3RyYWludHMoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkKIHsKLSAgICBtX3Njcm9s
bGFibGVBcmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7Cisg
ICAgbV9zY3JvbGxhYmxlQXJlYS5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShm
YWxzZSk7CiAgICAgaW1tZWRpYXRlU2Nyb2xsQnkoZGVsdGEpOwotICAgIG1fc2Nyb2xsYWJsZUFy
ZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKHRydWUpOworICAgIG1fc2Ny
b2xsYWJsZUFyZWEuc2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7CiB9
CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9sbEJ5KGNvbnN0IEZsb2F0
U2l6ZSYgZGVsdGEpCkBAIC0xMzA0LDcgKzEzMDQsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFj
Ojp1cGRhdGVTY3JvbGxlclN0CiAKICAgICBOU1Njcm9sbGVyU3R5bGUgbmV3U3R5bGUgPSBbbV9z
Y3JvbGxiYXJQYWludGVyQ29udHJvbGxlciBzY3JvbGxlclN0eWxlXTsKIAotICAgIGlmIChTY3Jv
bGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUFyZWEoKS0+dmVydGljYWxTY3Jv
bGxiYXIoKSkgeworICAgIGlmIChTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xs
YWJsZUFyZWEoKS52ZXJ0aWNhbFNjcm9sbGJhcigpKSB7CiAgICAgICAgIHZlcnRpY2FsU2Nyb2xs
YmFyLT5pbnZhbGlkYXRlKCk7CiAKICAgICAgICAgU2Nyb2xsYmFyUGFpbnRlciBvbGRWZXJ0aWNh
bFBhaW50ZXIgPSBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciB2ZXJ0aWNhbFNjcm9sbGVy
SW1wXTsKQEAgLTEzMjIsNyArMTMyMiw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnVwZGF0
ZVNjcm9sbGVyU3QKICAgICAgICAgdmVydGljYWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChJbnRS
ZWN0KDAsIDAsIHRoaWNrbmVzcywgdGhpY2tuZXNzKSk7CiAgICAgfQogCi0gICAgaWYgKFNjcm9s
bGJhciogaG9yaXpvbnRhbFNjcm9sbGJhciA9IHNjcm9sbGFibGVBcmVhKCktPmhvcml6b250YWxT
Y3JvbGxiYXIoKSkgeworICAgIGlmIChTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIgPSBz
Y3JvbGxhYmxlQXJlYSgpLmhvcml6b250YWxTY3JvbGxiYXIoKSkgewogICAgICAgICBob3Jpem9u
dGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CiAKICAgICAgICAgU2Nyb2xsYmFyUGFpbnRlciBv
bGRIb3Jpem9udGFsUGFpbnRlciA9IFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIGhvcml6
b250YWxTY3JvbGxlckltcF07CkBAIC0xMzQyLDcgKzEzNDIsNyBAQCB2b2lkIFNjcm9sbEFuaW1h
dG9yTWFjOjp1cGRhdGVTY3JvbGxlclN0CiAKICAgICAvLyBJZiBtX25lZWRzU2Nyb2xsZXJTdHls
ZVVwZGF0ZSBpcyB0cnVlLCB0aGVuIHRoZSBwYWdlIGlzIHJlc3RvcmluZyBmcm9tIHRoZSBwYWdl
IGNhY2hlLCBhbmQgCiAgICAgLy8gYSByZWxheW91dCB3aWxsIGhhcHBlbiBvbiBpdHMgb3duLiBP
dGhlcndpc2UsIHdlIG11c3QgaW5pdGlhdGUgYSByZS1sYXlvdXQgb3Vyc2VsdmVzLgotICAgIHNj
cm9sbGFibGVBcmVhKCktPnNjcm9sbGJhclN0eWxlQ2hhbmdlZChuZXdTdHlsZSwgIW1fbmVlZHNT
Y3JvbGxlclN0eWxlVXBkYXRlKTsKKyAgICBzY3JvbGxhYmxlQXJlYSgpLnNjcm9sbGJhclN0eWxl
Q2hhbmdlZChuZXdTdHlsZSwgIW1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlKTsKIAogICAgIG1f
bmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlID0gZmFsc2U7CiB9CkBAIC0xMzk1LDEzICsxMzk1LDEz
IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNlbmRDb250ZW50QXJlYVMKIHZvaWQgU2Nyb2xs
QW5pbWF0b3JNYWM6OnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJbnRSZWN0JiBz
Y3JvbGxlclRodW1iKQogewogICAgIEludFJlY3QgcmVjdEluVmlld0Nvb3JkaW5hdGVzID0gc2Ny
b2xsZXJUaHVtYjsKLSAgICBpZiAoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IG1fc2Ny
b2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgaWYgKFNjcm9sbGJhciogdmVy
dGljYWxTY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFyKCkpCiAg
ICAgICAgIHJlY3RJblZpZXdDb29yZGluYXRlcyA9IHZlcnRpY2FsU2Nyb2xsYmFyLT5jb252ZXJ0
VG9Db250YWluaW5nVmlldyhzY3JvbGxlclRodW1iKTsKIAogICAgIGlmIChyZWN0SW5WaWV3Q29v
cmRpbmF0ZXMgPT0gbV92aXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QpCiAgICAgICAgIHJldHVybjsK
IAotICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChyZWN0
SW5WaWV3Q29vcmRpbmF0ZXMpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2V0VmlzaWJsZVNjcm9s
bGVyVGh1bWJSZWN0KHJlY3RJblZpZXdDb29yZGluYXRlcyk7CiAgICAgbV92aXNpYmxlU2Nyb2xs
ZXJUaHVtYlJlY3QgPSByZWN0SW5WaWV3Q29vcmRpbmF0ZXM7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCShyZXZpc2lvbiAxODA0NTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSBJbmMuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpLgogICoKQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIFBvcHVwTWVudVdpbjo6c2hv
dyhjb25zdCBJbnRSZWN0JiByCiAKICAgICBpZiAoIW1fc2Nyb2xsYmFyICYmIHZpc2libGVJdGVt
cygpIDwgY2xpZW50KCktPmxpc3RTaXplKCkpIHsKICAgICAgICAgLy8gV2UgbmVlZCBhIHNjcm9s
bCBiYXIKLSAgICAgICAgbV9zY3JvbGxiYXIgPSBjbGllbnQoKS0+Y3JlYXRlU2Nyb2xsYmFyKHRo
aXMsIFZlcnRpY2FsU2Nyb2xsYmFyLCBTbWFsbFNjcm9sbGJhcik7CisgICAgICAgIG1fc2Nyb2xs
YmFyID0gY2xpZW50KCktPmNyZWF0ZVNjcm9sbGJhcigqdGhpcywgVmVydGljYWxTY3JvbGxiYXIs
IFNtYWxsU2Nyb2xsYmFyKTsKICAgICAgICAgbV9zY3JvbGxiYXItPnN0eWxlQ2hhbmdlZCgpOwog
ICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShy
ZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNi0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0
aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAxOTk4IE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBv
cmF0aW9uLgogICoKQEAgLTMzNiw3ICszMzYsNyBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIo
UmVuZGVyTGF5ZXJNb2RlCiAgICAgICAgIC8vIFdlIHNhdmUgYW5kIHJlc3RvcmUgb25seSB0aGUg
c2Nyb2xsT2Zmc2V0IGFzIHRoZSBvdGhlciBzY3JvbGwgdmFsdWVzIGFyZSByZWNhbGN1bGF0ZWQu
CiAgICAgICAgIG1fc2Nyb2xsT2Zmc2V0ID0gZWxlbWVudC0+c2F2ZWRMYXllclNjcm9sbE9mZnNl
dCgpOwogICAgICAgICBpZiAoIW1fc2Nyb2xsT2Zmc2V0LmlzWmVybygpKQotICAgICAgICAgICAg
c2Nyb2xsQW5pbWF0b3IoKS0+c2V0Q3VycmVudFBvc2l0aW9uKEZsb2F0UG9pbnQobV9zY3JvbGxP
ZmZzZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIHNj
cm9sbEFuaW1hdG9yKCkuc2V0Q3VycmVudFBvc2l0aW9uKEZsb2F0UG9pbnQobV9zY3JvbGxPZmZz
ZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpKTsKICAgICAgICAgZWxlbWVudC0+
c2V0U2F2ZWRMYXllclNjcm9sbE9mZnNldChJbnRTaXplKCkpOwogICAgIH0KIH0KQEAgLTMwNjUs
OSArMzA2NSw5IEBAIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJMYXllcjo6Y3JlYXQKICAg
ICBSZW5kZXJFbGVtZW50KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJl
bmRlcmVyKCkpOwogICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUgPSBhY3R1YWxSZW5k
ZXJlci0+aXNCb3goKSAmJiBhY3R1YWxSZW5kZXJlci0+c3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShT
Q1JPTExCQVIpOwogICAgIGlmIChoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSkKLSAgICAgICAgd2lk
Z2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIodGhpcywgb3JpZW50
YXRpb24sIGFjdHVhbFJlbmRlcmVyLT5lbGVtZW50KCkpOworICAgICAgICB3aWRnZXQgPSBSZW5k
ZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIGFj
dHVhbFJlbmRlcmVyLT5lbGVtZW50KCkpOwogICAgIGVsc2UgewotICAgICAgICB3aWRnZXQgPSBT
Y3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcih0aGlzLCBvcmllbnRhdGlvbiwgUmVndWxh
clNjcm9sbGJhcik7CisgICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Ny
b2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcik7CiAgICAgICAgIGRp
ZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9uKTsKICAgICB9CiAgICAgcmVu
ZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuYWRkQ2hpbGQod2lkZ2V0LmdldCgpKTsKQEAgLTMw
ODQsNyArMzA4NCw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2wK
ICAgICAgICAgd2lsbFJlbW92ZVNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCksIG9yaWVudGF0aW9u
KTsKIAogICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIHNjcm9sbGJhci0+
ZGlzY29ubmVjdEZyb21TY3JvbGxhYmxlQXJlYSgpOwogICAgIHNjcm9sbGJhciA9IG51bGxwdHI7
CiB9CiAKQEAgLTM0ODIsOCArMzQ4MSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9s
bEluZm9BZnRlckwKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM1OTY0CiAgICAgdXBkYXRlU25hcE9mZnNldHMoKTsKICNpZiBQTEFURk9STShNQUMpCi0g
ICAgaWYgKGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3Io
KS0+dXBkYXRlU2Nyb2xsQW5pbWF0b3JzQW5kVGltZXJzKCk7CisgICAgaWYgKFNjcm9sbEFuaW1h
dG9yKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAgICAgICAg
cmV0dXJuIHNjcm9sbEFuaW1hdG9yLT51cGRhdGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMoKTsK
ICNlbmRpZgogI2VuZGlmCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDExLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwg
MjAxMSwgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAg
ICAgICAgICAgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtODAyLDkgKzgw
Miw5IEBAIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJMaXN0Qm94OjpjcmUKICAgICBSZWZQ
dHI8U2Nyb2xsYmFyPiB3aWRnZXQ7CiAgICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9
IHN0eWxlKCkuaGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKTsKICAgICBpZiAoaGFzQ3VzdG9tU2Ny
b2xsYmFyU3R5bGUpCi0gICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3Vz
dG9tU2Nyb2xsYmFyKHRoaXMsIFZlcnRpY2FsU2Nyb2xsYmFyLCAmc2VsZWN0RWxlbWVudCgpKTsK
KyAgICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIo
KnRoaXMsIFZlcnRpY2FsU2Nyb2xsYmFyLCAmc2VsZWN0RWxlbWVudCgpKTsKICAgICBlbHNlIHsK
LSAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIodGhpcywg
VmVydGljYWxTY3JvbGxiYXIsIHRoZW1lKCkuc2Nyb2xsYmFyQ29udHJvbFNpemVGb3JQYXJ0KExp
c3Rib3hQYXJ0KSk7CisgICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Ny
b2xsYmFyKCp0aGlzLCBWZXJ0aWNhbFNjcm9sbGJhciwgdGhlbWUoKS5zY3JvbGxiYXJDb250cm9s
U2l6ZUZvclBhcnQoTGlzdGJveFBhcnQpKTsKICAgICAgICAgZGlkQWRkU2Nyb2xsYmFyKHdpZGdl
dC5nZXQoKSwgVmVydGljYWxTY3JvbGxiYXIpOwogICAgIH0KICAgICB2aWV3KCkuZnJhbWVWaWV3
KCkuYWRkQ2hpbGQod2lkZ2V0LmdldCgpKTsKQEAgLTgxOSw4ICs4MTksNyBAQCB2b2lkIFJlbmRl
ckxpc3RCb3g6OmRlc3Ryb3lTY3JvbGxiYXIoKQogICAgIGlmICghbV92QmFyLT5pc0N1c3RvbVNj
cm9sbGJhcigpKQogICAgICAgICBTY3JvbGxhYmxlQXJlYTo6d2lsbFJlbW92ZVNjcm9sbGJhciht
X3ZCYXIuZ2V0KCksIFZlcnRpY2FsU2Nyb2xsYmFyKTsKICAgICBtX3ZCYXItPnJlbW92ZUZyb21Q
YXJlbnQoKTsKLSAgICBtX3ZCYXItPmRpc2Nvbm5lY3RGcm9tU2Nyb2xsYWJsZUFyZWEoKTsKLSAg
ICBtX3ZCYXIgPSAwOworICAgIG1fdkJhciA9IG51bGxwdHI7CiB9CiAKIHZvaWQgUmVuZGVyTGlz
dEJveDo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHJldmlzaW9uIDE4
MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
c2VsZWN0IGVsZW1lbnQgcmVuZGVyZXIgaW4gV2ViQ29yZS4KICAqCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAw
OCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiAgICAgICAgICAgICAgIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC01NzUs
NyArNTc1LDcgQEAgSG9zdFdpbmRvdyogUmVuZGVyTWVudUxpc3Q6Omhvc3RXaW5kb3coKQogICAg
IHJldHVybiB2aWV3KCkuZnJhbWVWaWV3KCkuaG9zdFdpbmRvdygpOwogfQogCi1QYXNzUmVmUHRy
PFNjcm9sbGJhcj4gUmVuZGVyTWVudUxpc3Q6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJl
YSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3Jv
bGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKK1Bhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5k
ZXJNZW51TGlzdDo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJl
YSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXpl
IGNvbnRyb2xTaXplKQogewogICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdldDsKICAgICBib29s
IGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlID0gc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShTQ1JPTExC
QVIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgJKHJl
dmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIHNlbGVjdCBlbGVtZW50IHJlbmRlcmVyIGluIFdlYkNvcmUuCiAgKgogICogQ29weXJp
Z2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KS4KLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMTMsNyArMTEzLDcgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIGJvb2wgbXVsdGlwbGUoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCBIb3N0V2luZG93KiBob3N0V2luZG93KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiwgU2Ny
b2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFy
ZWEmLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUpIG92ZXJyaWRl
OwogCiAgICAgdmlydHVhbCBib29sIGhhc0xpbmVJZkVtcHR5KCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Ny
b2xsYmFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U2Nyb2xsYmFyLmNwcAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNjcm9sbGJhci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMywgMjAxNSBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM2LDEyICszNiwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZlB0cjxT
Y3JvbGxiYXI+IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKFNjcm9sbGFi
bGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24s
IEVsZW1lbnQqIG93bmVyRWxlbWVudCwgRnJhbWUqIG93bmluZ0ZyYW1lKQorUmVmUHRyPFNjcm9s
bGJhcj4gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIoU2Nyb2xsYWJsZUFy
ZWEmIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgRWxl
bWVudCogb3duZXJFbGVtZW50LCBGcmFtZSogb3duaW5nRnJhbWUpCiB7CiAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBSZW5kZXJTY3JvbGxiYXIoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uLCBv
d25lckVsZW1lbnQsIG93bmluZ0ZyYW1lKSk7CiB9CiAKLVJlbmRlclNjcm9sbGJhcjo6UmVuZGVy
U2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50
YXRpb24gb3JpZW50YXRpb24sIEVsZW1lbnQqIG93bmVyRWxlbWVudCwgRnJhbWUqIG93bmluZ0Zy
YW1lKQorUmVuZGVyU2Nyb2xsYmFyOjpSZW5kZXJTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEmIHNj
cm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgRWxlbWVudCog
b3duZXJFbGVtZW50LCBGcmFtZSogb3duaW5nRnJhbWUpCiAgICAgOiBTY3JvbGxiYXIoc2Nyb2xs
YWJsZUFyZWEsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xsYmFyLCBSZW5kZXJTY3JvbGxiYXJU
aGVtZTo6cmVuZGVyU2Nyb2xsYmFyVGhlbWUoKSwgdHJ1ZSkKICAgICAsIG1fb3duZXJFbGVtZW50
KG93bmVyRWxlbWVudCkKICAgICAsIG1fb3duaW5nRnJhbWUob3duaW5nRnJhbWUpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5oCShyZXZpc2lvbiAxODA0
NTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDcgKzQyLDcgQEAgY2xhc3MgUmVuZGVyU3R5bGU7CiBj
bGFzcyBSZW5kZXJTY3JvbGxiYXIgZmluYWwgOiBwdWJsaWMgU2Nyb2xsYmFyIHsKIHB1YmxpYzoK
ICAgICBmcmllbmQgY2xhc3MgU2Nyb2xsYmFyOwotICAgIHN0YXRpYyBSZWZQdHI8U2Nyb2xsYmFy
PiBjcmVhdGVDdXN0b21TY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRh
dGlvbiwgRWxlbWVudCosIEZyYW1lKiBvd25pbmdGcmFtZSA9IG51bGxwdHIpOworICAgIHN0YXRp
YyBSZWZQdHI8U2Nyb2xsYmFyPiBjcmVhdGVDdXN0b21TY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEm
LCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgRWxlbWVudCosIEZyYW1lKiBvd25pbmdGcmFtZSA9IG51
bGxwdHIpOwogICAgIHZpcnR1YWwgflJlbmRlclNjcm9sbGJhcigpOwogCiAgICAgUmVuZGVyQm94
KiBvd25pbmdSZW5kZXJlcigpIGNvbnN0OwpAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAg
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gZ2V0U2Nyb2xsYmFyUHNldWRvU3R5bGUoU2Nyb2xsYmFy
UGFydCwgUHNldWRvSWQpOwogCiBwcml2YXRlOgotICAgIFJlbmRlclNjcm9sbGJhcihTY3JvbGxh
YmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBFbGVtZW50KiwgRnJhbWUqKTsKKyAgICBS
ZW5kZXJTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEmLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgRWxl
bWVudCosIEZyYW1lKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0UGFyZW50KFNjcm9sbFZpZXcq
KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlZChib29sKSBvdmVycmlkZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNw
cAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNl
YXJjaEZpZWxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAxMCwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDggVG9yY2ggTW9iaWxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykgCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykuCkBAIC0zNDIsNyArMzQyLDcgQEAgSG9zdFdpbmRvdyogUmVuZGVyU2VhcmNoRmll
bGQ6Omhvc3RXaW5kbwogICAgIHJldHVybiB2aWV3KCkuZnJhbWVWaWV3KCkuaG9zdFdpbmRvdygp
OwogfQogCi1QYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyU2VhcmNoRmllbGQ6OmNyZWF0ZVNj
cm9sbGJhcihTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0
aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKK1Bhc3NS
ZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJTZWFyY2hGaWVsZDo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9s
bGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRp
b24sIFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQogewogICAgIFJlZlB0cjxTY3Jv
bGxiYXI+IHdpZGdldDsKICAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlID0gc3R5bGUo
KS5oYXNQc2V1ZG9TdHlsZShTQ1JPTExCQVIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNlYXJjaEZpZWxkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmgJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIw
MDksIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3
LnRvcmNobW9iaWxlLmNvbS8pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgogICoKQEAgLTgwLDcgKzgwLDcgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dEZyb21JdGVtKHVuc2lnbmVkIGxpc3RJbmRl
eCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNv
bnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdygpIGNvbnN0
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9s
bGJhcihTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250
cm9sU2l6ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3Jl
YXRlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhJiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9s
bGJhckNvbnRyb2xTaXplKSBvdmVycmlkZTsKIAogICAgIEhUTUxFbGVtZW50KiByZXN1bHRzQnV0
dG9uRWxlbWVudCgpIGNvbnN0OwogICAgIEhUTUxFbGVtZW50KiBjYW5jZWxCdXR0b25FbGVtZW50
KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODA0NjUpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNS0wMi0y
MCAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBTY3JvbGxi
YXJzIGFuZCBTY3JvbGxBbmltYXRvcnMgbXVzdCBhbHdheXMgaGF2ZSBhIFNjcm9sbGFibGVBcmVh
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4NTUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAg
IENoYW5nZSB1c2VycyBvZiB0aGUgc2Nyb2xsQW5pbWF0b3IoKSBtZXRob2QgdG8gZXhwZWN0IGEg
cmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2ludGVyLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9QREZQbHVnaW4ubW06CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Y3Jl
YXRlU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpkZXN0cm95U2Nyb2xs
YmFyKToKKwogMjAxNS0wMi0yMCAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgog
CiAgICAgICAgIFtXSzJdIEFkZCBzdXBwb3J0IGZvciBmb250IHBhbmVsIG9uIE9TIFguCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdp
bi5tbQkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9QREZQbHVnaW4ubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSwgMjAxMiwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTY0MSw3ICs2NDEsNyBAQCBjb25zdCBQbHVnaW5WaWV3KiBQREZQbHVnaW46OnBsdWdpblZp
ZXcoCiAKIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBQREZQbHVnaW46OmNyZWF0ZVNjcm9sbGJhcihT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKLSAgICBSZWZQdHI8U2Nyb2xsYmFy
PiB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcih0aGlzLCBvcmllbnRh
dGlvbiwgUmVndWxhclNjcm9sbGJhcik7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0ID0g
U2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBSZWd1
bGFyU2Nyb2xsYmFyKTsKICAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJh
cikgewogICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJMYXllciA9IGFkb3B0TlMoW1tXS1BE
RlBsdWdpblNjcm9sbGJhckxheWVyIGFsbG9jXSBpbml0V2l0aFBERlBsdWdpbjp0aGlzXSk7CiAg
ICAgICAgIFttX2NvbnRhaW5lckxheWVyIGFkZFN1YmxheWVyOm1faG9yaXpvbnRhbFNjcm9sbGJh
ckxheWVyLmdldCgpXTsKQEAgLTY2Miw4ICs2NjIsNyBAQCB2b2lkIFBERlBsdWdpbjo6ZGVzdHJv
eVNjcm9sbGJhcihTY3JvbGxiCiAKICAgICB3aWxsUmVtb3ZlU2Nyb2xsYmFyKHNjcm9sbGJhci5n
ZXQoKSwgb3JpZW50YXRpb24pOwogICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOwot
ICAgIHNjcm9sbGJhci0+ZGlzY29ubmVjdEZyb21TY3JvbGxhYmxlQXJlYSgpOwotICAgIHNjcm9s
bGJhciA9IDA7CisgICAgc2Nyb2xsYmFyID0gbnVsbHB0cjsKIAogICAgIGlmIChvcmllbnRhdGlv
biA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CiAgICAgICAgIFttX2hvcml6b250YWxTY3JvbGxi
YXJMYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247028</attachid>
            <date>2015-02-20 18:05:20 -0800</date>
            <delta_ts>2015-02-20 18:11:02 -0800</delta_ts>
            <desc>Patch v7 (Gtk fix)</desc>
            <filename>bug-141855-20150220180511.patch</filename>
            <type>text/plain</type>
            <size>85086</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDQ2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNSBAQAorMjAxNS0wMi0yMCAgQnJlbnQg
RnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBTY3JvbGxiYXJzIGFuZCBT
Y3JvbGxBbmltYXRvcnMgbXVzdCBhbHdheXMgaGF2ZSBhIFNjcm9sbGFibGVBcmVhCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4NTUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBjaGFuZ2UgaW4gZnVu
Y3Rpb25hbGl0eS4KKyAgICAgICAgCisgICAgICAgIENoYW5nZSB1c2VycyBvZiB0aGUgc2Nyb2xs
QW5pbWF0b3IoKSBtZXRob2QgdG8gZXhwZWN0IGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2lu
dGVyLiBBbHNvIGdldCByaWQgb2YKKyAgICAgICAgYSBudW1iZXIgb2YgdW5uZWNlc3NhcnkgbnVs
bHB0ciBjaGVja3MuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3Jv
bGxiYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6c2V0
VmFsdWUpOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJNYXRjaGVzQ29ybmVyUHJlc2VudFBzZXVkb0NsYXNz
KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVZpZXc6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNl
dEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvcjo6aGFuZGxlV2hlZWxFdmVudFBoYXNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9Qb3B1cE1l
bnVDbGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6U2Nyb2xsQW5pbWF0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvcjo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yOjp1cGRhdGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMpOgorICAgICAgICAqIHBs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cjo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbGFibGVBcmVhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvck5vbmUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
Tm9uZS5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6Y3JlYXRlU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxhYmxlQXJlYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Ny
b2xsQW5pbWF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpub3RpZnlTY3Jv
bGxQb3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbFBvc2l0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6
aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aGFu
ZGxlVG91Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6bW91c2VF
bnRlcmVkU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjptb3Vz
ZUV4aXRlZFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6ZGlk
QWRkU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjp3aWxsUmVt
b3ZlU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNh
bFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVB
cmVhOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAqIHBsYXRm
b3JtL1Njcm9sbGFibGVBcmVhLmg6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6U2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhcjo6c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhcjo6aXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXI6Om9mZnNldERpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmF1
dG9zY3JvbGxQcmVzc2VkUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdmVU
aHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdXNlTW92ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3VzZUVudGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyOjptb3VzZUV4aXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1v
dXNlVXApOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzaG91bGRQYXJ0aWNpcGF0ZUlu
SGl0VGVzdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmlzV2luZG93QWN0aXZl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpjb252ZXJ0VG9Db250YWluaW5nVmlldyk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhcjo6c2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpkaXNj
b25uZWN0RnJvbVNjcm9sbGFibGVBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9p
b3MvU2Nyb2xsQW5pbWF0b3JJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cklPUzo6aGFuZGxlVG91Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cklPUzo6ZGV0ZXJtaW5lU2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvU2Nyb2xsQW5pbWF0b3JNYWMubW06CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyRGVsZWdhdGUgc2Nyb2xsZXJJbXBQYWlyOnNldENvbnRlbnRBcmVhTmVlZHNEaXNw
bGF5SW5SZWN0Ol0pOgorICAgICAgICAoLVtXZWJTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRl
bGVnYXRlIHNjcm9sbGVySW1wUGFpcjp1cGRhdGVTY3JvbGxlclN0eWxlRm9yTmV3UmVjb21tZW5k
ZWRTY3JvbGxlclN0eWxlOl0pOgorICAgICAgICAoLVtXZWJTY3JvbGxiYXJQYWludGVyRGVsZWdh
dGUgc2Nyb2xsQW5pbWF0b3JdKToKKyAgICAgICAgKC1bV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVn
YXRlIGxheWVyXSk6CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBtb3Vz
ZUxvY2F0aW9uSW5TY3JvbGxlckZvclNjcm9sbGVySW1wOl0pOgorICAgICAgICAoLVtXZWJTY3Jv
bGxiYXJQYWludGVyRGVsZWdhdGUgc2V0VXBBbHBoYUFuaW1hdGlvbjpzY3JvbGxlclBhaW50ZXI6
cGFydDphbmltYXRlQWxwaGFUbzpkdXJhdGlvbjpdKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6
OlNjcm9sbEFuaW1hdG9yTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
OjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmFkanVzdFNj
cm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JNYWM6OmFkanVzdFNjcm9sbFBvc2l0aW9uVG9Cb3VuZHNJZk5lY2Vzc2FyeSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsVG8pOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpkaWRBZGRIb3Jpem9udGFsU2Ny
b2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp2ZXJ0aWNhbFNj
cm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
TWFjOjpob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnBpbm5lZEluRGlyZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjppc0FscmVhZHlQaW5uZWRJbkRpcmVjdGlv
bk9mR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6YWxsb3dz
VmVydGljYWxTdHJldGNoaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
OjphbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvck1hYzo6c3RyZXRjaEFtb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvck1hYzo6Y2FuU2Nyb2xsSG9yaXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yTWFjOjpjYW5TY3JvbGxWZXJ0aWNhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yTWFjOjphYnNvbHV0ZVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yTWFjOjppbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRn
ZUNvbnN0cmFpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp1cGRh
dGVTY3JvbGxlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpz
ZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
YXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGVzdHJveVNjcm9sbGJhcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
aXN0Qm94OjpjcmVhdGVTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJv
eDo6ZGVzdHJveVNjcm9sbGJhcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0
LmNwcDoKKyAgICAgICAgKFJlbmRlck1lbnVMaXN0OjpjcmVhdGVTY3JvbGxiYXIpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJTY3JvbGxiYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyOjpjcmVh
dGVDdXN0b21TY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyOjpS
ZW5kZXJTY3JvbGxiYXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmg6CisKIDIwMTUtMDItMjAgIEVucmljYSBDYXN1Y2Np
ICA8ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAgICAgICBbV0syXSBBZGQgc3VwcG9ydCBmb3IgZm9u
dCBwYW5lbCBvbiBPUyBYLgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5U2Nyb2xsYmFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwCShyZXZpc2lvbiAxODA0NTApCisr
KyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC05NiwxMSArOTYsOCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlTY3JvbGxi
YXI6OnNldFZhbHVlKGZsCiAgICAgaWYgKCFtX3Njcm9sbGJhcikKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIGlmICghbV9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIGZsb2F0IG5ld1ZhbHVlID0gdmFsdWUgKiBtX3Njcm9sbGJhci0+bWF4aW11
bSgpOwotICAgIG1fc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxUb09mZnNldFdp
dGhvdXRBbmltYXRpb24obV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCksIG5ld1ZhbHVlKTsKKyAg
ICBtX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24obV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCksIG5ld1ZhbHVlKTsKIH0KICAgICAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNo
ZWNrZXJUZXN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNl
L1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE0IERoaSBBdXJyYWht
YW4gPGRpb3JhaG1hbkByb2NreWJhcnMuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzU4LDcg
KzM1OCw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBzY3JvbGxiYXJNYXRjaGVzTm9CdXQKIAogQUxX
QVlTX0lOTElORSBib29sIHNjcm9sbGJhck1hdGNoZXNDb3JuZXJQcmVzZW50UHNldWRvQ2xhc3Mo
Y29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAg
cmV0dXJuIGNvbnRleHQuc2Nyb2xsYmFyICYmIGNvbnRleHQuc2Nyb2xsYmFyLT5zY3JvbGxhYmxl
QXJlYSgpLT5pc1Njcm9sbENvcm5lclZpc2libGUoKTsKKyAgICByZXR1cm4gY29udGV4dC5zY3Jv
bGxiYXIgJiYgY29udGV4dC5zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkuaXNTY3JvbGxDb3Ju
ZXJWaXNpYmxlKCk7CiB9CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAgKiAg
ICAgICAgICAgICAgICAgICAgIDE5OTkgTGFycyBLbm9sbCA8a25vbGxAa2RlLm9yZz4KICAqICAg
ICAgICAgICAgICAgICAgICAgMTk5OSBBbnR0aSBLb2l2aXN0byA8a29pdmlzdG9Aa2RlLm9yZz4K
ICAqICAgICAgICAgICAgICAgICAgICAgMjAwMCBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9y
Zz4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDEzLTIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAgICAgIChDKSAyMDA2IEdy
YWhhbSBEZW5uaXMgKGdyYWhhbS5kZW5uaXNAZ21haWwuY29tKQogICogICAgICAgICAgIChDKSAy
MDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtNTQyLDE3ICs1NDIsMTcg
QEAgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IEZyYW1lVmlldzo6Y3JlYXRlUwogICAgIC8vIFRyeSB0
aGUgPGJvZHk+IGVsZW1lbnQgZmlyc3QgYXMgYSBzY3JvbGxiYXIgc291cmNlLgogICAgIEhUTUxF
bGVtZW50KiBib2R5ID0gZG9jID8gZG9jLT5ib2R5T3JGcmFtZXNldCgpIDogbnVsbHB0cjsKICAg
ICBpZiAoYm9keSAmJiBib2R5LT5yZW5kZXJlcigpICYmIGJvZHktPnJlbmRlcmVyKCktPnN0eWxl
KCkuaGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKSkKLSAgICAgICAgcmV0dXJuIFJlbmRlclNjcm9s
bGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCBib2R5KTsKKyAg
ICAgICAgcmV0dXJuIFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlz
LCBvcmllbnRhdGlvbiwgYm9keSk7CiAgICAgCiAgICAgLy8gSWYgdGhlIDxib2R5PiBkaWRuJ3Qg
aGF2ZSBhIGN1c3RvbSBzdHlsZSwgdGhlbiB0aGUgcm9vdCBlbGVtZW50IG1pZ2h0LgogICAgIEVs
ZW1lbnQqIGRvY0VsZW1lbnQgPSBkb2MgPyBkb2MtPmRvY3VtZW50RWxlbWVudCgpIDogbnVsbHB0
cjsKICAgICBpZiAoZG9jRWxlbWVudCAmJiBkb2NFbGVtZW50LT5yZW5kZXJlcigpICYmIGRvY0Vs
ZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCkuaGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKSkKLSAg
ICAgICAgcmV0dXJuIFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHRoaXMs
IG9yaWVudGF0aW9uLCBkb2NFbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIFJlbmRlclNjcm9sbGJh
cjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgZG9jRWxlbWVudCk7
CiAgICAgICAgIAogICAgIC8vIElmIHdlIGhhdmUgYW4gb3duaW5nIGlmcmFtZS9mcmFtZSBlbGVt
ZW50LCB0aGVuIGl0IGNhbiBzZXQgdGhlIGN1c3RvbSBzY3JvbGxiYXIgYWxzby4KICAgICBSZW5k
ZXJXaWRnZXQqIGZyYW1lUmVuZGVyZXIgPSBmcmFtZSgpLm93bmVyUmVuZGVyZXIoKTsKICAgICBp
ZiAoZnJhbWVSZW5kZXJlciAmJiBmcmFtZVJlbmRlcmVyLT5zdHlsZSgpLmhhc1BzZXVkb1N0eWxl
KFNDUk9MTEJBUikpCi0gICAgICAgIHJldHVybiBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3Rv
bVNjcm9sbGJhcih0aGlzLCBvcmllbnRhdGlvbiwgMCwgJmZyYW1lKCkpOworICAgICAgICByZXR1
cm4gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0
aW9uLCBudWxscHRyLCAmZnJhbWUoKSk7CiAgICAgCiAgICAgLy8gTm9ib2R5IHNldCBhIGN1c3Rv
bSBzdHlsZSwgc28gd2UganVzdCB1c2UgYSBuYXRpdmUgc2Nyb2xsYmFyLgogICAgIHJldHVybiBT
Y3JvbGxWaWV3OjpjcmVhdGVTY3JvbGxiYXIob3JpZW50YXRpb24pOwpAQCAtMjA4MSw3ICsyMDgx
LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZQogICAgICAgICBp
ZiAoZnJhbWUoKS5wYWdlKCktPnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZp
eGVkUG9zaXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVy
c0FmdGVyU2Nyb2xsaW5nKCk7CiAgICAgICAgIEludFBvaW50IG5ld1Bvc2l0aW9uID0gc2Nyb2xs
UG9zaXRpb24oKTsKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS0+c2V0Q3VycmVudFBvc2l0aW9u
KHNjcm9sbFBvc2l0aW9uKCkpOworICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldEN1cnJlbnRQ
b3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsKICAgICAgICAgc2Nyb2xsUG9zaXRpb25DaGFuZ2Vk
KG9sZFBvc2l0aW9uLCBuZXdQb3NpdGlvbik7CiAgICAgfQogICAgIGlmICh2aXNpYmxlQ29udGVu
dFNpemVEaWRDaGFuZ2UpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAJKHJldmlzaW9uIDE4MDQ1MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjg5LDcgKzI4OSw3IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmhhbmRsZVdoZWVsRXYKICAgICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgZnJhbWVWaWV3LT5zY3JvbGxBbmltYXRvcigpLT5oYW5kbGVXaGVlbEV2ZW50UGhhc2Uo
cGhhc2UpOworICAgIGZyYW1lVmlldy0+c2Nyb2xsQW5pbWF0b3IoKS5oYW5kbGVXaGVlbEV2ZW50
UGhhc2UocGhhc2UpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BvcHVwTWVudUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BvcHVwTWVudUNsaWVudC5oCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Qb3B1cE1lbnVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpLgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAxNSBBcHBsZSBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgRm9udFNlbGVjdG9yKiBmb250U2Vs
ZWN0b3IoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBIb3N0V2luZG93KiBob3N0V2luZG93KCkg
Y29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Ny
b2xsYmFyKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNv
bnRyb2xTaXplKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRl
U2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhJiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJh
ckNvbnRyb2xTaXplKSA9IDA7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3IuY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQxLDEzICs0MSwxMyBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAjaWYgIUVOQUJMRShTTU9PVEhfU0NST0xMSU5HKSAmJiAhUExBVEZP
Uk0oSU9TKQotUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0
ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCitQYXNzT3duUHRyPFNjcm9sbEFuaW1h
dG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJl
YSkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVB
cmVhKSk7CiB9CiAjZW5kaWYKIAotU2Nyb2xsQW5pbWF0b3I6OlNjcm9sbEFuaW1hdG9yKFNjcm9s
bGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKK1Njcm9sbEFuaW1hdG9yOjpTY3JvbGxBbmltYXRv
cihTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiAgICAgOiBtX3Njcm9sbGFibGVBcmVh
KHNjcm9sbGFibGVBcmVhKQogICAgICwgbV9jdXJyZW50UG9zWCgwKQogICAgICwgbV9jdXJyZW50
UG9zWSgwKQpAQCAtNjEsNyArNjEsNyBAQCBTY3JvbGxBbmltYXRvcjo6flNjcm9sbEFuaW1hdG9y
KCkKIGJvb2wgU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmll
bnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIp
CiB7CiAgICAgZmxvYXQqIGN1cnJlbnRQb3MgPSAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNj
cm9sbGJhcikgPyAmbV9jdXJyZW50UG9zWCA6ICZtX2N1cnJlbnRQb3NZOwotICAgIGZsb2F0IG5l
d1BvcyA9IHN0ZDo6bWF4KHN0ZDo6bWluKCpjdXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVy
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFNpemUob3JpZW50
YXRpb24pKSksIDAuMGYpOworICAgIGZsb2F0IG5ld1BvcyA9IHN0ZDo6bWF4KHN0ZDo6bWluKCpj
dXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Ny
b2xsYWJsZUFyZWEuc2Nyb2xsU2l6ZShvcmllbnRhdGlvbikpKSwgMC4wZik7CiAgICAgZmxvYXQg
ZGVsdGEgPSAqY3VycmVudFBvcyAtIG5ld1BvczsKICAgICBpZiAoKmN1cnJlbnRQb3MgPT0gbmV3
UG9zKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTQsOCArMTE0LDggQEAgYm9vbCBTY3Jv
bGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudChjbwogICAgICAgICByZXR1cm4gdHJ1ZTsKICNl
bmRpZgogCi0gICAgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxl
QXJlYS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgIFNjcm9sbGJhciogdmVydGljYWxTY3Jv
bGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIFNjcm9s
bGJhciogaG9yaXpvbnRhbFNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNj
cm9sbGJhcigpOworICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBtX3Njcm9sbGFi
bGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFyKCk7CiAKICAgICAvLyBBY2NlcHQgdGhlIGV2ZW50IGlm
IHdlIGhhdmUgYSBzY3JvbGxiYXIgaW4gdGhhdCBkaXJlY3Rpb24gYW5kIGNhbiBzdGlsbAogICAg
IC8vIHNjcm9sbCBhbnkgZnVydGhlci4KQEAgLTEyNSw4ICsxMjUsOCBAQCBib29sIFNjcm9sbEFu
aW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KGNvCiAgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7CiAK
ICAgICBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSA9IFNjcm9sbEJ5UGl4ZWw7Ci0gICAg
SW50U2l6ZSBtYXhGb3J3YXJkU2Nyb2xsRGVsdGEgPSBtX3Njcm9sbGFibGVBcmVhLT5tYXhpbXVt
U2Nyb2xsUG9zaXRpb24oKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCk7Ci0g
ICAgSW50U2l6ZSBtYXhCYWNrd2FyZFNjcm9sbERlbHRhID0gbV9zY3JvbGxhYmxlQXJlYS0+c2Ny
b2xsUG9zaXRpb24oKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPm1pbmltdW1TY3JvbGxQb3NpdGlvbigp
OworICAgIEludFNpemUgbWF4Rm9yd2FyZFNjcm9sbERlbHRhID0gbV9zY3JvbGxhYmxlQXJlYS5t
YXhpbXVtU2Nyb2xsUG9zaXRpb24oKSAtIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsUG9zaXRpb24o
KTsKKyAgICBJbnRTaXplIG1heEJhY2t3YXJkU2Nyb2xsRGVsdGEgPSBtX3Njcm9sbGFibGVBcmVh
LnNjcm9sbFBvc2l0aW9uKCkgLSBtX3Njcm9sbGFibGVBcmVhLm1pbmltdW1TY3JvbGxQb3NpdGlv
bigpOwogICAgIGlmICgoZGVsdGFYIDwgMCAmJiBtYXhGb3J3YXJkU2Nyb2xsRGVsdGEud2lkdGgo
KSA+IDApCiAgICAgICAgIHx8IChkZWx0YVggPiAwICYmIG1heEJhY2t3YXJkU2Nyb2xsRGVsdGEu
d2lkdGgoKSA+IDApCiAgICAgICAgIHx8IChkZWx0YVkgPCAwICYmIG1heEZvcndhcmRTY3JvbGxE
ZWx0YS5oZWlnaHQoKSA+IDApCkBAIC0xMzYsNyArMTM2LDcgQEAgYm9vbCBTY3JvbGxBbmltYXRv
cjo6aGFuZGxlV2hlZWxFdmVudChjbwogICAgICAgICBpZiAoZGVsdGFZKSB7CiAgICAgICAgICAg
ICBpZiAoZS5ncmFudWxhcml0eSgpID09IFNjcm9sbEJ5UGFnZVdoZWVsRXZlbnQpIHsKICAgICAg
ICAgICAgICAgICBib29sIG5lZ2F0aXZlID0gZGVsdGFZIDwgMDsKLSAgICAgICAgICAgICAgICBk
ZWx0YVkgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwRGVsdGEobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJs
ZUhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBkZWx0YVkgPSBTY3JvbGxiYXI6OnBhZ2VTdGVw
RGVsdGEobV9zY3JvbGxhYmxlQXJlYS52aXNpYmxlSGVpZ2h0KCkpOwogICAgICAgICAgICAgICAg
IGlmIChuZWdhdGl2ZSkKICAgICAgICAgICAgICAgICAgICAgZGVsdGFZID0gLWRlbHRhWTsKICAg
ICAgICAgICAgIH0KQEAgLTE0Niw3ICsxNDYsNyBAQCBib29sIFNjcm9sbEFuaW1hdG9yOjpoYW5k
bGVXaGVlbEV2ZW50KGNvCiAgICAgICAgIGlmIChkZWx0YVgpIHsKICAgICAgICAgICAgIGlmIChl
LmdyYW51bGFyaXR5KCkgPT0gU2Nyb2xsQnlQYWdlV2hlZWxFdmVudCkgewogICAgICAgICAgICAg
ICAgIGJvb2wgbmVnYXRpdmUgPSBkZWx0YVggPCAwOwotICAgICAgICAgICAgICAgIGRlbHRhWCA9
IFNjcm9sbGJhcjo6cGFnZVN0ZXBEZWx0YShtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlV2lkdGgo
KSk7CisgICAgICAgICAgICAgICAgZGVsdGFYID0gU2Nyb2xsYmFyOjpwYWdlU3RlcERlbHRhKG1f
c2Nyb2xsYWJsZUFyZWEudmlzaWJsZVdpZHRoKCkpOwogICAgICAgICAgICAgICAgIGlmIChuZWdh
dGl2ZSkKICAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gLWRlbHRhWDsKICAgICAgICAgICAg
IH0KQEAgLTE3NywyMiArMTc3LDIyIEBAIEZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3I6OmN1cnJl
bnRQb3NpdGkKIHZvaWQgU2Nyb2xsQW5pbWF0b3I6Om5vdGlmeVBvc2l0aW9uQ2hhbmdlZChjb25z
dCBGbG9hdFNpemUmIGRlbHRhKQogewogICAgIFVOVVNFRF9QQVJBTShkZWx0YSk7Ci0gICAgbV9z
Y3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihJbnRQb2ludChtX2N1
cnJlbnRQb3NYLCBtX2N1cnJlbnRQb3NZKSk7CisgICAgbV9zY3JvbGxhYmxlQXJlYS5zZXRTY3Jv
bGxPZmZzZXRGcm9tQW5pbWF0aW9uKEludFBvaW50KG1fY3VycmVudFBvc1gsIG1fY3VycmVudFBv
c1kpKTsKIH0KIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1BQykK
IHZvaWQgU2Nyb2xsQW5pbWF0b3I6OnVwZGF0ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycygpCiB7
CiAgICAgLy8gRklYTUU6IEN1cnJlbnRseSwgc2Nyb2xsIHNuYXAgYW5pbWF0b3JzIGFyZSByZWNy
ZWF0ZWQgZXZlbiB0aG91Z2ggdGhlIHNuYXAgb2Zmc2V0cyBhbG9uZSBjYW4gYmUgdXBkYXRlZC4K
LSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkpIHsKLSAg
ICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxB
eGlzU2Nyb2xsU25hcEFuaW1hdG9yPih0aGlzLCBtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFs
U25hcE9mZnNldHMoKSwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKKyAgICBpZiAobV9z
Y3JvbGxhYmxlQXJlYS5ob3Jpem9udGFsU25hcE9mZnNldHMoKSkgeworICAgICAgICBtX2hvcml6
b250YWxTY3JvbGxTbmFwQW5pbWF0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPEF4aXNTY3JvbGxTbmFw
QW5pbWF0b3I+KHRoaXMsIG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCks
IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9s
bFNuYXBUaW1lciA9IHN0ZDo6bWFrZV91bmlxdWU8VGltZXI+KCp0aGlzLCAmU2Nyb2xsQW5pbWF0
b3I6Omhvcml6b250YWxTY3JvbGxTbmFwVGltZXJGaXJlZCk7CiAgICAgfSBlbHNlIGlmIChtX2hv
cml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3IpIHsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xs
U25hcEFuaW1hdG9yID0gbnVsbHB0cjsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25hcFRp
bWVyID0gbnVsbHB0cjsKICAgICB9Ci0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2Fs
U25hcE9mZnNldHMoKSkgewotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yID0g
c3RkOjptYWtlX3VuaXF1ZTxBeGlzU2Nyb2xsU25hcEFuaW1hdG9yPih0aGlzLCBtX3Njcm9sbGFi
bGVBcmVhLT52ZXJ0aWNhbFNuYXBPZmZzZXRzKCksIFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwp
OworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU25hcE9mZnNldHMoKSkgeworICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxBeGlz
U2Nyb2xsU25hcEFuaW1hdG9yPih0aGlzLCBtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU25hcE9m
ZnNldHMoKSwgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCk7CiAgICAgICAgIG1fdmVydGljYWxT
Y3JvbGxTbmFwVGltZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRpbWVyPigqdGhpcywgJlNjcm9sbEFu
aW1hdG9yOjp2ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lckZpcmVkKTsKICAgICB9IGVsc2UgaWYgKG1f
dmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3IpIHsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbFNu
YXBBbmltYXRvciA9IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yLmgJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICog
Q29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICAqIG1ldDoKQEAgLTU2LDcgKzU3
LDcgQEAgY2xhc3MgU2Nyb2xsQW5pbWF0b3IgewogI2VuZGlmCiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+
IGNyZWF0ZShTY3JvbGxhYmxlQXJlYSopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcm9sbEFu
aW1hdG9yPiBjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmKTsKIAogICAgIHZpcnR1YWwgflNjcm9sbEFu
aW1hdG9yKCk7CiAKQEAgLTY4LDcgKzY5LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CiAKLSAg
ICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEoKSBjb25zdCB7IHJldHVybiBtX3Njcm9s
bGFibGVBcmVhOyB9CisgICAgU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYTsgfQogCiAgICAgdmlydHVhbCBib29sIGhhbmRsZVdo
ZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CiAKQEAgLTEyNSw3ICsxMjYsNyBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IFNjcm9sbEFuaW1h
dG9yKFNjcm9sbGFibGVBcmVhKik7CisgICAgZXhwbGljaXQgU2Nyb2xsQW5pbWF0b3IoU2Nyb2xs
YWJsZUFyZWEmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQb3NpdGlvbkNoYW5nZWQoY29u
c3QgRmxvYXRTaXplJiBkZWx0YSk7CiAKQEAgLTEzNSw3ICsxMzYsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCB2ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lckZpcmVkKCk7CiAjZW5kaWYKIAotICAgIFNj
cm9sbGFibGVBcmVhKiBtX3Njcm9sbGFibGVBcmVhOworICAgIFNjcm9sbGFibGVBcmVhJiBtX3Nj
cm9sbGFibGVBcmVhOwogICAgIGZsb2F0IG1fY3VycmVudFBvc1g7IC8vIFdlIGF2b2lkIHVzaW5n
IGEgRmxvYXRQb2ludCBpbiBvcmRlciB0byByZWR1Y2UKICAgICBmbG9hdCBtX2N1cnJlbnRQb3NZ
OyAvLyBzdWJjbGFzcyBjb2RlIGNvbXBsZXhpdHkuCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkgJiYgUExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3JOb25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvck5vbmUuY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNTEsOSAr
NTIsOSBAQCBjb25zdCBkb3VibGUga1RpY2tUaW1lID0gMSAvIGtGcmFtZVJhdGU7CiBjb25zdCBk
b3VibGUga01pbmltdW1UaW1lckludGVydmFsID0gLjAwMTsKIGNvbnN0IGRvdWJsZSBrWm9vbVRp
Y2tzID0gMTE7CiAKLVBhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpj
cmVhdGUoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQorUGFzc093blB0cjxTY3JvbGxB
bmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJs
ZUFyZWEpCiB7Ci0gICAgaWYgKHNjcm9sbGFibGVBcmVhICYmIHNjcm9sbGFibGVBcmVhLT5zY3Jv
bGxBbmltYXRvckVuYWJsZWQoKSkKKyAgICBpZiAoc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0
b3JFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2Nyb2xsQW5pbWF0b3JO
b25lKHNjcm9sbGFibGVBcmVhKSk7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxBbmlt
YXRvcihzY3JvbGxhYmxlQXJlYSkpOwogfQpAQCAtNDA1LDcgKzQwNiw3IEBAIFNjcm9sbEFuaW1h
dG9yTm9uZTo6UGFyYW1ldGVycyBTY3JvbGxBbmkKIAogYm9vbCBTY3JvbGxBbmltYXRvck5vbmU6
OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpCiB7Ci0gICAgaWYg
KCFtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxBbmltYXRvckVuYWJsZWQoKSkKKyAgICBpZiAoIW1f
c2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3JFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBT
Y3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVs
dGlwbGllcik7CiAKICAgICAvLyBGSVhNRTogZ2V0IHRoZSB0eXBlIHBhc3NlZCBpbi4gTW91c2VX
aGVlbCBjb3VsZCBhbHNvIGJlIGJ5IGxpbmUsIGJ1dCBzaG91bGQgc3RpbGwgaGF2ZSBkaWZmZXJl
bnQKQEAgLTQyNyw3ICs0MjgsNyBAQCBib29sIFNjcm9sbEFuaW1hdG9yTm9uZTo6c2Nyb2xsKFNj
cm9sbGJhCiAgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9u
LCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CiAKICAgICAvLyBUaGlzIGlzIGFuIGFu
aW1hdGFibGUgc2Nyb2xsLiBTZXQgdGhlIGFuaW1hdGlvbiBpbiBtb3Rpb24gdXNpbmcgdGhlIGFw
cHJvcHJpYXRlIHBhcmFtZXRlcnMuCi0gICAgZmxvYXQgc2Nyb2xsYWJsZVNpemUgPSBzdGF0aWNf
Y2FzdDxmbG9hdD4obV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsU2l6ZShvcmllbnRhdGlvbikpOwor
ICAgIGZsb2F0IHNjcm9sbGFibGVTaXplID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYWJs
ZUFyZWEuc2Nyb2xsU2l6ZShvcmllbnRhdGlvbikpOwogCiAgICAgUGVyQXhpc0RhdGEmIGRhdGEg
PSAob3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpID8gbV92ZXJ0aWNhbERhdGEgOiBt
X2hvcml6b250YWxEYXRhOwogICAgIGJvb2wgbmVlZFRvU2Nyb2xsID0gZGF0YS51cGRhdGVEYXRh
RnJvbVBhcmFtZXRlcnMoc3RlcCwgbXVsdGlwbGllciwgc2Nyb2xsYWJsZVNpemUsIG1vbm90b25p
Y2FsbHlJbmNyZWFzaW5nVGltZSgpLCAmcGFyYW1ldGVycyk7CkBAIC00ODYsOCArNDg3LDggQEAg
dm9pZCBTY3JvbGxBbmltYXRvck5vbmU6OmRpZEFkZEhvcml6b250YQogCiB2b2lkIFNjcm9sbEFu
aW1hdG9yTm9uZTo6dXBkYXRlVmlzaWJsZUxlbmd0aHMoKQogewotICAgIG1faG9yaXpvbnRhbERh
dGEudXBkYXRlVmlzaWJsZUxlbmd0aChzY3JvbGxhYmxlQXJlYSgpLT52aXNpYmxlV2lkdGgoKSk7
Ci0gICAgbV92ZXJ0aWNhbERhdGEudXBkYXRlVmlzaWJsZUxlbmd0aChzY3JvbGxhYmxlQXJlYSgp
LT52aXNpYmxlSGVpZ2h0KCkpOworICAgIG1faG9yaXpvbnRhbERhdGEudXBkYXRlVmlzaWJsZUxl
bmd0aChzY3JvbGxhYmxlQXJlYSgpLnZpc2libGVXaWR0aCgpKTsKKyAgICBtX3ZlcnRpY2FsRGF0
YS51cGRhdGVWaXNpYmxlTGVuZ3RoKHNjcm9sbGFibGVBcmVhKCkudmlzaWJsZUhlaWdodCgpKTsK
IH0KIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikKQEAgLTUzMiw3ICs1
MzMsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6c3RhcnROZXh0VGltZXIoCiAjZWxzZQog
dm9pZCBTY3JvbGxBbmltYXRvck5vbmU6OnN0YXJ0TmV4dFRpbWVyKCkKIHsKLSAgICBpZiAoc2Ny
b2xsYWJsZUFyZWEoKS0+c2NoZWR1bGVBbmltYXRpb24oKSkKKyAgICBpZiAoc2Nyb2xsYWJsZUFy
ZWEoKS5zY2hlZHVsZUFuaW1hdGlvbigpKQogICAgICAgICBtX2FuaW1hdGlvbkFjdGl2ZSA9IHRy
dWU7CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yTm9uZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yTm9uZS5oCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvck5vbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIAogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC01Miw3ICs1Myw3IEBAIHN0
cnVjdCBTY3JvbGxBbmltYXRvclBhcmFtZXRlcnM7CiAKIGNsYXNzIFNjcm9sbEFuaW1hdG9yTm9u
ZSA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU2Nyb2xs
QW5pbWF0b3JOb25lKFNjcm9sbGFibGVBcmVhKik7CisgICAgZXhwbGljaXQgU2Nyb2xsQW5pbWF0
b3JOb25lKFNjcm9sbGFibGVBcmVhJik7CiAgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JOb25l
KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkocmV2aXNpb24gMTgwNDUwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NywgMjAwOCwgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM0LDcgKzEzNCw3IEBAIGJvb2wgU2Nyb2xs
Vmlldzo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIKIAogUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFNj
cm9sbFZpZXc6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlv
bikKIHsKLSAgICByZXR1cm4gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIodGhpcywg
b3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpOworICAgIHJldHVybiBTY3JvbGxiYXI6OmNy
ZWF0ZU5hdGl2ZVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIp
OwogfQogCiB2b2lkIFNjcm9sbFZpZXc6OnNldFNjcm9sbGJhck1vZGVzKFNjcm9sbGJhck1vZGUg
aG9yaXpvbnRhbE1vZGUsIFNjcm9sbGJhck1vZGUgdmVydGljYWxNb2RlLApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAkocmV2aXNpb24gMTgwNDUwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMSwgMjAx
NCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMTEsIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiAKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNzAsMTIgKzcwLDEzIEBAIFNjcm9sbGFi
bGVBcmVhOjp+U2Nyb2xsYWJsZUFyZWEoKQogewogfQogCi1TY3JvbGxBbmltYXRvciogU2Nyb2xs
YWJsZUFyZWE6OnNjcm9sbEFuaW1hdG9yKCkgY29uc3QKK1Njcm9sbEFuaW1hdG9yJiBTY3JvbGxh
YmxlQXJlYTo6c2Nyb2xsQW5pbWF0b3IoKSBjb25zdAogewogICAgIGlmICghbV9zY3JvbGxBbmlt
YXRvcikKLSAgICAgICAgbV9zY3JvbGxBbmltYXRvciA9IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUo
Y29uc3RfY2FzdDxTY3JvbGxhYmxlQXJlYSo+KHRoaXMpKTsKKyAgICAgICAgbV9zY3JvbGxBbmlt
YXRvciA9IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoY29uc3RfY2FzdDxTY3JvbGxhYmxlQXJlYSY+
KCp0aGlzKSk7CiAKLSAgICByZXR1cm4gbV9zY3JvbGxBbmltYXRvci5nZXQoKTsKKyAgICBBU1NF
UlQobV9zY3JvbGxBbmltYXRvcik7CisgICAgcmV0dXJuICptX3Njcm9sbEFuaW1hdG9yLmdldCgp
OwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxPcmlnaW4oY29uc3QgSW50UG9p
bnQmIG9yaWdpbikKQEAgLTEyNywyNiArMTI4LDI2IEBAIGJvb2wgU2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbChTY3JvbGxEaXJlY3QKICAgICAgICAgbXVsdGlwbGllciA9IC1tdWx0aXBsaWVyOwogCiAg
ICAgc3RlcCA9IGFkanVzdFNjcm9sbFN0ZXBGb3JGaXhlZENvbnRlbnQoc3RlcCwgb3JpZW50YXRp
b24sIGdyYW51bGFyaXR5KTsKLSAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3IoKS0+c2Nyb2xsKG9y
aWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CisgICAgcmV0dXJuIHNj
cm9sbEFuaW1hdG9yKCkuc2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVs
dGlwbGllcik7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aG91
dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQpCiB7Ci0gICAgc2Nyb2xsQW5pbWF0
b3IoKS0+c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG9mZnNldCk7CisgICAgc2Nyb2xs
QW5pbWF0b3IoKS5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24ob2Zmc2V0KTsKIH0KIAog
dm9pZCBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBmbG9hdCBvZmZzZXQpCiB7CiAgICAgaWYgKG9y
aWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0
V2l0aG91dEFuaW1hdGlvbihGbG9hdFBvaW50KG9mZnNldCwgc2Nyb2xsQW5pbWF0b3IoKS0+Y3Vy
cmVudFBvc2l0aW9uKCkueSgpKSk7CisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1h
dGlvbihGbG9hdFBvaW50KG9mZnNldCwgc2Nyb2xsQW5pbWF0b3IoKS5jdXJyZW50UG9zaXRpb24o
KS55KCkpKTsKICAgICBlbHNlCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlv
bihGbG9hdFBvaW50KHNjcm9sbEFuaW1hdG9yKCktPmN1cnJlbnRQb3NpdGlvbigpLngoKSwgb2Zm
c2V0KSk7CisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihGbG9hdFBvaW50
KHNjcm9sbEFuaW1hdG9yKCkuY3VycmVudFBvc2l0aW9uKCkueCgpLCBvZmZzZXQpKTsKIH0KIAog
dm9pZCBTY3JvbGxhYmxlQXJlYTo6bm90aWZ5U2Nyb2xsUG9zaXRpb25DaGFuZ2VkKGNvbnN0IElu
dFBvaW50JiBwb3NpdGlvbikKIHsKICAgICBzY3JvbGxQb3NpdGlvbkNoYW5nZWQocG9zaXRpb24p
OwotICAgIHNjcm9sbEFuaW1hdG9yKCktPnNldEN1cnJlbnRQb3NpdGlvbihwb3NpdGlvbik7Cisg
ICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50UG9zaXRpb24ocG9zaXRpb24pOwogfQogCiB2
b2lkIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxQb3NpdGlvbkNoYW5nZWQoY29uc3QgSW50UG9pbnQm
IHBvc2l0aW9uKQpAQCAtMTc5LDcgKzE4MCw3IEBAIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bFBvc2l0aW9uQ2hhbmcKICAgICB9CiAKICAgICBpZiAoc2Nyb2xsUG9zaXRpb24oKSAhPSBvbGRQ
b3NpdGlvbikKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS0+bm90aWZ5Q29udGVudEFyZWFTY3Jv
bGxlZChzY3JvbGxQb3NpdGlvbigpIC0gb2xkUG9zaXRpb24pOworICAgICAgICBzY3JvbGxBbmlt
YXRvcigpLm5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoc2Nyb2xsUG9zaXRpb24oKSAtIG9sZFBv
c2l0aW9uKTsKIH0KIAogYm9vbCBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCkBAIC0xODcsMTMgKzE4OCwxMyBAQCBi
b29sIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVlbEV2ZW50KGNvCiAgICAgaWYgKCFpc1Njcm9s
bGFibGVPclJ1YmJlcmJhbmRhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJl
dHVybiBzY3JvbGxBbmltYXRvcigpLT5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOworICAg
IHJldHVybiBzY3JvbGxBbmltYXRvcigpLmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7CiB9
CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogYm9vbCBTY3JvbGxhYmxlQXJlYTo6aGFuZGxl
VG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIHRvdWNoRXZlbnQpCiB7Ci0gICAg
cmV0dXJuIHNjcm9sbEFuaW1hdG9yKCktPmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7Cisg
ICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yKCkuaGFuZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50KTsK
IH0KICNlbmRpZgogCkBAIC0yNTUsMTIgKzI1NiwxMiBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjpt
b3VzZU1vdmVkSW5Db250ZW50CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6Om1vdXNlRW50ZXJlZFNj
cm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKIHsKLSAgICBzY3JvbGxBbmltYXRv
cigpLT5tb3VzZUVudGVyZWRTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICBzY3JvbGxBbmltYXRv
cigpLm1vdXNlRW50ZXJlZFNjcm9sbGJhcihzY3JvbGxiYXIpOwogfQogCiB2b2lkIFNjcm9sbGFi
bGVBcmVhOjptb3VzZUV4aXRlZFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QK
IHsKLSAgICBzY3JvbGxBbmltYXRvcigpLT5tb3VzZUV4aXRlZFNjcm9sbGJhcihzY3JvbGxiYXIp
OworICAgIHNjcm9sbEFuaW1hdG9yKCkubW91c2VFeGl0ZWRTY3JvbGxiYXIoc2Nyb2xsYmFyKTsK
IH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6Y29udGVudEFyZWFEaWRTaG93KCkgY29uc3QKQEAg
LTI5MSw5ICsyOTIsOSBAQCBib29sIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxiYXJzQ2FuQmVBY3Rp
CiB2b2lkIFNjcm9sbGFibGVBcmVhOjpkaWRBZGRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxi
YXIsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQogewogICAgIGlmIChvcmllbnRh
dGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS0+ZGlk
QWRkVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3Io
KS5kaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIpOwogICAgIGVsc2UKLSAgICAgICAg
c2Nyb2xsQW5pbWF0b3IoKS0+ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxiYXIpOwor
ICAgICAgICBzY3JvbGxBbmltYXRvcigpLmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xs
YmFyKTsKIAogICAgIC8vIDxyZGFyOi8vcHJvYmxlbS85Nzk3MjUzPiBBcHBLaXQgcmVzZXRzIHRo
ZSBzY3JvbGxiYXIncyBzdHlsZSB3aGVuIHlvdSBhdHRhY2ggYSBzY3JvbGxiYXIKICAgICBzZXRT
Y3JvbGxiYXJPdmVybGF5U3R5bGUoc2Nyb2xsYmFyT3ZlcmxheVN0eWxlKCkpOwpAQCAtMzAyLDkg
KzMwMyw5IEBAIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmRpZEFkZFNjcm9sbGJhcihTY3IKIHZvaWQg
U2Nyb2xsYWJsZUFyZWE6OndpbGxSZW1vdmVTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIs
IFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQogewogICAgIGlmIChvcmllbnRhdGlv
biA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS0+d2lsbFJl
bW92ZVZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgICAgIHNjcm9sbEFuaW1hdG9y
KCkud2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiAgICAgZWxzZQotICAg
ICAgICBzY3JvbGxBbmltYXRvcigpLT53aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihzY3Jv
bGxiYXIpOworICAgICAgICBzY3JvbGxBbmltYXRvcigpLndpbGxSZW1vdmVIb3Jpem9udGFsU2Ny
b2xsYmFyKHNjcm9sbGJhcik7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRzUmVz
aXplZCgpCkBAIC0zNjUsMTIgKzM2NiwxMiBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjppbnZhbGlk
YXRlU2Nyb2xsQ29yCiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFyTGF5
ZXJEaWRDaGFuZ2UoKQogewotICAgIHNjcm9sbEFuaW1hdG9yKCktPnZlcnRpY2FsU2Nyb2xsYmFy
TGF5ZXJEaWRDaGFuZ2UoKTsKKyAgICBzY3JvbGxBbmltYXRvcigpLnZlcnRpY2FsU2Nyb2xsYmFy
TGF5ZXJEaWRDaGFuZ2UoKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNj
cm9sbGJhckxheWVyRGlkQ2hhbmdlKCkKIHsKLSAgICBzY3JvbGxBbmltYXRvcigpLT5ob3Jpem9u
dGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKTsKKyAgICBzY3JvbGxBbmltYXRvcigpLmhvcml6
b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpOwogfQogCiBib29sIFNjcm9sbGFibGVBcmVh
OjpoYXNMYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTcsNyArMTE3LDcgQEAgcHVibGljOgogICAgIFNjcm9sbGJhck92ZXJsYXlTdHlsZSBzY3JvbGxi
YXJPdmVybGF5U3R5bGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxTY3JvbGxiYXJPdmVy
bGF5U3R5bGU+KG1fc2Nyb2xsYmFyT3ZlcmxheVN0eWxlKTsgfQogCiAgICAgLy8gVGhpcyBnZXR0
ZXIgd2lsbCBjcmVhdGUgYSBTY3JvbGxBbmltYXRvciBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhp
c3QuCi0gICAgV0VCQ09SRV9FWFBPUlQgU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yKCkg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgU2Nyb2xsQW5pbWF0b3ImIHNjcm9sbEFuaW1hdG9y
KCkgY29uc3Q7CiAKICAgICAvLyBUaGlzIGdldHRlciB3aWxsIHJldHVybiBudWxsIGlmIHRoZSBT
Y3JvbGxBbmltYXRvciBoYXNuJ3QgYmVlbiBjcmVhdGVkIHlldC4KICAgICBTY3JvbGxBbmltYXRv
ciogZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsQW5pbWF0
b3IuZ2V0KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAkocmV2
aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA2LCAyMDA4LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsNyArNDQsNyBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgIVBMQVRGT1JNKEVGTCkKLVBhc3NSZWZQdHI8U2Nyb2xs
YmFyPiBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSogc2Ny
b2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJD
b250cm9sU2l6ZSBzaXplKQorUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFNjcm9sbGJhcjo6Y3JlYXRl
TmF0aXZlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplIHNpemUpCiB7CiAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY3JvbGxiYXIoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0
aW9uLCBzaXplKSk7CiB9CkBAIC01Niw3ICs1Niw3IEBAIGludCBTY3JvbGxiYXI6Om1heE92ZXJs
YXBCZXR3ZWVuUGFnZXMoKQogICAgIHJldHVybiBtYXhPdmVybGFwQmV0d2VlblBhZ2VzOwogfQog
Ci1TY3JvbGxiYXI6OlNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNj
cm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250
cm9sU2l6ZSwKK1Njcm9sbGJhcjo6U2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxl
QXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xT
aXplIGNvbnRyb2xTaXplLAogICAgICAgICAgICAgICAgICAgICAgU2Nyb2xsYmFyVGhlbWUqIHRo
ZW1lLCBib29sIGlzQ3VzdG9tU2Nyb2xsYmFyKQogICAgIDogbV9zY3JvbGxhYmxlQXJlYShzY3Jv
bGxhYmxlQXJlYSkKICAgICAsIG1fb3JpZW50YXRpb24ob3JpZW50YXRpb24pCkBAIC05Myw4ICs5
Myw3IEBAIFNjcm9sbGJhcjo6U2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiBzY3IKICAgICBpbnQg
dGhpY2tuZXNzID0gbV90aGVtZS0+c2Nyb2xsYmFyVGhpY2tuZXNzKGNvbnRyb2xTaXplKTsKICAg
ICBXaWRnZXQ6OnNldEZyYW1lUmVjdChJbnRSZWN0KDAsIDAsIHRoaWNrbmVzcywgdGhpY2tuZXNz
KSk7CiAKLSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKLSAgICAgICAgbV9jdXJyZW50UG9zID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKHRoaXMp
KTsKKyAgICBtX2N1cnJlbnRQb3MgPSBzdGF0aWNfY2FzdDxmbG9hdD4obV9zY3JvbGxhYmxlQXJl
YS5zY3JvbGxQb3NpdGlvbih0aGlzKSk7CiB9CiAKIFNjcm9sbGJhcjo6flNjcm9sbGJhcigpCkBA
IC0xMDYsMTIgKzEwNSwxMiBAQCBTY3JvbGxiYXI6On5TY3JvbGxiYXIoKQogCiBTY3JvbGxiYXJP
dmVybGF5U3R5bGUgU2Nyb2xsYmFyOjpzY3JvbGxiYXJPdmVybGF5U3R5bGUoKSBjb25zdAogewot
ICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhID8gbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsYmFy
T3ZlcmxheVN0eWxlKCkgOiBTY3JvbGxiYXJPdmVybGF5U3R5bGVEZWZhdWx0OworICAgIHJldHVy
biBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbGJhck92ZXJsYXlTdHlsZSgpOwogfQogCiBib29sIFNj
cm9sbGJhcjo6aXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
c2Nyb2xsYWJsZUFyZWEgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aXNBY3RpdmUoKTsKKyAgICByZXR1
cm4gbV9zY3JvbGxhYmxlQXJlYS5pc0FjdGl2ZSgpOwogfQogCiBib29sIFNjcm9sbGJhcjo6aXNT
Y3JvbGxWaWV3U2Nyb2xsYmFyKCkgY29uc3QKQEAgLTEyMSw5ICsxMjAsNyBAQCBib29sIFNjcm9s
bGJhcjo6aXNTY3JvbGxWaWV3U2Nyb2xsYmFyKCkgCiAKIHZvaWQgU2Nyb2xsYmFyOjpvZmZzZXRE
aWRDaGFuZ2UoKQogewotICAgIEFTU0VSVChtX3Njcm9sbGFibGVBcmVhKTsKLQotICAgIGZsb2F0
IHBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBv
c2l0aW9uKHRoaXMpKTsKKyAgICBmbG9hdCBwb3NpdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0Piht
X3Njcm9sbGFibGVBcmVhLnNjcm9sbFBvc2l0aW9uKHRoaXMpKTsKICAgICBpZiAocG9zaXRpb24g
PT0gbV9jdXJyZW50UG9zKQogICAgICAgICByZXR1cm47CiAKQEAgLTIxMSw3ICsyMDgsNyBAQCB2
b2lkIFNjcm9sbGJhcjo6YXV0b3Njcm9sbFByZXNzZWRQYXJ0KGRvCiAgICAgfQogCiAgICAgLy8g
SGFuZGxlIHRoZSBhcnJvd3MgYW5kIHRyYWNrLgotICAgIGlmIChtX3Njcm9sbGFibGVBcmVhICYm
IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbChwcmVzc2VkUGFydFNjcm9sbERpcmVjdGlvbigpLCBw
cmVzc2VkUGFydFNjcm9sbEdyYW51bGFyaXR5KCkpKQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVh
LnNjcm9sbChwcmVzc2VkUGFydFNjcm9sbERpcmVjdGlvbigpLCBwcmVzc2VkUGFydFNjcm9sbEdy
YW51bGFyaXR5KCkpKQogICAgICAgICBzdGFydFRpbWVySWZOZWVkZWQoZGVsYXkpOwogfQogCkBA
IC0yNzAsMjIgKzI2NywxOSBAQCBTY3JvbGxHcmFudWxhcml0eSBTY3JvbGxiYXI6OnByZXNzZWRQ
YXJ0CiAKIHZvaWQgU2Nyb2xsYmFyOjptb3ZlVGh1bWIoaW50IHBvcywgYm9vbCBkcmFnZ2luZ0Rv
Y3VtZW50KQogewotICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYSkKLSAgICAgICAgcmV0dXJuOwot
CiAgICAgaW50IGRlbHRhID0gcG9zIC0gbV9wcmVzc2VkUG9zOwogCiAgICAgaWYgKGRyYWdnaW5n
RG9jdW1lbnQpIHsKICAgICAgICAgaWYgKG1fZHJhZ2dpbmdEb2N1bWVudCkKICAgICAgICAgICAg
IGRlbHRhID0gcG9zIC0gbV9kb2N1bWVudERyYWdQb3M7CiAgICAgICAgIG1fZHJhZ2dpbmdEb2N1
bWVudCA9IHRydWU7Ci0gICAgICAgIEZsb2F0UG9pbnQgY3VycmVudFBvc2l0aW9uID0gbV9zY3Jv
bGxhYmxlQXJlYS0+c2Nyb2xsQW5pbWF0b3IoKS0+Y3VycmVudFBvc2l0aW9uKCk7CisgICAgICAg
IEZsb2F0UG9pbnQgY3VycmVudFBvc2l0aW9uID0gbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxBbmlt
YXRvcigpLmN1cnJlbnRQb3NpdGlvbigpOwogICAgICAgICBpbnQgZGVzdGluYXRpb25Qb3NpdGlv
biA9IChtX29yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBjdXJyZW50UG9zaXRp
b24ueCgpIDogY3VycmVudFBvc2l0aW9uLnkoKSkgKyBkZWx0YTsKICAgICAgICAgaWYgKGRlbHRh
ID4gMCkKICAgICAgICAgICAgIGRlc3RpbmF0aW9uUG9zaXRpb24gPSBzdGQ6Om1pbihkZXN0aW5h
dGlvblBvc2l0aW9uICsgZGVsdGEsIG1heGltdW0oKSk7CiAgICAgICAgIGVsc2UgaWYgKGRlbHRh
IDwgMCkKICAgICAgICAgICAgIGRlc3RpbmF0aW9uUG9zaXRpb24gPSBzdGQ6Om1heChkZXN0aW5h
dGlvblBvc2l0aW9uICsgZGVsdGEsIDApOwotICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zY3Jv
bGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24obV9vcmllbnRhdGlvbiwgZGVzdGluYXRpb25Qb3Np
dGlvbik7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5p
bWF0aW9uKG1fb3JpZW50YXRpb24sIGRlc3RpbmF0aW9uUG9zaXRpb24pOwogICAgICAgICBtX2Rv
Y3VtZW50RHJhZ1BvcyA9IHBvczsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMwNyw3ICsz
MDEsNyBAQCB2b2lkIFNjcm9sbGJhcjo6bW92ZVRodW1iKGludCBwb3MsIGJvb2wgCiAgICAgCiAg
ICAgaWYgKGRlbHRhKSB7CiAgICAgICAgIGZsb2F0IG5ld1Bvc2l0aW9uID0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHRodW1iUG9zICsgZGVsdGEpICogbWF4aW11bSgpIC8gKHRyYWNrTGVuIC0gdGh1bWJM
ZW4pOwotICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24obV9vcmllbnRhdGlvbiwgbmV3UG9zaXRpb24pOworICAgICAgICBtX3Njcm9sbGFibGVB
cmVhLnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihtX29yaWVudGF0aW9uLCBuZXdQb3Np
dGlvbik7CiAgICAgfQogfQogCkBAIC0zNDAsMTAgKzMzNCw5IEBAIHZvaWQgU2Nyb2xsYmFyOjpz
ZXRQcmVzc2VkUGFydChTY3JvbGxiYXIKIGJvb2wgU2Nyb2xsYmFyOjptb3VzZU1vdmVkKGNvbnN0
IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQogewogICAgIGlmIChtX3ByZXNzZWRQYXJ0ID09IFRo
dW1iUGFydCkgewotICAgICAgICBpZiAodGhlbWUoKS0+c2hvdWxkU25hcEJhY2tUb0RyYWdPcmln
aW4odGhpcywgZXZ0KSkgewotICAgICAgICAgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCi0gICAg
ICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0
aW9uKG1fb3JpZW50YXRpb24sIG1fZHJhZ09yaWdpbik7Ci0gICAgICAgIH0gZWxzZSB7CisgICAg
ICAgIGlmICh0aGVtZSgpLT5zaG91bGRTbmFwQmFja1RvRHJhZ09yaWdpbih0aGlzLCBldnQpKQor
ICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRp
b24obV9vcmllbnRhdGlvbiwgbV9kcmFnT3JpZ2luKTsKKyAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICBtb3ZlVGh1bWIobV9vcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gCiAg
ICAgICAgICAgICAgICAgICAgICAgY29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2dC5wb3Np
dGlvbigpKS54KCkgOgogICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRGcm9tQ29udGFpbmlu
Z1dpbmRvdyhldnQucG9zaXRpb24oKSkueSgpLCB0aGVtZSgpLT5zaG91bGREcmFnRG9jdW1lbnRJ
bnN0ZWFkT2ZUaHVtYih0aGlzLCBldnQpKTsKQEAgLTM3OSwxNCArMzcyLDEyIEBAIGJvb2wgU2Ny
b2xsYmFyOjptb3VzZU1vdmVkKGNvbnN0IFBsYXRmb3IKIAogdm9pZCBTY3JvbGxiYXI6Om1vdXNl
RW50ZXJlZCgpCiB7Ci0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIG1fc2Nyb2xs
YWJsZUFyZWEtPm1vdXNlRW50ZXJlZFNjcm9sbGJhcih0aGlzKTsKKyAgICBtX3Njcm9sbGFibGVB
cmVhLm1vdXNlRW50ZXJlZFNjcm9sbGJhcih0aGlzKTsKIH0KIAogYm9vbCBTY3JvbGxiYXI6Om1v
dXNlRXhpdGVkKCkKIHsKLSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKLSAgICAgICAgbV9zY3Jv
bGxhYmxlQXJlYS0+bW91c2VFeGl0ZWRTY3JvbGxiYXIodGhpcyk7CisgICAgbV9zY3JvbGxhYmxl
QXJlYS5tb3VzZUV4aXRlZFNjcm9sbGJhcih0aGlzKTsKICAgICBzZXRIb3ZlcmVkUGFydChOb1Bh
cnQpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzk4LDEzICszODksMTEgQEAgYm9vbCBTY3Jv
bGxiYXI6Om1vdXNlVXAoY29uc3QgUGxhdGZvcm1NbwogICAgIG1fZHJhZ2dpbmdEb2N1bWVudCA9
IGZhbHNlOwogICAgIHN0b3BUaW1lcklmTmVlZGVkKCk7CiAKLSAgICBpZiAobV9zY3JvbGxhYmxl
QXJlYSkgewotICAgICAgICAvLyBtX2hvdmVyZWRQYXJ0IHdvbid0IGJlIHVwZGF0ZWQgdW50aWwg
dGhlIG5leHQgbW91c2VNb3ZlZCBvciBtb3VzZURvd24sIHNvIHdlIGhhdmUgdG8gaGl0IHRlc3QK
LSAgICAgICAgLy8gdG8gcmVhbGx5IGtub3cgaWYgdGhlIG1vdXNlIGhhcyBleGl0ZWQgdGhlIHNj
cm9sbGJhciBvbiBhIG1vdXNlVXAuCi0gICAgICAgIFNjcm9sbGJhclBhcnQgcGFydCA9IHRoZW1l
KCktPmhpdFRlc3QodGhpcywgbW91c2VFdmVudC5wb3NpdGlvbigpKTsKLSAgICAgICAgaWYgKHBh
cnQgPT0gTm9QYXJ0KQotICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+bW91c2VFeGl0ZWRT
Y3JvbGxiYXIodGhpcyk7Ci0gICAgfQorICAgIC8vIG1faG92ZXJlZFBhcnQgd29uJ3QgYmUgdXBk
YXRlZCB1bnRpbCB0aGUgbmV4dCBtb3VzZU1vdmVkIG9yIG1vdXNlRG93biwgc28gd2UgaGF2ZSB0
byBoaXQgdGVzdAorICAgIC8vIHRvIHJlYWxseSBrbm93IGlmIHRoZSBtb3VzZSBoYXMgZXhpdGVk
IHRoZSBzY3JvbGxiYXIgb24gYSBtb3VzZVVwLgorICAgIFNjcm9sbGJhclBhcnQgcGFydCA9IHRo
ZW1lKCktPmhpdFRlc3QodGhpcywgbW91c2VFdmVudC5wb3NpdGlvbigpKTsKKyAgICBpZiAocGFy
dCA9PSBOb1BhcnQpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEubW91c2VFeGl0ZWRTY3JvbGxi
YXIodGhpcyk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTQ5OCwxMiArNDg3LDEyIEBAIGJv
b2wgU2Nyb2xsYmFyOjpzaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGUKICAgICAvLyBOb24tb3Zlcmxh
eSBzY3JvbGxiYXJzIHNob3VsZCBhbHdheXMgcGFydGljaXBhdGUgaW4gaGl0IHRlc3RpbmcuCiAg
ICAgaWYgKCFpc092ZXJsYXlTY3JvbGxiYXIoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
cmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEFuaW1hdG9yKCktPnNob3VsZFNjcm9sbGJh
clBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKHRoaXMpOworICAgIHJldHVybiBtX3Njcm9sbGFibGVB
cmVhLnNjcm9sbEFuaW1hdG9yKCkuc2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3Rp
bmcodGhpcyk7CiB9CiAKIGJvb2wgU2Nyb2xsYmFyOjppc1dpbmRvd0FjdGl2ZSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aXNBY3Rp
dmUoKTsKKyAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS5pc0FjdGl2ZSgpOwogfQogCiB2b2lk
IFNjcm9sbGJhcjo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTUxMSw0
MCArNTAwLDI3IEBAIHZvaWQgU2Nyb2xsYmFyOjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnQKICAg
ICBpZiAoc3VwcHJlc3NJbnZhbGlkYXRpb24oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KG1fc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmludmFsaWRhdGVT
Y3JvbGxiYXIodGhpcywgcmVjdCk7CisgICAgbV9zY3JvbGxhYmxlQXJlYS5pbnZhbGlkYXRlU2Ny
b2xsYmFyKHRoaXMsIHJlY3QpOwogfQogCiBJbnRSZWN0IFNjcm9sbGJhcjo6Y29udmVydFRvQ29u
dGFpbmluZ1ZpZXcoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdAogewotICAgIGlmICht
X3Njcm9sbGFibGVBcmVhKQotICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+Y29udmVy
dEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KHRoaXMsIGxvY2FsUmVjdCk7Ci0KLSAgICBy
ZXR1cm4gV2lkZ2V0Ojpjb252ZXJ0VG9Db250YWluaW5nVmlldyhsb2NhbFJlY3QpOworICAgIHJl
dHVybiBtX3Njcm9sbGFibGVBcmVhLmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmll
dyh0aGlzLCBsb2NhbFJlY3QpOwogfQogCiBJbnRSZWN0IFNjcm9sbGJhcjo6Y29udmVydEZyb21D
b250YWluaW5nVmlldyhjb25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAogewotICAgIGlm
IChtX3Njcm9sbGFibGVBcmVhKQotICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+Y29u
dmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKHRoaXMsIHBhcmVudFJlY3QpOwotCi0g
ICAgcmV0dXJuIFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nVmlldyhwYXJlbnRSZWN0KTsK
KyAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9T
Y3JvbGxiYXIodGhpcywgcGFyZW50UmVjdCk7CiB9CiAKIEludFBvaW50IFNjcm9sbGJhcjo6Y29u
dmVydFRvQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0CiB7
Ci0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVB
cmVhLT5jb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcodGhpcywgbG9jYWxQb2lu
dCk7Ci0KLSAgICByZXR1cm4gV2lkZ2V0Ojpjb252ZXJ0VG9Db250YWluaW5nVmlldyhsb2NhbFBv
aW50KTsKKyAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS5jb252ZXJ0RnJvbVNjcm9sbGJhclRv
Q29udGFpbmluZ1ZpZXcodGhpcywgbG9jYWxQb2ludCk7CiB9CiAKIEludFBvaW50IFNjcm9sbGJh
cjo6Y29udmVydEZyb21Db250YWluaW5nVmlldyhjb25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQp
IGNvbnN0CiB7Ci0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIHJldHVybiBtX3Nj
cm9sbGFibGVBcmVhLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIodGhpcywg
cGFyZW50UG9pbnQpOwotCi0gICAgcmV0dXJuIFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5n
VmlldyhwYXJlbnRQb2ludCk7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuY29udmVydEZy
b21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKHRoaXMsIHBhcmVudFBvaW50KTsKIH0KIAogYm9v
bCBTY3JvbGxiYXI6OnN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlUaHJlYWQoKSBjb25zdApAQCAt
NTUyLDggKzUyOCw4IEBAIGJvb2wgU2Nyb2xsYmFyOjpzdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXIK
ICAgICAvLyBJdCdzIHVuZm9ydHVuYXRlIHRoYXQgdGhpcyBuZWVkcyB0byBiZSBkb25lIHdpdGgg
YW4gaWZkZWYuIElkZWFsbHkgdGhlcmUgd291bGQgYmUgYSB3YXkgdG8gZmVhdHVyZS1kZXRlY3QK
ICAgICAvLyB0aGUgbmVjZXNzYXJ5IHN1cHBvcnQgd2l0aGluIEFwcEtpdC4KICNpZiBFTkFCTEUo
QVNZTkNfU0NST0xMSU5HKSAmJiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTAxMDAwCi0gICAgcmV0dXJuICFtX3Njcm9sbGFibGVBcmVhLT5mb3Jj
ZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKQotICAg
ICAgICAmJiAobV9zY3JvbGxhYmxlQXJlYS0+aGFzTGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigp
IHx8IG1fc2Nyb2xsYWJsZUFyZWEtPmhhc0xheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKTsK
KyAgICByZXR1cm4gIW1fc2Nyb2xsYWJsZUFyZWEuZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWlu
VGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkKKyAgICAgICAgJiYgKG1fc2Nyb2xsYWJsZUFy
ZWEuaGFzTGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIHx8IG1fc2Nyb2xsYWJsZUFyZWEuaGFz
TGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oCShyZXZpc2lvbiAx
ODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIw
MTQgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNiwgMjAxNC0yMDE1IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3MgU2Nyb2xs
YmFyIDogcHVibGljIFdpZGdldCwKIAogcHVibGljOgogICAgIC8vIE11c3QgYmUgaW1wbGVtZW50
ZWQgYnkgcGxhdGZvcm1zIHRoYXQgY2FuJ3Qgc2ltcGx5IHVzZSB0aGUgU2Nyb2xsYmFyIGJhc2Ug
Y2xhc3MuICBSaWdodCBub3cgdGhlIG9ubHkgcGxhdGZvcm0gdGhhdCBpcyBub3QgdXNpbmcgdGhl
IGJhc2UgY2xhc3MgaXMgR1RLLgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBQYXNzUmVmUHRy
PFNjcm9sbGJhcj4gY3JlYXRlTmF0aXZlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xs
YmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplIHNpemUpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlTmF0
aXZlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhJiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9s
bGJhckNvbnRyb2xTaXplKTsKIAogICAgIHZpcnR1YWwgflNjcm9sbGJhcigpOwogCkBAIC0xMDMs
OCArMTAzLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBpbnQgcGFnZVN0ZXAoaW50IHZpZXdXaWR0
aE9ySGVpZ2h0KSB7IHJldHVybiBwYWdlU3RlcCh2aWV3V2lkdGhPckhlaWdodCwgdmlld1dpZHRo
T3JIZWlnaHQpOyB9CiAgICAgc3RhdGljIGZsb2F0IHBhZ2VTdGVwRGVsdGEoaW50IHdpZHRoT3JI
ZWlnaHQpIHsgcmV0dXJuIHN0ZDo6bWF4KHN0ZDo6bWF4KHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0
aE9ySGVpZ2h0KSAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIHN0
YXRpY19jYXN0PGZsb2F0Pih3aWR0aE9ySGVpZ2h0KSAtIFNjcm9sbGJhcjo6bWF4T3ZlcmxhcEJl
dHdlZW5QYWdlcygpKSwgMS4wZik7IH0KIAotICAgIHZvaWQgZGlzY29ubmVjdEZyb21TY3JvbGxh
YmxlQXJlYSgpIHsgbV9zY3JvbGxhYmxlQXJlYSA9IDA7IH0KLSAgICBTY3JvbGxhYmxlQXJlYSog
c2Nyb2xsYWJsZUFyZWEoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVBcmVhOyB9CisgICAg
U2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxh
YmxlQXJlYTsgfQogCiAgICAgaW50IHByZXNzZWRQb3MoKSBjb25zdCB7IHJldHVybiBtX3ByZXNz
ZWRQb3M7IH0KIApAQCAtMTU5LDcgKzE1OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wg
c3VwcG9ydHNVcGRhdGVPblNlY29uZGFyeVRocmVhZCgpIGNvbnN0IG92ZXJyaWRlOwogCiBwcm90
ZWN0ZWQ6Ci0gICAgU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRp
b24sIFNjcm9sbGJhckNvbnRyb2xTaXplLCBTY3JvbGxiYXJUaGVtZSogPSAwLCBib29sIGlzQ3Vz
dG9tU2Nyb2xsYmFyID0gZmFsc2UpOworICAgIFNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSYsIFNj
cm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSwgU2Nyb2xsYmFyVGhlbWUq
ID0gMCwgYm9vbCBpc0N1c3RvbVNjcm9sbGJhciA9IGZhbHNlKTsKIAogICAgIHZvaWQgdXBkYXRl
VGh1bWIoKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGh1bWJQb3NpdGlvbigpOwpAQCAtMTcy
LDcgKzE3MSw3IEBAIHByb3RlY3RlZDoKICAgICBTY3JvbGxEaXJlY3Rpb24gcHJlc3NlZFBhcnRT
Y3JvbGxEaXJlY3Rpb24oKTsKICAgICBTY3JvbGxHcmFudWxhcml0eSBwcmVzc2VkUGFydFNjcm9s
bEdyYW51bGFyaXR5KCk7CiAKLSAgICBTY3JvbGxhYmxlQXJlYSogbV9zY3JvbGxhYmxlQXJlYTsK
KyAgICBTY3JvbGxhYmxlQXJlYSYgbV9zY3JvbGxhYmxlQXJlYTsKICAgICBTY3JvbGxiYXJPcmll
bnRhdGlvbiBtX29yaWVudGF0aW9uOwogICAgIFNjcm9sbGJhckNvbnRyb2xTaXplIG1fY29udHJv
bFNpemU7CiAgICAgU2Nyb2xsYmFyVGhlbWUqIG1fdGhlbWU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9lZmwvU2Nyb2xsYmFyRWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lZmwvU2Nyb2xsYmFyRWZsLmNwcAkocmV2aXNpb24gMTgwNDUwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbGJhckVmbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDE1ICsyOCwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQ
dHI8U2Nyb2xsYmFyPiBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcihTY3JvbGxhYmxl
QXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBT
Y3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKQorUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFNjcm9sbGJh
cjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSwg
U2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplIHNp
emUpCiB7CiAgICAgaWYgKFNldHRpbmdzOjptb2NrU2Nyb2xsYmFyc0VuYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY3JvbGxiYXIoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0
aW9uLCBzaXplKSk7CiAKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNjcm9sbGJhckVmbChzY3Jv
bGxhYmxlQXJlYSwgb3JpZW50YXRpb24sIHNpemUpKTsKIH0KK1Njcm9sbGJhckVmbDo6U2Nyb2xs
YmFyRWZsKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRp
b24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQogCi1TY3Jv
bGxiYXJFZmw6OlNjcm9sbGJhckVmbChTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNj
cm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250
cm9sU2l6ZSkKICAgICA6IFNjcm9sbGJhcihzY3JvbGxhYmxlQXJlYSwgb3JpZW50YXRpb24sIGNv
bnRyb2xTaXplKQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9s
bGJhckVmbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3Jv
bGxiYXJFZmwuaAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
ZWZsL1Njcm9sbGJhckVmbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpIG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6
Ci0gICAgU2Nyb2xsYmFyRWZsKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24s
IFNjcm9sbGJhckNvbnRyb2xTaXplKTsKKyAgICBTY3JvbGxiYXJFZmwoU2Nyb2xsYWJsZUFyZWEm
LCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUpOwogCiAgICAgdmly
dHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kikgb3ZlcnJpZGU7CiB9OwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLmgJKHJldmlz
aW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmltYXRv
cklPUy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIFBsYXRmb3JtVG91Y2hF
dmVudDsKIAogY2xhc3MgU2Nyb2xsQW5pbWF0b3JJT1MgOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3Ig
ewogcHVibGljOgotICAgIFNjcm9sbEFuaW1hdG9ySU9TKFNjcm9sbGFibGVBcmVhKik7CisgICAg
U2Nyb2xsQW5pbWF0b3JJT1MoU2Nyb2xsYWJsZUFyZWEmKTsKICAgICB2aXJ0dWFsIH5TY3JvbGxB
bmltYXRvcklPUygpOwogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MubW0JKHJldmlzaW9u
IDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmltYXRvcklP
Uy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsMTIgKzQwLDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+
IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQor
UGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxh
YmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3Jv
bGxBbmltYXRvcklPUyhzY3JvbGxhYmxlQXJlYSkpOwogfQogCi1TY3JvbGxBbmltYXRvcklPUzo6
U2Nyb2xsQW5pbWF0b3JJT1MoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQorU2Nyb2xs
QW5pbWF0b3JJT1M6OlNjcm9sbEFuaW1hdG9ySU9TKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxl
QXJlYSkKICAgICA6IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVhKQogI2lmIEVOQUJMRShU
T1VDSF9FVkVOVFMpCiAgICAgLCBtX3RvdWNoU2Nyb2xsQXhpc0xhdGNoKEF4aXNMYXRjaE5vdENv
bXB1dGVkKQpAQCAtODIsNyArODIsNyBAQCBib29sIFNjcm9sbEFuaW1hdG9ySU9TOjpoYW5kbGVU
b3VjaEV2ZW50CiAgICAgICAgIG1faW5Ub3VjaFNlcXVlbmNlID0gZmFsc2U7CiAgICAgICAgIG1f
c2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlID0gMDsKICAgICAgICAgaWYgKG1fc3RhcnRl
ZFNjcm9sbCkKLSAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhKCktPmRpZEVuZFNjcm9sbCgpOwor
ICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEoKS5kaWRFbmRTY3JvbGwoKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIApAQCAtOTIsNyArOTIsNyBAQCBib29sIFNjcm9sbEFuaW1hdG9y
SU9TOjpoYW5kbGVUb3VjaEV2ZW50CiAgICAgICAgIG1faW5Ub3VjaFNlcXVlbmNlID0gZmFsc2U7
CiAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlID0gMDsKICAgICAgICAg
aWYgKG1fc3RhcnRlZFNjcm9sbCkKLSAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhKCktPmRpZEVu
ZFNjcm9sbCgpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEoKS5kaWRFbmRTY3JvbGwoKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKQEAgLTEwNSw4ICsxMDUsOCBAQCBi
b29sIFNjcm9sbEFuaW1hdG9ySU9TOjpoYW5kbGVUb3VjaEV2ZW50CiAgICAgICAgIGRldGVybWlu
ZVNjcm9sbGFibGVBcmVhRm9yVG91Y2hTZXF1ZW5jZSh0b3VjaERlbHRhKTsKIAogICAgIGlmICgh
bV9jb21taXR0ZWRUb1Njcm9sbEF4aXMpIHsKLSAgICAgICAgYm9vbCBob3Jpem9udGFsbHlTY3Jv
bGxhYmxlID0gbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsU2l6ZShIb3Jpem9udGFsU2Nyb2xsYmFy
KTsKLSAgICAgICAgYm9vbCB2ZXJ0aWNhbGx5U2Nyb2xsYWJsZSA9IG1fc2Nyb2xsYWJsZUFyZWEt
PnNjcm9sbFNpemUoVmVydGljYWxTY3JvbGxiYXIpOworICAgICAgICBib29sIGhvcml6b250YWxs
eVNjcm9sbGFibGUgPSBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbFNpemUoSG9yaXpvbnRhbFNjcm9s
bGJhcik7CisgICAgICAgIGJvb2wgdmVydGljYWxseVNjcm9sbGFibGUgPSBtX3Njcm9sbGFibGVB
cmVhLnNjcm9sbFNpemUoVmVydGljYWxTY3JvbGxiYXIpOwogCiAgICAgICAgIGlmICghaG9yaXpv
bnRhbGx5U2Nyb2xsYWJsZSAmJiAhdmVydGljYWxseVNjcm9sbGFibGUpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xNjAsOSArMTYwLDkgQEAgYm9vbCBTY3JvbGxBbmltYXRvcklPUzo6
aGFuZGxlVG91Y2hFdmVudAogICAgICAgICBpZiAoIWhhbmRsZWQpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIG1fc3RhcnRlZFNjcm9sbCA9IHRydWU7Ci0gICAgICAgIHNjcm9s
bGFibGVBcmVhKCktPmRpZFN0YXJ0U2Nyb2xsKCk7CisgICAgICAgIHNjcm9sbGFibGVBcmVhKCku
ZGlkU3RhcnRTY3JvbGwoKTsKICAgICB9IGVsc2UgaWYgKGhhbmRsZWQpCi0gICAgICAgIHNjcm9s
bGFibGVBcmVhKCktPmRpZFVwZGF0ZVNjcm9sbCgpOworICAgICAgICBzY3JvbGxhYmxlQXJlYSgp
LmRpZFVwZGF0ZVNjcm9sbCgpOwogICAgIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTcxLDcg
KzE3MSw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JJT1M6OmRldGVybWluZVNjcm9sbGEKIHsKICAg
ICBBU1NFUlQoIW1fc2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlKTsKIAotICAgIFNjcm9s
bGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSA9IG1fc2Nyb2xsYWJsZUFyZWE7CisgICAgU2Nyb2xs
YWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhID0gJm1fc2Nyb2xsYWJsZUFyZWE7CiAgICAgd2hpbGUg
KHRydWUpIHsKICAgICAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYS0+aXNQaW5uZWRJbkJvdGhEaXJl
Y3Rpb25zKHNjcm9sbERlbHRhKSkKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgJKHJldmlzaW9uIDE4
MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIGNsYXNzIFNjcm9sbGJhcjsKIGNsYXNz
IFNjcm9sbEFuaW1hdG9yTWFjIDogcHVibGljIFNjcm9sbEFuaW1hdG9yLCBwcml2YXRlIFNjcm9s
bENvbnRyb2xsZXJDbGllbnQgewogCiBwdWJsaWM6Ci0gICAgU2Nyb2xsQW5pbWF0b3JNYWMoU2Ny
b2xsYWJsZUFyZWEqKTsKKyAgICBTY3JvbGxBbmltYXRvck1hYyhTY3JvbGxhYmxlQXJlYSYpOwog
ICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yTWFjKCk7CiAKICAgICB2b2lkIGltbWVkaWF0ZVNj
cm9sbFRvUG9pbnRGb3JTY3JvbGxBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYgbmV3UG9zaXRp
b24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmlt
YXRvck1hYy5tbQkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjks
NyArMjY5LDcgQEAgLSAodm9pZClzY3JvbGxlckltcFBhaXI6KGlkKXNjcm9sbGVySW1wUAogICAg
IGlmIChbc2Nyb2xsZXJJbXBQYWlyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBfc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEFuaW1hdG9yKCktPmNv
bnRlbnRBcmVhV2lsbFBhaW50KCk7CisgICAgX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxBbmltYXRv
cigpLmNvbnRlbnRBcmVhV2lsbFBhaW50KCk7CiB9CiAKIC0gKHZvaWQpc2Nyb2xsZXJJbXBQYWly
OihpZClzY3JvbGxlckltcFBhaXIgdXBkYXRlU2Nyb2xsZXJTdHlsZUZvck5ld1JlY29tbWVuZGVk
U2Nyb2xsZXJTdHlsZTooTlNTY3JvbGxlclN0eWxlKW5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHls
ZQpAQCAtMjc5LDcgKzI3OSw3IEBAIC0gKHZvaWQpc2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxl
ckltcFAKIAogICAgIFtzY3JvbGxlckltcFBhaXIgc2V0U2Nyb2xsZXJTdHlsZTpuZXdSZWNvbW1l
bmRlZFNjcm9sbGVyU3R5bGVdOwogCi0gICAgc3RhdGljX2Nhc3Q8U2Nyb2xsQW5pbWF0b3JNYWMq
Pihfc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEFuaW1hdG9yKCkpLT51cGRhdGVTY3JvbGxlclN0eWxl
KCk7CisgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsQW5pbWF0b3JNYWMmPihfc2Nyb2xsYWJsZUFyZWEt
PnNjcm9sbEFuaW1hdG9yKCkpLnVwZGF0ZVNjcm9sbGVyU3R5bGUoKTsKIH0KIAogQGVuZApAQCAt
NDE3LDcgKzQxNyw3IEBAIC0gKHZvaWQpY2FuY2VsQW5pbWF0aW9ucwogCiAtIChTY3JvbGxBbmlt
YXRvck1hYyopc2Nyb2xsQW5pbWF0b3IKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2Nyb2xs
QW5pbWF0b3JNYWMqPihfc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxBbmltYXRv
cigpKTsKKyAgICByZXR1cm4gJnN0YXRpY19jYXN0PFNjcm9sbEFuaW1hdG9yTWFjJj4oX3Njcm9s
bGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5zY3JvbGxBbmltYXRvcigpKTsKIH0KIAogLSAoTlNSZWN0
KWNvbnZlcnRSZWN0VG9CYWNraW5nOihOU1JlY3QpYVJlY3QKQEAgLTQ0MCw5ICs0NDAsOSBAQCAt
IChDQUxheWVyICopbGF5ZXIKIAogICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyOwogICAgIGlmIChf
c2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICBs
YXllciA9IF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCktPmxheWVyRm9yVmVydGljYWxTY3Jv
bGxiYXIoKTsKKyAgICAgICAgbGF5ZXIgPSBfc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLmxh
eWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKTsKICAgICBlbHNlCi0gICAgICAgIGxheWVyID0gX3Nj
cm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCk7
CisgICAgICAgIGxheWVyID0gX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5sYXllckZvckhv
cml6b250YWxTY3JvbGxiYXIoKTsKIAogICAgIHN0YXRpYyBDQUxheWVyICpkdW1teUxheWVyID0g
W1tDQUxheWVyIGFsbG9jXSBpbml0XTsKICAgICByZXR1cm4gbGF5ZXIgPyBsYXllci0+cGxhdGZv
cm1MYXllcigpIDogZHVtbXlMYXllcjsKQEAgLTQ1NSw3ICs0NTUsNyBAQCAtIChOU1BvaW50KW1v
dXNlTG9jYXRpb25JblNjcm9sbGVyRm9yU2NyCiAKICAgICBBU1NFUlRfVU5VU0VEKHNjcm9sbGVy
SW1wLCBzY3JvbGxlckltcCA9PSBzY3JvbGxiYXJQYWludGVyRm9yU2Nyb2xsYmFyKF9zY3JvbGxi
YXIpKTsKIAotICAgIHJldHVybiBfc2Nyb2xsYmFyLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3
KF9zY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCktPmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKSk7
CisgICAgcmV0dXJuIF9zY3JvbGxiYXItPmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoX3Njcm9s
bGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCkpOwogfQogCiAt
IChOU1JlY3QpY29udmVydFJlY3RUb0xheWVyOihOU1JlY3QpcmVjdApAQCAtNDgyLDcgKzQ4Miw3
IEBAIC0gKHZvaWQpc2V0VXBBbHBoYUFuaW1hdGlvbjooUmV0YWluUHRyPFcKICAgICBpZiAoW3Nl
bGYgc2Nyb2xsQW5pbWF0b3JdLT5zY3JvbGxiYXJQYWludFRpbWVySXNBY3RpdmUoKSAmJiAhbXVz
dEFuaW1hdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChfc2Nyb2xsYmFyLT5zY3JvbGxh
YmxlQXJlYSgpLT5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpICYmICFtdXN0QW5pbWF0
ZSkgeworICAgIGlmIChfc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLnNob3VsZFN1c3BlbmRT
Y3JvbGxBbmltYXRpb25zKCkgJiYgIW11c3RBbmltYXRlKSB7CiAgICAgICAgIFtzZWxmIHNjcm9s
bEFuaW1hdG9yXS0+c3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC02MzQsMTIgKzYzNCwxMiBAQCAtICh2b2lkKWludmFsaWRhdGUKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRv
cjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKK1Bhc3NPd25QdHI8U2Ny
b2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9s
bGFibGVBcmVhKQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2Nyb2xsQW5pbWF0b3JNYWMo
c2Nyb2xsYWJsZUFyZWEpKTsKIH0KIAotU2Nyb2xsQW5pbWF0b3JNYWM6OlNjcm9sbEFuaW1hdG9y
TWFjKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKK1Njcm9sbEFuaW1hdG9yTWFjOjpT
Y3JvbGxBbmltYXRvck1hYyhTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiAgICAgOiBT
Y3JvbGxBbmltYXRvcihzY3JvbGxhYmxlQXJlYSkKICAgICAsIG1faW5pdGlhbFNjcm9sbGJhclBh
aW50VGltZXIoKnRoaXMsICZTY3JvbGxBbmltYXRvck1hYzo6aW5pdGlhbFNjcm9sbGJhclBhaW50
VGltZXJGaXJlZCkKICAgICAsIG1fc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lcigqdGhpcywg
JlNjcm9sbEFuaW1hdG9yTWFjOjpzZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyRmlyZWQpCkBA
IC02NTMsNyArNjUzLDcgQEAgU2Nyb2xsQW5pbWF0b3JNYWM6OlNjcm9sbEFuaW1hdG9yTWFjKFNj
cgogICAgIG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgPSBhZG9wdE5TKFtbV2ViU2Ny
b2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6
dGhpc10pOwogICAgIG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyID0gYWRvcHROUyhbW05TQ2xhc3NG
cm9tU3RyaW5nKEAiTlNTY3JvbGxBbmltYXRpb25IZWxwZXIiKSBhbGxvY10gaW5pdFdpdGhEZWxl
Z2F0ZTptX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmdldCgpXSk7CiAKLSAgICBtX3Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUgPSBhZG9wdE5TKFtbV2ViU2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxhYmxlQXJlYTpz
Y3JvbGxhYmxlQXJlYV0pOworICAgIG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0
ZSA9IGFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlIGFsbG9j
XSBpbml0V2l0aFNjcm9sbGFibGVBcmVhOiZzY3JvbGxhYmxlQXJlYV0pOwogICAgIG1fc2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbTlNDbGFzc0Zyb21TdHJpbmcoQCJOU1Nj
cm9sbGVySW1wUGFpciIpIGFsbG9jXSBpbml0XSk7CiAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXIgc2V0RGVsZWdhdGU6KGlkKW1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxl
Z2F0ZS5nZXQoKV07CiAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgc2V0U2Nyb2xs
ZXJTdHlsZTpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKV07CkBAIC02OTksMTQgKzY5OSwxNCBA
QCBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpzY3JvbGwoU2Nyb2xsYmFyCiB7CiAgICAgbV9oYXZl
U2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gdHJ1ZTsKIAotICAgIGlmICghc2Nyb2xsQW5pbWF0aW9u
RW5hYmxlZEZvclN5c3RlbSgpIHx8ICFtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxBbmltYXRvckVu
YWJsZWQoKSkKKyAgICBpZiAoIXNjcm9sbEFuaW1hdGlvbkVuYWJsZWRGb3JTeXN0ZW0oKSB8fCAh
bV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxBbmltYXRvckVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
IFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBt
dWx0aXBsaWVyKTsKIAogICAgIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxCeVBpeGVsKQogICAg
ICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJp
dHksIHN0ZXAsIG11bHRpcGxpZXIpOwogCiAgICAgZmxvYXQgY3VycmVudFBvcyA9IG9yaWVudGF0
aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2N1cnJlbnRQb3NYIDogbV9jdXJyZW50UG9z
WTsKLSAgICBmbG9hdCBuZXdQb3MgPSBzdGQ6Om1heDxmbG9hdD4oc3RkOjptaW48ZmxvYXQ+KGN1
cnJlbnRQb3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4obV9zY3Jv
bGxhYmxlQXJlYS0+c2Nyb2xsU2l6ZShvcmllbnRhdGlvbikpKSwgMCk7CisgICAgZmxvYXQgbmV3
UG9zID0gc3RkOjptYXg8ZmxvYXQ+KHN0ZDo6bWluPGZsb2F0PihjdXJyZW50UG9zICsgKHN0ZXAg
KiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xs
U2l6ZShvcmllbnRhdGlvbikpKSwgMCk7CiAgICAgaWYgKGN1cnJlbnRQb3MgPT0gbmV3UG9zKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTcyOSwyNSArNzI5LDI1IEBAIHZvaWQgU2Nyb2xs
QW5pbWF0b3JNYWM6OnNjcm9sbFRvT2Zmc2V0V2kKIAogRmxvYXRQb2ludCBTY3JvbGxBbmltYXRv
ck1hYzo6YWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShjb25zdCBGbG9hdFBvaW50JiBw
b3NpdGlvbikgY29uc3QKIHsKLSAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEtPmNvbnN0cmFpbnNT
Y3JvbGxpbmdUb0NvbnRlbnRFZGdlKCkpCisgICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhLmNvbnN0
cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKCkpCiAgICAgICAgIHJldHVybiBwb3NpdGlvbjsK
IAotICAgIGZsb2F0IG5ld1ggPSBzdGQ6Om1heDxmbG9hdD4oc3RkOjptaW48ZmxvYXQ+KHBvc2l0
aW9uLngoKSwgbV9zY3JvbGxhYmxlQXJlYS0+dG90YWxDb250ZW50c1NpemUoKS53aWR0aCgpIC0g
bV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZVdpZHRoKCkpLCAwKTsKLSAgICBmbG9hdCBuZXdZID0g
c3RkOjptYXg8ZmxvYXQ+KHN0ZDo6bWluPGZsb2F0Pihwb3NpdGlvbi55KCksIG1fc2Nyb2xsYWJs
ZUFyZWEtPnRvdGFsQ29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSBtX3Njcm9sbGFibGVBcmVhLT52
aXNpYmxlSGVpZ2h0KCkpLCAwKTsKKyAgICBmbG9hdCBuZXdYID0gc3RkOjptYXg8ZmxvYXQ+KHN0
ZDo6bWluPGZsb2F0Pihwb3NpdGlvbi54KCksIG1fc2Nyb2xsYWJsZUFyZWEudG90YWxDb250ZW50
c1NpemUoKS53aWR0aCgpIC0gbV9zY3JvbGxhYmxlQXJlYS52aXNpYmxlV2lkdGgoKSksIDApOwor
ICAgIGZsb2F0IG5ld1kgPSBzdGQ6Om1heDxmbG9hdD4oc3RkOjptaW48ZmxvYXQ+KHBvc2l0aW9u
LnkoKSwgbV9zY3JvbGxhYmxlQXJlYS50b3RhbENvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gbV9z
Y3JvbGxhYmxlQXJlYS52aXNpYmxlSGVpZ2h0KCkpLCAwKTsKIAogICAgIHJldHVybiBGbG9hdFBv
aW50KG5ld1gsIG5ld1kpOwogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjphZGp1c3RTY3Jv
bGxQb3NpdGlvblRvQm91bmRzSWZOZWNlc3NhcnkoKQogewotICAgIGJvb2wgY3VycmVudGx5Q29u
c3RyYWluc1RvQ29udGVudEVkZ2UgPSBtX3Njcm9sbGFibGVBcmVhLT5jb25zdHJhaW5zU2Nyb2xs
aW5nVG9Db250ZW50RWRnZSgpOwotICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNT
Y3JvbGxpbmdUb0NvbnRlbnRFZGdlKHRydWUpOworICAgIGJvb2wgY3VycmVudGx5Q29uc3RyYWlu
c1RvQ29udGVudEVkZ2UgPSBtX3Njcm9sbGFibGVBcmVhLmNvbnN0cmFpbnNTY3JvbGxpbmdUb0Nv
bnRlbnRFZGdlKCk7CisgICAgbV9zY3JvbGxhYmxlQXJlYS5zZXRDb25zdHJhaW5zU2Nyb2xsaW5n
VG9Db250ZW50RWRnZSh0cnVlKTsKIAogICAgIEludFBvaW50IGN1cnJlbnRTY3JvbGxQb3NpdGlv
biA9IGFic29sdXRlU2Nyb2xsUG9zaXRpb24oKTsKICAgICBGbG9hdFBvaW50IG5lYXJlc3RQb2lu
dFdpdGhpbkJvdW5kcyA9IGFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkoYWJzb2x1dGVT
Y3JvbGxQb3NpdGlvbigpKTsKICAgICBpbW1lZGlhdGVTY3JvbGxCeShuZWFyZXN0UG9pbnRXaXRo
aW5Cb3VuZHMgLSBjdXJyZW50U2Nyb2xsUG9zaXRpb24pOwogCi0gICAgbV9zY3JvbGxhYmxlQXJl
YS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoY3VycmVudGx5Q29uc3RyYWlu
c1RvQ29udGVudEVkZ2UpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2V0Q29uc3RyYWluc1Njcm9s
bGluZ1RvQ29udGVudEVkZ2UoY3VycmVudGx5Q29uc3RyYWluc1RvQ29udGVudEVkZ2UpOwogfQog
CiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjppbW1lZGlhdGVTY3JvbGxUbyhjb25zdCBGbG9hdFBv
aW50JiBuZXdQb3NpdGlvbikKQEAgLTc1NSw3ICs3NTUsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9y
TWFjOjppbW1lZGlhdGVTY3JvbGxUCiAgICAgRmxvYXRQb2ludCBhZGp1c3RlZFBvc2l0aW9uID0g
YWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShuZXdQb3NpdGlvbik7CiAgCiAgICAgYm9v
bCBwb3NpdGlvbkNoYW5nZWQgPSBhZGp1c3RlZFBvc2l0aW9uLngoKSAhPSBtX2N1cnJlbnRQb3NY
IHx8IGFkanVzdGVkUG9zaXRpb24ueSgpICE9IG1fY3VycmVudFBvc1k7Ci0gICAgaWYgKCFwb3Np
dGlvbkNoYW5nZWQgJiYgIXNjcm9sbGFibGVBcmVhKCktPnNjcm9sbE9yaWdpbkNoYW5nZWQoKSkK
KyAgICBpZiAoIXBvc2l0aW9uQ2hhbmdlZCAmJiAhc2Nyb2xsYWJsZUFyZWEoKS5zY3JvbGxPcmln
aW5DaGFuZ2VkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEZsb2F0U2l6ZSBkZWx0YSA9IEZs
b2F0U2l6ZShhZGp1c3RlZFBvc2l0aW9uLngoKSAtIG1fY3VycmVudFBvc1gsIGFkanVzdGVkUG9z
aXRpb24ueSgpIC0gbV9jdXJyZW50UG9zWSk7CkBAIC05NDIsMTEgKzk0MiwxMSBAQCB2b2lkIFNj
cm9sbEFuaW1hdG9yTWFjOjpkaWRBZGRWZXJ0aWNhbFNjCiAgICAgbV92ZXJ0aWNhbFNjcm9sbGJh
clBhaW50ZXJEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUg
YWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyOnNjcm9sbGJhcl0pOwogCiAgICAgW3BhaW50ZXIgc2V0
RGVsZWdhdGU6KGlkKW1fdmVydGljYWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCldOwot
ICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEo
KS0+bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgIGlmIChHcmFwaGljc0xheWVyKiBs
YXllciA9IHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS5sYXllckZvclZlcnRpY2FsU2Nyb2xs
YmFyKCkpCiAgICAgICAgIFtwYWludGVyIHNldExheWVyOmxheWVyLT5wbGF0Zm9ybUxheWVyKCld
OwogCiAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgc2V0VmVydGljYWxTY3JvbGxl
ckltcDpwYWludGVyXTsKLSAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS0+aW5MaXZlUmVzaXplKCkp
CisgICAgaWYgKHNjcm9sbGFibGVBcmVhKCkuaW5MaXZlUmVzaXplKCkpCiAgICAgICAgIFtwYWlu
dGVyIHNldEtub2JBbHBoYToxXTsKIH0KIApAQCAtOTc0LDExICs5NzQsMTEgQEAgdm9pZCBTY3Jv
bGxBbmltYXRvck1hYzo6ZGlkQWRkSG9yaXpvbnRhbAogICAgIG1faG9yaXpvbnRhbFNjcm9sbGJh
clBhaW50ZXJEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUg
YWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyOnNjcm9sbGJhcl0pOwogCiAgICAgW3BhaW50ZXIgc2V0
RGVsZWdhdGU6KGlkKW1faG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKV07
Ci0gICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJl
YSgpLT5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkKKyAgICBpZiAoR3JhcGhpY3NMYXll
ciogbGF5ZXIgPSBzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkubGF5ZXJGb3JIb3Jpem9udGFs
U2Nyb2xsYmFyKCkpCiAgICAgICAgIFtwYWludGVyIHNldExheWVyOmxheWVyLT5wbGF0Zm9ybUxh
eWVyKCldOwogCiAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgc2V0SG9yaXpvbnRh
bFNjcm9sbGVySW1wOnBhaW50ZXJdOwotICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLT5pbkxpdmVS
ZXNpemUoKSkKKyAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS5pbkxpdmVSZXNpemUoKSkKICAgICAg
ICAgW3BhaW50ZXIgc2V0S25vYkFscGhhOjFdOwogfQogCkBAIC05OTgsOCArOTk4LDggQEAgdm9p
ZCBTY3JvbGxBbmltYXRvck1hYzo6d2lsbFJlbW92ZUhvcml6bwogCiB2b2lkIFNjcm9sbEFuaW1h
dG9yTWFjOjp2ZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCkKIHsKLSAgICBHcmFwaGlj
c0xheWVyKiBsYXllciA9IG1fc2Nyb2xsYWJsZUFyZWEtPmxheWVyRm9yVmVydGljYWxTY3JvbGxi
YXIoKTsKLSAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRp
Y2FsU2Nyb2xsYmFyKCk7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBtX3Njcm9sbGFibGVB
cmVhLmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICBTY3JvbGxiYXIqIHNjcm9sbGJh
ciA9IG1fc2Nyb2xsYWJsZUFyZWEudmVydGljYWxTY3JvbGxiYXIoKTsKICAgICBpZiAoIXNjcm9s
bGJhcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDEyLDggKzEwMTIsOCBAQCB2b2lkIFNjcm9s
bEFuaW1hdG9yTWFjOjp2ZXJ0aWNhbFNjcm9sbGJhCiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6
Omhvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpCiB7Ci0gICAgR3JhcGhpY3NMYXll
ciogbGF5ZXIgPSBtX3Njcm9sbGFibGVBcmVhLT5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIo
KTsKLSAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250
YWxTY3JvbGxiYXIoKTsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IG1fc2Nyb2xsYWJsZUFy
ZWEubGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgU2Nyb2xsYmFyKiBzY3JvbGxi
YXIgPSBtX3Njcm9sbGFibGVBcmVhLmhvcml6b250YWxTY3JvbGxiYXIoKTsKICAgICBpZiAoIXNj
cm9sbGJhcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDQ4LDcgKzEwNDgsNyBAQCB2b2lkIFNj
cm9sbEFuaW1hdG9yTWFjOjpub3RpZnlDb250ZW50QXJlCiAgICAgaWYgKFttX3Njcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYS0+aXNIYW5kbGluZ1doZWVsRXZlbnQo
KSkKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYS5pc0hhbmRsaW5nV2hlZWxFdmVudCgpKQogICAg
ICAgICBzZW5kQ29udGVudEFyZWFTY3JvbGxlZChkZWx0YSk7CiAgICAgZWxzZQogICAgICAgICBz
ZW5kQ29udGVudEFyZWFTY3JvbGxlZFNvb24oZGVsdGEpOwpAQCAtMTEwOSwyMSArMTEwOSwyMSBA
QCBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpoYW5kbGVXaGVlbEV2ZW50CiBib29sIFNjcm9sbEFu
aW1hdG9yTWFjOjpwaW5uZWRJbkRpcmVjdGlvbihmbG9hdCBkZWx0YVgsIGZsb2F0IGRlbHRhWSkK
IHsKICAgICBGbG9hdFNpemUgbGltaXREZWx0YTsKLSAgICBpZiAoZmFic2YoZGVsdGFZKSA+PSBm
YWJzZihkZWx0YVgpKSB7CisgICAgaWYgKHN0ZDo6ZmFic2YoZGVsdGFZKSA+PSBmYWJzZihkZWx0
YVgpKSB7CiAgICAgICAgIGlmIChkZWx0YVkgPCAwKSB7CiAgICAgICAgICAgICAvLyBXZSBhcmUg
dHJ5aW5nIHRvIHNjcm9sbCB1cC4gIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUg
dG9wCi0gICAgICAgICAgICBsaW1pdERlbHRhLnNldEhlaWdodChtX3Njcm9sbGFibGVBcmVhLT52
aXNpYmxlQ29udGVudFJlY3QoKS55KCkgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmlnaW4o
KS55KCkpOworICAgICAgICAgICAgbGltaXREZWx0YS5zZXRIZWlnaHQobV9zY3JvbGxhYmxlQXJl
YS52aXNpYmxlQ29udGVudFJlY3QoKS55KCkgKyBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbE9yaWdp
bigpLnkoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBXZSBhcmUgdHJ5aW5n
IHRvIHNjcm9sbCBkb3duLiAgTWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSBib3R0
b20KLSAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0SGVpZ2h0KG1fc2Nyb2xsYWJsZUFyZWEtPnRv
dGFsQ29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSAobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNv
bnRlbnRSZWN0KCkubWF4WSgpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkueSgp
KSk7CisgICAgICAgICAgICBsaW1pdERlbHRhLnNldEhlaWdodChtX3Njcm9sbGFibGVBcmVhLnRv
dGFsQ29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSAobV9zY3JvbGxhYmxlQXJlYS52aXNpYmxlQ29u
dGVudFJlY3QoKS5tYXhZKCkgKyBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbE9yaWdpbigpLnkoKSkp
OwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChkZWx0YVggIT0gMCkgewogICAgICAgICBpZiAo
ZGVsdGFYIDwgMCkgewogICAgICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwgbGVm
dC4gIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUgbGVmdAotICAgICAgICAgICAg
bGltaXREZWx0YS5zZXRXaWR0aChtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVudFJlY3Qo
KS54KCkgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmlnaW4oKS54KCkpOworICAgICAgICAg
ICAgbGltaXREZWx0YS5zZXRXaWR0aChtX3Njcm9sbGFibGVBcmVhLnZpc2libGVDb250ZW50UmVj
dCgpLngoKSArIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsT3JpZ2luKCkueCgpKTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIHJpZ2h0LiAg
TWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSByaWdodAotICAgICAgICAgICAgbGlt
aXREZWx0YS5zZXRXaWR0aChtX3Njcm9sbGFibGVBcmVhLT50b3RhbENvbnRlbnRzU2l6ZSgpLndp
ZHRoKCkgLSAobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubWF4WCgpICsg
bV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkueCgpKSk7CisgICAgICAgICAgICBsaW1p
dERlbHRhLnNldFdpZHRoKG1fc2Nyb2xsYWJsZUFyZWEudG90YWxDb250ZW50c1NpemUoKS53aWR0
aCgpIC0gKG1fc2Nyb2xsYWJsZUFyZWEudmlzaWJsZUNvbnRlbnRSZWN0KCkubWF4WCgpICsgbV9z
Y3JvbGxhYmxlQXJlYS5zY3JvbGxPcmlnaW4oKS54KCkpKTsKICAgICAgICAgfQogICAgIH0KICAg
ICAKQEAgLTExNDMsOSArMTE0Myw5IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OmlzQWxyZWFk
eVBpbm5lZEkKIHsKICAgICBzd2l0Y2ggKGF4aXMpIHsKICAgICBjYXNlIFNjcm9sbEV2ZW50QXhp
czo6VmVydGljYWw6Ci0gICAgICAgIHJldHVybiAod2hlZWxFdmVudC5kZWx0YVkoKSA+IDAgJiYg
bV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsZWRUb1RvcCgpKSB8fCAod2hlZWxFdmVudC5kZWx0YVko
KSA8IDAgJiYgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsZWRUb0JvdHRvbSgpKTsKKyAgICAgICAg
cmV0dXJuICh3aGVlbEV2ZW50LmRlbHRhWSgpID4gMCAmJiBtX3Njcm9sbGFibGVBcmVhLnNjcm9s
bGVkVG9Ub3AoKSkgfHwgKHdoZWVsRXZlbnQuZGVsdGFZKCkgPCAwICYmIG1fc2Nyb2xsYWJsZUFy
ZWEuc2Nyb2xsZWRUb0JvdHRvbSgpKTsKICAgICBjYXNlIFNjcm9sbEV2ZW50QXhpczo6SG9yaXpv
bnRhbDoKLSAgICAgICAgcmV0dXJuICh3aGVlbEV2ZW50LmRlbHRhWCgpID4gMCAmJiBtX3Njcm9s
bGFibGVBcmVhLT5zY3JvbGxlZFRvTGVmdCgpKSB8fCAod2hlZWxFdmVudC5kZWx0YVgoKSA8IDAg
JiYgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsZWRUb1JpZ2h0KCkpOworICAgICAgICByZXR1cm4g
KHdoZWVsRXZlbnQuZGVsdGFYKCkgPiAwICYmIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsZWRUb0xl
ZnQoKSkgfHwgKHdoZWVsRXZlbnQuZGVsdGFYKCkgPCAwICYmIG1fc2Nyb2xsYWJsZUFyZWEuc2Ny
b2xsZWRUb1JpZ2h0KCkpOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAt
MTE2OSwxNSArMTE2OSwxNSBAQCBzdGF0aWMgYm9vbCBnZXN0dXJlU2hvdWxkQmVnaW5TbmFwKGNv
bnN0CiAKIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OmFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZyhj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCiB7Ci0gICAgc3dpdGNoIChtX3Nj
cm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoKSkgeworICAgIHN3aXRjaCAo
bV9zY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoKSkgewogICAgIGNhc2Ug
U2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYzogewotICAgICAgICBTY3JvbGxiYXIqIGhTY3JvbGxl
ciA9IG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxiYXIoKTsKLSAgICAgICAgU2Ny
b2xsYmFyKiB2U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigp
OworICAgICAgICBTY3JvbGxiYXIqIGhTY3JvbGxlciA9IG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpv
bnRhbFNjcm9sbGJhcigpOworICAgICAgICBTY3JvbGxiYXIqIHZTY3JvbGxlciA9IG1fc2Nyb2xs
YWJsZUFyZWEudmVydGljYWxTY3JvbGxiYXIoKTsKICAgICAgICAgYm9vbCBzY3JvbGxiYXJzQWxs
b3dTdHJldGNoaW5nID0gKCh2U2Nyb2xsZXIgJiYgdlNjcm9sbGVyLT5lbmFibGVkKCkpIHx8ICgh
aFNjcm9sbGVyIHx8ICFoU2Nyb2xsZXItPmVuYWJsZWQoKSkpOwotICAgICAgICBib29sIGV2ZW50
UHJldmVudHNTdHJldGNoaW5nID0gbV9zY3JvbGxhYmxlQXJlYS0+aGFzU2Nyb2xsYWJsZU9yUnVi
YmVyYmFuZGFibGVBbmNlc3RvcigpICYmIG5ld0dlc3R1cmVJc1N0YXJ0aW5nKHdoZWVsRXZlbnQp
ICYmIGlzQWxyZWFkeVBpbm5lZEluRGlyZWN0aW9uT2ZHZXN0dXJlKHdoZWVsRXZlbnQsIFNjcm9s
bEV2ZW50QXhpczo6VmVydGljYWwpOworICAgICAgICBib29sIGV2ZW50UHJldmVudHNTdHJldGNo
aW5nID0gbV9zY3JvbGxhYmxlQXJlYS5oYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2Vz
dG9yKCkgJiYgbmV3R2VzdHVyZUlzU3RhcnRpbmcod2hlZWxFdmVudCkgJiYgaXNBbHJlYWR5UGlu
bmVkSW5EaXJlY3Rpb25PZkdlc3R1cmUod2hlZWxFdmVudCwgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0
aWNhbCk7CiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICAgICAgaWYgKCFldmVudFBy
ZXZlbnRzU3RyZXRjaGluZykKLSAgICAgICAgICAgIGV2ZW50UHJldmVudHNTdHJldGNoaW5nID0g
Z2VzdHVyZVNob3VsZEJlZ2luU25hcCh3aGVlbEV2ZW50LCBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0
aWNhbFNuYXBPZmZzZXRzKCkpOworICAgICAgICAgICAgZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmcg
PSBnZXN0dXJlU2hvdWxkQmVnaW5TbmFwKHdoZWVsRXZlbnQsIG1fc2Nyb2xsYWJsZUFyZWEudmVy
dGljYWxTbmFwT2Zmc2V0cygpKTsKICNlbmRpZgogICAgICAgICByZXR1cm4gc2Nyb2xsYmFyc0Fs
bG93U3RyZXRjaGluZyAmJiAhZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmc7CiAgICAgfQpAQCAtMTE5
MywxNSArMTE5MywxNSBAQCBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjphbGxvd3NWZXJ0aWNhbFN0
CiAKIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OmFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKGNv
bnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKIHsKLSAgICBzd2l0Y2ggKG1fc2Ny
b2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKKyAgICBzd2l0Y2gg
KG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoKSkgewogICAgIGNh
c2UgU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYzogewotICAgICAgICBTY3JvbGxiYXIqIGhTY3Jv
bGxlciA9IG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxiYXIoKTsKLSAgICAgICAg
U2Nyb2xsYmFyKiB2U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJh
cigpOworICAgICAgICBTY3JvbGxiYXIqIGhTY3JvbGxlciA9IG1fc2Nyb2xsYWJsZUFyZWEuaG9y
aXpvbnRhbFNjcm9sbGJhcigpOworICAgICAgICBTY3JvbGxiYXIqIHZTY3JvbGxlciA9IG1fc2Ny
b2xsYWJsZUFyZWEudmVydGljYWxTY3JvbGxiYXIoKTsKICAgICAgICAgYm9vbCBzY3JvbGxiYXJz
QWxsb3dTdHJldGNoaW5nID0gKChoU2Nyb2xsZXIgJiYgaFNjcm9sbGVyLT5lbmFibGVkKCkpIHx8
ICghdlNjcm9sbGVyIHx8ICF2U2Nyb2xsZXItPmVuYWJsZWQoKSkpOwotICAgICAgICBib29sIGV2
ZW50UHJldmVudHNTdHJldGNoaW5nID0gbV9zY3JvbGxhYmxlQXJlYS0+aGFzU2Nyb2xsYWJsZU9y
UnViYmVyYmFuZGFibGVBbmNlc3RvcigpICYmIG5ld0dlc3R1cmVJc1N0YXJ0aW5nKHdoZWVsRXZl
bnQpICYmIGlzQWxyZWFkeVBpbm5lZEluRGlyZWN0aW9uT2ZHZXN0dXJlKHdoZWVsRXZlbnQsIFNj
cm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCk7CisgICAgICAgIGJvb2wgZXZlbnRQcmV2ZW50c1N0
cmV0Y2hpbmcgPSBtX3Njcm9sbGFibGVBcmVhLmhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxl
QW5jZXN0b3IoKSAmJiBuZXdHZXN0dXJlSXNTdGFydGluZyh3aGVlbEV2ZW50KSAmJiBpc0FscmVh
ZHlQaW5uZWRJbkRpcmVjdGlvbk9mR2VzdHVyZSh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6
Okhvcml6b250YWwpOwogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAgICAgICAgIGlmICgh
ZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmcpCi0gICAgICAgICAgICBldmVudFByZXZlbnRzU3RyZXRj
aGluZyA9IGdlc3R1cmVTaG91bGRCZWdpblNuYXAod2hlZWxFdmVudCwgbV9zY3JvbGxhYmxlQXJl
YS0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkpOworICAgICAgICAgICAgZXZlbnRQcmV2ZW50c1N0
cmV0Y2hpbmcgPSBnZXN0dXJlU2hvdWxkQmVnaW5TbmFwKHdoZWVsRXZlbnQsIG1fc2Nyb2xsYWJs
ZUFyZWEuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiBz
Y3JvbGxiYXJzQWxsb3dTdHJldGNoaW5nICYmICFldmVudFByZXZlbnRzU3RyZXRjaGluZzsKICAg
ICB9CkBAIC0xMjE3LDcgKzEyMTcsNyBAQCBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjphbGxvd3NI
b3Jpem9udGFsCiAKIEludFNpemUgU2Nyb2xsQW5pbWF0b3JNYWM6OnN0cmV0Y2hBbW91bnQoKQog
ewotICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOworICAgIHJl
dHVybiBtX3Njcm9sbGFibGVBcmVhLm92ZXJoYW5nQW1vdW50KCk7CiB9CiAKIGJvb2wgU2Nyb2xs
QW5pbWF0b3JNYWM6OnBpbm5lZEluRGlyZWN0aW9uKGNvbnN0IEZsb2F0U2l6ZSYgZGlyZWN0aW9u
KQpAQCAtMTIyNyw3ICsxMjI3LDcgQEAgYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6cGlubmVkSW5E
aXJlY3RpbwogCiBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpjYW5TY3JvbGxIb3Jpem9udGFsbHko
KQogewotICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxlQXJlYS0+aG9yaXpv
bnRhbFNjcm9sbGJhcigpOworICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxl
QXJlYS5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CiAgICAgaWYgKCFzY3JvbGxiYXIpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gc2Nyb2xsYmFyLT5lbmFibGVkKCk7CkBAIC0xMjM1
LDcgKzEyMzUsNyBAQCBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpjYW5TY3JvbGxIb3Jpem9uCiAK
IGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OmNhblNjcm9sbFZlcnRpY2FsbHkoKQogewotICAgIFNj
cm9sbGJhciogc2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxiYXIo
KTsKKyAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEudmVydGljYWxT
Y3JvbGxiYXIoKTsKICAgICBpZiAoIXNjcm9sbGJhcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIHJldHVybiBzY3JvbGxiYXItPmVuYWJsZWQoKTsKQEAgLTEyNDgsMTQgKzEyNDgsMTQgQEAg
Ym9vbCBTY3JvbGxBbmltYXRvck1hYzo6c2hvdWxkUnViYmVyQmFuZAogCiBJbnRQb2ludCBTY3Jv
bGxBbmltYXRvck1hYzo6YWJzb2x1dGVTY3JvbGxQb3NpdGlvbigpCiB7Ci0gICAgcmV0dXJuIG1f
c2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLmxvY2F0aW9uKCkgKyBtX3Njcm9s
bGFibGVBcmVhLT5zY3JvbGxPcmlnaW4oKTsKKyAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS52
aXNpYmxlQ29udGVudFJlY3QoKS5sb2NhdGlvbigpICsgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxP
cmlnaW4oKTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsQnlX
aXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhjb25zdCBGbG9hdFNpemUmIGRlbHRhKQogewot
ICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdl
KGZhbHNlKTsKKyAgICBtX3Njcm9sbGFibGVBcmVhLnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0Nv
bnRlbnRFZGdlKGZhbHNlKTsKICAgICBpbW1lZGlhdGVTY3JvbGxCeShkZWx0YSk7Ci0gICAgbV9z
Y3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7
CisgICAgbV9zY3JvbGxhYmxlQXJlYS5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRn
ZSh0cnVlKTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsQnko
Y29uc3QgRmxvYXRTaXplJiBkZWx0YSkKQEAgLTEzMDQsNyArMTMwNCw3IEBAIHZvaWQgU2Nyb2xs
QW5pbWF0b3JNYWM6OnVwZGF0ZVNjcm9sbGVyU3QKIAogICAgIE5TU2Nyb2xsZXJTdHlsZSBuZXdT
dHlsZSA9IFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIHNjcm9sbGVyU3R5bGVdOwogCi0g
ICAgaWYgKFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBzY3JvbGxhYmxlQXJlYSgpLT52
ZXJ0aWNhbFNjcm9sbGJhcigpKSB7CisgICAgaWYgKFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxi
YXIgPSBzY3JvbGxhYmxlQXJlYSgpLnZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgdmVy
dGljYWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKIAogICAgICAgICBTY3JvbGxiYXJQYWludGVy
IG9sZFZlcnRpY2FsUGFpbnRlciA9IFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIHZlcnRp
Y2FsU2Nyb2xsZXJJbXBdOwpAQCAtMTMyMiw3ICsxMzIyLDcgQEAgdm9pZCBTY3JvbGxBbmltYXRv
ck1hYzo6dXBkYXRlU2Nyb2xsZXJTdAogICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhci0+c2V0RnJh
bWVSZWN0KEludFJlY3QoMCwgMCwgdGhpY2tuZXNzLCB0aGlja25lc3MpKTsKICAgICB9CiAKLSAg
ICBpZiAoU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUFyZWEoKS0+
aG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7CisgICAgaWYgKFNjcm9sbGJhciogaG9yaXpvbnRhbFNj
cm9sbGJhciA9IHNjcm9sbGFibGVBcmVhKCkuaG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7CiAgICAg
ICAgIGhvcml6b250YWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKIAogICAgICAgICBTY3JvbGxi
YXJQYWludGVyIG9sZEhvcml6b250YWxQYWludGVyID0gW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXIgaG9yaXpvbnRhbFNjcm9sbGVySW1wXTsKQEAgLTEzNDIsNyArMTM0Miw3IEBAIHZvaWQg
U2Nyb2xsQW5pbWF0b3JNYWM6OnVwZGF0ZVNjcm9sbGVyU3QKIAogICAgIC8vIElmIG1fbmVlZHNT
Y3JvbGxlclN0eWxlVXBkYXRlIGlzIHRydWUsIHRoZW4gdGhlIHBhZ2UgaXMgcmVzdG9yaW5nIGZy
b20gdGhlIHBhZ2UgY2FjaGUsIGFuZCAKICAgICAvLyBhIHJlbGF5b3V0IHdpbGwgaGFwcGVuIG9u
IGl0cyBvd24uIE90aGVyd2lzZSwgd2UgbXVzdCBpbml0aWF0ZSBhIHJlLWxheW91dCBvdXJzZWx2
ZXMuCi0gICAgc2Nyb2xsYWJsZUFyZWEoKS0+c2Nyb2xsYmFyU3R5bGVDaGFuZ2VkKG5ld1N0eWxl
LCAhbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUpOworICAgIHNjcm9sbGFibGVBcmVhKCkuc2Ny
b2xsYmFyU3R5bGVDaGFuZ2VkKG5ld1N0eWxlLCAhbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUp
OwogCiAgICAgbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUgPSBmYWxzZTsKIH0KQEAgLTEzOTUs
MTMgKzEzOTUsMTMgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c2VuZENvbnRlbnRBcmVhUwog
dm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KGNvbnN0
IEludFJlY3QmIHNjcm9sbGVyVGh1bWIpCiB7CiAgICAgSW50UmVjdCByZWN0SW5WaWV3Q29vcmRp
bmF0ZXMgPSBzY3JvbGxlclRodW1iOwotICAgIGlmIChTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xs
YmFyID0gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICBpZiAoU2Ny
b2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEudmVydGljYWxTY3Jv
bGxiYXIoKSkKICAgICAgICAgcmVjdEluVmlld0Nvb3JkaW5hdGVzID0gdmVydGljYWxTY3JvbGxi
YXItPmNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KHNjcm9sbGVyVGh1bWIpOwogCiAgICAgaWYgKHJl
Y3RJblZpZXdDb29yZGluYXRlcyA9PSBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVjdCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0VmlzaWJsZVNjcm9sbGVyVGh1
bWJSZWN0KHJlY3RJblZpZXdDb29yZGluYXRlcyk7CisgICAgbV9zY3JvbGxhYmxlQXJlYS5zZXRW
aXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QocmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKICAgICBtX3Zp
c2libGVTY3JvbGxlclRodW1iUmVjdCA9IHJlY3RJblZpZXdDb29yZGluYXRlczsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHJldmlz
aW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNywgMjAwOCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9i
aWxlIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykuCiAgKgpAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgUG9wdXBN
ZW51V2luOjpzaG93KGNvbnN0IEludFJlY3QmIHIKIAogICAgIGlmICghbV9zY3JvbGxiYXIgJiYg
dmlzaWJsZUl0ZW1zKCkgPCBjbGllbnQoKS0+bGlzdFNpemUoKSkgewogICAgICAgICAvLyBXZSBu
ZWVkIGEgc2Nyb2xsIGJhcgotICAgICAgICBtX3Njcm9sbGJhciA9IGNsaWVudCgpLT5jcmVhdGVT
Y3JvbGxiYXIodGhpcywgVmVydGljYWxTY3JvbGxiYXIsIFNtYWxsU2Nyb2xsYmFyKTsKKyAgICAg
ICAgbV9zY3JvbGxiYXIgPSBjbGllbnQoKS0+Y3JlYXRlU2Nyb2xsYmFyKCp0aGlzLCBWZXJ0aWNh
bFNjcm9sbGJhciwgU21hbGxTY3JvbGxiYXIpOwogICAgICAgICBtX3Njcm9sbGJhci0+c3R5bGVD
aGFuZ2VkKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA2LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFBvcnRpb25zIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTggTmV0c2NhcGUgQ29tbXVuaWNh
dGlvbnMgQ29ycG9yYXRpb24uCiAgKgpAQCAtMzM2LDcgKzMzNiw3IEBAIFJlbmRlckxheWVyOjpS
ZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGUKICAgICAgICAgLy8gV2Ugc2F2ZSBhbmQgcmVzdG9y
ZSBvbmx5IHRoZSBzY3JvbGxPZmZzZXQgYXMgdGhlIG90aGVyIHNjcm9sbCB2YWx1ZXMgYXJlIHJl
Y2FsY3VsYXRlZC4KICAgICAgICAgbV9zY3JvbGxPZmZzZXQgPSBlbGVtZW50LT5zYXZlZExheWVy
U2Nyb2xsT2Zmc2V0KCk7CiAgICAgICAgIGlmICghbV9zY3JvbGxPZmZzZXQuaXNaZXJvKCkpCi0g
ICAgICAgICAgICBzY3JvbGxBbmltYXRvcigpLT5zZXRDdXJyZW50UG9zaXRpb24oRmxvYXRQb2lu
dChtX3Njcm9sbE9mZnNldC53aWR0aCgpLCBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSkpOworICAg
ICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50UG9zaXRpb24oRmxvYXRQb2ludCht
X3Njcm9sbE9mZnNldC53aWR0aCgpLCBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSkpOwogICAgICAg
ICBlbGVtZW50LT5zZXRTYXZlZExheWVyU2Nyb2xsT2Zmc2V0KEludFNpemUoKSk7CiAgICAgfQog
fQpAQCAtMzA2NSw5ICszMDY1LDkgQEAgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlckxheWVy
OjpjcmVhdAogICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JT
Y3JvbGxiYXIocmVuZGVyZXIoKSk7CiAgICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9
IGFjdHVhbFJlbmRlcmVyLT5pc0JveCgpICYmIGFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpLmhhc1Bz
ZXVkb1N0eWxlKFNDUk9MTEJBUik7CiAgICAgaWYgKGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlKQot
ICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcih0
aGlzLCBvcmllbnRhdGlvbiwgYWN0dWFsUmVuZGVyZXItPmVsZW1lbnQoKSk7CisgICAgICAgIHdp
ZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBvcmll
bnRhdGlvbiwgYWN0dWFsUmVuZGVyZXItPmVsZW1lbnQoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAg
IHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0
aW9uLCBSZWd1bGFyU2Nyb2xsYmFyKTsKKyAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVh
dGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xsYmFyKTsK
ICAgICAgICAgZGlkQWRkU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSwgb3JpZW50YXRpb24pOwogICAg
IH0KICAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5hZGRDaGlsZCh3aWRnZXQuZ2V0
KCkpOwpAQCAtMzA4NCw3ICszMDg0LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6ZGVzdHJveVNjcm9s
bGJhcihTY3JvbAogICAgICAgICB3aWxsUmVtb3ZlU2Nyb2xsYmFyKHNjcm9sbGJhci5nZXQoKSwg
b3JpZW50YXRpb24pOwogCiAgICAgc2Nyb2xsYmFyLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAg
c2Nyb2xsYmFyLT5kaXNjb25uZWN0RnJvbVNjcm9sbGFibGVBcmVhKCk7CiAgICAgc2Nyb2xsYmFy
ID0gbnVsbHB0cjsKIH0KIApAQCAtMzQ4Miw4ICszNDgxLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6
dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTAogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzU5NjQKICAgICB1cGRhdGVTbmFwT2Zmc2V0cygpOwogI2lmIFBMQVRG
T1JNKE1BQykKLSAgICBpZiAoZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICBzY3Jv
bGxBbmltYXRvcigpLT51cGRhdGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMoKTsKKyAgICBpZiAo
U2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigp
KQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPnVwZGF0ZVNjcm9sbEFuaW1hdG9yc0Fu
ZFRpbWVycygpOwogI2VuZGlmCiAjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTEsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3LCAyMDA4LCAyMDExLCAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogICAgICAgICAgICAgICAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBA
IC04MDIsOSArODAyLDkgQEAgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlckxpc3RCb3g6OmNy
ZQogICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdldDsKICAgICBib29sIGhhc0N1c3RvbVNjcm9s
bGJhclN0eWxlID0gc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShTQ1JPTExCQVIpOwogICAgIGlmICho
YXNDdXN0b21TY3JvbGxiYXJTdHlsZSkKLSAgICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFy
OjpjcmVhdGVDdXN0b21TY3JvbGxiYXIodGhpcywgVmVydGljYWxTY3JvbGxiYXIsICZzZWxlY3RF
bGVtZW50KCkpOworICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3Rv
bVNjcm9sbGJhcigqdGhpcywgVmVydGljYWxTY3JvbGxiYXIsICZzZWxlY3RFbGVtZW50KCkpOwog
ICAgIGVsc2UgewotICAgICAgICB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9s
bGJhcih0aGlzLCBWZXJ0aWNhbFNjcm9sbGJhciwgdGhlbWUoKS5zY3JvbGxiYXJDb250cm9sU2l6
ZUZvclBhcnQoTGlzdGJveFBhcnQpKTsKKyAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVh
dGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMsIFZlcnRpY2FsU2Nyb2xsYmFyLCB0aGVtZSgpLnNjcm9s
bGJhckNvbnRyb2xTaXplRm9yUGFydChMaXN0Ym94UGFydCkpOwogICAgICAgICBkaWRBZGRTY3Jv
bGxiYXIod2lkZ2V0LmdldCgpLCBWZXJ0aWNhbFNjcm9sbGJhcik7CiAgICAgfQogICAgIHZpZXco
KS5mcmFtZVZpZXcoKS5hZGRDaGlsZCh3aWRnZXQuZ2V0KCkpOwpAQCAtODE5LDggKzgxOSw3IEBA
IHZvaWQgUmVuZGVyTGlzdEJveDo6ZGVzdHJveVNjcm9sbGJhcigpCiAgICAgaWYgKCFtX3ZCYXIt
PmlzQ3VzdG9tU2Nyb2xsYmFyKCkpCiAgICAgICAgIFNjcm9sbGFibGVBcmVhOjp3aWxsUmVtb3Zl
U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSwgVmVydGljYWxTY3JvbGxiYXIpOwogICAgIG1fdkJhci0+
cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIG1fdkJhci0+ZGlzY29ubmVjdEZyb21TY3JvbGxhYmxl
QXJlYSgpOwotICAgIG1fdkJhciA9IDA7CisgICAgbV92QmFyID0gbnVsbHB0cjsKIH0KIAogdm9p
ZCBSZW5kZXJMaXN0Qm94OjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sIGhhc1Njcm9sbGJh
cikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAko
cmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVM
aXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBzZWxlY3QgZWxlbWVudCByZW5kZXJlciBpbiBXZWJDb3JlLgogICoKICAqIENv
cHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqICAgICAgICAgICAgICAgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKQEAgLTU3NSw3ICs1NzUsNyBAQCBIb3N0V2luZG93KiBSZW5kZXJNZW51TGlzdDo6aG9zdFdp
bmRvdygpCiAgICAgcmV0dXJuIHZpZXcoKS5mcmFtZVZpZXcoKS5ob3N0V2luZG93KCk7CiB9CiAK
LVBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJNZW51TGlzdDo6Y3JlYXRlU2Nyb2xsYmFyKFNj
cm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50
YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQorUGFzc1JlZlB0cjxTY3Jv
bGxiYXI+IFJlbmRlck1lbnVMaXN0OjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEmIHNj
cm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFy
Q29udHJvbFNpemUgY29udHJvbFNpemUpCiB7CiAgICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0
OwogICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUgPSBzdHlsZSgpLmhhc1BzZXVkb1N0
eWxlKFNDUk9MTEJBUik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVu
dUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVu
dUxpc3QuaAkocmV2aXNpb24gMTgwNDUwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck1lbnVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgc2VsZWN0IGVsZW1lbnQgcmVuZGVyZXIgaW4gV2ViQ29yZS4KICAq
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpLgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAy
MDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTExMyw3ICsxMTMsNyBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBtdWx0aXBsZSgpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSBjb25zdCBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3coKSBjb25zdCBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYWJs
ZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihT
Y3JvbGxhYmxlQXJlYSYsIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6
ZSkgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzTGluZUlmRW1wdHkoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTY3JvbGxiYXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTY3JvbGxiYXIuY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEz
LCAyMDE1IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzYsMTIgKzM2LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxi
YXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBv
cmllbnRhdGlvbiwgRWxlbWVudCogb3duZXJFbGVtZW50LCBGcmFtZSogb3duaW5nRnJhbWUpCitS
ZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcihT
Y3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uLCBFbGVtZW50KiBvd25lckVsZW1lbnQsIEZyYW1lKiBvd25pbmdGcmFtZSkKIHsKICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclNjcm9sbGJhcihzY3JvbGxhYmxlQXJlYSwgb3Jp
ZW50YXRpb24sIG93bmVyRWxlbWVudCwgb3duaW5nRnJhbWUpKTsKIH0KIAotUmVuZGVyU2Nyb2xs
YmFyOjpSZW5kZXJTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBTY3Jv
bGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgRWxlbWVudCogb3duZXJFbGVtZW50LCBGcmFt
ZSogb3duaW5nRnJhbWUpCitSZW5kZXJTY3JvbGxiYXI6OlJlbmRlclNjcm9sbGJhcihTY3JvbGxh
YmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
LCBFbGVtZW50KiBvd25lckVsZW1lbnQsIEZyYW1lKiBvd25pbmdGcmFtZSkKICAgICA6IFNjcm9s
bGJhcihzY3JvbGxhYmxlQXJlYSwgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIsIFJlbmRl
clNjcm9sbGJhclRoZW1lOjpyZW5kZXJTY3JvbGxiYXJUaGVtZSgpLCB0cnVlKQogICAgICwgbV9v
d25lckVsZW1lbnQob3duZXJFbGVtZW50KQogICAgICwgbV9vd25pbmdGcmFtZShvd25pbmdGcmFt
ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmgJKHJl
dmlzaW9uIDE4MDQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxi
YXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNyArNDIsNyBAQCBjbGFzcyBSZW5k
ZXJTdHlsZTsKIGNsYXNzIFJlbmRlclNjcm9sbGJhciBmaW5hbCA6IHB1YmxpYyBTY3JvbGxiYXIg
ewogcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBTY3JvbGxiYXI7Ci0gICAgc3RhdGljIFJlZlB0
cjxTY3JvbGxiYXI+IGNyZWF0ZUN1c3RvbVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSosIFNjcm9s
bGJhck9yaWVudGF0aW9uLCBFbGVtZW50KiwgRnJhbWUqIG93bmluZ0ZyYW1lID0gbnVsbHB0cik7
CisgICAgc3RhdGljIFJlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZUN1c3RvbVNjcm9sbGJhcihTY3Jv
bGxhYmxlQXJlYSYsIFNjcm9sbGJhck9yaWVudGF0aW9uLCBFbGVtZW50KiwgRnJhbWUqIG93bmlu
Z0ZyYW1lID0gbnVsbHB0cik7CiAgICAgdmlydHVhbCB+UmVuZGVyU2Nyb2xsYmFyKCk7CiAKICAg
ICBSZW5kZXJCb3gqIG93bmluZ1JlbmRlcmVyKCkgY29uc3Q7CkBAIC02Miw3ICs2Miw3IEBAIHB1
YmxpYzoKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBnZXRTY3JvbGxiYXJQc2V1ZG9TdHls
ZShTY3JvbGxiYXJQYXJ0LCBQc2V1ZG9JZCk7CiAKIHByaXZhdGU6Ci0gICAgUmVuZGVyU2Nyb2xs
YmFyKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIEVsZW1lbnQqLCBGcmFt
ZSopOworICAgIFJlbmRlclNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSYsIFNjcm9sbGJhck9yaWVu
dGF0aW9uLCBFbGVtZW50KiwgRnJhbWUqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJlbnQo
U2Nyb2xsVmlldyopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFibGVkKGJvb2wp
IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZp
ZWxkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Vh
cmNoRmllbGQuY3BwCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDEwLCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAoQykgMjAwOCBUb3Jj
aCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmls
ZS5jb20vKSAKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKS4KQEAgLTM0Miw3ICszNDIsNyBAQCBIb3N0V2luZG93KiBSZW5k
ZXJTZWFyY2hGaWVsZDo6aG9zdFdpbmRvCiAgICAgcmV0dXJuIHZpZXcoKS5mcmFtZVZpZXcoKS5o
b3N0V2luZG93KCk7CiB9CiAKLVBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJTZWFyY2hGaWVs
ZDo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xs
YmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xT
aXplKQorUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlclNlYXJjaEZpZWxkOjpjcmVhdGVTY3Jv
bGxiYXIoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUpCiB7CiAgICAg
UmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OwogICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5
bGUgPSBzdHlsZSgpLmhhc1BzZXVkb1N0eWxlKFNDUk9MTEJBUik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuaAkocmV2aXNpb24gMTgwNDUwKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNywgMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4g
KGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCiAgKgpAQCAtODAsNyAr
ODAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0RnJvbUl0ZW0odW5zaWdu
ZWQgbGlzdEluZGV4KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIEZvbnRTZWxlY3RvciogZm9udFNl
bGVjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBIb3N0V2luZG93KiBob3N0V2lu
ZG93KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4g
Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNj
cm9sbGJhckNvbnRyb2xTaXplKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2Ny
b2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEmLCBTY3JvbGxiYXJPcmllbnRh
dGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUpIG92ZXJyaWRlOwogCiAgICAgSFRNTEVsZW1lbnQq
IHJlc3VsdHNCdXR0b25FbGVtZW50KCkgY29uc3Q7CiAgICAgSFRNTEVsZW1lbnQqIGNhbmNlbEJ1
dHRvbkVsZW1lbnQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDQ2NSkKKysr
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBA
CisyMDE1LTAyLTIwICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAg
ICAgIFNjcm9sbGJhcnMgYW5kIFNjcm9sbEFuaW1hdG9ycyBtdXN0IGFsd2F5cyBoYXZlIGEgU2Ny
b2xsYWJsZUFyZWEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0MTg1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgQ2hhbmdlIHVzZXJzIG9mIHRoZSBzY3JvbGxBbmltYXRvcigpIG1ldGhvZCB0
byBleHBlY3QgYSByZWZlcmVuY2UgaW5zdGVhZCBvZiBhIHBvaW50ZXIuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbToKKyAgICAgICAgKFdlYktpdDo6UERG
UGx1Z2luOjpjcmVhdGVTY3JvbGxiYXIpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmRl
c3Ryb3lTY3JvbGxiYXIpOgorCiAyMDE1LTAyLTIwICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBh
cHBsZS5jb20+CiAKICAgICAgICAgW1dLMl0gQWRkIHN1cHBvcnQgZm9yIGZvbnQgcGFuZWwgb24g
T1MgWC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1
Z2luLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9Q
REYvUERGUGx1Z2luLm1tCShyZXZpc2lvbiAxODA0NTApCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExLCAyMDEyLCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjQxLDcgKzY0MSw3IEBAIGNvbnN0IFBsdWdpblZpZXcqIFBERlBsdWdp
bjo6cGx1Z2luVmlldygKIAogUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFBERlBsdWdpbjo6Y3JlYXRl
U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQogewotICAgIFJlZlB0
cjxTY3JvbGxiYXI+IHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHRo
aXMsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xsYmFyKTsKKyAgICBSZWZQdHI8U2Nyb2xsYmFy
PiB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcigqdGhpcywgb3JpZW50
YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpOwogICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9u
dGFsU2Nyb2xsYmFyKSB7CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyID0gYWRv
cHROUyhbW1dLUERGUGx1Z2luU2Nyb2xsYmFyTGF5ZXIgYWxsb2NdIGluaXRXaXRoUERGUGx1Z2lu
OnRoaXNdKTsKICAgICAgICAgW21fY29udGFpbmVyTGF5ZXIgYWRkU3VibGF5ZXI6bV9ob3Jpem9u
dGFsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCldOwpAQCAtNjYyLDggKzY2Miw3IEBAIHZvaWQgUERGUGx1
Z2luOjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGIKIAogICAgIHdpbGxSZW1vdmVTY3JvbGxiYXIo
c2Nyb2xsYmFyLmdldCgpLCBvcmllbnRhdGlvbik7CiAgICAgc2Nyb2xsYmFyLT5yZW1vdmVGcm9t
UGFyZW50KCk7Ci0gICAgc2Nyb2xsYmFyLT5kaXNjb25uZWN0RnJvbVNjcm9sbGFibGVBcmVhKCk7
Ci0gICAgc2Nyb2xsYmFyID0gMDsKKyAgICBzY3JvbGxiYXIgPSBudWxscHRyOwogCiAgICAgaWYg
KG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKICAgICAgICAgW21faG9yaXpv
bnRhbFNjcm9sbGJhckxheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsK
</data>
<flag name="review"
          id="271972"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>