<?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>39196</bug_id>
          
          <creation_ts>2010-05-16 21:44:34 -0700</creation_ts>
          <short_desc>Rollout changeset 59274 (as requested by dhyatt on #webkit)</short_desc>
          <delta_ts>2010-05-16 21:59:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>hyatt</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>226610</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-05-16 21:44:34 -0700</bug_when>
    <thetext>Not worth the memory use. Rollout as requested by David Hyatt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226611</commentid>
    <comment_count>1</comment_count>
      <attachid>56209</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-05-16 21:47:16 -0700</bug_when>
    <thetext>Created attachment 56209
Patch

There were two conflict when rolling this out in files:

WebCore/rendering/SVGInlineFlowBox.h (conflict due to changes in http://trac.webkit.org/changeset/59589&gt;).
WebCore/rendering/RenderBlockLineLayout.cpp (conflict due to changes in &lt;http://trac.webkit.org/changeset/59588&gt;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226612</commentid>
    <comment_count>2</comment_count>
      <attachid>56209</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-05-16 21:48:42 -0700</bug_when>
    <thetext>Comment on attachment 56209
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226613</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-16 21:48:48 -0700</bug_when>
    <thetext>Attachment 56209 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/rendering/InlineBox.h:145:  More than one command on the same line  [whitespace/newline] [4]
WebCore/rendering/InlineTextBox.h:99:  More than one command on the same line  [whitespace/newline] [4]
WebCore/rendering/InlineTextBox.cpp:738:  One space before end of line comments  [whitespace/comments] [5]
WebCore/rendering/InlineTextBox.cpp:911:  One space before end of line comments  [whitespace/comments] [5]
WebCore/rendering/InlineTextBox.cpp:930:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 5 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226614</commentid>
    <comment_count>4</comment_count>
      <attachid>56209</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-05-16 21:52:42 -0700</bug_when>
    <thetext>Comment on attachment 56209
Patch

Clearing commit-queue flag. Will update change log to reflect revision we are rolling out and its corresponding bug and land manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226615</commentid>
    <comment_count>5</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-05-16 21:59:34 -0700</bug_when>
    <thetext>Committed in change-set 59592 &lt;http://trac.webkit.org/changeset/59592&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56209</attachid>
            <date>2010-05-16 21:47:16 -0700</date>
            <delta_ts>2010-05-16 21:52:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Bug39196.patch</filename>
            <type>text/plain</type>
            <size>75255</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTU5MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTE5IEBACisyMDEwLTA1LTE2ICBEYW5pZWwgQmF0ZXMgIDxkYmF0ZXNAcmltLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkxOTYKKworICAgICAgICBQcmVw
YXJlZCBvbiBiZWhhbGYgb2YgRGF2aWQgSHlhdHQuCisKKyAgICAgICAgIk5vdCB3b3J0aCB0aGUg
bWVtb3J5IHVzZS4iIEp1c3Qgcm9sbCB0aGlzIG91dC4KKworICAgICAgICAqIFdlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6cHJldmlvdXNMaW5lUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6bmV4dExp
bmVQb3NpdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpFbGxp
cHNpc0JveDo6c2VsZWN0aW9uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpFbGxpcHNpc0JveDo6
cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6Om5vZGVBdFBv
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3guaDoKKyAgICAgICAgKFdlYkNv
cmU6OkVsbGlwc2lzQm94OjpFbGxpcHNpc0JveCk6CisgICAgICAgIChXZWJDb3JlOjpFbGxpcHNp
c0JveDo6aGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lQm94LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZUJveDo6aGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZUJveDo6YWRqdXN0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94OjpjYW5B
Y2NvbW1vZGF0ZUVsbGlwc2lzKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lQm94Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OklubGluZUJveCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmxpbmVCb3g6OmlzSW5saW5lQm94KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6
aGFzVmlydHVhbEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnNldEhhc1Zp
cnR1YWxIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94Ojp2aXJ0dWFsSGVpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6c2V0V2lkdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lQm94Ojp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnNl
dFgpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94Ojp4KToKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUJveDo6c2V0WSk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnkpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5saW5lQm94OjpiYXNlbGluZVBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OklubGluZUJveDo6bGluZUhlaWdodCk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGlu
ZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGxhY2VCb3hl
c1ZlcnRpY2FsbHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6Y29tcHV0ZVZl
cnRpY2FsT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6bm9kZUF0
UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGFpbnRCb3hEZWNvcmF0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpwYWludE1hc2spOgorICAg
ICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGFpbnRUZXh0RGVjb3JhdGlvbnMpOgorICAg
ICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVGbG93Qm94Ojp2aXNpYmxlT3ZlcmZsb3dSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZUZsb3dCb3g6OnRvcExheW91dE92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZs
b3dCb3g6OmJvdHRvbUxheW91dE92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZs
b3dCb3g6OmxlZnRMYXlvdXRPdmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93
Qm94OjpyaWdodExheW91dE92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dC
b3g6OmxheW91dE92ZXJmbG93UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94
Ojp0b3BWaXN1YWxPdmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94Ojpi
b3R0b21WaXN1YWxPdmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94Ojps
ZWZ0VmlzdWFsT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cmln
aHRWaXN1YWxPdmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94Ojp2aXN1
YWxPdmVyZmxvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6c2V0SG9y
aXpvbnRhbE92ZXJmbG93UG9zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dC
b3g6OnNldFZlcnRpY2FsT3ZlcmZsb3dQb3NpdGlvbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnNlbGVj
dGlvblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGxhY2VFbGxpcHNp
c0JveCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lVGV4dEJveDo6cGFpbnRTcGVsbGluZ09yR3JhbW1hck1hcmtlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVUZXh0Qm94Ojpjb21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6b2Zmc2V0Rm9yUG9zaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVUZXh0Qm94OjpzZXRTcGFjZUFkZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwb3NpdGlvbkZvclBvaW50V2l0
aElubGluZUNoaWxkcmVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5
b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb21wdXRlVmVydGljYWxQ
b3NpdGlvbnNGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRJ
bmxpbmVDaGlsZHJlbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbmxpbmU6OmNyZWF0ZUlubGluZUZsb3dCb3gp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR0lubGluZVRleHQ6OmNyZWF0ZVRleHRCb3gpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1RleHQ6OmNyZWF0ZVJvb3RJbmxpbmVCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnBvc2l0aW9uRm9yUG9pbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Zmlyc3RSdW5YKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHQ6OmZpcnN0UnVuWSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVUZXh0UnVuKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSb290
SW5saW5lQm94OjpwbGFjZUVsbGlwc2lzKToKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVC
b3g6OmFkZEhpZ2hsaWdodE92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVC
b3g6OmNsb3Nlc3RMZWFmQ2hpbGRGb3JYUG9zKToKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHSW5s
aW5lRmxvd0JveC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lRmxvd0JveDo6U1ZHSW5s
aW5lRmxvd0JveCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVGbG93Qm94Ojp2aXJ0dWFs
SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZUZsb3dCb3g6OnNldEhlaWdodCk6
CisgICAgICAgICogcmVuZGVyaW5nL1NWR0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0lubGluZVRleHRCb3g6OnZpcnR1YWxIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHSW5saW5lVGV4dEJveDo6c2V0SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGlu
ZVRleHRCb3g6OnNlbGVjdGlvblRvcCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0
Qm94OjpzZWxlY3Rpb25IZWlnaHQpOgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSb290SW5saW5l
Qm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94OjpTVkdSb290SW5saW5l
Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3g6OnZpcnR1YWxIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUm9vdElubGluZUJveDo6c2V0SGVpZ2h0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94Lmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6VHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94OjpUcmFpbGluZ0Zsb2F0
c1Jvb3RJbmxpbmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6VHJhaWxpbmdGbG9hdHNSb290SW5s
aW5lQm94Ojp2aXJ0dWFsSGVpZ2h0KToKKwogMjAxMC0wNS0xMyAgVG9ueSBDaGFuZyAgPHRvbnlA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDog
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA1OTU5MSkKKysrIFdl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI4
Njk5LDYgKzI4Njk5LDEwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJl
bmRlcmluZ1xUcmFuc2Zvcm1TdGF0ZS5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDog
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDU5NTkx
KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTYyNjcsNiArNjI2Nyw3IEBACiAJCTM3QzI4QTY3MTBGNjU5Q0MwMDhDNzgxMyAv
KiBUeXBlc2V0dGluZ0ZlYXR1cmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFR5cGVzZXR0aW5nRmVhdHVyZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdG
ODE4RkIwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlVVJMUmVzcG9uc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMzdGODE4RkMwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxS
ZXNwb25zZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNv
cmVVUkxSZXNwb25zZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzdGQzk2REEx
MTA0RUQ3MTAwM0UxRkFEIC8qIFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGRDQyOTcxMTgzNjg0NjAwOTNDMDI5IC8q
IFRyZWVEZXB0aExpbWl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyZWVE
ZXB0aExpbWl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMDAyQ0NCMEY2NkVE
RUYwMDlFNjYwRCAvKiBTY3JpcHRGdW5jdGlvbkNhbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2NyaXB0RnVuY3Rpb25DYWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQxMDAyQ0NDMEY2NkVERUYwMDlFNjYwRCAvKiBTY3JpcHRGdW5jdGlvbkNhbGwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0RnVuY3Rpb25DYWxs
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2MzIyLDYgKzE2MzIzLDcgQEAK
IAkJCQlBOENGRjA0QzBBMTU0RjA5MDAwQTQyMzQgLyogVGFibGVMYXlvdXQuaCAqLywKIAkJCQlB
QjAxNERFMTBFNjg5QTQzMDBFMTA0NDUgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCAq
LywKIAkJCQlBQjAxNERFMjBFNjg5QTQzMDBFMTA0NDUgLyogVGV4dENvbnRyb2xJbm5lckVsZW1l
bnRzLmggKi8sCisJCQkJMzdGQzk2REExMTA0RUQ3MTAwM0UxRkFEIC8qIFRyYWlsaW5nRmxvYXRz
Um9vdElubGluZUJveC5oICovLAogCQkJCTBGNTAwQUIwMEY1NERCMzEwMEVFRjkyOCAvKiBUcmFu
c2Zvcm1TdGF0ZS5jcHAgKi8sCiAJCQkJMEY1MDBBQUUwRjU0REIxQjAwRUVGOTI4IC8qIFRyYW5z
Zm9ybVN0YXRlLmggKi8sCiAJCQkpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5p
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAko
cmV2aXNpb24gNTk1OTEpCisrKyBXZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU3Nyw3ICs1NzcsNyBAQCBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNM
aW5lUG9zaXRpb24oY29uCiAgICAgaWYgKGJveCkgewogICAgICAgICByb290ID0gYm94LT5yb290
KCktPnByZXZSb290Qm94KCk7CiAgICAgICAgIC8vIFdlIHdhbnQgdG8gc2tpcCB6ZXJvIGhlaWdo
dCBib3hlcy4KLSAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGZvciBSb290SW5saW5lQm94ZXMg
dGhhdCByZXByZXNlbnQgdHJhaWxpbmcgZmxvYXRzLgorICAgICAgICAvLyBUaGlzIGNvdWxkIGhh
cHBlbiBpbiBjYXNlIGl0IGlzIGEgVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94LgogICAgICAg
ICBpZiAocm9vdCAmJiByb290LT5oZWlnaHQoKSkKICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9j
ayA9IHJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKTsKICAgICAgICAgZWxzZQpAQCAtNjg2LDcg
KzY4Niw3IEBAIFZpc2libGVQb3NpdGlvbiBuZXh0TGluZVBvc2l0aW9uKGNvbnN0IFYKICAgICBp
ZiAoYm94KSB7CiAgICAgICAgIHJvb3QgPSBib3gtPnJvb3QoKS0+bmV4dFJvb3RCb3goKTsKICAg
ICAgICAgLy8gV2Ugd2FudCB0byBza2lwIHplcm8gaGVpZ2h0IGJveGVzLgotICAgICAgICAvLyBU
aGlzIGNhbiBoYXBwZW4gZm9yIFJvb3RJbmxpbmVCb3hlcyB0aGF0IHJlcHJlc2VudCB0cmFpbGlu
ZyBmbG9hdHMuCisgICAgICAgIC8vIFRoaXMgY291bGQgaGFwcGVuIGluIGNhc2UgaXQgaXMgYSBU
cmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guCiAgICAgICAgIGlmIChyb290ICYmIHJvb3QtPmhl
aWdodCgpKQogICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrID0gcmVuZGVyZXItPmNvbnRhaW5p
bmdCbG9jaygpOwogICAgICAgICBlbHNlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNp
c0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3Bw
CShyZXZpc2lvbiA1OTU5MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCB2b2lkIEVsbGlwc2lzQm94OjpwYWludChS
ZW5kZXJPYmplY3Q6OlBhCiAgICAgfQogCiAgICAgY29uc3QgU3RyaW5nJiBzdHIgPSBtX3N0cjsK
LSAgICBjb250ZXh0LT5kcmF3VGV4dChzdHlsZS0+Zm9udCgpLCBUZXh0UnVuKHN0ci5jaGFyYWN0
ZXJzKCksIHN0ci5sZW5ndGgoKSwgZmFsc2UsIDAsIDAsIGZhbHNlLCBzdHlsZS0+dmlzdWFsbHlP
cmRlcmVkKCkpLCBJbnRQb2ludCh4KCkgKyB0eCwgeSgpICsgdHkgKyBzdHlsZS0+Zm9udCgpLmFz
Y2VudCgpKSk7CisgICAgY29udGV4dC0+ZHJhd1RleHQoc3R5bGUtPmZvbnQoKSwgVGV4dFJ1bihz
dHIuY2hhcmFjdGVycygpLCBzdHIubGVuZ3RoKCksIGZhbHNlLCAwLCAwLCBmYWxzZSwgc3R5bGUt
PnZpc3VhbGx5T3JkZXJlZCgpKSwgSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsgc3R5bGUt
PmZvbnQoKS5hc2NlbnQoKSkpOwogCiAgICAgLy8gUmVzdG9yZSB0aGUgcmVndWxhciBmaWxsIGNv
bG9yLgogICAgIGlmICh0ZXh0Q29sb3IgIT0gY29udGV4dC0+ZmlsbENvbG9yKCkpCkBAIC02Miw4
ICs2Miw4IEBAIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50KFJlbmRlck9iamVjdDo6UGEKIAogICAg
IGlmIChtX21hcmt1cEJveCkgewogICAgICAgICAvLyBQYWludCB0aGUgbWFya3VwIGJveAotICAg
ICAgICB0eCArPSBmcmFtZVJlY3QoKS5yaWdodCgpIC0gbV9tYXJrdXBCb3gtPngoKTsKLSAgICAg
ICAgdHkgKz0geSgpICsgc3R5bGUtPmZvbnQoKS5hc2NlbnQoKSAtIChtX21hcmt1cEJveC0+eSgp
ICsgbV9tYXJrdXBCb3gtPnJlbmRlcmVyKCktPnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9udCgpLmFz
Y2VudCgpKTsKKyAgICAgICAgdHggKz0gbV94ICsgbV93aWR0aCAtIG1fbWFya3VwQm94LT54KCk7
CisgICAgICAgIHR5ICs9IG1feSArIHN0eWxlLT5mb250KCkuYXNjZW50KCkgLSAobV9tYXJrdXBC
b3gtPnkoKSArIG1fbWFya3VwQm94LT5yZW5kZXJlcigpLT5zdHlsZShtX2ZpcnN0TGluZSktPmZv
bnQoKS5hc2NlbnQoKSk7CiAgICAgICAgIG1fbWFya3VwQm94LT5wYWludChwYWludEluZm8sIHR4
LCB0eSk7CiAgICAgfQogfQpAQCAtNzMsNyArNzMsNyBAQCBJbnRSZWN0IEVsbGlwc2lzQm94Ojpz
ZWxlY3Rpb25SZWN0KGludCB0CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9yZW5kZXJlci0+
c3R5bGUobV9maXJzdExpbmUpOwogICAgIGNvbnN0IEZvbnQmIGYgPSBzdHlsZS0+Zm9udCgpOwog
ICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGYuc2VsZWN0aW9uUmVjdEZvclRleHQoVGV4dFJ1
bihtX3N0ci5jaGFyYWN0ZXJzKCksIG1fc3RyLmxlbmd0aCgpLCBmYWxzZSwgMCwgMCwgZmFsc2Us
IHN0eWxlLT52aXN1YWxseU9yZGVyZWQoKSksCi0gICAgICAgICAgICBJbnRQb2ludCh4KCkgKyB0
eCwgeSgpICsgdHkgKyByb290KCktPnNlbGVjdGlvblRvcCgpKSwgcm9vdCgpLT5zZWxlY3Rpb25I
ZWlnaHQoKSkpOworICAgICAgICAgICAgSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsgcm9v
dCgpLT5zZWxlY3Rpb25Ub3AoKSksIHJvb3QoKS0+c2VsZWN0aW9uSGVpZ2h0KCkpKTsKIH0KIAog
dm9pZCBFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBpbnQgdHgsIGludCB0eSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250KQpA
QCAtODksMzIgKzg5LDMyIEBAIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBo
aWMKICAgICAgICAgYyA9IENvbG9yKDB4ZmYgLSBjLnJlZCgpLCAweGZmIC0gYy5ncmVlbigpLCAw
eGZmIC0gYy5ibHVlKCkpOwogCiAgICAgY29udGV4dC0+c2F2ZSgpOwotICAgIGludCB0ID0gcm9v
dCgpLT5zZWxlY3Rpb25Ub3AoKTsKKyAgICBpbnQgeSA9IHJvb3QoKS0+c2VsZWN0aW9uVG9wKCk7
CiAgICAgaW50IGggPSByb290KCktPnNlbGVjdGlvbkhlaWdodCgpOwotICAgIGNvbnRleHQtPmNs
aXAoSW50UmVjdCh4KCkgKyB0eCwgdCArIHR5LCB3aWR0aCgpLCBoKSk7CisgICAgY29udGV4dC0+
Y2xpcChJbnRSZWN0KG1feCArIHR4LCB5ICsgdHksIG1fd2lkdGgsIGgpKTsKICAgICBjb250ZXh0
LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBUZXh0UnVuKG1fc3RyLmNoYXJhY3RlcnMoKSwg
bV9zdHIubGVuZ3RoKCksIGZhbHNlLCAwLCAwLCBmYWxzZSwgc3R5bGUtPnZpc3VhbGx5T3JkZXJl
ZCgpKSwKLSAgICAgICAgSW50UG9pbnQoeCgpICsgdHgsIHkoKSArIHR5ICsgdCksIGgsIGMsIHN0
eWxlLT5jb2xvclNwYWNlKCkpOworICAgICAgICBJbnRQb2ludChtX3ggKyB0eCwgbV95ICsgdHkg
KyB5KSwgaCwgYywgc3R5bGUtPmNvbG9yU3BhY2UoKSk7CiAgICAgY29udGV4dC0+cmVzdG9yZSgp
OwogfQogCi1ib29sIEVsbGlwc2lzQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgcG9pbnRYLCBpbnQgcG9pbnRZ
LCBpbnQgdHgsIGludCB0eSkKK2Jvb2wgRWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQg
eSwgaW50IHR4LCBpbnQgdHkpCiB7Ci0gICAgdHggKz0geCgpOwotICAgIHR5ICs9IHkoKTsKKyAg
ICB0eCArPSBtX3g7CisgICAgdHkgKz0gbV95OwogCiAgICAgLy8gSGl0IHRlc3QgdGhlIG1hcmt1
cCBib3guCiAgICAgaWYgKG1fbWFya3VwQm94KSB7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IG1fcmVuZGVyZXItPnN0eWxlKG1fZmlyc3RMaW5lKTsKLSAgICAgICAgaW50IG10eCA9IHR4
ICsgd2lkdGgoKSAtIG1fbWFya3VwQm94LT54KCk7CisgICAgICAgIGludCBtdHggPSB0eCArIG1f
d2lkdGggLSBtX21hcmt1cEJveC0+eCgpOwogICAgICAgICBpbnQgbXR5ID0gdHkgKyBzdHlsZS0+
Zm9udCgpLmFzY2VudCgpIC0gKG1fbWFya3VwQm94LT55KCkgKyBtX21hcmt1cEJveC0+cmVuZGVy
ZXIoKS0+c3R5bGUobV9maXJzdExpbmUpLT5mb250KCkuYXNjZW50KCkpOwotICAgICAgICBpZiAo
bV9tYXJrdXBCb3gtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRYLCBwb2ludFks
IG10eCwgbXR5KSkgewotICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3Vs
dChyZXN1bHQsIEludFBvaW50KHBvaW50WCAtIG10eCwgcG9pbnRZIC0gbXR5KSk7CisgICAgICAg
IGlmIChtX21hcmt1cEJveC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCBtdHgs
IG10eSkpIHsKKyAgICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVz
dWx0LCBJbnRQb2ludCh4IC0gbXR4LCB5IC0gbXR5KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYg
SW50UmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKS5jb250YWlucyhwb2ludFgsIHBvaW50
WSkpIHsKLSAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIElu
dFBvaW50KHBvaW50WCAtIHR4LCBwb2ludFkgLSB0eSkpOworICAgIGlmICh2aXNpYmxlVG9IaXRU
ZXN0aW5nKCkgJiYgSW50UmVjdCh0eCwgdHksIG1fd2lkdGgsIG1faGVpZ2h0KS5jb250YWlucyh4
LCB5KSkgeworICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwg
SW50UG9pbnQoeCAtIHR4LCB5IC0gdHkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgJKHJldmlzaW9uIDU5NTkxKQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDEwIEFwcGxlIENvbXB1dGVyLCBJ
bmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMzAsOCArMzAsOSBAQCBjbGFzcyBIaXRUZXN0UmVzdWx0Owog
Y2xhc3MgRWxsaXBzaXNCb3ggOiBwdWJsaWMgSW5saW5lQm94IHsKIHB1YmxpYzoKICAgICBFbGxp
cHNpc0JveChSZW5kZXJPYmplY3QqIG9iaiwgY29uc3QgQXRvbWljU3RyaW5nJiBlbGxpcHNpc1N0
ciwgSW5saW5lRmxvd0JveCogcGFyZW50LAotICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3Qm
IGZyYW1lUmVjdCwgYm9vbCBmaXJzdExpbmUsIElubGluZUJveCogbWFya3VwQm94KQotICAgICAg
ICA6IElubGluZUJveChvYmosIGZyYW1lUmVjdCwgZmlyc3RMaW5lLCB0cnVlLCBmYWxzZSwgZmFs
c2UsIDAsIDAsIHBhcmVudCkKKyAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQs
IGludCB5LCBib29sIGZpcnN0TGluZSwgSW5saW5lQm94KiBtYXJrdXBCb3gpCisgICAgICAgIDog
SW5saW5lQm94KG9iaiwgMCwgeSwgd2lkdGgsIGZpcnN0TGluZSwgdHJ1ZSwgZmFsc2UsIGZhbHNl
LCAwLCAwLCBwYXJlbnQpCisgICAgICAgICwgbV9oZWlnaHQoaGVpZ2h0KQogICAgICAgICAsIG1f
c3RyKGVsbGlwc2lzU3RyKQogICAgICAgICAsIG1fbWFya3VwQm94KG1hcmt1cEJveCkKICAgICAg
ICAgLCBtX3NlbGVjdGlvblN0YXRlKFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSkKQEAgLTQ0
LDkgKzQ1LDExIEBAIHB1YmxpYzoKICAgICBJbnRSZWN0IHNlbGVjdGlvblJlY3QoaW50IHR4LCBp
bnQgdHkpOwogCiBwcml2YXRlOgorICAgIHZpcnR1YWwgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0
dXJuIG1faGVpZ2h0OyB9CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRl
IHNlbGVjdGlvblN0YXRlKCkgeyByZXR1cm4gbV9zZWxlY3Rpb25TdGF0ZTsgfQogICAgIHZvaWQg
cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHksIFJlbmRlclN0
eWxlKiwgY29uc3QgRm9udCYpOwogCisgICAgaW50IG1faGVpZ2h0OwogICAgIEF0b21pY1N0cmlu
ZyBtX3N0cjsKICAgICBJbmxpbmVCb3gqIG1fbWFya3VwQm94OwogICAgIFJlbmRlck9iamVjdDo6
U2VsZWN0aW9uU3RhdGUgbV9zZWxlY3Rpb25TdGF0ZTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L0lubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94
LmNwcAkocmV2aXNpb24gNTk1OTEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSwyNyBAQCB2b2lkIElubGluZUJveDo6c2hvd1Ry
ZWVGb3JUaGlzKCkgY29uc3QKIH0KICNlbmRpZgogCitpbnQgSW5saW5lQm94OjpoZWlnaHQoKSBj
b25zdAoreworI2lmIEVOQUJMRShTVkcpCisgICAgaWYgKGhhc1ZpcnR1YWxIZWlnaHQoKSkKKyAg
ICAgICAgcmV0dXJuIHZpcnR1YWxIZWlnaHQoKTsKKyNlbmRpZgorICAgIAorICAgIGlmIChyZW5k
ZXJlcigpLT5pc1RleHQoKSkKKyAgICAgICAgcmV0dXJuIG1faXNUZXh0ID8gcmVuZGVyZXIoKS0+
c3R5bGUobV9maXJzdExpbmUpLT5mb250KCkuaGVpZ2h0KCkgOiAwOworICAgIGlmIChyZW5kZXJl
cigpLT5pc0JveCgpICYmIHBhcmVudCgpKQorICAgICAgICByZXR1cm4gdG9SZW5kZXJCb3gobV9y
ZW5kZXJlciktPmhlaWdodCgpOworCisgICAgQVNTRVJUKGlzSW5saW5lRmxvd0JveCgpKTsKKyAg
ICBSZW5kZXJCb3hNb2RlbE9iamVjdCogZmxvd09iamVjdCA9IGJveE1vZGVsT2JqZWN0KCk7Cisg
ICAgY29uc3QgRm9udCYgZm9udCA9IHJlbmRlcmVyKCktPnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9u
dCgpOworICAgIGludCByZXN1bHQgPSBmb250LmhlaWdodCgpOworICAgIGlmIChwYXJlbnQoKSkK
KyAgICAgICAgcmVzdWx0ICs9IGZsb3dPYmplY3QtPmJvcmRlckFuZFBhZGRpbmdIZWlnaHQoKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCiBpbnQgSW5saW5lQm94OjpjYXJldE1pbk9mZnNldCgp
IGNvbnN0IAogeyAKICAgICByZXR1cm4gbV9yZW5kZXJlci0+Y2FyZXRNaW5PZmZzZXQoKTsgCkBA
IC0xMzAsNyArMTUxLDggQEAgdm9pZCBJbmxpbmVCb3g6OmF0dGFjaExpbmUoKQogCiB2b2lkIElu
bGluZUJveDo6YWRqdXN0UG9zaXRpb24oaW50IGR4LCBpbnQgZHkpCiB7Ci0gICAgbW92ZShkeCwg
ZHkpOworICAgIG1feCArPSBkeDsKKyAgICBtX3kgKz0gZHk7CiAgICAgaWYgKG1fcmVuZGVyZXIt
PmlzUmVwbGFjZWQoKSkgewogICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94KG1f
cmVuZGVyZXIpOwogICAgICAgICBib3gtPm1vdmUoZHgsIGR5KTsKQEAgLTI0Niw3ICsyNjgsNyBA
QCBib29sIElubGluZUJveDo6Y2FuQWNjb21tb2RhdGVFbGxpcHNpcyhiCiAgICAgaWYgKCFtX3Jl
bmRlcmVyIHx8ICFtX3JlbmRlcmVyLT5pc1JlcGxhY2VkKCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIAotICAgIEludFJlY3QgYm94UmVjdCh4KCksIDAsIHdpZHRoKCksIDEwKTsKKyAgICBJ
bnRSZWN0IGJveFJlY3QobV94LCAwLCBtX3dpZHRoLCAxMCk7CiAgICAgSW50UmVjdCBlbGxpcHNp
c1JlY3QobHRyID8gYmxvY2tFZGdlIC0gZWxsaXBzaXNXaWR0aCA6IGJsb2NrRWRnZSwgMCwgZWxs
aXBzaXNXaWR0aCwgMTApOwogICAgIHJldHVybiAhKGJveFJlY3QuaW50ZXJzZWN0cyhlbGxpcHNp
c1JlY3QpKTsKIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCShyZXZpc2lvbiA1OTU5MSkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBAIGNsYXNzIEhpdFRlc3RSZXF1ZXN0OwogY2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNsYXNz
IFJvb3RJbmxpbmVCb3g7CiAKKwogLy8gSW5saW5lQm94IHJlcHJlc2VudHMgYSByZWN0YW5nbGUg
dGhhdCBvY2N1cnMgb24gYSBsaW5lLiAgSXQgY29ycmVzcG9uZHMgdG8KIC8vIHNvbWUgUmVuZGVy
T2JqZWN0IChpLmUuLCBpdCByZXByZXNlbnRzIGEgcG9ydGlvbiBvZiB0aGF0IFJlbmRlck9iamVj
dCkuCiBjbGFzcyBJbmxpbmVCb3ggewpAQCAtMzksMTEgKzQwLDE3IEBAIHB1YmxpYzoKICAgICAg
ICAgLCBtX3ByZXYoMCkKICAgICAgICAgLCBtX3BhcmVudCgwKQogICAgICAgICAsIG1fcmVuZGVy
ZXIob2JqKQorICAgICAgICAsIG1feCgwKQorICAgICAgICAsIG1feSgwKQorICAgICAgICAsIG1f
d2lkdGgoMCkKICAgICAgICAgLCBtX2ZpcnN0TGluZShmYWxzZSkKICAgICAgICAgLCBtX2NvbnN0
cnVjdGVkKGZhbHNlKQogICAgICAgICAsIG1fYmlkaUVtYmVkZGluZ0xldmVsKDApCiAgICAgICAg
ICwgbV9kaXJ0eShmYWxzZSkKICAgICAgICAgLCBtX2V4dHJhY3RlZChmYWxzZSkKKyNpZiBFTkFC
TEUoU1ZHKQorICAgICAgICAsIG1faGFzVmlydHVhbEhlaWdodChmYWxzZSkKKyNlbmRpZgogICAg
ICAgICAsIG1fZW5kc1dpdGhCcmVhayhmYWxzZSkKICAgICAgICAgLCBtX2hhc1NlbGVjdGVkQ2hp
bGRyZW4oZmFsc2UpCiAgICAgICAgICwgbV9oYXNFbGxpcHNpc0JveChmYWxzZSkKQEAgLTYwLDE4
ICs2NywyMyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIElubGluZUJveChSZW5kZXJP
YmplY3QqIG9iaiwgY29uc3QgSW50UmVjdCYgZnJhbWVSZWN0LCBib29sIGZpcnN0TGluZSwgYm9v
bCBjb25zdHJ1Y3RlZCwKKyAgICBJbmxpbmVCb3goUmVuZGVyT2JqZWN0KiBvYmosIGludCB4LCBp
bnQgeSwgaW50IHdpZHRoLCBib29sIGZpcnN0TGluZSwgYm9vbCBjb25zdHJ1Y3RlZCwKICAgICAg
ICAgICAgICAgYm9vbCBkaXJ0eSwgYm9vbCBleHRyYWN0ZWQsIElubGluZUJveCogbmV4dCwgSW5s
aW5lQm94KiBwcmV2LCBJbmxpbmVGbG93Qm94KiBwYXJlbnQpCiAgICAgICAgIDogbV9uZXh0KG5l
eHQpCiAgICAgICAgICwgbV9wcmV2KHByZXYpCiAgICAgICAgICwgbV9wYXJlbnQocGFyZW50KQog
ICAgICAgICAsIG1fcmVuZGVyZXIob2JqKQotICAgICAgICAsIG1fZnJhbWVSZWN0KGZyYW1lUmVj
dCkKKyAgICAgICAgLCBtX3goeCkKKyAgICAgICAgLCBtX3koeSkKKyAgICAgICAgLCBtX3dpZHRo
KHdpZHRoKQogICAgICAgICAsIG1fZmlyc3RMaW5lKGZpcnN0TGluZSkKICAgICAgICAgLCBtX2Nv
bnN0cnVjdGVkKGNvbnN0cnVjdGVkKQogICAgICAgICAsIG1fYmlkaUVtYmVkZGluZ0xldmVsKDAp
CiAgICAgICAgICwgbV9kaXJ0eShkaXJ0eSkKICAgICAgICAgLCBtX2V4dHJhY3RlZChleHRyYWN0
ZWQpCisjaWYgRU5BQkxFKFNWRykKKyAgICAgICAgLCBtX2hhc1ZpcnR1YWxIZWlnaHQoZmFsc2Up
CisjZW5kaWYKICAgICAgICAgLCBtX2VuZHNXaXRoQnJlYWsoZmFsc2UpCiAgICAgICAgICwgbV9o
YXNTZWxlY3RlZENoaWxkcmVuKGZhbHNlKSAgIAogICAgICAgICAsIG1faGFzRWxsaXBzaXNCb3go
ZmFsc2UpCkBAIC0xMjEsMTEgKzEzMywxNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1RleHQoKSBj
b25zdCB7IHJldHVybiBtX2lzVGV4dDsgfQogICAgIHZvaWQgc2V0SXNUZXh0KGJvb2wgYikgeyBt
X2lzVGV4dCA9IGI7IH0KICAKKyAgICB2aXJ0dWFsIGJvb2wgaXNJbmxpbmVCb3goKSB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0lubGluZUZsb3dCb3goKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0lubGluZVRleHRCb3goKSB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1Jvb3RJbmxpbmVCb3goKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogI2lmIEVOQUJMRShTVkcpIAogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1Jv
b3RJbmxpbmVCb3goKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgYm9vbCBoYXNWaXJ0dWFsSGVp
Z2h0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNWaXJ0dWFsSGVpZ2h0OyB9CisgICAgdm9pZCBzZXRI
YXNWaXJ0dWFsSGVpZ2h0KCkgeyBtX2hhc1ZpcnR1YWxIZWlnaHQgPSB0cnVlOyB9CisgICAgdmly
dHVhbCBpbnQgdmlydHVhbEhlaWdodCgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJl
dHVybiAwOyB9CiAjZW5kaWYKICAgICAKICAgICBib29sIGlzQ29uc3RydWN0ZWQoKSB7IHJldHVy
biBtX2NvbnN0cnVjdGVkOyB9CkBAIC0xNzUsMzIgKzE5MiwyMSBAQCBwdWJsaWM6CiAgICAgY29u
c3QgUm9vdElubGluZUJveCogcm9vdCgpIGNvbnN0OwogICAgIFJvb3RJbmxpbmVCb3gqIHJvb3Qo
KTsKIAotICAgIGludCB4KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3QueCgpOyB9Ci0gICAg
aW50IHkoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC55KCk7IH0KLSAgICBpbnQgd2lkdGgo
KSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC53aWR0aCgpOyB9Ci0gICAgaW50IGhlaWdodCgp
IGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LmhlaWdodCgpOyB9Ci0gICAgaW50IGJvdHRvbSgp
IGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LmJvdHRvbSgpOyB9Ci0gICAgaW50IHJpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3QucmlnaHQoKTsgfQotCi0gICAgdm9pZCBzZXRYKGlu
dCB4KSB7IG1fZnJhbWVSZWN0LnNldFgoeCk7IH0KLSAgICB2b2lkIHNldFkoaW50IHkpIHsgbV9m
cmFtZVJlY3Quc2V0WSh5KTsgfQotICAgIHZvaWQgc2V0V2lkdGgoaW50IHdpZHRoKSB7IG1fZnJh
bWVSZWN0LnNldFdpZHRoKHdpZHRoKTsgfQotICAgIHZvaWQgc2V0SGVpZ2h0KGludCBoZWlnaHQp
IHsgbV9mcmFtZVJlY3Quc2V0SGVpZ2h0KGhlaWdodCk7IH0KLSAgICAKLSAgICBJbnRQb2ludCBs
b2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LmxvY2F0aW9uKCk7IH0KLSAgICBJ
bnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC5zaXplKCk7IH0KKyAgICB2
b2lkIHNldFdpZHRoKGludCB3KSB7IG1fd2lkdGggPSB3OyB9CisgICAgaW50IHdpZHRoKCkgY29u
c3QgeyByZXR1cm4gbV93aWR0aDsgfQogCi0gICAgdm9pZCBzZXRMb2NhdGlvbihjb25zdCBJbnRQ
b2ludCYgbG9jYXRpb24pIHsgbV9mcmFtZVJlY3Quc2V0TG9jYXRpb24obG9jYXRpb24pOyB9Ci0g
ICAgdm9pZCBzZXRMb2NhdGlvbihpbnQgeCwgaW50IHkpIHsgc2V0TG9jYXRpb24oSW50UG9pbnQo
eCwgeSkpOyB9Ci0gICAgCi0gICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpIHsg
bV9mcmFtZVJlY3Quc2V0U2l6ZShzaXplKTsgfQotICAgIHZvaWQgbW92ZShpbnQgZHgsIGludCBk
eSkgeyBtX2ZyYW1lUmVjdC5tb3ZlKGR4LCBkeSk7IH0KKyAgICAvLyB4KCkgaXMgdGhlIGxlZnQg
c2lkZSBvZiB0aGUgYm94IGluIHRoZSBwYXJlbnQncyBjb29yZGluYXRlIHN5c3RlbS4KKyAgICB2
b2lkIHNldFgoaW50IHgpIHsgbV94ID0geDsgfQorICAgIGludCB4KCkgY29uc3QgeyByZXR1cm4g
bV94OyB9CisKKyAgICAvLyB5KCkgaXMgdGhlIHRvcCBvZiB0aGUgYm94IGluIHRoZSBwYXJlbnQn
cyBjb29yZGluYXRlIHN5c3RlbS4KKyAgICB2b2lkIHNldFkoaW50IHkpIHsgbV95ID0geTsgfQor
ICAgIGludCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9CiAKLSAgICBjb25zdCBJbnRSZWN0JiBm
cmFtZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdDsgfQotICAgIHZvaWQgc2V0RnJh
bWVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9mcmFtZVJlY3QgPSByZWN0OyB9CisgICAg
aW50IGhlaWdodCgpIGNvbnN0OwogCi0gICAgaW50IGJhc2VsaW5lUG9zaXRpb24oYm9vbCBpc1Jv
b3RMaW5lQm94KSBjb25zdCB7IHJldHVybiByZW5kZXJlcigpLT5iYXNlbGluZVBvc2l0aW9uKG1f
Zmlyc3RMaW5lLCBpc1Jvb3RMaW5lQm94KTsgfQotICAgIGludCBsaW5lSGVpZ2h0KGJvb2wgaXNS
b290TGluZUJveCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS0+bGluZUhlaWdodChtX2ZpcnN0
TGluZSwgaXNSb290TGluZUJveCk7IH0KKyAgICBpbmxpbmUgaW50IGJhc2VsaW5lUG9zaXRpb24o
Ym9vbCBpc1Jvb3RMaW5lQm94KSBjb25zdCB7IHJldHVybiByZW5kZXJlcigpLT5iYXNlbGluZVBv
c2l0aW9uKG1fZmlyc3RMaW5lLCBpc1Jvb3RMaW5lQm94KTsgfQorICAgIGlubGluZSBpbnQgbGlu
ZUhlaWdodChib29sIGlzUm9vdExpbmVCb3gpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVyKCktPmxp
bmVIZWlnaHQobV9maXJzdExpbmUsIGlzUm9vdExpbmVCb3gpOyB9CiAKICAgICB2aXJ0dWFsIGlu
dCBjYXJldE1pbk9mZnNldCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGNhcmV0TWF4T2Zmc2V0
KCkgY29uc3Q7CkBAIC0yNDgsNyArMjU0LDkgQEAgcHJpdmF0ZToKIHB1YmxpYzoKICAgICBSZW5k
ZXJPYmplY3QqIG1fcmVuZGVyZXI7CiAKLSAgICBJbnRSZWN0IG1fZnJhbWVSZWN0OworICAgIGlu
dCBtX3g7CisgICAgaW50IG1feTsKKyAgICBpbnQgbV93aWR0aDsKICAgICAKICAgICAvLyBTb21l
IG9mIHRoZXNlIGJpdHMgYXJlIGFjdHVhbGx5IGZvciBzdWJjbGFzc2VzIGFuZCBtb3ZlZCBoZXJl
IHRvIGNvbXBhY3QgdGhlIHN0cnVjdHVyZXMuCiAKQEAgLTI2MSw2ICsyNjksNyBAQCBwcml2YXRl
OgogcHJvdGVjdGVkOgogICAgIGJvb2wgbV9kaXJ0eSA6IDE7CiAgICAgYm9vbCBtX2V4dHJhY3Rl
ZCA6IDE7CisgICAgYm9vbCBtX2hhc1ZpcnR1YWxIZWlnaHQgOiAxOwogCiAgICAgLy8gZm9yIFJv
b3RJbmxpbmVCb3gKICAgICBib29sIG1fZW5kc1dpdGhCcmVhayA6IDE7ICAvLyBXaGV0aGVyIHRo
ZSBsaW5lIGVuZHMgd2l0aCBhIDxicj4uCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVG
bG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94
LmNwcAkocmV2aXNpb24gNTk1OTEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAzLDM3ICs1MDMsMzEgQEAgdm9pZCBJbmxpbmVGbG93
Qm94OjpwbGFjZUJveGVzVmVydGljYWxseQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBp
bnQgbmV3WSA9IGN1cnItPnkoKTsKLSAgICAgICAgaW50IG5ld0hlaWdodCA9IDA7CiAgICAgICAg
IGlmIChjdXJyLT5pc1RleHQoKSB8fCBjdXJyLT5pc0lubGluZUZsb3dCb3goKSkgewogICAgICAg
ICAgICAgY29uc3QgRm9udCYgZm9udCA9IGN1cnItPnJlbmRlcmVyKCktPnN0eWxlKG1fZmlyc3RM
aW5lKS0+Zm9udCgpOwogICAgICAgICAgICAgbmV3WSArPSBjdXJyLT5iYXNlbGluZVBvc2l0aW9u
KGZhbHNlKSAtIGZvbnQuYXNjZW50KCk7Ci0gICAgICAgICAgICBuZXdIZWlnaHQgPSBmb250Lmhl
aWdodCgpOwotICAgICAgICAgICAgaWYgKGN1cnItPmlzSW5saW5lRmxvd0JveCgpKSB7CisgICAg
ICAgICAgICBpZiAoY3Vyci0+aXNJbmxpbmVGbG93Qm94KCkpCiAgICAgICAgICAgICAgICAgbmV3
WSAtPSBjdXJyLT5ib3hNb2RlbE9iamVjdCgpLT5ib3JkZXJUb3AoKSArIGN1cnItPmJveE1vZGVs
T2JqZWN0KCktPnBhZGRpbmdUb3AoKTsKLSAgICAgICAgICAgICAgICBuZXdIZWlnaHQgKz0gY3Vy
ci0+Ym94TW9kZWxPYmplY3QoKS0+Ym9yZGVyQW5kUGFkZGluZ0hlaWdodCgpOwotICAgICAgICAg
ICAgfQogICAgICAgICB9IGVsc2UgaWYgKCFjdXJyLT5yZW5kZXJlcigpLT5pc0JSKCkpIHsKICAg
ICAgICAgICAgIFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3goY3Vyci0+cmVuZGVyZXIoKSk7
CiAgICAgICAgICAgICBuZXdZICs9IGJveC0+bWFyZ2luVG9wKCk7Ci0gICAgICAgICAgICBuZXdI
ZWlnaHQgPSBib3gtPmhlaWdodCgpOwogICAgICAgICB9CiAKICAgICAgICAgY3Vyci0+c2V0WShu
ZXdZKTsKLSAgICAgICAgY3Vyci0+c2V0SGVpZ2h0KG5ld0hlaWdodCk7CiAKICAgICAgICAgaWYg
KGNoaWxkQWZmZWN0c1RvcEJvdHRvbVBvcykgeworICAgICAgICAgICAgaW50IGJveEhlaWdodCA9
IGN1cnItPmhlaWdodCgpOwogICAgICAgICAgICAgc2VsZWN0aW9uVG9wID0gbWluKHNlbGVjdGlv
blRvcCwgbmV3WSk7Ci0gICAgICAgICAgICBzZWxlY3Rpb25Cb3R0b20gPSBtYXgoc2VsZWN0aW9u
Qm90dG9tLCBuZXdZICsgY3Vyci0+aGVpZ2h0KCkpOworICAgICAgICAgICAgc2VsZWN0aW9uQm90
dG9tID0gbWF4KHNlbGVjdGlvbkJvdHRvbSwgbmV3WSArIGJveEhlaWdodCk7CiAgICAgICAgIH0K
ICAgICB9CiAKICAgICBpZiAoaXNSb290SW5saW5lQm94KCkpIHsKICAgICAgICAgY29uc3QgRm9u
dCYgZm9udCA9IHJlbmRlcmVyKCktPnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9udCgpOwogICAgICAg
ICBzZXRZKHkoKSArIGJhc2VsaW5lUG9zaXRpb24odHJ1ZSkgLSBmb250LmFzY2VudCgpKTsKLSAg
ICAgICAgc2V0SGVpZ2h0KGZvbnQuaGVpZ2h0KCkpOwogICAgICAgICBpZiAoaGFzVGV4dENoaWxk
cmVuKCkgfHwgc3RyaWN0TW9kZSkgewogICAgICAgICAgICAgc2VsZWN0aW9uVG9wID0gbWluKHNl
bGVjdGlvblRvcCwgeSgpKTsKLSAgICAgICAgICAgIHNlbGVjdGlvbkJvdHRvbSA9IG1heChzZWxl
Y3Rpb25Cb3R0b20sIGJvdHRvbSgpKTsKKyAgICAgICAgICAgIHNlbGVjdGlvbkJvdHRvbSA9IG1h
eChzZWxlY3Rpb25Cb3R0b20sIHkoKSArIGhlaWdodCgpKTsKICAgICAgICAgfQogICAgIH0KIH0K
QEAgLTYxMCwyOCArNjA0LDI4IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6Y29tcHV0ZVZlcnRpY2Fs
T3ZlcmYKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBzZXRWZXJ0aWNhbE92ZXJmbG93UG9z
aXRpb25zKHRvcExheW91dE92ZXJmbG93LCBib3R0b21MYXlvdXRPdmVyZmxvdywgdG9wVmlzdWFs
T3ZlcmZsb3csIGJvdHRvbVZpc3VhbE92ZXJmbG93KTsKKyAgICBzZXRWZXJ0aWNhbE92ZXJmbG93
UG9zaXRpb25zKHRvcExheW91dE92ZXJmbG93LCBib3R0b21MYXlvdXRPdmVyZmxvdywgdG9wVmlz
dWFsT3ZlcmZsb3csIGJvdHRvbVZpc3VhbE92ZXJmbG93LCBib3hIZWlnaHQpOwogfQogCi1ib29s
IElubGluZUZsb3dCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCBwb2ludFgsIGludCBwb2ludFksIGludCB0eCwg
aW50IHR5KQorYm9vbCBJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0
eCwgaW50IHR5KQogewogICAgIEludFJlY3Qgb3ZlcmZsb3dSZWN0KHZpc2libGVPdmVyZmxvd1Jl
Y3QoKSk7CiAgICAgb3ZlcmZsb3dSZWN0Lm1vdmUodHgsIHR5KTsKLSAgICBpZiAoIW92ZXJmbG93
UmVjdC5jb250YWlucyhwb2ludFgsIHBvaW50WSkpCisgICAgaWYgKCFvdmVyZmxvd1JlY3QuY29u
dGFpbnMoeCwgeSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIENoZWNrIGNoaWxk
cmVuIGZpcnN0LgogICAgIGZvciAoSW5saW5lQm94KiBjdXJyID0gbGFzdENoaWxkKCk7IGN1cnI7
IGN1cnIgPSBjdXJyLT5wcmV2T25MaW5lKCkpIHsKLSAgICAgICAgaWYgKChjdXJyLT5yZW5kZXJl
cigpLT5pc1RleHQoKSB8fCAhY3Vyci0+Ym94TW9kZWxPYmplY3QoKS0+aGFzU2VsZlBhaW50aW5n
TGF5ZXIoKSkgJiYgY3Vyci0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludFgsIHBv
aW50WSwgdHgsIHR5KSkgewotICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJl
c3VsdChyZXN1bHQsIEludFBvaW50KHBvaW50WCAtIHR4LCBwb2ludFkgLSB0eSkpOworICAgICAg
ICBpZiAoKGN1cnItPnJlbmRlcmVyKCktPmlzVGV4dCgpIHx8ICFjdXJyLT5ib3hNb2RlbE9iamVj
dCgpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSAmJiBjdXJyLT5ub2RlQXRQb2ludChyZXF1ZXN0
LCByZXN1bHQsIHgsIHksIHR4LCB0eSkpIHsKKyAgICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0
ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4IC0gdHgsIHkgLSB0eSkpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBOb3cgY2hlY2sg
b3Vyc2VsdmVzLgotICAgIEludFJlY3QgcmVjdCh0eCArIHgoKSwgdHkgKyB5KCksIHdpZHRoKCks
IGhlaWdodCgpKTsKLSAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIHJlY3QuY29udGFp
bnMocG9pbnRYLCBwb2ludFkpKSB7Ci0gICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RS
ZXN1bHQocmVzdWx0LCBJbnRQb2ludChwb2ludFggLSB0eCwgcG9pbnRZIC0gdHkpKTsgLy8gRG9u
J3QgYWRkIGluIG1feCBvciBtX3kgaGVyZSwgd2Ugd2FudCBjb29yZHMgaW4gdGhlIGNvbnRhaW5p
bmcgYmxvY2sncyBzcGFjZS4KKyAgICBJbnRSZWN0IHJlY3QodHggKyBtX3gsIHR5ICsgbV95LCBt
X3dpZHRoLCBoZWlnaHQoKSk7CisgICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiByZWN0
LmNvbnRhaW5zKHgsIHkpKSB7CisgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1
bHQocmVzdWx0LCBJbnRQb2ludCh4IC0gdHgsIHkgLSB0eSkpOyAvLyBEb24ndCBhZGQgaW4gbV94
IG9yIG1feSBoZXJlLCB3ZSB3YW50IGNvb3JkcyBpbiB0aGUgY29udGFpbmluZyBibG9jaydzIHNw
YWNlLgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkBAIC03NDcsNyArNzQxLDgg
QEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEJveERlY29yYXRpb25zKAogICAgIGlmICghcmVu
ZGVyZXIoKS0+c2hvdWxkUGFpbnRXaXRoaW5Sb290KHBhaW50SW5mbykgfHwgcmVuZGVyZXIoKS0+
c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUgfHwgcGFpbnRJbmZvLnBoYXNlICE9IFBh
aW50UGhhc2VGb3JlZ3JvdW5kKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgeVBvcyA9IHko
KTsKKyAgICBpbnQgeCA9IG1feDsKKyAgICBpbnQgeSA9IG1feTsKICAgICBpbnQgdyA9IHdpZHRo
KCk7CiAgICAgaW50IGggPSBoZWlnaHQoKTsKIApAQCAtNzU1LDE0ICs3NTAsMTQgQEAgdm9pZCBJ
bmxpbmVGbG93Qm94OjpwYWludEJveERlY29yYXRpb25zKAogICAgIGJvb2wgc3RyaWN0TW9kZSA9
IHJlbmRlcmVyKCktPmRvY3VtZW50KCktPmluU3RyaWN0TW9kZSgpOwogICAgIGlmICghaGFzVGV4
dENoaWxkcmVuKCkgJiYgIXN0cmljdE1vZGUpIHsKICAgICAgICAgUm9vdElubGluZUJveCogcm9v
dEJveCA9IHJvb3QoKTsKLSAgICAgICAgaW50IGJvdHRvbSA9IG1pbihyb290Qm94LT5saW5lQm90
dG9tKCksIHlQb3MgKyBoKTsKLSAgICAgICAgeVBvcyA9IG1heChyb290Qm94LT5saW5lVG9wKCks
IHlQb3MpOwotICAgICAgICBoID0gYm90dG9tIC0geVBvczsKKyAgICAgICAgaW50IGJvdHRvbSA9
IG1pbihyb290Qm94LT5saW5lQm90dG9tKCksIHkgKyBoKTsKKyAgICAgICAgeSA9IG1heChyb290
Qm94LT5saW5lVG9wKCksIHkpOworICAgICAgICBoID0gYm90dG9tIC0geTsKICAgICB9CiAgICAg
CiAgICAgLy8gTW92ZSB4L3kgdG8gb3VyIGNvb3JkaW5hdGVzLgotICAgIHR4ICs9IHgoKTsKLSAg
ICB0eSArPSB5UG9zOworICAgIHR4ICs9IHg7CisgICAgdHkgKz0geTsKICAgICAKICAgICBHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dDsKICAgICAKQEAgLTgyMiw3
ICs4MTcsOCBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50TWFzayhSZW5kZXJPYmplCiAgICAg
aWYgKCFyZW5kZXJlcigpLT5zaG91bGRQYWludFdpdGhpblJvb3QocGFpbnRJbmZvKSB8fCByZW5k
ZXJlcigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSB8fCBwYWludEluZm8ucGhh
c2UgIT0gUGFpbnRQaGFzZU1hc2spCiAgICAgICAgIHJldHVybjsKIAotICAgIGludCB5UG9zID0g
eSgpOworICAgIGludCB4ID0gbV94OworICAgIGludCB5ID0gbV95OwogICAgIGludCB3ID0gd2lk
dGgoKTsKICAgICBpbnQgaCA9IGhlaWdodCgpOwogCkBAIC04MzAsMTQgKzgyNiwxNCBAQCB2b2lk
IElubGluZUZsb3dCb3g6OnBhaW50TWFzayhSZW5kZXJPYmplCiAgICAgYm9vbCBzdHJpY3RNb2Rl
ID0gcmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+aW5TdHJpY3RNb2RlKCk7CiAgICAgaWYgKCFoYXNU
ZXh0Q2hpbGRyZW4oKSAmJiAhc3RyaWN0TW9kZSkgewogICAgICAgICBSb290SW5saW5lQm94KiBy
b290Qm94ID0gcm9vdCgpOwotICAgICAgICBpbnQgYm90dG9tID0gbWluKHJvb3RCb3gtPmxpbmVC
b3R0b20oKSwgeVBvcyArIGgpOwotICAgICAgICB5UG9zID0gbWF4KHJvb3RCb3gtPmxpbmVUb3Ao
KSwgeVBvcyk7Ci0gICAgICAgIGggPSBib3R0b20gLSB5UG9zOworICAgICAgICBpbnQgYm90dG9t
ID0gbWluKHJvb3RCb3gtPmxpbmVCb3R0b20oKSwgeSArIGgpOworICAgICAgICB5ID0gbWF4KHJv
b3RCb3gtPmxpbmVUb3AoKSwgeSk7CisgICAgICAgIGggPSBib3R0b20gLSB5OwogICAgIH0KICAg
ICAKICAgICAvLyBNb3ZlIHgveSB0byBvdXIgY29vcmRpbmF0ZXMuCi0gICAgdHggKz0geCgpOwot
ICAgIHR5ICs9IHlQb3M7CisgICAgdHggKz0geDsKKyAgICB0eSArPSB5OwogCiAgICAgY29uc3Qg
TmluZVBpZWNlSW1hZ2UmIG1hc2tOaW5lUGllY2VJbWFnZSA9IHJlbmRlcmVyKCktPnN0eWxlKCkt
Pm1hc2tCb3hJbWFnZSgpOwogICAgIFN0eWxlSW1hZ2UqIG1hc2tCb3hJbWFnZSA9IHJlbmRlcmVy
KCktPnN0eWxlKCktPm1hc2tCb3hJbWFnZSgpLmltYWdlKCk7CkBAIC05MjEsNDUgKzkxNyw0NSBA
QCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50VGV4dERlY29yYXRpb25zCiAgICAgICAgIHJldHVy
bjsKIAogICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0Owot
ICAgIHR4ICs9IHgoKTsKLSAgICB0eSArPSB5KCk7CisgICAgdHggKz0gbV94OworICAgIHR5ICs9
IG1feTsKICAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IHJlbmRlcmVyKCktPnN0eWxlKG1f
Zmlyc3RMaW5lKTsKICAgICBpbnQgZGVjbyA9IHBhcmVudCgpID8gc3R5bGVUb1VzZS0+dGV4dERl
Y29yYXRpb24oKSA6IHN0eWxlVG9Vc2UtPnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7CiAgICAg
aWYgKGRlY28gIT0gVEROT05FICYmIAogICAgICAgICAoKCFwYWludGVkQ2hpbGRyZW4gJiYgKChk
ZWNvICYgVU5ERVJMSU5FKSB8fCAoZGVjbyAmIE9WRVJMSU5FKSkpIHx8IChwYWludGVkQ2hpbGRy
ZW4gJiYgKGRlY28gJiBMSU5FX1RIUk9VR0gpKSkgJiYKICAgICAgICAgc2hvdWxkRHJhd1RleHRE
ZWNvcmF0aW9uKHJlbmRlcmVyKCkpKSB7Ci0gICAgICAgIGludCBjb250ZW50WCA9IHgoKSArIGJv
cmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCk7Ci0gICAgICAgIGludCB3ID0gd2lkdGgoKSAtIChi
b3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpICsgYm9yZGVyUmlnaHQoKSArIHBhZGRpbmdSaWdo
dCgpKTsKKyAgICAgICAgaW50IHggPSBtX3ggKyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgp
OworICAgICAgICBpbnQgdyA9IG1fd2lkdGggLSAoYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQo
KSArIGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nUmlnaHQoKSk7CiAgICAgICAgIFJvb3RJbmxpbmVC
b3gqIHJvb3RMaW5lID0gcm9vdCgpOwogICAgICAgICBpZiAocm9vdExpbmUtPmVsbGlwc2lzQm94
KCkpIHsKLSAgICAgICAgICAgIGludCBlbGxpcHNpc1ggPSB4KCkgKyByb290TGluZS0+ZWxsaXBz
aXNCb3goKS0+eCgpOworICAgICAgICAgICAgaW50IGVsbGlwc2lzWCA9IG1feCArIHJvb3RMaW5l
LT5lbGxpcHNpc0JveCgpLT54KCk7CiAgICAgICAgICAgICBpbnQgZWxsaXBzaXNXaWR0aCA9IHJv
b3RMaW5lLT5lbGxpcHNpc0JveCgpLT53aWR0aCgpOwogICAgICAgICAgICAgYm9vbCBsdHIgPSBy
ZW5kZXJlcigpLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFI7CiAgICAgICAgICAgICBpZiAo
cm9vdExpbmUgPT0gdGhpcykgewogICAgICAgICAgICAgICAgIC8vIFRyaW0gdyBhbmQgeCBzbyB0
aGF0IHRoZSB1bmRlcmxpbmUgaXNuJ3QgZHJhd24gdW5kZXJuZWF0aCB0aGUgZWxsaXBzaXMuCiAg
ICAgICAgICAgICAgICAgLy8gbHRyOiBpcyBvdXIgcmlnaHQgZWRnZSBmYXJ0aGVyIHJpZ2h0IHRo
YW4gdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIGVsbGlwc2lzLgogICAgICAgICAgICAgICAgIC8vIHJ0
bDogaXMgdGhlIGxlZnQgZWRnZSBvZiBvdXIgYm94IGZhcnRoZXIgbGVmdCB0aGFuIHRoZSBsZWZ0
IGVkZ2Ugb2YgdGhlIGVsbGlwc2lzLgotICAgICAgICAgICAgICAgIGJvb2wgbHRyVHJ1bmNhdGlv
biA9IGx0ciAmJiAoY29udGVudFggKyB3ID49IGVsbGlwc2lzWCArIGVsbGlwc2lzV2lkdGgpOwot
ICAgICAgICAgICAgICAgIGJvb2wgcnRsVHJ1bmNhdGlvbiA9ICFsdHIgJiYgKGNvbnRlbnRYIDw9
IGVsbGlwc2lzWCArIGVsbGlwc2lzV2lkdGgpOworICAgICAgICAgICAgICAgIGJvb2wgbHRyVHJ1
bmNhdGlvbiA9IGx0ciAmJiAoeCArIHcgPj0gZWxsaXBzaXNYICsgZWxsaXBzaXNXaWR0aCk7Cisg
ICAgICAgICAgICAgICAgYm9vbCBydGxUcnVuY2F0aW9uID0gIWx0ciAmJiAoeCA8PSBlbGxpcHNp
c1ggKyBlbGxpcHNpc1dpZHRoKTsKICAgICAgICAgICAgICAgICBpZiAobHRyVHJ1bmNhdGlvbikK
LSAgICAgICAgICAgICAgICAgICAgdyAtPSAoY29udGVudFggKyB3KSAtIChlbGxpcHNpc1ggKyBl
bGxpcHNpc1dpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgdyAtPSAoeCArIHcpIC0gKGVsbGlw
c2lzWCArIGVsbGlwc2lzV2lkdGgpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJ0bFRydW5j
YXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGR4ID0geCgpIC0gKChlbGxpcHNpc1gg
LSB4KCkpICsgZWxsaXBzaXNXaWR0aCk7CisgICAgICAgICAgICAgICAgICAgIGludCBkeCA9IG1f
eCAtICgoZWxsaXBzaXNYIC0gbV94KSArIGVsbGlwc2lzV2lkdGgpOwogICAgICAgICAgICAgICAg
ICAgICB0eCAtPSBkeDsKICAgICAgICAgICAgICAgICAgICAgdyArPSBkeDsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGJvb2wgbHRyUGFz
dEVsbGlwc2lzID0gbHRyICYmIGNvbnRlbnRYID49IGVsbGlwc2lzWDsKLSAgICAgICAgICAgICAg
ICBib29sIHJ0bFBhc3RFbGxpcHNpcyA9ICFsdHIgJiYgKGNvbnRlbnRYICsgdykgPD0gKGVsbGlw
c2lzWCArIGVsbGlwc2lzV2lkdGgpOworICAgICAgICAgICAgICAgIGJvb2wgbHRyUGFzdEVsbGlw
c2lzID0gbHRyICYmIHggPj0gZWxsaXBzaXNYOworICAgICAgICAgICAgICAgIGJvb2wgcnRsUGFz
dEVsbGlwc2lzID0gIWx0ciAmJiAoeCArIHcpIDw9IChlbGxpcHNpc1ggKyBlbGxpcHNpc1dpZHRo
KTsKICAgICAgICAgICAgICAgICBpZiAobHRyUGFzdEVsbGlwc2lzIHx8IHJ0bFBhc3RFbGxpcHNp
cykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICAgICAgYm9vbCBs
dHJUcnVuY2F0aW9uID0gbHRyICYmIGNvbnRlbnRYICsgdyA+PSBlbGxpcHNpc1g7Ci0gICAgICAg
ICAgICAgICAgYm9vbCBydGxUcnVuY2F0aW9uID0gIWx0ciAmJiBjb250ZW50WCA8PSBlbGxpcHNp
c1g7CisgICAgICAgICAgICAgICAgYm9vbCBsdHJUcnVuY2F0aW9uID0gbHRyICYmIHggKyB3ID49
IGVsbGlwc2lzWDsKKyAgICAgICAgICAgICAgICBib29sIHJ0bFRydW5jYXRpb24gPSAhbHRyICYm
IHggPD0gZWxsaXBzaXNYOwogICAgICAgICAgICAgICAgIGlmIChsdHJUcnVuY2F0aW9uKQotICAg
ICAgICAgICAgICAgICAgICB3IC09IChjb250ZW50WCArIHcgLSBlbGxpcHNpc1gpOworICAgICAg
ICAgICAgICAgICAgICB3IC09ICh4ICsgdyAtIGVsbGlwc2lzWCk7CiAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAocnRsVHJ1bmNhdGlvbikgewotICAgICAgICAgICAgICAgICAgICBpbnQgZHggPSB4
KCkgLSAoKGVsbGlwc2lzWCAtIHgoKSkgKyBlbGxpcHNpc1dpZHRoKTsKKyAgICAgICAgICAgICAg
ICAgICAgaW50IGR4ID0gbV94IC0gKChlbGxpcHNpc1ggLSBtX3gpICsgZWxsaXBzaXNXaWR0aCk7
CiAgICAgICAgICAgICAgICAgICAgIHR4IC09IGR4OwogICAgICAgICAgICAgICAgICAgICB3ICs9
IGR4OwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZs
b3dCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJ
KHJldmlzaW9uIDU5NTkxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTEsMjIgKzE1MSwyMiBAQCBwdWJsaWM6CiAgICAgaW50IGJvdHRv
bVZpc2libGVPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWF4KGJvdHRvbUxheW91dE92
ZXJmbG93KCksIGJvdHRvbVZpc3VhbE92ZXJmbG93KCkpOyB9CiAgICAgaW50IGxlZnRWaXNpYmxl
T3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBzdGQ6Om1pbihsZWZ0TGF5b3V0T3ZlcmZsb3coKSwg
bGVmdFZpc3VhbE92ZXJmbG93KCkpOyB9CiAgICAgaW50IHJpZ2h0VmlzaWJsZU92ZXJmbG93KCkg
Y29uc3QgeyByZXR1cm4gc3RkOjptYXgocmlnaHRMYXlvdXRPdmVyZmxvdygpLCByaWdodFZpc3Vh
bE92ZXJmbG93KCkpOyB9Ci0gICAgSW50UmVjdCB2aXNpYmxlT3ZlcmZsb3dSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPnZpc2libGVPdmVyZmxvd1JlY3QoKSA6
IGZyYW1lUmVjdCgpOyAgfQorICAgIEludFJlY3QgdmlzaWJsZU92ZXJmbG93UmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyBtX292ZXJmbG93LT52aXNpYmxlT3ZlcmZsb3dSZWN0KCkg
OiBJbnRSZWN0KG1feCwgbV95LCBtX3dpZHRoLCBoZWlnaHQoKSk7ICB9CiAKLSAgICBpbnQgdG9w
TGF5b3V0T3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+
dG9wTGF5b3V0T3ZlcmZsb3coKSA6IHkoKTsgfQotICAgIGludCBib3R0b21MYXlvdXRPdmVyZmxv
dygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyBtX292ZXJmbG93LT5ib3R0b21MYXlvdXRP
dmVyZmxvdygpIDogZnJhbWVSZWN0KCkuYm90dG9tKCk7IH0KLSAgICBpbnQgbGVmdExheW91dE92
ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPmxlZnRMYXlv
dXRPdmVyZmxvdygpIDogeCgpOyB9Ci0gICAgaW50IHJpZ2h0TGF5b3V0T3ZlcmZsb3coKSBjb25z
dCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+cmlnaHRMYXlvdXRPdmVyZmxvdygp
IDogZnJhbWVSZWN0KCkucmlnaHQoKTsgfQotICAgIEludFJlY3QgbGF5b3V0T3ZlcmZsb3dSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPmxheW91dE92ZXJmbG93
UmVjdCgpIDogZnJhbWVSZWN0KCk7IH0KLQotICAgIGludCB0b3BWaXN1YWxPdmVyZmxvdygpIGNv
bnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyBtX292ZXJmbG93LT50b3BWaXN1YWxPdmVyZmxvdygp
IDogeSgpOyB9Ci0gICAgaW50IGJvdHRvbVZpc3VhbE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4g
bV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPmJvdHRvbVZpc3VhbE92ZXJmbG93KCkgOiBmcmFtZVJl
Y3QoKS5ib3R0b20oKTsgfQotICAgIGludCBsZWZ0VmlzdWFsT3ZlcmZsb3coKSBjb25zdCB7IHJl
dHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+bGVmdFZpc3VhbE92ZXJmbG93KCkgOiB4KCk7
IH0KLSAgICBpbnQgcmlnaHRWaXN1YWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZs
b3cgPyBtX292ZXJmbG93LT5yaWdodFZpc3VhbE92ZXJmbG93KCkgOiBmcmFtZVJlY3QoKS5yaWdo
dCgpOyB9Ci0gICAgSW50UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3QoKSBjb25zdCB7IHJldHVybiBt
X292ZXJmbG93ID8gbV9vdmVyZmxvdy0+dmlzdWFsT3ZlcmZsb3dSZWN0KCkgOiBmcmFtZVJlY3Qo
KTsgfQorICAgIGludCB0b3BMYXlvdXRPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZs
b3cgPyBtX292ZXJmbG93LT50b3BMYXlvdXRPdmVyZmxvdygpIDogbV95OyB9CisgICAgaW50IGJv
dHRvbUxheW91dE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZs
b3ctPmJvdHRvbUxheW91dE92ZXJmbG93KCkgOiBtX3kgKyBoZWlnaHQoKTsgfQorICAgIGludCBs
ZWZ0TGF5b3V0T3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxv
dy0+bGVmdExheW91dE92ZXJmbG93KCkgOiBtX3g7IH0KKyAgICBpbnQgcmlnaHRMYXlvdXRPdmVy
ZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyBtX292ZXJmbG93LT5yaWdodExheW91
dE92ZXJmbG93KCkgOiBtX3ggKyBtX3dpZHRoOyB9CisgICAgSW50UmVjdCBsYXlvdXRPdmVyZmxv
d1JlY3QoKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+bGF5b3V0T3Zl
cmZsb3dSZWN0KCkgOiBJbnRSZWN0KG1feCwgbV95LCBtX3dpZHRoLCBoZWlnaHQoKSk7IH0KKwor
ICAgIGludCB0b3BWaXN1YWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyBt
X292ZXJmbG93LT50b3BWaXN1YWxPdmVyZmxvdygpIDogbV95OyB9CisgICAgaW50IGJvdHRvbVZp
c3VhbE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPmJv
dHRvbVZpc3VhbE92ZXJmbG93KCkgOiBtX3kgKyBoZWlnaHQoKTsgfQorICAgIGludCBsZWZ0Vmlz
dWFsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+bGVm
dFZpc3VhbE92ZXJmbG93KCkgOiBtX3g7IH0KKyAgICBpbnQgcmlnaHRWaXN1YWxPdmVyZmxvdygp
IGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyBtX292ZXJmbG93LT5yaWdodFZpc3VhbE92ZXJm
bG93KCkgOiBtX3ggKyBtX3dpZHRoOyB9CisgICAgSW50UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3Qo
KSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+dmlzdWFsT3ZlcmZsb3dS
ZWN0KCkgOiBJbnRSZWN0KG1feCwgbV95LCBtX3dpZHRoLCBoZWlnaHQoKSk7IH0KIAogICAgIHZv
aWQgc2V0SG9yaXpvbnRhbE92ZXJmbG93UG9zaXRpb25zKGludCBsZWZ0TGF5b3V0T3ZlcmZsb3cs
IGludCByaWdodExheW91dE92ZXJmbG93LCBpbnQgbGVmdFZpc3VhbE92ZXJmbG93LCBpbnQgcmln
aHRWaXN1YWxPdmVyZmxvdyk7Ci0gICAgdm9pZCBzZXRWZXJ0aWNhbE92ZXJmbG93UG9zaXRpb25z
KGludCB0b3BMYXlvdXRPdmVyZmxvdywgaW50IGJvdHRvbUxheW91dE92ZXJmbG93LCBpbnQgdG9w
VmlzdWFsT3ZlcmZsb3csIGludCBib3R0b21WaXN1YWxPdmVyZmxvdyk7CisgICAgdm9pZCBzZXRW
ZXJ0aWNhbE92ZXJmbG93UG9zaXRpb25zKGludCB0b3BMYXlvdXRPdmVyZmxvdywgaW50IGJvdHRv
bUxheW91dE92ZXJmbG93LCBpbnQgdG9wVmlzdWFsT3ZlcmZsb3csIGludCBib3R0b21WaXN1YWxP
dmVyZmxvdywgaW50IGJveEhlaWdodCk7CiAKIHByb3RlY3RlZDoKICAgICBPd25QdHI8UmVuZGVy
T3ZlcmZsb3c+IG1fb3ZlcmZsb3c7CkBAIC0xOTEsOSArMTkxLDkgQEAgcHJvdGVjdGVkOgogaW5s
aW5lIHZvaWQgSW5saW5lRmxvd0JveDo6c2V0SG9yaXpvbnRhbE92ZXJmbG93UG9zaXRpb25zKGlu
dCBsZWZ0TGF5b3V0T3ZlcmZsb3csIGludCByaWdodExheW91dE92ZXJmbG93LCBpbnQgbGVmdFZp
c3VhbE92ZXJmbG93LCBpbnQgcmlnaHRWaXN1YWxPdmVyZmxvdykgCiB7IAogICAgIGlmICghbV9v
dmVyZmxvdykgewotICAgICAgICBpZiAobGVmdExheW91dE92ZXJmbG93ID09IHgoKSAmJiByaWdo
dExheW91dE92ZXJmbG93ID09IGZyYW1lUmVjdCgpLnJpZ2h0KCkgJiYgbGVmdFZpc3VhbE92ZXJm
bG93ID09IHgoKSAmJiByaWdodFZpc3VhbE92ZXJmbG93ID09IGZyYW1lUmVjdCgpLnJpZ2h0KCkp
CisgICAgICAgIGlmIChsZWZ0TGF5b3V0T3ZlcmZsb3cgPT0gbV94ICYmIHJpZ2h0TGF5b3V0T3Zl
cmZsb3cgPT0gbV94ICsgbV93aWR0aCAmJiBsZWZ0VmlzdWFsT3ZlcmZsb3cgPT0gbV94ICYmIHJp
Z2h0VmlzdWFsT3ZlcmZsb3cgPT0gbV94ICsgbV93aWR0aCkKICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgbV9vdmVyZmxvdy5zZXQobmV3IFJlbmRlck92ZXJmbG93KGZyYW1lUmVjdCgpKSk7
ICAgCisgICAgICAgIG1fb3ZlcmZsb3cuc2V0KG5ldyBSZW5kZXJPdmVyZmxvdyhJbnRSZWN0KG1f
eCwgbV95LCBtX3dpZHRoLCBtX3JlbmRlcmVyLT5zdHlsZShtX2ZpcnN0TGluZSktPmZvbnQoKS5o
ZWlnaHQoKSkpKTsgICAgCiAgICAgfQogCiAgICAgbV9vdmVyZmxvdy0+c2V0TGVmdExheW91dE92
ZXJmbG93KGxlZnRMYXlvdXRPdmVyZmxvdyk7CkBAIC0yMDIsMTIgKzIwMiwxMiBAQCBpbmxpbmUg
dm9pZCBJbmxpbmVGbG93Qm94OjpzZXRIb3Jpem9udGFsCiAgICAgbV9vdmVyZmxvdy0+c2V0Umln
aHRWaXN1YWxPdmVyZmxvdyhyaWdodFZpc3VhbE92ZXJmbG93KTsgIAogfQogCi1pbmxpbmUgdm9p
ZCBJbmxpbmVGbG93Qm94OjpzZXRWZXJ0aWNhbE92ZXJmbG93UG9zaXRpb25zKGludCB0b3BMYXlv
dXRPdmVyZmxvdywgaW50IGJvdHRvbUxheW91dE92ZXJmbG93LCBpbnQgdG9wVmlzdWFsT3ZlcmZs
b3csIGludCBib3R0b21WaXN1YWxPdmVyZmxvdykKK2lubGluZSB2b2lkIElubGluZUZsb3dCb3g6
OnNldFZlcnRpY2FsT3ZlcmZsb3dQb3NpdGlvbnMoaW50IHRvcExheW91dE92ZXJmbG93LCBpbnQg
Ym90dG9tTGF5b3V0T3ZlcmZsb3csIGludCB0b3BWaXN1YWxPdmVyZmxvdywgaW50IGJvdHRvbVZp
c3VhbE92ZXJmbG93LCBpbnQgYm94SGVpZ2h0KQogewogICAgIGlmICghbV9vdmVyZmxvdykgewot
ICAgICAgICBpZiAodG9wTGF5b3V0T3ZlcmZsb3cgPT0geSgpICYmIGJvdHRvbUxheW91dE92ZXJm
bG93ID09IGZyYW1lUmVjdCgpLmJvdHRvbSgpICYmIHRvcFZpc3VhbE92ZXJmbG93ID09IHkoKSAm
JiBib3R0b21WaXN1YWxPdmVyZmxvdyA9PSBmcmFtZVJlY3QoKS5ib3R0b20oKSkKKyAgICAgICAg
aWYgKHRvcExheW91dE92ZXJmbG93ID09IG1feSAmJiBib3R0b21MYXlvdXRPdmVyZmxvdyA9PSBt
X3kgKyBib3hIZWlnaHQgJiYgdG9wVmlzdWFsT3ZlcmZsb3cgPT0gbV95ICYmIGJvdHRvbVZpc3Vh
bE92ZXJmbG93ID09IG1feSArIGJveEhlaWdodCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgbV9vdmVyZmxvdy5zZXQobmV3IFJlbmRlck92ZXJmbG93KGZyYW1lUmVjdCgpKSk7CisgICAg
ICAgIG1fb3ZlcmZsb3cuc2V0KG5ldyBSZW5kZXJPdmVyZmxvdyhJbnRSZWN0KG1feCwgbV95LCBt
X3dpZHRoLCBib3hIZWlnaHQpKSk7CiAgICAgfQogCiAgICAgbV9vdmVyZmxvdy0+c2V0VG9wTGF5
b3V0T3ZlcmZsb3codG9wTGF5b3V0T3ZlcmZsb3cpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5jcHAJKHJldmlzaW9uIDU5NTkxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNywxMSArMTE3LDExIEBAIEludFJlY3Qg
SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdChpbnQKICAgICBjb25zdCBGb250JiBmID0gdGV4
dE9iai0+c3R5bGUobV9maXJzdExpbmUpLT5mb250KCk7CiAKICAgICBJbnRSZWN0IHIgPSBlbmNs
b3NpbmdJbnRSZWN0KGYuc2VsZWN0aW9uUmVjdEZvclRleHQoVGV4dFJ1bih0ZXh0T2JqLT50ZXh0
KCktPmNoYXJhY3RlcnMoKSArIG1fc3RhcnQsIG1fbGVuLCB0ZXh0T2JqLT5hbGxvd1RhYnMoKSwg
dGV4dFBvcygpLCBtX3RvQWRkLCBkaXJlY3Rpb24oKSA9PSBSVEwsIG1fZGlyT3ZlcnJpZGUpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ
bnRQb2ludCh0eCArIHgoKSwgdHkgKyBzZWxUb3ApLCBzZWxIZWlnaHQsIHNQb3MsIGVQb3MpKTsK
LSAgICBpZiAoci54KCkgPiB0eCArIHJpZ2h0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KHR4ICsgbV94LCB0eSArIHNl
bFRvcCksIHNlbEhlaWdodCwgc1BvcywgZVBvcykpOworICAgIGlmIChyLngoKSA+IHR4ICsgbV94
ICsgbV93aWR0aCkKICAgICAgICAgci5zZXRXaWR0aCgwKTsKLSAgICBlbHNlIGlmIChyLnJpZ2h0
KCkgLSAxID4gdHggKyByaWdodCgpKQotICAgICAgICByLnNldFdpZHRoKHR4ICsgcmlnaHQoKSAt
IHIueCgpKTsKKyAgICBlbHNlIGlmIChyLnJpZ2h0KCkgLSAxID4gdHggKyBtX3ggKyBtX3dpZHRo
KQorICAgICAgICByLnNldFdpZHRoKHR4ICsgbV94ICsgbV93aWR0aCAtIHIueCgpKTsKICAgICBy
ZXR1cm4gcjsKIH0KIApAQCAtMTYwLDggKzE2MCw4IEBAIGludCBJbmxpbmVUZXh0Qm94OjpwbGFj
ZUVsbGlwc2lzQm94KGJvb2wKICAgICAvLyBDcml0ZXJpYSBmb3IgZnVsbCB0cnVuY2F0aW9uOgog
ICAgIC8vIExUUjogdGhlIGxlZnQgZWRnZSBvZiB0aGUgZWxsaXBzaXMgaXMgdG8gdGhlIGxlZnQg
b2Ygb3VyIHRleHQgcnVuLgogICAgIC8vIFJUTDogdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIGVsbGlw
c2lzIGlzIHRvIHRoZSByaWdodCBvZiBvdXIgdGV4dCBydW4uCi0gICAgYm9vbCBsdHJGdWxsVHJ1
bmNhdGlvbiA9IGZsb3dJc0xUUiAmJiBlbGxpcHNpc1ggPD0geCgpOwotICAgIGJvb2wgcnRsRnVs
bFRydW5jYXRpb24gPSAhZmxvd0lzTFRSICYmIGVsbGlwc2lzWCA+PSByaWdodCgpOworICAgIGJv
b2wgbHRyRnVsbFRydW5jYXRpb24gPSBmbG93SXNMVFIgJiYgZWxsaXBzaXNYIDw9IG1feDsKKyAg
ICBib29sIHJ0bEZ1bGxUcnVuY2F0aW9uID0gIWZsb3dJc0xUUiAmJiBlbGxpcHNpc1ggPj0gKG1f
eCArIG1fd2lkdGgpOwogICAgIGlmIChsdHJGdWxsVHJ1bmNhdGlvbiB8fCBydGxGdWxsVHJ1bmNh
dGlvbikgewogICAgICAgICAvLyBUb28gZmFyLiAgSnVzdCBzZXQgZnVsbCB0cnVuY2F0aW9uLCBi
dXQgcmV0dXJuIC0xIGFuZCBsZXQgdGhlIGVsbGlwc2lzIGp1c3QgYmUgcGxhY2VkIGF0IHRoZSBl
ZGdlIG9mIHRoZSBib3guCiAgICAgICAgIG1fdHJ1bmNhdGlvbiA9IGNGdWxsVHJ1bmNhdGlvbjsK
QEAgLTE2OSw4ICsxNjksOCBAQCBpbnQgSW5saW5lVGV4dEJveDo6cGxhY2VFbGxpcHNpc0JveChi
b29sCiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBib29sIGx0ckVsbGlwc2lzV2l0
aGluQm94ID0gZmxvd0lzTFRSICYmIChlbGxpcHNpc1ggPCByaWdodCgpKTsKLSAgICBib29sIHJ0
bEVsbGlwc2lzV2l0aGluQm94ID0gIWZsb3dJc0xUUiAmJiAoZWxsaXBzaXNYID4geCgpKTsKKyAg
ICBib29sIGx0ckVsbGlwc2lzV2l0aGluQm94ID0gZmxvd0lzTFRSICYmIChlbGxpcHNpc1ggPCBt
X3ggKyBtX3dpZHRoKTsKKyAgICBib29sIHJ0bEVsbGlwc2lzV2l0aGluQm94ID0gIWZsb3dJc0xU
UiAmJiAoZWxsaXBzaXNYID4gbV94KTsKICAgICBpZiAobHRyRWxsaXBzaXNXaXRoaW5Cb3ggfHwg
cnRsRWxsaXBzaXNXaXRoaW5Cb3gpIHsKICAgICAgICAgZm91bmRCb3ggPSB0cnVlOwogCkBAIC0x
ODEsNyArMTgxLDcgQEAgaW50IElubGluZVRleHRCb3g6OnBsYWNlRWxsaXBzaXNCb3goYm9vbAog
ICAgICAgICBpZiAobHRyICE9IGZsb3dJc0xUUikgewogICAgICAgICAgIC8vIFdpZHRoIGluIHBp
eGVscyBvZiB0aGUgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBib3gsIGV4Y2x1ZGluZyB0aGUgZWxs
aXBzaXMuCiAgICAgICAgICAgaW50IHZpc2libGVCb3hXaWR0aCA9IHZpc2libGVSaWdodEVkZ2Ug
LSB2aXNpYmxlTGVmdEVkZ2UgIC0gZWxsaXBzaXNXaWR0aDsKLSAgICAgICAgICBlbGxpcHNpc1gg
PSBsdHIgPyB4KCkgKyB2aXNpYmxlQm94V2lkdGggOiByaWdodCgpIC0gdmlzaWJsZUJveFdpZHRo
OworICAgICAgICAgIGVsbGlwc2lzWCA9IGx0ciA/IG1feCArIHZpc2libGVCb3hXaWR0aCA6IG1f
eCArIG1fd2lkdGggLSB2aXNpYmxlQm94V2lkdGg7CiAgICAgICAgIH0KIAogICAgICAgICBpbnQg
b2Zmc2V0ID0gb2Zmc2V0Rm9yUG9zaXRpb24oZWxsaXBzaXNYLCBmYWxzZSk7CkBAIC0xODksNyAr
MTg5LDcgQEAgaW50IElubGluZVRleHRCb3g6OnBsYWNlRWxsaXBzaXNCb3goYm9vbAogICAgICAg
ICAgICAgLy8gTm8gY2hhcmFjdGVycyBzaG91bGQgYmUgcmVuZGVyZWQuICBTZXQgb3Vyc2VsdmVz
IHRvIGZ1bGwgdHJ1bmNhdGlvbiBhbmQgcGxhY2UgdGhlIGVsbGlwc2lzIGF0IHRoZSBtaW4gb2Yg
b3VyIHN0YXJ0CiAgICAgICAgICAgICAvLyBhbmQgdGhlIGVsbGlwc2lzIGVkZ2UuCiAgICAgICAg
ICAgICBtX3RydW5jYXRpb24gPSBjRnVsbFRydW5jYXRpb247Ci0gICAgICAgICAgICByZXR1cm4g
bWluKGVsbGlwc2lzWCwgeCgpKTsKKyAgICAgICAgICAgIHJldHVybiBtaW4oZWxsaXBzaXNYLCBt
X3gpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gU2V0IHRoZSB0cnVuY2F0aW9uIGluZGV4IG9u
IHRoZSB0ZXh0IHJ1bi4KQEAgLTIwNSw5ICsyMDUsOSBAQCBpbnQgSW5saW5lVGV4dEJveDo6cGxh
Y2VFbGxpcHNpc0JveChib29sCiAgICAgICAgIC8vIGUuZy4gSW4gdGhlIGNhc2Ugb2YgYW4gTFRS
IGlubGluZSBib3ggdHJ1bmNhdGVkIGluIGFuIFJUTCBmbG93IHRoZW4gd2UgY2FuCiAgICAgICAg
IC8vIGhhdmUgYSBzaXR1YXRpb24gc3VjaCBhcyB8SGVsbG98IC0+IHwuLi5IZXwKICAgICAgICAg
aWYgKGZsb3dJc0xUUikKLSAgICAgICAgICAgIHJldHVybiB4KCkgKyB3aWR0aE9mVmlzaWJsZVRl
eHQ7CisgICAgICAgICAgICByZXR1cm4gbV94ICsgd2lkdGhPZlZpc2libGVUZXh0OwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gcmlnaHQoKSAtIHdpZHRoT2ZWaXNpYmxlVGV4dCAt
IGVsbGlwc2lzV2lkdGg7CisgICAgICAgICAgICByZXR1cm4gKG1feCArIG1fd2lkdGgpIC0gd2lk
dGhPZlZpc2libGVUZXh0IC0gZWxsaXBzaXNXaWR0aDsKICAgICB9CiAgICAgcmV0dXJuIC0xOwog
fQpAQCAtMjYwLDE0ICsyNjAsMTQgQEAgYm9vbCBJbmxpbmVUZXh0Qm94Ojppc0xpbmVCcmVhaygp
IGNvbnN0CiAgICAgcmV0dXJuIHJlbmRlcmVyKCktPmlzQlIoKSB8fCAocmVuZGVyZXIoKS0+c3R5
bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkgJiYgbGVuKCkgPT0gMSAmJiAoKnRleHRSZW5kZXJlcigp
LT50ZXh0KCkpW3N0YXJ0KCldID09ICdcbicpOwogfQogCi1ib29sIElubGluZVRleHRCb3g6Om5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBp
bnQgcG9pbnRYLCBpbnQgcG9pbnRZLCBpbnQgdHgsIGludCB0eSkKK2Jvb2wgSW5saW5lVGV4dEJv
eDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiByZXN1
bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHkpCiB7CiAgICAgaWYgKGlzTGluZUJyZWFr
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEludFJlY3QgcmVjdCh0eCArIHgoKSwg
dHkgKyB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsKLSAgICBpZiAobV90cnVuY2F0aW9uICE9IGNG
dWxsVHJ1bmNhdGlvbiAmJiB2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5jb250YWlucyhw
b2ludFgsIHBvaW50WSkpIHsKLSAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3Vs
dChyZXN1bHQsIEludFBvaW50KHBvaW50WCAtIHR4LCBwb2ludFkgLSB0eSkpOworICAgIEludFJl
Y3QgcmVjdCh0eCArIG1feCwgdHkgKyBtX3ksIG1fd2lkdGgsIGhlaWdodCgpKTsKKyAgICBpZiAo
bV90cnVuY2F0aW9uICE9IGNGdWxsVHJ1bmNhdGlvbiAmJiB2aXNpYmxlVG9IaXRUZXN0aW5nKCkg
JiYgcmVjdC5jb250YWlucyh4LCB5KSkgeworICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRU
ZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeCAtIHR4LCB5IC0gdHkpKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTMzNiw3ICszMzYsNyBAQCB2
b2lkIElubGluZVRleHRCb3g6OnBhaW50KFJlbmRlck9iamVjdDo6CiAgICAgLy8gV291bGQgaXQg
YmUgc2ltcGxlciB0byBqdXN0IGNoZWNrIG91ciBvd24gc2hhZG93IGFuZCBzdHJva2Ugb3ZlcmZs
b3cgYnkgaGFuZCBoZXJlPwogICAgIGludCBsZWZ0T3ZlcmZsb3cgPSBwYXJlbnQoKS0+eCgpIC0g
cGFyZW50KCktPmxlZnRWaXN1YWxPdmVyZmxvdygpOwogICAgIGludCByaWdodE92ZXJmbG93ID0g
cGFyZW50KCktPnJpZ2h0VmlzdWFsT3ZlcmZsb3coKSAtIChwYXJlbnQoKS0+eCgpICsgcGFyZW50
KCktPndpZHRoKCkpOwotICAgIGludCB4UG9zID0gdHggKyB4KCkgLSBsZWZ0T3ZlcmZsb3c7Cisg
ICAgaW50IHhQb3MgPSB0eCArIG1feCAtIGxlZnRPdmVyZmxvdzsKICAgICBpbnQgdyA9IHdpZHRo
KCkgKyBsZWZ0T3ZlcmZsb3cgKyByaWdodE92ZXJmbG93OwogICAgIGlmICh4UG9zID49IHBhaW50
SW5mby5yZWN0LnJpZ2h0KCkgfHwgeFBvcyArIHcgPD0gcGFpbnRJbmZvLnJlY3QueCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0zNjEsNyArMzYxLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWlu
dChSZW5kZXJPYmplY3Q6OgogICAgICAgICAgICAgLy8gTk9URTogV2ViS2l0J3MgYmVoYXZpb3Ig
ZGlmZmVycyBmcm9tIHRoYXQgb2YgSUUgd2hpY2ggYXBwZWFycyB0byBqdXN0IG92ZXJsYXkgdGhl
IGVsbGlwc2lzIG9uIHRvcCBvZiB0aGUKICAgICAgICAgICAgIC8vIHRydW5jYXRlZCBzdHJpbmcg
aS5lLiAgfEhlbGxvfENCQXwgLT4gfC4uLmxvfENCQXwKICAgICAgICAgICAgIGludCB3aWR0aE9m
VmlzaWJsZVRleHQgPSB0b1JlbmRlclRleHQocmVuZGVyZXIoKSktPndpZHRoKG1fc3RhcnQsIG1f
dHJ1bmNhdGlvbiwgdGV4dFBvcygpLCBtX2ZpcnN0TGluZSk7Ci0gICAgICAgICAgICBpbnQgd2lk
dGhPZkhpZGRlblRleHQgPSB3aWR0aCgpIC0gd2lkdGhPZlZpc2libGVUZXh0OworICAgICAgICAg
ICAgaW50IHdpZHRoT2ZIaWRkZW5UZXh0ID0gbV93aWR0aCAtIHdpZHRoT2ZWaXNpYmxlVGV4dDsK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgaGl0IHRlc3RpbmcgbG9naWMgYWxzbyBuZWVkcyB0
byB0YWtlIHRoaXMgdHJhbnNsYXRpb24gaW50IGFjY291bnQuCiAgICAgICAgICAgICB0eCArPSBk
aXJlY3Rpb24oKSA9PSBMVFIgPyB3aWR0aE9mSGlkZGVuVGV4dCA6IC13aWR0aE9mSGlkZGVuVGV4
dDsKICAgICAgICAgfQpAQCAtNDY3LDcgKzQ2Nyw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFp
bnQoUmVuZGVyT2JqZWN0OjoKICAgICB9CiAKICAgICBpbnQgYmFzZWxpbmUgPSByZW5kZXJlcigp
LT5zdHlsZShtX2ZpcnN0TGluZSktPmZvbnQoKS5hc2NlbnQoKTsKLSAgICBJbnRQb2ludCB0ZXh0
T3JpZ2luKHgoKSArIHR4LCB5KCkgKyB0eSArIGJhc2VsaW5lKTsKKyAgICBJbnRQb2ludCB0ZXh0
T3JpZ2luKG1feCArIHR4LCBtX3kgKyB0eSArIGJhc2VsaW5lKTsKICAgICBUZXh0UnVuIHRleHRS
dW4odGV4dFJlbmRlcmVyKCktPnRleHQoKS0+Y2hhcmFjdGVycygpICsgbV9zdGFydCwgbV9sZW4s
IHRleHRSZW5kZXJlcigpLT5hbGxvd1RhYnMoKSwgdGV4dFBvcygpLCBtX3RvQWRkLCBkaXJlY3Rp
b24oKSA9PSBSVEwsIG1fZGlyT3ZlcnJpZGUgfHwgc3R5bGVUb1VzZS0+dmlzdWFsbHlPcmRlcmVk
KCkpOwogCiAgICAgaW50IHNQb3MgPSAwOwpAQCAtNDkxLDkgKzQ5MSw5IEBAIHZvaWQgSW5saW5l
VGV4dEJveDo6cGFpbnQoUmVuZGVyT2JqZWN0OjoKICAgICAgICAgdXBkYXRlR3JhcGhpY3NDb250
ZXh0KGNvbnRleHQsIHRleHRGaWxsQ29sb3IsIHRleHRTdHJva2VDb2xvciwgdGV4dFN0cm9rZVdp
ZHRoLCBzdHlsZVRvVXNlLT5jb2xvclNwYWNlKCkpOwogICAgICAgICBpZiAoIXBhaW50U2VsZWN0
ZWRUZXh0U2VwYXJhdGVseSB8fCBlUG9zIDw9IHNQb3MpIHsKICAgICAgICAgICAgIC8vIEZJWE1F
OiBUcnVuY2F0ZSByaWdodC10by1sZWZ0IHRleHQgY29ycmVjdGx5LgotICAgICAgICAgICAgcGFp
bnRUZXh0V2l0aFNoYWRvd3MoY29udGV4dCwgZm9udCwgdGV4dFJ1biwgMCwgbGVuZ3RoLCBsZW5n
dGgsIHRleHRPcmlnaW4sIHgoKSArIHR4LCB5KCkgKyB0eSwgd2lkdGgoKSwgaGVpZ2h0KCksIHRl
eHRTaGFkb3csIHRleHRTdHJva2VXaWR0aCA+IDApOworICAgICAgICAgICAgcGFpbnRUZXh0V2l0
aFNoYWRvd3MoY29udGV4dCwgZm9udCwgdGV4dFJ1biwgMCwgbGVuZ3RoLCBsZW5ndGgsIHRleHRP
cmlnaW4sIG1feCArIHR4LCBtX3kgKyB0eSwgd2lkdGgoKSwgaGVpZ2h0KCksIHRleHRTaGFkb3cs
IHRleHRTdHJva2VXaWR0aCA+IDApOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHBhaW50
VGV4dFdpdGhTaGFkb3dzKGNvbnRleHQsIGZvbnQsIHRleHRSdW4sIGVQb3MsIHNQb3MsIGxlbmd0
aCwgdGV4dE9yaWdpbiwgeCgpICsgdHgsIHkoKSArIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSwgdGV4
dFNoYWRvdywgdGV4dFN0cm9rZVdpZHRoID4gMCk7CisgICAgICAgICAgICBwYWludFRleHRXaXRo
U2hhZG93cyhjb250ZXh0LCBmb250LCB0ZXh0UnVuLCBlUG9zLCBzUG9zLCBsZW5ndGgsIHRleHRP
cmlnaW4sIG1feCArIHR4LCBtX3kgKyB0eSwgd2lkdGgoKSwgaGVpZ2h0KCksIHRleHRTaGFkb3cs
IHRleHRTdHJva2VXaWR0aCA+IDApOwogCiAgICAgICAgIGlmICh0ZXh0U3Ryb2tlV2lkdGggPiAw
KQogICAgICAgICAgICAgY29udGV4dC0+cmVzdG9yZSgpOwpAQCAtNTA1LDcgKzUwNSw3IEBAIHZv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUmVuZGVyT2JqZWN0OjoKICAgICAgICAgICAgIGNvbnRl
eHQtPnNhdmUoKTsKIAogICAgICAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQoY29udGV4dCwgc2Vs
ZWN0aW9uRmlsbENvbG9yLCBzZWxlY3Rpb25TdHJva2VDb2xvciwgc2VsZWN0aW9uU3Ryb2tlV2lk
dGgsIHN0eWxlVG9Vc2UtPmNvbG9yU3BhY2UoKSk7Ci0gICAgICAgIHBhaW50VGV4dFdpdGhTaGFk
b3dzKGNvbnRleHQsIGZvbnQsIHRleHRSdW4sIHNQb3MsIGVQb3MsIGxlbmd0aCwgdGV4dE9yaWdp
biwgeCgpICsgdHgsIHkoKSArIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSwgc2VsZWN0aW9uU2hhZG93
LCBzZWxlY3Rpb25TdHJva2VXaWR0aCA+IDApOworICAgICAgICBwYWludFRleHRXaXRoU2hhZG93
cyhjb250ZXh0LCBmb250LCB0ZXh0UnVuLCBzUG9zLCBlUG9zLCBsZW5ndGgsIHRleHRPcmlnaW4s
IG1feCArIHR4LCBtX3kgKyB0eSwgd2lkdGgoKSwgaGVpZ2h0KCksIHNlbGVjdGlvblNoYWRvdywg
c2VsZWN0aW9uU3Ryb2tlV2lkdGggPiAwKTsKIAogICAgICAgICBpZiAoc2VsZWN0aW9uU3Ryb2tl
V2lkdGggPiAwKQogICAgICAgICAgICAgY29udGV4dC0+cmVzdG9yZSgpOwpAQCAtNTg1LDE1ICs1
ODUsMTUgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaAogCiAgICAg
Y29udGV4dC0+c2F2ZSgpOwogICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChjb250ZXh0LCBjLCBj
LCAwLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsgIC8vIERvbid0IGRyYXcgdGV4dCBhdCBhbGwhCi0g
ICAgaW50IHRvcCA9IHNlbGVjdGlvblRvcCgpOworICAgIGludCB5ID0gc2VsZWN0aW9uVG9wKCk7
CiAgICAgaW50IGggPSBzZWxlY3Rpb25IZWlnaHQoKTsKICAgICAvLyBJZiB0aGUgdGV4dCBpcyB0
cnVuY2F0ZWQsIGxldCB0aGUgdGhpbmcgYmVpbmcgcGFpbnRlZCBpbiB0aGUgdHJ1bmNhdGlvbgog
ICAgIC8vIGRyYXcgaXRzIG93biBoaWdobGlnaHQuCiAgICAgaW50IGxlbmd0aCA9IG1fdHJ1bmNh
dGlvbiAhPSBjTm9UcnVuY2F0aW9uID8gbV90cnVuY2F0aW9uIDogbV9sZW47Ci0gICAgY29udGV4
dC0+Y2xpcChJbnRSZWN0KHgoKSArIHR4LCB0b3AgKyB0eSwgd2lkdGgoKSwgaCkpOworICAgIGNv
bnRleHQtPmNsaXAoSW50UmVjdChtX3ggKyB0eCwgeSArIHR5LCBtX3dpZHRoLCBoKSk7CiAgICAg
Y29udGV4dC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9udCwgVGV4dFJ1bih0ZXh0UmVuZGVyZXIo
KS0+dGV4dCgpLT5jaGFyYWN0ZXJzKCkgKyBtX3N0YXJ0LCBsZW5ndGgsIHRleHRSZW5kZXJlcigp
LT5hbGxvd1RhYnMoKSwgdGV4dFBvcygpLCBtX3RvQWRkLCAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkaXJlY3Rpb24oKSA9PSBSVEwsIG1fZGlyT3ZlcnJpZGUgfHwgc3R5bGUt
PnZpc3VhbGx5T3JkZXJlZCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ
bnRQb2ludCh4KCkgKyB0eCwgdG9wICsgdHkpLCBoLCBjLCBzdHlsZS0+Y29sb3JTcGFjZSgpLCBz
UG9zLCBlUG9zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludCht
X3ggKyB0eCwgeSArIHR5KSwgaCwgYywgc3R5bGUtPmNvbG9yU3BhY2UoKSwgc1BvcywgZVBvcyk7
CiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogfQogCkBAIC02MTIsMTEgKzYxMiwxMSBAQCB2b2lk
IElubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrCiAgICAgCiAgICAgdXBkYXRlR3Jh
cGhpY3NDb250ZXh0KGNvbnRleHQsIGMsIGMsIDAsIHN0eWxlLT5jb2xvclNwYWNlKCkpOyAvLyBE
b24ndCBkcmF3IHRleHQgYXQgYWxsIQogCi0gICAgaW50IHRvcCA9IHNlbGVjdGlvblRvcCgpOwor
ICAgIGludCB5ID0gc2VsZWN0aW9uVG9wKCk7CiAgICAgaW50IGggPSBzZWxlY3Rpb25IZWlnaHQo
KTsKICAgICBjb250ZXh0LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBUZXh0UnVuKHRleHRS
ZW5kZXJlcigpLT50ZXh0KCktPmNoYXJhY3RlcnMoKSArIG1fc3RhcnQsIG1fbGVuLCB0ZXh0UmVu
ZGVyZXIoKS0+YWxsb3dUYWJzKCksIHRleHRQb3MoKSwgbV90b0FkZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24oKSA9PSBSVEwsIG1fZGlyT3ZlcnJpZGUgfHwg
c3R5bGUtPnZpc3VhbGx5T3JkZXJlZCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBJbnRQb2ludCh4KCkgKyB0eCwgdG9wICsgdHkpLCBoLCBjLCBzdHlsZS0+Y29sb3JTcGFj
ZSgpLCBzUG9zLCBlUG9zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQ
b2ludChtX3ggKyB0eCwgeSArIHR5KSwgaCwgYywgc3R5bGUtPmNvbG9yU3BhY2UoKSwgc1Bvcywg
ZVBvcyk7CiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogfQogCkBAIC02NDIsMTcgKzY0MiwxNyBA
QCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0CiAKIHZvaWQgSW5saW5l
VGV4dEJveDo6cGFpbnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgaW50IHR4
LCBpbnQgdHksIGludCBkZWNvLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cpCiB7Ci0gICAgdHgg
Kz0geCgpOwotICAgIHR5ICs9IHkoKTsKKyAgICB0eCArPSBtX3g7CisgICAgdHkgKz0gbV95Owog
CiAgICAgaWYgKG1fdHJ1bmNhdGlvbiA9PSBjRnVsbFRydW5jYXRpb24pCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGludCB3ID0gd2lkdGgoKTsKKyAgICBpbnQgd2lkdGggPSBtX3dpZHRoOwogICAg
IGlmIChtX3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbikgewotICAgICAgICB3ID0gdG9SZW5k
ZXJUZXh0KHJlbmRlcmVyKCkpLT53aWR0aChtX3N0YXJ0LCBtX3RydW5jYXRpb24sIHRleHRQb3Mo
KSwgbV9maXJzdExpbmUpOworICAgICAgICB3aWR0aCA9IHRvUmVuZGVyVGV4dChyZW5kZXJlcigp
KS0+d2lkdGgobV9zdGFydCwgbV90cnVuY2F0aW9uLCB0ZXh0UG9zKCksIG1fZmlyc3RMaW5lKTsK
ICAgICAgICAgaWYgKGRpcmVjdGlvbigpID09IFJUTCkKLSAgICAgICAgICAgIHR4ICs9ICh3aWR0
aCgpIC0gdyk7CisgICAgICAgICAgICB0eCArPSAobV93aWR0aCAtIHdpZHRoKTsKICAgICB9CiAg
ICAgCiAgICAgLy8gR2V0IHRoZSB0ZXh0IGRlY29yYXRpb24gY29sb3JzLgpAQCAtNjcxLDkgKzY3
MSw5IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uKEdyYXAKICAgICBpbnQg
ZXh0cmFPZmZzZXQgPSAwOwogICAgIGlmICghbGluZXNBcmVPcGFxdWUgJiYgc2hhZG93ICYmIHNo
YWRvdy0+bmV4dCgpKSB7CiAgICAgICAgIGNvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgSW50UmVj
dCBjbGlwUmVjdCh0eCwgdHksIHcsIGJhc2VsaW5lICsgMik7CisgICAgICAgIEludFJlY3QgY2xp
cFJlY3QodHgsIHR5LCB3aWR0aCwgYmFzZWxpbmUgKyAyKTsKICAgICAgICAgZm9yIChjb25zdCBT
aGFkb3dEYXRhKiBzID0gc2hhZG93OyBzOyBzID0gcy0+bmV4dCgpKSB7Ci0gICAgICAgICAgICBJ
bnRSZWN0IHNoYWRvd1JlY3QodHgsIHR5LCB3LCBiYXNlbGluZSArIDIpOworICAgICAgICAgICAg
SW50UmVjdCBzaGFkb3dSZWN0KHR4LCB0eSwgd2lkdGgsIGJhc2VsaW5lICsgMik7CiAgICAgICAg
ICAgICBzaGFkb3dSZWN0LmluZmxhdGUocy0+Ymx1cigpKTsKICAgICAgICAgICAgIHNoYWRvd1Jl
Y3QubW92ZShzLT54KCksIHMtPnkoKSk7CiAgICAgICAgICAgICBjbGlwUmVjdC51bml0ZShzaGFk
b3dSZWN0KTsKQEAgLTcwNSwxNyArNzA1LDE3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRE
ZWNvcmF0aW9uKEdyYXAKICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHVuZGVy
bGluZSwgY29sb3JTcGFjZSk7CiAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VTdHlsZShT
b2xpZFN0cm9rZSk7CiAgICAgICAgICAgICAvLyBMZWF2ZSBvbmUgcGl4ZWwgb2Ygd2hpdGUgYmV0
d2VlbiB0aGUgYmFzZWxpbmUgYW5kIHRoZSB1bmRlcmxpbmUuCi0gICAgICAgICAgICBjb250ZXh0
LT5kcmF3TGluZUZvclRleHQoSW50UG9pbnQodHgsIHR5ICsgYmFzZWxpbmUgKyAxKSwgdywgaXNQ
cmludGluZyk7CisgICAgICAgICAgICBjb250ZXh0LT5kcmF3TGluZUZvclRleHQoSW50UG9pbnQo
dHgsIHR5ICsgYmFzZWxpbmUgKyAxKSwgd2lkdGgsIGlzUHJpbnRpbmcpOwogICAgICAgICB9CiAg
ICAgICAgIGlmIChkZWNvICYgT1ZFUkxJTkUpIHsKICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0
cm9rZUNvbG9yKG92ZXJsaW5lLCBjb2xvclNwYWNlKTsKICAgICAgICAgICAgIGNvbnRleHQtPnNl
dFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdMaW5l
Rm9yVGV4dChJbnRQb2ludCh0eCwgdHkpLCB3LCBpc1ByaW50aW5nKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmRyYXdMaW5lRm9yVGV4dChJbnRQb2ludCh0eCwgdHkpLCB3aWR0aCwgaXNQcmludGlu
Zyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGRlY28gJiBMSU5FX1RIUk9VR0gpIHsKICAgICAg
ICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGxpbmV0aHJvdWdoLCBjb2xvclNwYWNlKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmRyYXdMaW5lRm9yVGV4dChJbnRQb2ludCh0eCwgdHkgKyAyICogYmFz
ZWxpbmUgLyAzKSwgdywgaXNQcmludGluZyk7CisgICAgICAgICAgICBjb250ZXh0LT5kcmF3TGlu
ZUZvclRleHQoSW50UG9pbnQodHgsIHR5ICsgMiAqIGJhc2VsaW5lIC8gMyksIHdpZHRoLCBpc1By
aW50aW5nKTsKICAgICAgICAgfQogICAgIH0gd2hpbGUgKHNoYWRvdyk7CiAKQEAgLTczNSw3ICs3
MzUsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U3BlbGxpbmdPckdyYW1tCiAgICAgICAg
IHJldHVybjsKIAogICAgIGludCBzdGFydCA9IDA7ICAgICAgICAgICAgICAgICAgLy8gc3RhcnQg
b2YgbGluZSB0byBkcmF3LCByZWxhdGl2ZSB0byB0eAotICAgIGludCB3ID0gd2lkdGgoKTsgICAg
ICAgICAgICAgICAgLy8gaG93IG11Y2ggbGluZSB0byBkcmF3CisgICAgaW50IHdpZHRoID0gbV93
aWR0aDsgICAgICAgICAgICAvLyBob3cgbXVjaCBsaW5lIHRvIGRyYXcKIAogICAgIC8vIERldGVy
bWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gbWVhc3VyZSB0ZXh0CiAgICAgYm9vbCBtYXJrZXJTcGFu
c1dob2xlQm94ID0gdHJ1ZTsKQEAgLTc1NCwxMyArNzU0LDEzIEBAIHZvaWQgSW5saW5lVGV4dEJv
eDo6cGFpbnRTcGVsbGluZ09yR3JhbW0KICAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gbWluPGlu
dD4oZW5kUG9zaXRpb24sIG1fdHJ1bmNhdGlvbik7CiAKICAgICAgICAgLy8gQ2FsY3VsYXRlIHN0
YXJ0ICYgd2lkdGgKLSAgICAgICAgSW50UG9pbnQgc3RhcnRQb2ludCh0eCArIHgoKSwgdHkgKyBz
ZWxlY3Rpb25Ub3AoKSk7CisgICAgICAgIEludFBvaW50IHN0YXJ0UG9pbnQodHggKyBtX3gsIHR5
ICsgc2VsZWN0aW9uVG9wKCkpOwogICAgICAgICBUZXh0UnVuIHJ1bih0ZXh0UmVuZGVyZXIoKS0+
dGV4dCgpLT5jaGFyYWN0ZXJzKCkgKyBtX3N0YXJ0LCBtX2xlbiwgdGV4dFJlbmRlcmVyKCktPmFs
bG93VGFicygpLCB0ZXh0UG9zKCksIG1fdG9BZGQsIGRpcmVjdGlvbigpID09IFJUTCwgbV9kaXJP
dmVycmlkZSB8fCBzdHlsZS0+dmlzdWFsbHlPcmRlcmVkKCkpOwogICAgICAgICBpbnQgaCA9IHNl
bGVjdGlvbkhlaWdodCgpOwogICAgICAgICAKICAgICAgICAgSW50UmVjdCBtYXJrZXJSZWN0ID0g
ZW5jbG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KHJ1biwgc3RhcnRQb2lu
dCwgaCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKTsKICAgICAgICAgc3RhcnQgPSBtYXJr
ZXJSZWN0LngoKSAtIHN0YXJ0UG9pbnQueCgpOwotICAgICAgICB3ID0gbWFya2VyUmVjdC53aWR0
aCgpOworICAgICAgICB3aWR0aCA9IG1hcmtlclJlY3Qud2lkdGgoKTsKICAgICAgICAgCiAgICAg
ICAgIC8vIFN0b3JlIHJlbmRlcmVkIHJlY3RzIGZvciBiYWQgZ3JhbW1hciBtYXJrZXJzLCBzbyB3
ZSBjYW4gaGl0LXRlc3QgYWdhaW5zdCBpdCBlbHNld2hlcmUgaW4gb3JkZXIgdG8KICAgICAgICAg
Ly8gZGlzcGxheSBhIHRvb2xUaXAuIFdlIGRvbid0IGRvIHRoaXMgZm9yIG1pc3NwZWxsaW5nIG1h
cmtlcnMuCkBAIC03ODgsMTQgKzc4OCwxNCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U3Bl
bGxpbmdPckdyYW1tCiAgICAgICAgIC8vIEluIGxhcmdlciBmb250cywgdGhvdWdoLCBwbGFjZSB0
aGUgdW5kZXJsaW5lIHVwIG5lYXIgdGhlIGJhc2VsaW5lIHRvIHByZXZlbnQgYSBiaWcgZ2FwLgog
ICAgICAgICB1bmRlcmxpbmVPZmZzZXQgPSBiYXNlbGluZSArIDI7CiAgICAgfQotICAgIHB0LT5k
cmF3TGluZUZvck1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKEludFBvaW50KHR4ICsgeCgpICsgc3Rh
cnQsIHR5ICsgeSgpICsgdW5kZXJsaW5lT2Zmc2V0KSwgdywgZ3JhbW1hcik7CisgICAgcHQtPmRy
YXdMaW5lRm9yTWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoSW50UG9pbnQodHggKyBtX3ggKyBzdGFy
dCwgdHkgKyBtX3kgKyB1bmRlcmxpbmVPZmZzZXQpLCB3aWR0aCwgZ3JhbW1hcik7CiB9CiAKIHZv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiBw
dCwgaW50IHR4LCBpbnQgdHksIGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIsIFJlbmRlclN0
eWxlKiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCkKIHsKICAgICAvLyBVc2Ugc2FtZSB5IHBvc2l0
aW9uaW5nIGFuZCBoZWlnaHQgYXMgZm9yIHNlbGVjdGlvbiwgc28gdGhhdCB3aGVuIHRoZSBzZWxl
Y3Rpb24gYW5kIHRoaXMgaGlnaGxpZ2h0IGFyZSBvbgogICAgIC8vIHRoZSBzYW1lIHdvcmQgdGhl
cmUgYXJlIG5vIHBpZWNlcyBzdGlja2luZyBvdXQuCi0gICAgaW50IHRvcCA9IHNlbGVjdGlvblRv
cCgpOworICAgIGludCB5ID0gc2VsZWN0aW9uVG9wKCk7CiAgICAgaW50IGggPSBzZWxlY3Rpb25I
ZWlnaHQoKTsKICAgICAKICAgICBpbnQgc1BvcyA9IG1heChtYXJrZXIuc3RhcnRPZmZzZXQgLSBt
X3N0YXJ0LCAodW5zaWduZWQpMCk7CkBAIC04MDMsNyArODAzLDcgQEAgdm9pZCBJbmxpbmVUZXh0
Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcgogICAgIFRleHRSdW4gcnVuKHRleHRSZW5kZXJlcigp
LT50ZXh0KCktPmNoYXJhY3RlcnMoKSArIG1fc3RhcnQsIG1fbGVuLCB0ZXh0UmVuZGVyZXIoKS0+
YWxsb3dUYWJzKCksIHRleHRQb3MoKSwgbV90b0FkZCwgZGlyZWN0aW9uKCkgPT0gUlRMLCBtX2Rp
ck92ZXJyaWRlIHx8IHN0eWxlLT52aXN1YWxseU9yZGVyZWQoKSk7CiAgICAgCiAgICAgLy8gQWx3
YXlzIGNvbXB1dGUgYW5kIHN0b3JlIHRoZSByZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1hcmtl
ci4gVGhlIGNvbXB1dGVkIHJlY3QgaXMgaW4gYWJzb2x1dGUgY29vcmRpbmF0ZXMuCi0gICAgSW50
UmVjdCBtYXJrZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JU
ZXh0KHJ1biwgSW50UG9pbnQoeCgpLCB0b3ApLCBoLCBzUG9zLCBlUG9zKSk7CisgICAgSW50UmVj
dCBtYXJrZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0
KHJ1biwgSW50UG9pbnQobV94LCB5KSwgaCwgc1BvcywgZVBvcykpOwogICAgIG1hcmtlclJlY3Qg
PSByZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChtYXJrZXJSZWN0KSku
ZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKICAgICByZW5kZXJlcigpLT5kb2N1bWVudCgpLT5zZXRS
ZW5kZXJlZFJlY3RGb3JNYXJrZXIocmVuZGVyZXIoKS0+bm9kZSgpLCBtYXJrZXIsIG1hcmtlclJl
Y3QpOwogICAgICAKQEAgLTgxNCw4ICs4MTQsOCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50
VGV4dE1hdGNoTWFya2VyCiAgICAgICAgICAgICByZW5kZXJlcigpLT50aGVtZSgpLT5wbGF0Zm9y
bUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCk7CiAgICAgICAgIHB0LT5zYXZlKCk7
CiAgICAgICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChwdCwgY29sb3IsIGNvbG9yLCAwLCBzdHls
ZS0+Y29sb3JTcGFjZSgpKTsgIC8vIERvbid0IGRyYXcgdGV4dCBhdCBhbGwhCi0gICAgICAgIHB0
LT5jbGlwKEludFJlY3QodHggKyB4KCksIHR5ICsgdG9wLCB3aWR0aCgpLCBoKSk7Ci0gICAgICAg
IHB0LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBydW4sIEludFBvaW50KHgoKSArIHR4LCB0
b3AgKyB0eSksIGgsIGNvbG9yLCBzdHlsZS0+Y29sb3JTcGFjZSgpLCBzUG9zLCBlUG9zKTsKKyAg
ICAgICAgcHQtPmNsaXAoSW50UmVjdCh0eCArIG1feCwgdHkgKyB5LCBtX3dpZHRoLCBoKSk7Cisg
ICAgICAgIHB0LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBydW4sIEludFBvaW50KG1feCAr
IHR4LCB5ICsgdHkpLCBoLCBjb2xvciwgc3R5bGUtPmNvbG9yU3BhY2UoKSwgc1BvcywgZVBvcyk7
CiAgICAgICAgIHB0LT5yZXN0b3JlKCk7CiAgICAgfQogfQpAQCAtODIzLDEzICs4MjMsMTMgQEAg
dm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcgogdm9pZCBJbmxpbmVUZXh0
Qm94Ojpjb21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2VyKGludCAvKnR4Ki8sIGludCAvKnR5
Ki8sIGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29u
c3QgRm9udCYgZm9udCkKIHsKICAgICAvLyBSZXBsYWNlbWVudCBtYXJrZXJzIGFyZSBub3QgYWN0
dWFsbHkgZHJhd24sIGJ1dCB0aGVpciByZWN0cyBuZWVkIHRvIGJlIGNvbXB1dGVkIGZvciBoaXQg
dGVzdGluZy4KLSAgICBpbnQgdG9wID0gc2VsZWN0aW9uVG9wKCk7CisgICAgaW50IHkgPSBzZWxl
Y3Rpb25Ub3AoKTsKICAgICBpbnQgaCA9IHNlbGVjdGlvbkhlaWdodCgpOwogICAgIAogICAgIGlu
dCBzUG9zID0gbWF4KG1hcmtlci5zdGFydE9mZnNldCAtIG1fc3RhcnQsICh1bnNpZ25lZCkwKTsK
ICAgICBpbnQgZVBvcyA9IG1pbihtYXJrZXIuZW5kT2Zmc2V0IC0gbV9zdGFydCwgKHVuc2lnbmVk
KW1fbGVuKTsgICAgCiAgICAgVGV4dFJ1biBydW4odGV4dFJlbmRlcmVyKCktPnRleHQoKS0+Y2hh
cmFjdGVycygpICsgbV9zdGFydCwgbV9sZW4sIHRleHRSZW5kZXJlcigpLT5hbGxvd1RhYnMoKSwg
dGV4dFBvcygpLCBtX3RvQWRkLCBkaXJlY3Rpb24oKSA9PSBSVEwsIG1fZGlyT3ZlcnJpZGUgfHwg
c3R5bGUtPnZpc3VhbGx5T3JkZXJlZCgpKTsKLSAgICBJbnRQb2ludCBzdGFydFBvaW50ID0gSW50
UG9pbnQoeCgpLCB0b3ApOworICAgIEludFBvaW50IHN0YXJ0UG9pbnQgPSBJbnRQb2ludChtX3gs
IHkpOwogICAgIAogICAgIC8vIENvbXB1dGUgYW5kIHN0b3JlIHRoZSByZWN0IGFzc29jaWF0ZWQg
d2l0aCB0aGlzIG1hcmtlci4KICAgICBJbnRSZWN0IG1hcmtlclJlY3QgPSBlbmNsb3NpbmdJbnRS
ZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQocnVuLCBzdGFydFBvaW50LCBoLCBzUG9zLCBl
UG9zKSk7CkBAIC05MDEsMTQgKzkwMSwxNCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9j
dW1lbnRNYXJrZXJzCiAKIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvblVuZGVy
bGluZShHcmFwaGljc0NvbnRleHQqIGN0eCwgaW50IHR4LCBpbnQgdHksIGNvbnN0IENvbXBvc2l0
aW9uVW5kZXJsaW5lJiB1bmRlcmxpbmUpCiB7Ci0gICAgdHggKz0geCgpOwotICAgIHR5ICs9IHko
KTsKKyAgICB0eCArPSBtX3g7CisgICAgdHkgKz0gbV95OwogCiAgICAgaWYgKG1fdHJ1bmNhdGlv
biA9PSBjRnVsbFRydW5jYXRpb24pCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpbnQgc3Rh
cnQgPSAwOyAgICAgICAgICAgICAgICAgLy8gc3RhcnQgb2YgbGluZSB0byBkcmF3LCByZWxhdGl2
ZSB0byB0eAotICAgIGludCB3ID0gd2lkdGgoKTsgICAgICAgICAgIC8vIGhvdyBtdWNoIGxpbmUg
dG8gZHJhdworICAgIGludCB3aWR0aCA9IG1fd2lkdGg7ICAgICAgICAgICAvLyBob3cgbXVjaCBs
aW5lIHRvIGRyYXcKICAgICBib29sIHVzZVdob2xlV2lkdGggPSB0cnVlOwogICAgIHVuc2lnbmVk
IHBhaW50U3RhcnQgPSBtX3N0YXJ0OwogICAgIHVuc2lnbmVkIHBhaW50RW5kID0gZW5kKCkgKyAx
OyAvLyBlbmQgcG9pbnRzIGF0IHRoZSBsYXN0IGNoYXIsIG5vdCBwYXN0IGl0CkBAIC05MjUsOCAr
OTI1LDkgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uVW5kZQogICAgICAg
ICBwYWludEVuZCA9IG1pbihwYWludEVuZCwgKHVuc2lnbmVkKW1fc3RhcnQgKyBtX3RydW5jYXRp
b24pOwogICAgICAgICB1c2VXaG9sZVdpZHRoID0gZmFsc2U7CiAgICAgfQotICAgIGlmICghdXNl
V2hvbGVXaWR0aCkKLSAgICAgICAgdyA9IHRvUmVuZGVyVGV4dChyZW5kZXJlcigpKS0+d2lkdGgo
cGFpbnRTdGFydCwgcGFpbnRFbmQgLSBwYWludFN0YXJ0LCB0ZXh0UG9zKCkgKyBzdGFydCwgbV9m
aXJzdExpbmUpOworICAgIGlmICghdXNlV2hvbGVXaWR0aCkgeworICAgICAgICB3aWR0aCA9IHRv
UmVuZGVyVGV4dChyZW5kZXJlcigpKS0+d2lkdGgocGFpbnRTdGFydCwgcGFpbnRFbmQgLSBwYWlu
dFN0YXJ0LCB0ZXh0UG9zKCkgKyBzdGFydCwgbV9maXJzdExpbmUpOworICAgIH0KIAogICAgIC8v
IFRoaWNrIG1hcmtlZCB0ZXh0IHVuZGVybGluZXMgYXJlIDJweCB0aGljayBhcyBsb25nIGFzIHRo
ZXJlIGlzIHJvb20gZm9yIHRoZSAycHggbGluZSB1bmRlciB0aGUgYmFzZWxpbmUuCiAgICAgLy8g
QWxsIG90aGVyIG1hcmtlZCB0ZXh0IHVuZGVybGluZXMgYXJlIDFweCB0aGljay4KQEAgLTkzOSwx
MSArOTQwLDExIEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvblVuZGUKICAg
ICAvLyBXZSBuZWVkIHRvIGhhdmUgc29tZSBzcGFjZSBiZXR3ZWVuIHVuZGVybGluZXMgb2Ygc3Vi
c2VxdWVudCBjbGF1c2VzLCBiZWNhdXNlIHNvbWUgaW5wdXQgbWV0aG9kcyBkbyBub3QgdXNlIGRp
ZmZlcmVudCB1bmRlcmxpbmUgc3R5bGVzIGZvciB0aG9zZS4KICAgICAvLyBXZSBtYWtlIGVhY2gg
bGluZSBzaG9ydGVyLCB3aGljaCBoYXMgYSBoYXJtbGVzcyBzaWRlIGVmZmVjdCBvZiBzaG9ydGVu
aW5nIHRoZSBmaXJzdCBhbmQgbGFzdCBjbGF1c2VzLCB0b28uCiAgICAgc3RhcnQgKz0gMTsKLSAg
ICB3IC09IDI7CisgICAgd2lkdGggLT0gMjsKIAogICAgIGN0eC0+c2V0U3Ryb2tlQ29sb3IodW5k
ZXJsaW5lLmNvbG9yLCByZW5kZXJlcigpLT5zdHlsZSgpLT5jb2xvclNwYWNlKCkpOwogICAgIGN0
eC0+c2V0U3Ryb2tlVGhpY2tuZXNzKGxpbmVUaGlja25lc3MpOwotICAgIGN0eC0+ZHJhd0xpbmVG
b3JUZXh0KEludFBvaW50KHR4ICsgc3RhcnQsIHR5ICsgaGVpZ2h0KCkgLSBsaW5lVGhpY2tuZXNz
KSwgdywgdGV4dFJlbmRlcmVyKCktPmRvY3VtZW50KCktPnByaW50aW5nKCkpOworICAgIGN0eC0+
ZHJhd0xpbmVGb3JUZXh0KEludFBvaW50KHR4ICsgc3RhcnQsIHR5ICsgaGVpZ2h0KCkgLSBsaW5l
VGhpY2tuZXNzKSwgd2lkdGgsIHRleHRSZW5kZXJlcigpLT5kb2N1bWVudCgpLT5wcmludGluZygp
KTsKIH0KIAogaW50IElubGluZVRleHRCb3g6OmNhcmV0TWluT2Zmc2V0KCkgY29uc3QKQEAgLTk4
MCw3ICs5ODEsNyBAQCBpbnQgSW5saW5lVGV4dEJveDo6b2Zmc2V0Rm9yUG9zaXRpb24oaW50CiAg
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dC0+c3R5bGUobV9maXJzdExpbmUpOwogICAgIGNv
bnN0IEZvbnQqIGYgPSAmc3R5bGUtPmZvbnQoKTsKICAgICByZXR1cm4gZi0+b2Zmc2V0Rm9yUG9z
aXRpb24oVGV4dFJ1bih0ZXh0UmVuZGVyZXIoKS0+dGV4dCgpLT5jaGFyYWN0ZXJzKCkgKyBtX3N0
YXJ0LCBtX2xlbiwgdGV4dFJlbmRlcmVyKCktPmFsbG93VGFicygpLCB0ZXh0UG9zKCksIG1fdG9B
ZGQsIGRpcmVjdGlvbigpID09IFJUTCwgbV9kaXJPdmVycmlkZSB8fCBzdHlsZS0+dmlzdWFsbHlP
cmRlcmVkKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfeCAtIHgoKSwgaW5j
bHVkZVBhcnRpYWxHbHlwaHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfeCAt
IG1feCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQogCiBpbnQgSW5saW5lVGV4dEJveDo6cG9z
aXRpb25Gb3JPZmZzZXQoaW50IG9mZnNldCkgY29uc3QKQEAgLTk4OSw3ICs5OTAsNyBAQCBpbnQg
SW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQoaW50CiAgICAgQVNTRVJUKG9mZnNldCA8
PSBtX3N0YXJ0ICsgbV9sZW4pOwogCiAgICAgaWYgKGlzTGluZUJyZWFrKCkpCi0gICAgICAgIHJl
dHVybiB4KCk7CisgICAgICAgIHJldHVybiBtX3g7CiAKICAgICBSZW5kZXJUZXh0KiB0ZXh0ID0g
dG9SZW5kZXJUZXh0KHJlbmRlcmVyKCkpOwogICAgIGNvbnN0IEZvbnQmIGYgPSB0ZXh0LT5zdHls
ZShtX2ZpcnN0TGluZSktPmZvbnQoKTsKQEAgLTk5Nyw3ICs5OTgsNyBAQCBpbnQgSW5saW5lVGV4
dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQoaW50CiAgICAgaW50IHRvID0gZGlyZWN0aW9uKCkgPT0g
UlRMID8gbV9sZW4gOiBvZmZzZXQgLSBtX3N0YXJ0OwogICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVk
IHRvIGFkZCByaWdodEJlYXJpbmcgaGVyZT8KICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChm
LnNlbGVjdGlvblJlY3RGb3JUZXh0KFRleHRSdW4odGV4dC0+dGV4dCgpLT5jaGFyYWN0ZXJzKCkg
KyBtX3N0YXJ0LCBtX2xlbiwgdGV4dFJlbmRlcmVyKCktPmFsbG93VGFicygpLCB0ZXh0UG9zKCks
IG1fdG9BZGQsIGRpcmVjdGlvbigpID09IFJUTCwgbV9kaXJPdmVycmlkZSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludCh4KCksIDAp
LCAwLCBmcm9tLCB0bykpLnJpZ2h0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJbnRQb2ludChtX3gsIDApLCAwLCBmcm9tLCB0bykpLnJpZ2h0
KCk7CiB9CiAKIGJvb2wgSW5saW5lVGV4dEJveDo6Y29udGFpbnNDYXJldE9mZnNldChpbnQgb2Zm
c2V0KSBjb25zdApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkocmV2aXNpb24gNTk1
OTEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHdvcmtpbmcgY29weSkK
QEAgLTk2LDcgKzk2LDcgQEAgcHJpdmF0ZToKIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNM
aW5lQnJlYWsoKSBjb25zdDsKIAotICAgIHZvaWQgc2V0U3BhY2VBZGQoaW50IGFkZCkgeyBzZXRX
aWR0aCh3aWR0aCgpIC0gbV90b0FkZCArIGFkZCk7IG1fdG9BZGQgPSBhZGQ7IH0KKyAgICB2b2lk
IHNldFNwYWNlQWRkKGludCBhZGQpIHsgbV93aWR0aCAtPSBtX3RvQWRkOyBtX3RvQWRkID0gYWRk
OyBtX3dpZHRoICs9IG1fdG9BZGQ7IH0KIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNJ
bmxpbmVUZXh0Qm94KCkgeyByZXR1cm4gdHJ1ZTsgfSAgICAKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAJKHJldmlzaW9uIDU5NTkxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTM5LDcgKzM1MzksNyBAQCBWaXNpYmxlUG9z
aXRpb24gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yCiAgICAgICAgIH0KIAogICAgICAgICAvLyBw
YXNzIHRoZSBib3ggYSB5IHBvc2l0aW9uIHRoYXQgaXMgaW5zaWRlIGl0Ci0gICAgICAgIHJldHVy
biBjbG9zZXN0Qm94LT5yZW5kZXJlcigpLT5wb3NpdGlvbkZvclBvaW50KEludFBvaW50KHBvaW50
SW5Db250ZW50cy54KCksIGNsb3Nlc3RCb3gtPnkoKSkpOworICAgICAgICByZXR1cm4gY2xvc2Vz
dEJveC0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludChJbnRQb2ludChwb2ludEluQ29udGVu
dHMueCgpLCBjbG9zZXN0Qm94LT5tX3kpKTsKICAgICB9CiAKICAgICBpZiAobGFzdFJvb3RCb3hX
aXRoQ2hpbGRyZW4pIHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxh
eW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5l
TGF5b3V0LmNwcAkocmV2aXNpb24gNTk1OTEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0xpbmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5j
bHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2lu
Y2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVC
b3guaCIKICNpbmNsdWRlICJicmVha19saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9BbHdheXNJbmxp
bmUuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmg+CkBAIC01MDMsNyAr
NTA0LDYgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZVZlcnRpY2FsUG9zaXRpbwogICAgICAg
ICBlbHNlIGlmIChyLT5tX29iamVjdC0+aXNCb3goKSkKICAgICAgICAgICAgIHRvUmVuZGVyQm94
KHItPm1fb2JqZWN0KS0+cG9zaXRpb25MaW5lQm94KHItPm1fYm94KTsKICAgICB9Ci0KICAgICAv
LyBQb3NpdGlvbmVkIG9iamVjdHMgYW5kIHplcm8tbGVuZ3RoIHRleHQgbm9kZXMgZGVzdHJveSB0
aGVpciBib3hlcyBpbgogICAgIC8vIHBvc2l0aW9uKCksIHdoaWNoIHVubmVjZXNzYXJpbHkgZGly
dGllcyB0aGUgbGluZS4KICAgICBsaW5lQm94LT5tYXJrRGlydHkoZmFsc2UpOwpAQCAtODM5LDEz
ICs4MzksMTIgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAg
ICAgICAgICAgaWYgKGNoZWNrRm9yRmxvYXRzRnJvbUxhc3RMaW5lKSB7CiAgICAgICAgICAgICAg
ICAgaW50IGJvdHRvbVZpc3VhbE92ZXJmbG93ID0gbGFzdFJvb3RCb3goKS0+Ym90dG9tVmlzdWFs
T3ZlcmZsb3coKTsKICAgICAgICAgICAgICAgICBpbnQgYm90dG9tTGF5b3V0T3ZlcmZsb3cgPSBs
YXN0Um9vdEJveCgpLT5ib3R0b21MYXlvdXRPdmVyZmxvdygpOwotICAgICAgICAgICAgICAgIFJv
b3RJbmxpbmVCb3gqIHRyYWlsaW5nRmxvYXRzTGluZUJveCA9IG5ldyAocmVuZGVyQXJlbmEoKSkg
Um9vdElubGluZUJveCh0aGlzKTsKKyAgICAgICAgICAgICAgICBUcmFpbGluZ0Zsb2F0c1Jvb3RJ
bmxpbmVCb3gqIHRyYWlsaW5nRmxvYXRzTGluZUJveCA9IG5ldyAocmVuZGVyQXJlbmEoKSkgVHJh
aWxpbmdGbG9hdHNSb290SW5saW5lQm94KHRoaXMpOwogICAgICAgICAgICAgICAgIG1fbGluZUJv
eGVzLmFwcGVuZExpbmVCb3godHJhaWxpbmdGbG9hdHNMaW5lQm94KTsKICAgICAgICAgICAgICAg
ICB0cmFpbGluZ0Zsb2F0c0xpbmVCb3gtPnNldENvbnN0cnVjdGVkKCk7CiAgICAgICAgICAgICAg
ICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAgdGV4dEJveERhdGFNYXA7CiAgICAg
ICAgICAgICAgICAgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT52ZXJ0aWNhbGx5QWxpZ25Cb3hlcyho
ZWlnaHQoKSwgdGV4dEJveERhdGFNYXApOwotICAgICAgICAgICAgICAgIHRyYWlsaW5nRmxvYXRz
TGluZUJveC0+c2V0SGVpZ2h0KDApOwotICAgICAgICAgICAgICAgIHRyYWlsaW5nRmxvYXRzTGlu
ZUJveC0+c2V0VmVydGljYWxPdmVyZmxvd1Bvc2l0aW9ucyhoZWlnaHQoKSwgYm90dG9tTGF5b3V0
T3ZlcmZsb3csIGhlaWdodCgpLCBib3R0b21WaXN1YWxPdmVyZmxvdyk7CisgICAgICAgICAgICAg
ICAgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT5zZXRWZXJ0aWNhbE92ZXJmbG93UG9zaXRpb25zKGhl
aWdodCgpLCBib3R0b21MYXlvdXRPdmVyZmxvdywgaGVpZ2h0KCksIGJvdHRvbVZpc3VhbE92ZXJm
bG93LCAwKTsKICAgICAgICAgICAgICAgICB0cmFpbGluZ0Zsb2F0c0xpbmVCb3gtPnNldEJsb2Nr
SGVpZ2h0KGhlaWdodCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChsYXN0Rmxv
YXQpIHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lLmNwcAkocmV2aXNpb24g
NTk1OTEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw3ICs0MSw5IEBAIFJlbmRlclNWR0lubGluZTo6UmVuZGVyU1ZHSW5saW5l
KE5vZGUqIG4KIAogSW5saW5lRmxvd0JveCogUmVuZGVyU1ZHSW5saW5lOjpjcmVhdGVJbmxpbmVG
bG93Qm94KCkKIHsKLSAgICByZXR1cm4gbmV3IChyZW5kZXJBcmVuYSgpKSBTVkdJbmxpbmVGbG93
Qm94KHRoaXMpOworICAgIElubGluZUZsb3dCb3gqIGJveCA9IG5ldyAocmVuZGVyQXJlbmEoKSkg
U1ZHSW5saW5lRmxvd0JveCh0aGlzKTsKKyAgICBib3gtPnNldEhhc1ZpcnR1YWxIZWlnaHQoKTsK
KyAgICByZXR1cm4gYm94OwogfQogCiB2b2lkIFJlbmRlclNWR0lubGluZTo6YWJzb2x1dGVSZWN0
cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQsIGludCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwCShyZXZpc2lvbiA1OTU5MSkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMs
NyArMTMzLDkgQEAgRmxvYXRRdWFkIFJlbmRlclNWR0lubGluZVRleHQ6OmNvbXB1dGVSZQogCiBJ
bmxpbmVUZXh0Qm94KiBSZW5kZXJTVkdJbmxpbmVUZXh0OjpjcmVhdGVUZXh0Qm94KCkKIHsKLSAg
ICByZXR1cm4gbmV3IChyZW5kZXJBcmVuYSgpKSBTVkdJbmxpbmVUZXh0Qm94KHRoaXMpOworICAg
IElubGluZVRleHRCb3gqIGJveCA9IG5ldyAocmVuZGVyQXJlbmEoKSkgU1ZHSW5saW5lVGV4dEJv
eCh0aGlzKTsKKyAgICBib3gtPnNldEhhc1ZpcnR1YWxIZWlnaHQoKTsKKyAgICByZXR1cm4gYm94
OwogfQogCiBJbnRSZWN0IFJlbmRlclNWR0lubGluZVRleHQ6OmxvY2FsQ2FyZXRSZWN0KElubGlu
ZUJveCosIGludCwgaW50KikKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwCShy
ZXZpc2lvbiA1OTU5MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw5IEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6bGF5b3V0
KCkKIAogUm9vdElubGluZUJveCogUmVuZGVyU1ZHVGV4dDo6Y3JlYXRlUm9vdElubGluZUJveCgp
IAogewotICAgIHJldHVybiBuZXcgKHJlbmRlckFyZW5hKCkpIFNWR1Jvb3RJbmxpbmVCb3godGhp
cyk7CisgICAgUm9vdElubGluZUJveCogYm94ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBTVkdSb290
SW5saW5lQm94KHRoaXMpOworICAgIGJveC0+c2V0SGFzVmlydHVhbEhlaWdodCgpOworICAgIHJl
dHVybiBib3g7CiB9CiAKIGJvb2wgUmVuZGVyU1ZHVGV4dDo6bm9kZUF0RmxvYXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24gNTk1OTEpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc4LDEzICszNzgs
MTMgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlclRleHQ6OnBvc2l0aW9uRm9yUAogICAgIGludCBv
ZmZzZXQ7CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcm9sbCB0aGVzZSBz
cGVjaWFsIGNhc2VzIGludG8gdGhlIGdlbmVyYWwgY2FzZXMgaW4gdGhlIGxvb3AgYmVsb3cuCi0g
ICAgaWYgKGZpcnN0VGV4dEJveCgpICYmIHBvaW50LnkoKSA8ICBmaXJzdFRleHRCb3goKS0+cm9v
dCgpLT5saW5lQm90dG9tKCkgJiYgcG9pbnQueCgpIDwgZmlyc3RUZXh0Qm94KCktPngoKSkgewor
ICAgIGlmIChmaXJzdFRleHRCb3goKSAmJiBwb2ludC55KCkgPCAgZmlyc3RUZXh0Qm94KCktPnJv
b3QoKS0+bGluZUJvdHRvbSgpICYmIHBvaW50LngoKSA8IGZpcnN0VGV4dEJveCgpLT5tX3gpIHsK
ICAgICAgICAgLy8gYXQgdGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgbGluZSBvciBhYm92
ZQogICAgICAgICAvLyBhbmQgdGhlIHggY29vcmRpbmF0ZSBpcyB0byB0aGUgbGVmdCBvZiB0aGUg
Zmlyc3QgdGV4dCBib3ggbGVmdCBlZGdlCiAgICAgICAgIG9mZnNldCA9IGZpcnN0VGV4dEJveCgp
LT5vZmZzZXRGb3JQb3NpdGlvbihwb2ludC54KCkpOwogICAgICAgICByZXR1cm4gY3JlYXRlVmlz
aWJsZVBvc2l0aW9uKG9mZnNldCArIGZpcnN0VGV4dEJveCgpLT5zdGFydCgpLCBET1dOU1RSRUFN
KTsKICAgICB9Ci0gICAgaWYgKGxhc3RUZXh0Qm94KCkgJiYgcG9pbnQueSgpID49IGxhc3RUZXh0
Qm94KCktPnJvb3QoKS0+bGluZVRvcCgpICYmIHBvaW50LngoKSA+PSBsYXN0VGV4dEJveCgpLT5y
aWdodCgpKSB7CisgICAgaWYgKGxhc3RUZXh0Qm94KCkgJiYgcG9pbnQueSgpID49IGxhc3RUZXh0
Qm94KCktPnJvb3QoKS0+bGluZVRvcCgpICYmIHBvaW50LngoKSA+PSBsYXN0VGV4dEJveCgpLT5t
X3ggKyBsYXN0VGV4dEJveCgpLT5tX3dpZHRoKSB7CiAgICAgICAgIC8vIGF0IHRoZSB5IGNvb3Jk
aW5hdGUgb2YgdGhlIGxhc3QgbGluZSBvciBiZWxvdwogICAgICAgICAvLyBhbmQgdGhlIHggY29v
cmRpbmF0ZSBpcyB0byB0aGUgcmlnaHQgb2YgdGhlIGxhc3QgdGV4dCBib3ggcmlnaHQgZWRnZQog
ICAgICAgICBvZmZzZXQgPSBsYXN0VGV4dEJveCgpLT5vZmZzZXRGb3JQb3NpdGlvbihwb2ludC54
KCkpOwpAQCAtMzk4LDE3ICszOTgsMTcgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlclRleHQ6OnBv
c2l0aW9uRm9yUAogICAgICAgICAgICAgaWYgKHBvaW50LnkoKSA8IGJvdHRvbSkgewogICAgICAg
ICAgICAgICAgIG9mZnNldCA9IGJveC0+b2Zmc2V0Rm9yUG9zaXRpb24ocG9pbnQueCgpKTsKIAot
ICAgICAgICAgICAgICAgIGlmIChwb2ludC54KCkgPT0gYm94LT54KCkpCisgICAgICAgICAgICAg
ICAgaWYgKHBvaW50LngoKSA9PSBib3gtPm1feCkKICAgICAgICAgICAgICAgICAgICAgLy8gdGhl
IHggY29vcmRpbmF0ZSBpcyBlcXVhbCB0byB0aGUgbGVmdCBlZGdlIG9mIHRoaXMgYm94CiAgICAg
ICAgICAgICAgICAgICAgIC8vIHRoZSBhZmZpbml0eSBtdXN0IGJlIGRvd25zdHJlYW0gc28gdGhl
IHBvc2l0aW9uIGRvZXNuJ3QganVtcCBiYWNrIHRvIHRoZSBwcmV2aW91cyBsaW5lCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24ob2Zmc2V0ICsgYm94LT5z
dGFydCgpLCBET1dOU1RSRUFNKTsKIAotICAgICAgICAgICAgICAgIGlmIChwb2ludC54KCkgPCBi
b3gtPnJpZ2h0KCkpCisgICAgICAgICAgICAgICAgaWYgKHBvaW50LngoKSA8IGJveC0+bV94ICsg
Ym94LT5tX3dpZHRoKQogICAgICAgICAgICAgICAgICAgICAvLyBhbmQgdGhlIHggY29vcmRpbmF0
ZSBpcyB0byB0aGUgbGVmdCBvZiB0aGUgcmlnaHQgZWRnZSBvZiB0aGlzIGJveAogICAgICAgICAg
ICAgICAgICAgICAvLyBjaGVjayB0byBzZWUgaWYgcG9zaXRpb24gZ29lcyBpbiB0aGlzIGJveAog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKG9mZnNldCAr
IGJveC0+c3RhcnQoKSwgb2Zmc2V0ID4gMCA/IFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFIDogRE9X
TlNUUkVBTSk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIWJveC0+cHJldk9uTGluZSgpICYmIHBv
aW50LngoKSA8IGJveC0+eCgpKQorICAgICAgICAgICAgICAgIGlmICghYm94LT5wcmV2T25MaW5l
KCkgJiYgcG9pbnQueCgpIDwgYm94LT5tX3gpCiAgICAgICAgICAgICAgICAgICAgIC8vIGJveCBp
cyBmaXJzdCBvbiBsaW5lCiAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgeCBjb29yZGlu
YXRlIGlzIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCB0ZXh0IGJveCBsZWZ0IGVkZ2UKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbihvZmZzZXQgKyBib3gt
PnN0YXJ0KCksIERPV05TVFJFQU0pOwpAQCAtODY4LDEyICs4NjgsMTIgQEAgSW50UG9pbnQgUmVu
ZGVyVGV4dDo6Zmlyc3RSdW5PcmlnaW4oKSBjbwogCiBpbnQgUmVuZGVyVGV4dDo6Zmlyc3RSdW5Y
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9maXJzdFRleHRCb3ggPyBtX2ZpcnN0VGV4dEJveC0+
eCgpIDogMDsKKyAgICByZXR1cm4gbV9maXJzdFRleHRCb3ggPyBtX2ZpcnN0VGV4dEJveC0+bV94
IDogMDsKIH0KIAogaW50IFJlbmRlclRleHQ6OmZpcnN0UnVuWSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fZmlyc3RUZXh0Qm94ID8gbV9maXJzdFRleHRCb3gtPnkoKSA6IDA7CisgICAgcmV0dXJu
IG1fZmlyc3RUZXh0Qm94ID8gbV9maXJzdFRleHRCb3gtPm1feSA6IDA7CiB9CiAgICAgCiB2b2lk
IFJlbmRlclRleHQ6OnNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlIHN0YXRlKQpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDU5NTkxKQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3NywxMCArMzc3LDEwIEBAIHN0YXRpYyB2b2lkIHdyaXRlUmVuZGVyT2JqZWN0KFRleHRT
dHJlYW0KIHN0YXRpYyB2b2lkIHdyaXRlVGV4dFJ1bihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVu
ZGVyVGV4dCYgbywgY29uc3QgSW5saW5lVGV4dEJveCYgcnVuKQogewogICAgIC8vIEZJWE1FOiBU
YWJsZSBjZWxsIGFkanVzdG1lbnQgaXMgdGVtcG9yYXJ5IHVudGlsIHJlc3VsdHMgY2FuIGJlIHVw
ZGF0ZWQuCi0gICAgaW50IHkgPSBydW4ueSgpOworICAgIGludCB5ID0gcnVuLm1feTsKICAgICBp
ZiAoby5jb250YWluaW5nQmxvY2soKS0+aXNUYWJsZUNlbGwoKSkKICAgICAgICAgeSAtPSB0b1Jl
bmRlclRhYmxlQ2VsbChvLmNvbnRhaW5pbmdCbG9jaygpKS0+aW50cmluc2ljUGFkZGluZ1RvcCgp
OwotICAgIHRzIDw8ICJ0ZXh0IHJ1biBhdCAoIiA8PCBydW4ueCgpIDw8ICIsIiA8PCB5IDw8ICIp
IHdpZHRoICIgPDwgcnVuLndpZHRoKCk7CisgICAgdHMgPDwgInRleHQgcnVuIGF0ICgiIDw8IHJ1
bi5tX3ggPDwgIiwiIDw8IHkgPDwgIikgd2lkdGggIiA8PCBydW4ubV93aWR0aDsKICAgICBpZiAo
cnVuLmRpcmVjdGlvbigpID09IFJUTCB8fCBydW4ubV9kaXJPdmVycmlkZSkgewogICAgICAgICB0
cyA8PCAocnVuLmRpcmVjdGlvbigpID09IFJUTCA/ICIgUlRMIiA6ICIgTFRSIik7CiAgICAgICAg
IGlmIChydW4ubV9kaXJPdmVycmlkZSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxp
bmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3gu
Y3BwCShyZXZpc2lvbiA1OTU5MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw4ICs4NSw4IEBAIHZvaWQgUm9vdElubGluZUJveDo6
cGxhY2VFbGxpcHNpcyhjb25zdCAKIHsKICAgICAvLyBDcmVhdGUgYW4gZWxsaXBzaXMgYm94Lgog
ICAgIEVsbGlwc2lzQm94KiBlbGxpcHNpc0JveCA9IG5ldyAocmVuZGVyZXIoKS0+cmVuZGVyQXJl
bmEoKSkgRWxsaXBzaXNCb3gocmVuZGVyZXIoKSwgZWxsaXBzaXNTdHIsIHRoaXMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElu
dFJlY3QoMCwgeSgpLCBlbGxpcHNpc1dpZHRoIC0gKG1hcmt1cEJveCA/IG1hcmt1cEJveC0+d2lk
dGgoKSA6IDApLCBoZWlnaHQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICFwcmV2Um9vdEJveCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGxpcHNp
c1dpZHRoIC0gKG1hcmt1cEJveCA/IG1hcmt1cEJveC0+d2lkdGgoKSA6IDApLCBoZWlnaHQoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeSgpLCAhcHJldlJvb3RCb3goKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3VwQm94KTsKICAgICAKICAgICBp
ZiAoIWdFbGxpcHNpc0JveE1hcCkKQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBSb290SW5saW5lQm94
OjpwbGFjZUVsbGlwc2lzKGNvbnN0IAogCiAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgYW4gUlRM
IHZlcnNpb24gb2YgdGhpcz8KICAgICBpZiAobHRyICYmICh4KCkgKyB3aWR0aCgpICsgZWxsaXBz
aXNXaWR0aCkgPD0gYmxvY2tSaWdodEVkZ2UpIHsKLSAgICAgICAgZWxsaXBzaXNCb3gtPnNldFgo
cmlnaHQoKSk7CisgICAgICAgIGVsbGlwc2lzQm94LT5tX3ggPSB4KCkgKyB3aWR0aCgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBSb290SW5saW5l
Qm94OjpwbGFjZUVsbGlwc2lzKGNvbnN0IAogICAgIC8vIG9mIHRoYXQgZ2x5cGguICBNYXJrIGFs
bCBvZiB0aGUgb2JqZWN0cyB0aGF0IGludGVyc2VjdCB0aGUgZWxsaXBzaXMgYm94IGFzIG5vdCBw
YWludGluZyAoYXMgYmVpbmcKICAgICAvLyB0cnVuY2F0ZWQpLgogICAgIGJvb2wgZm91bmRCb3gg
PSBmYWxzZTsKLSAgICBlbGxpcHNpc0JveC0+c2V0WChwbGFjZUVsbGlwc2lzQm94KGx0ciwgYmxv
Y2tMZWZ0RWRnZSwgYmxvY2tSaWdodEVkZ2UsIGVsbGlwc2lzV2lkdGgsIGZvdW5kQm94KSk7Cisg
ICAgZWxsaXBzaXNCb3gtPm1feCA9IHBsYWNlRWxsaXBzaXNCb3gobHRyLCBibG9ja0xlZnRFZGdl
LCBibG9ja1JpZ2h0RWRnZSwgZWxsaXBzaXNXaWR0aCwgZm91bmRCb3gpOwogfQogCiBpbnQgUm9v
dElubGluZUJveDo6cGxhY2VFbGxpcHNpc0JveChib29sIGx0ciwgaW50IGJsb2NrTGVmdEVkZ2Us
IGludCBibG9ja1JpZ2h0RWRnZSwgaW50IGVsbGlwc2lzV2lkdGgsIGJvb2wmIGZvdW5kQm94KQpA
QCAtMTM3LDcgKzEzNyw3IEBAIHZvaWQgUm9vdElubGluZUJveDo6YWRkSGlnaGxpZ2h0T3ZlcmZs
b3cKICAgICBGbG9hdFJlY3Qgcm9vdFJlY3QoMCwgc2VsZWN0aW9uVG9wKCksIHdpZHRoKCksIHNl
bGVjdGlvbkhlaWdodCgpKTsKICAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IGVuY2xvc2luZ0lu
dFJlY3QocGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5jdXN0b21IaWdobGlnaHRSZWN0KHJlbmRl
cmVyKCktPm5vZGUoKSwgcmVuZGVyZXIoKS0+c3R5bGUoKS0+aGlnaGxpZ2h0KCksIHJvb3RSZWN0
KSk7CiAgICAgc2V0SG9yaXpvbnRhbE92ZXJmbG93UG9zaXRpb25zKGxlZnRMYXlvdXRPdmVyZmxv
dygpLCByaWdodExheW91dE92ZXJmbG93KCksIG1pbihsZWZ0VmlzdWFsT3ZlcmZsb3coKSwgaW5m
bGF0ZWRSZWN0LngoKSksIG1heChyaWdodFZpc3VhbE92ZXJmbG93KCksIGluZmxhdGVkUmVjdC5y
aWdodCgpKSk7Ci0gICAgc2V0VmVydGljYWxPdmVyZmxvd1Bvc2l0aW9ucyh0b3BMYXlvdXRPdmVy
ZmxvdygpLCBib3R0b21MYXlvdXRPdmVyZmxvdygpLCBtaW4odG9wVmlzdWFsT3ZlcmZsb3coKSwg
aW5mbGF0ZWRSZWN0LnkoKSksIG1heChib3R0b21WaXN1YWxPdmVyZmxvdygpLCBpbmZsYXRlZFJl
Y3QuYm90dG9tKCkpKTsKKyAgICBzZXRWZXJ0aWNhbE92ZXJmbG93UG9zaXRpb25zKHRvcExheW91
dE92ZXJmbG93KCksIGJvdHRvbUxheW91dE92ZXJmbG93KCksIG1pbih0b3BWaXN1YWxPdmVyZmxv
dygpLCBpbmZsYXRlZFJlY3QueSgpKSwgbWF4KGJvdHRvbVZpc3VhbE92ZXJmbG93KCksIGluZmxh
dGVkUmVjdC5ib3R0b20oKSksIGhlaWdodCgpKTsKIH0KIAogdm9pZCBSb290SW5saW5lQm94Ojpw
YWludEN1c3RvbUhpZ2hsaWdodChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBp
bnQgdHgsIGludCB0eSwgY29uc3QgQXRvbWljU3RyaW5nJiBoaWdobGlnaHRUeXBlKQpAQCAtMzYx
LDcgKzM2MSw3IEBAIHN0YXRpYyBib29sIGlzRWRpdGFibGVMZWFmKElubGluZUJveCogbGUKICAg
ICByZXR1cm4gbGVhZiAmJiBsZWFmLT5yZW5kZXJlcigpICYmIGxlYWYtPnJlbmRlcmVyKCktPm5v
ZGUoKSAmJiBsZWFmLT5yZW5kZXJlcigpLT5ub2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCk7CiB9
CiAKLUlubGluZUJveCogUm9vdElubGluZUJveDo6Y2xvc2VzdExlYWZDaGlsZEZvclhQb3MoaW50
IHhQb3MsIGJvb2wgb25seUVkaXRhYmxlTGVhdmVzKQorSW5saW5lQm94KiBSb290SW5saW5lQm94
OjpjbG9zZXN0TGVhZkNoaWxkRm9yWFBvcyhpbnQgeCwgYm9vbCBvbmx5RWRpdGFibGVMZWF2ZXMp
CiB7CiAgICAgSW5saW5lQm94KiBmaXJzdExlYWYgPSBmaXJzdExlYWZDaGlsZCgpOwogICAgIElu
bGluZUJveCogbGFzdExlYWYgPSBsYXN0TGVhZkNoaWxkKCk7CkBAIC0zNjksMTIgKzM2OSwxMiBA
QCBJbmxpbmVCb3gqIFJvb3RJbmxpbmVCb3g6OmNsb3Nlc3RMZWFmQ2hpCiAgICAgICAgIHJldHVy
biBmaXJzdExlYWY7CiAKICAgICAvLyBBdm9pZCByZXR1cm5pbmcgYSBsaXN0IG1hcmtlciB3aGVu
IHBvc3NpYmxlLgotICAgIGlmICh4UG9zIDw9IGZpcnN0TGVhZi0+eCgpICYmICFmaXJzdExlYWYt
PnJlbmRlcmVyKCktPmlzTGlzdE1hcmtlcigpICYmICghb25seUVkaXRhYmxlTGVhdmVzIHx8IGlz
RWRpdGFibGVMZWFmKGZpcnN0TGVhZikpKQorICAgIGlmICh4IDw9IGZpcnN0TGVhZi0+bV94ICYm
ICFmaXJzdExlYWYtPnJlbmRlcmVyKCktPmlzTGlzdE1hcmtlcigpICYmICghb25seUVkaXRhYmxl
TGVhdmVzIHx8IGlzRWRpdGFibGVMZWFmKGZpcnN0TGVhZikpKQogICAgICAgICAvLyBUaGUgeCBj
b29yZGluYXRlIGlzIGxlc3Mgb3IgZXF1YWwgdG8gbGVmdCBlZGdlIG9mIHRoZSBmaXJzdExlYWYu
CiAgICAgICAgIC8vIFJldHVybiBpdC4KICAgICAgICAgcmV0dXJuIGZpcnN0TGVhZjsKIAotICAg
IGlmICh4UG9zID49IGxhc3RMZWFmLT5yaWdodCgpICYmICFsYXN0TGVhZi0+cmVuZGVyZXIoKS0+
aXNMaXN0TWFya2VyKCkgJiYgKCFvbmx5RWRpdGFibGVMZWF2ZXMgfHwgaXNFZGl0YWJsZUxlYWYo
bGFzdExlYWYpKSkKKyAgICBpZiAoeCA+PSBsYXN0TGVhZi0+bV94ICsgbGFzdExlYWYtPm1fd2lk
dGggJiYgIWxhc3RMZWFmLT5yZW5kZXJlcigpLT5pc0xpc3RNYXJrZXIoKSAmJiAoIW9ubHlFZGl0
YWJsZUxlYXZlcyB8fCBpc0VkaXRhYmxlTGVhZihsYXN0TGVhZikpKQogICAgICAgICAvLyBUaGUg
eCBjb29yZGluYXRlIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gcmlnaHQgZWRnZSBvZiB0aGUgbGFz
dExlYWYuCiAgICAgICAgIC8vIFJldHVybiBpdC4KICAgICAgICAgcmV0dXJuIGxhc3RMZWFmOwpA
QCAtMzgzLDcgKzM4Myw3IEBAIElubGluZUJveCogUm9vdElubGluZUJveDo6Y2xvc2VzdExlYWZD
aGkKICAgICBmb3IgKElubGluZUJveCogbGVhZiA9IGZpcnN0TGVhZjsgbGVhZjsgbGVhZiA9IGxl
YWYtPm5leHRMZWFmQ2hpbGQoKSkgewogICAgICAgICBpZiAoIWxlYWYtPnJlbmRlcmVyKCktPmlz
TGlzdE1hcmtlcigpICYmICghb25seUVkaXRhYmxlTGVhdmVzIHx8IGlzRWRpdGFibGVMZWFmKGxl
YWYpKSkgewogICAgICAgICAgICAgY2xvc2VzdExlYWYgPSBsZWFmOwotICAgICAgICAgICAgaWYg
KHhQb3MgPCBsZWFmLT5yaWdodCgpKQorICAgICAgICAgICAgaWYgKHggPCBsZWFmLT5tX3ggKyBs
ZWFmLT5tX3dpZHRoKQogICAgICAgICAgICAgICAgIC8vIFRoZSB4IGNvb3JkaW5hdGUgaXMgbGVz
cyB0aGFuIHRoZSByaWdodCBlZGdlIG9mIHRoZSBib3guCiAgICAgICAgICAgICAgICAgLy8gUmV0
dXJuIGl0LgogICAgICAgICAgICAgICAgIHJldHVybiBsZWFmOwpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvU1ZHSW5saW5lRmxvd0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1NWR0lubGluZUZsb3dCb3guaAkocmV2aXNpb24gNTk1OTEpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9TVkdJbmxpbmVGbG93Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDExICszMywxOCBAQCBj
bGFzcyBTVkdJbmxpbmVGbG93Qm94IDogcHVibGljIElubGluZUZsCiBwdWJsaWM6CiAgICAgU1ZH
SW5saW5lRmxvd0JveChSZW5kZXJPYmplY3QqIG9iaikKICAgICAgICAgOiBJbmxpbmVGbG93Qm94
KG9iaikKKyAgICAgICAgLCBtX2hlaWdodCgwKQogICAgIHsKICAgICB9CiAKKyAgICB2aXJ0dWFs
IGludCB2aXJ0dWFsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KKyAgICB2b2lk
IHNldEhlaWdodChpbnQgaCkgeyBtX2hlaWdodCA9IGg7IH0KKwogICAgIHZpcnR1YWwgdm9pZCBw
YWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0
dWFsIGludCBwbGFjZUJveGVzSG9yaXpvbnRhbGx5KGludCB4LCBpbnQmIGxlZnRQb3NpdGlvbiwg
aW50JiByaWdodFBvc2l0aW9uLCBib29sJiBuZWVkc1dvcmRTcGFjaW5nLCBHbHlwaE92ZXJmbG93
QW5kRmFsbGJhY2tGb250c01hcCYpOworICAgIAorcHJpdmF0ZToKKyAgICBpbnQgbV9oZWlnaHQ7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9T
VkdJbmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5s
aW5lVGV4dEJveC5oCShyZXZpc2lvbiA1OTU5MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR0lu
bGluZVRleHRCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNDAsOCArNDAsMTEgQEAgY2xhc3MgU1ZH
SW5saW5lVGV4dEJveCA6IHB1YmxpYyBJbmxpbmVUZQogcHVibGljOgogICAgIFNWR0lubGluZVRl
eHRCb3goUmVuZGVyT2JqZWN0KiBvYmopOwogCi0gICAgdmlydHVhbCBpbnQgc2VsZWN0aW9uVG9w
KCkgeyByZXR1cm4geSgpOyB9Ci0gICAgdmlydHVhbCBpbnQgc2VsZWN0aW9uSGVpZ2h0KCkgeyBy
ZXR1cm4gaGVpZ2h0KCk7IH0KKyAgICB2aXJ0dWFsIGludCB2aXJ0dWFsSGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9oZWlnaHQ7IH0KKyAgICB2b2lkIHNldEhlaWdodChpbnQgaCkgeyBtX2hlaWdo
dCA9IGg7IH0KKworICAgIHZpcnR1YWwgaW50IHNlbGVjdGlvblRvcCgpIHsgcmV0dXJuIG1feTsg
fQorICAgIHZpcnR1YWwgaW50IHNlbGVjdGlvbkhlaWdodCgpIHsgcmV0dXJuIG1faGVpZ2h0OyB9
CiAKICAgICB2aXJ0dWFsIGludCBvZmZzZXRGb3JQb3NpdGlvbihpbnQgeCwgYm9vbCBpbmNsdWRl
UGFydGlhbEdseXBocyA9IHRydWUpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IHBvc2l0aW9uRm9y
T2Zmc2V0KGludCBvZmZzZXQpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUm9v
dElubGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJbmxp
bmVCb3guaAkocmV2aXNpb24gNTk1OTEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdSb290SW5s
aW5lQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEwICs0MywxNCBAQCBjbGFzcyBTVkdSb290
SW5saW5lQm94IDogcHVibGljIFJvb3RJbmxpCiBwdWJsaWM6CiAgICAgU1ZHUm9vdElubGluZUJv
eChSZW5kZXJPYmplY3QqIG9iaikKICAgICAgICAgOiBSb290SW5saW5lQm94KG9iaikKKyAgICAg
ICAgLCBtX2hlaWdodCgwKQogICAgIHsKICAgICB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdS
b290SW5saW5lQm94KCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBpbnQgdmlydHVh
bEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9CisgICAgdm9pZCBzZXRIZWlnaHQo
aW50IGgpIHsgbV9oZWlnaHQgPSBoOyB9CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogCkBAIC03OCw2ICs4Miw3
IEBAIHByaXZhdGU6CiAgICAgU1ZHVGV4dERlY29yYXRpb25JbmZvIHJldHJpZXZlUGFpbnRTZXJ2
ZXJzRm9yVGV4dERlY29yYXRpb24oUmVuZGVyT2JqZWN0KiBzdGFydCk7CiAKIHByaXZhdGU6Cisg
ICAgaW50IG1faGVpZ2h0OwogICAgIFZlY3RvcjxTVkdDaGFyPiBtX3N2Z0NoYXJzOwogICAgIFZl
Y3RvcjxTVkdUZXh0Q2h1bms+IG1fc3ZnVGV4dENodW5rczsKIH07CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9UcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9UcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1RyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUcmFpbGluZ0Zs
b2F0c1Jvb3RJbmxpbmVCb3hfaAorI2RlZmluZSBUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3hf
aAorCisjaW5jbHVkZSAiUm9vdElubGluZUJveC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveCA6IHB1YmxpYyBSb290SW5saW5lQm94
IHsKK3B1YmxpYzoKKyAgICBUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3goUmVuZGVyT2JqZWN0
KiBvYmplY3QpIDogUm9vdElubGluZUJveChvYmplY3QpCisgICAgeworI2lmIEVOQUJMRShTVkcp
CisgICAgICAgIHNldEhhc1ZpcnR1YWxIZWlnaHQoKTsKKyNlbmRpZgorICAgIH0KKworcHJpdmF0
ZToKKyAgICB2aXJ0dWFsIGludCB2aXJ0dWFsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gMDsgfQor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVHJhaWxpbmdGbG9hdHNS
b290SW5saW5lQm94X2gK
</data>
<flag name="review"
          id="40601"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>