<?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>181426</bug_id>
          
          <creation_ts>2018-01-09 00:35:46 -0800</creation_ts>
          <short_desc>Further refinement to list item and counter code after &quot;list-item&quot; counter fix</short_desc>
          <delta_ts>2018-01-09 19:25:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1387141</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-01-09 00:35:46 -0800</bug_when>
    <thetext>Further refinement to list item and counter code after &quot;list-item&quot; counter fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1387149</commentid>
    <comment_count>1</comment_count>
      <attachid>330800</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-01-09 01:07:38 -0800</bug_when>
    <thetext>Created attachment 330800
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1387531</commentid>
    <comment_count>2</comment_count>
      <attachid>330800</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-09 19:24:32 -0800</bug_when>
    <thetext>Comment on attachment 330800
Patch

Clearing flags on attachment: 330800

Committed r226675: &lt;https://trac.webkit.org/changeset/226675&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1387532</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-09 19:24:34 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1387533</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-01-09 19:25:27 -0800</bug_when>
    <thetext>&lt;rdar://problem/36396060&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330800</attachid>
            <date>2018-01-09 01:07:38 -0800</date>
            <delta_ts>2018-01-09 19:24:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181426-20180109010738.patch</filename>
            <type>text/plain</type>
            <size>54777</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2NjE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjdkMDgxNTAyOTYwNjZm
MDFhMjk0YmIwYTE2YWMwYzcyMGExZjNjYi4uYWExOWM4MTRkNDg5YTA1MzljMGYyMTg0MWU1ZDBm
YTk5MGMwMmY4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBACisyMDE4LTAxLTA5ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBGdXJ0aGVyIHJlZmluZW1lbnQg
dG8gbGlzdCBpdGVtIGFuZCBjb3VudGVyIGNvZGUgYWZ0ZXIgImxpc3QtaXRlbSIgY291bnRlciBm
aXgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTQy
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY3Nz
L1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseUluaGVyaXRDb3VudGVyKTogVXNlIGF1dG8uCisgICAgICAgIChXZWJDb3JlOjpT
dHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb3VudGVyKTogVXNlIGF1dG8sIHJlbW92ZWQg
dW5uZWVkZWQKKyAgICAgICAgbnVsbCBjaGVja3MgZm9yIHRoaW5ncyB0aGF0IGNhbiBuZXZlciBi
ZSBudWxsLCBtb3ZlZCB0aGUgc2F0dXJhdGVkIGFkZGl0aW9uCisgICAgICAgIGhlcmUgYW5kIGdv
dCByaWQgb2YgdGhlIGFkZEluY3JlbWVudFZhbHVlIGZ1bmN0aW9uIGZyb20gQ291bnRlckRpcmVj
dGl2ZXMuCisgICAgICAgIFVzZSB0aGUgc2F0dXJhdGVkQWRkaXRpb24gZnVuY3Rpb24gZnJvbSBT
YXR1cmF0ZWRBcml0aG1ldGljLmggaW5zdGVhZCBvZiB0aGUKKyAgICAgICAgbXVjaCBsZXNzIGVm
ZmljaWVudCBvbmUgdGhhdCBkaWQgdGhlIHNhbWUgdGhpbmcsIENvdW50ZXJEaXJlY3RpdmVzOjph
ZGRDbGFtcGVkLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6bGlzdEl0ZW1Db3VudGVyRGlyZWN0aXZlcyk6IFVzZSBhZ2dyZWdhdGUg
c3ludGF4IGZvciB0aGUgcmV0dXJuCisgICAgICAgIHN0YXRlbWVudHMuCisgICAgICAgIChXZWJD
b3JlOjpwbGFuQ291bnRlcik6IENoYW5nZWQgdG8gdXNlIGEgc3RydWN0IHJldHVybiB2YWx1ZSBp
bnN0ZWFkIG9mIHR3bworICAgICAgICBvdXQgYXJndW1lbnRzLiBVc2UgdGhlIHNhdHVyYXRlZEFk
ZGl0aW9uIGZ1bmN0aW9uIGZyb20gU2F0dXJhdGVkQXJpdGhtZXRpYy5oCisgICAgICAgIGluc3Rl
YWQgb2YgdGhlIG11Y2ggbGVzcyBlZmZpY2llbnQgb25lIHRoYXQgZGlkIHRoZSBzYW1lIHRoaW5n
LAorICAgICAgICBDb3VudGVyRGlyZWN0aXZlczo6YWRkQ2xhbXBlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmZpbmRQbGFjZUZvckNvdW50ZXIpOiBDaGFuZ2VkIHRvIHVzZSBhIHN0cnVjdCByZXR1cm4g
dmFsdWUgaW5zdGVhZAorICAgICAgICBvZiB0d28gb3V0IGFyZ3VtZW50cy4KKyAgICAgICAgKFdl
YkNvcmU6Om1ha2VDb3VudGVyTm9kZSk6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZSBjaGFuZ2VzLiBD
aGFuZ2VkIGNvZGUgdG8KKyAgICAgICAgdXNlIGFkZCBpbnN0ZWFkIG9mIGJvdGggZ2V0IGFuZCBz
ZXQuIFVwZGF0ZWQgdG8ga2VlcCB0aGUgY291bnRlciBtYXBzIGluc2lkZQorICAgICAgICB0aGUg
dmFsdWVzIG9mIHRoZSAibWFwIG9mIG1hcHMiIGluc3RlYWQgb2YgdXNpbmcgYSB1bmlxdWVfcHRy
IGFuZCBhbGxvY2F0aW5nCisgICAgICAgIGVhY2ggb25lIG9uIHRoZSBoZWFwLgorICAgICAgICAo
V2ViQ29yZTo6ZGVzdHJveUNvdW50ZXJOb2RlV2l0aG91dE1hcFJlbW92YWwpOiBDaGFuZ2VkIGFy
Z3VtZW50IHRvIGEgcmVmZXJlbmNlCisgICAgICAgIGluc3RlYWQgb2YgYSBwb2ludGVyLiBVcGRh
dGVkIGZvciBjaGFuZ2VzIHRvIHRoZSBtYXAuIFVzZSBSZWZQdHIgbW9yZQorICAgICAgICBjb25z
aXN0ZW50bHkuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRl
ck5vZGVzKTogVXNlIGl0ZXJhdG9ycyBsZXNzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291
bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJDb3VudGVyOjpyZW5kZXJlclJlbW92ZWRGcm9tVHJlZSk6IEFkZCBhIGNoZWNrIG9mCisgICAg
ICAgIGhhc0NvdW50ZXJOb2RlTWFwIGhlcmUgYmVmb3JlIGNhbGxpbmcgZGVzdHJveUNvdW50ZXJO
b2Rlcywgc28gdGhhdCBmdW5jdGlvbgorICAgICAgICBjYW4gYXNzdW1lIHRoZSBmbGFnIGlzIHRy
dWUgKGJvdGggb3RoZXIgY2FsbGVycyBhbHJlYWR5IGNoZWNrIGl0KS4KKyAgICAgICAgKFdlYkNv
cmU6OnVwZGF0ZUNvdW50ZXJzKTogVXNlIGF1dG8gYW5kIHVwZGF0ZSBmb3IgY2hhbmdlcyBhYm92
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OnJlbmRlcmVyU3R5bGVDaGFuZ2Vk
KTogVXNlIG1vZGVybiBmb3IgbG9vcHMgaW5zdGVhZAorICAgICAgICBvZiBpdGVyYXRvcnMuCisg
ICAgICAgIChzaG93Q291bnRlclJlbmRlcmVyVHJlZSk6IFVzZSBhdXRvIGFuZCB1ZHBhdGUgZm9y
IGNoYW5nZXMgYWJvdmUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5nTGlzdCk6IFN0b3AgcmVmZXJyaW5nIHRvIGVs
ZW1lbnRzIGFzICJub2RlcyIuIENoYW5nZWQKKyAgICAgICAgdGhlIGxvY2FsIHZhcmlhYmxlIG5h
bWVzIGZvciBjbGFyaXR5LgorICAgICAgICAoV2ViQ29yZTo6bmV4dExpc3RJdGVtSGVscGVyKTog
UmVuYW1lZCBmcm9tIG5leHRMaXN0SXRlbSBzaW5jZSBpdCdzIG5vdAorICAgICAgICBpbnRlbmRl
ZCB0byBiZSBjYWxsZWQgZGlyZWN0bHkgYW5kIHdlIHdhbnQgdG8gdXNlIGEgZnVuY3Rpb24gcG9p
bnRlciB0bworICAgICAgICBuZXh0TGlzdEl0ZW0uIEZpeGVkIHRoZSBhbGdvcml0aG0gdG8gY29y
cmVjdGx5IGhhbmRsZSBhZCBob2MgImxpc3RzIiB0aGF0CisgICAgICAgIGFyZSBub3QgYWN0dWFs
bHkgSFRNTCBsaXN0IGVsZW1lbnRzLCB1c2luZyB0aGUgZGVmaW5pdGlvbiBpbiB0aGUgZW5jbG9z
aW5nTGlzdAorICAgICAgICBmdW5jdGlvbiBhcyB0aGUgcHJldmlvdXNMaXN0SXRlbSBmdW5jdGlv
biBhbHJlYWR5IGRpZC4KKyAgICAgICAgKFdlYkNvcmU6Om5leHRMaXN0SXRlbSk6IFVwZGF0ZWQg
Zm9yIG5hbWUgY2hhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0TGlzdEl0ZW0pOiBSZW5h
bWVkIGZyb20gbmV4dExpc3RJdGVtIGZvciBjbGFyaXR5LgorICAgICAgICAoV2ViQ29yZTo6cHJl
dmlvdXNMaXN0SXRlbSk6IFJld3JvdGUgbG9vcCBzbyBpdCBkb2Vzbid0IGhhdmUgdG8gZG8gdGhp
bmdzCisgICAgICAgIHNvIHN0cmFuZ2VseSB3aGVuIHdlIGZpbmQgYW5vdGhlciBsaXN0LgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06OnVwZGF0ZUl0ZW1WYWx1ZXNGb3JPcmRlcmVk
TGlzdCk6IFVzZSBhdXRvIGFuZAorICAgICAgICB1cGRhdGUgbG9jYWwgdmFyaWFibGUgbmFtZXMu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6aXRlbUNvdW50Rm9yT3JkZXJlZExp
c3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjp1cGRhdGVWYWx1
ZU5vdyBjb25zdCk6IFJld3JvdGUgdG8gdXNlIGFuIGl0ZXJhdGl2ZQorICAgICAgICBhbGdvcml0
aG0gaW5zdGVhZCBvZiBhIHJlY3Vyc2l2ZSBvbmUuIEZpeGVzIHRoZSBGSVhNRSBoZXJlLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06OnVwZGF0ZVZhbHVlKTogVXNlIG1fdmFsdWVX
YXNTZXRFeHBsaWNpdGx5CisgICAgICAgIGluc3RlYWQgb2YgbV9leHBsaWNpdFZhbHVlLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06OmV4cGxpY2l0VmFsdWVDaGFuZ2VkKTogVXNl
IGF1dG8gYW5kIHNpbXBsaWZpZWQKKyAgICAgICAgdGhlIGxvb3AgYSBiaXQuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6c2V0RXhwbGljaXRWYWx1ZSk6IFNldCBtX3ZhbHVlV2Fz
U2V0RXhwbGljaXRseQorICAgICAgICBpbnN0ZWFkIG9mIG1fZXhwbGljaXRWYWx1ZS4KKyAgICAg
ICAgKFdlYkNvcmU6OnByZXZpb3VzT3JOZXh0SXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMaXN0SXRlbTo6dXBkYXRlTGlzdE1hcmtlck51bWJlcnMpOiBTdHJlYW1saW5l
ZCB0aGUgbG9vcAorICAgICAgICBhIGJpdCBhbmQgdXNlZCBhIGZ1Y250aW9uIHBvaW50ZXIgdG8g
aGFuZGxlIHRoZSB0d28gZGlmZmVyZW50IGRpcmVjdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMaXN0SXRlbTo6aXNJblJldmVyc2VkT3JkZXJlZExpc3QgY29uc3QpOiBTaW1wbGlmaWVk
IGJ5CisgICAgICAgIGdldHRpbmcgcmlkIG9mIGFuIHVubmVlZGVkIHVzZSBvZiBwb2ludGVycyBh
bmQgbG9jYWwgdmFyaWFibGVzLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVt
Lmg6IFVzZSBhIGJvb2xlYW4sIG1fdmFsdWVXYXNTZXRFeHBsaWNpdGx5LAorICAgICAgICBpbnN0
ZWFkIG9mIGEgc2VwYXJhdGUgb3B0aW9uYWwgbV9leHBsaWNpdFZhbHVlLgorCisgICAgICAgICog
cmVuZGVyaW5nL3N0eWxlL0NvdW50ZXJEaXJlY3RpdmVzLmg6IFNpbmNlIGFsbCB0aGUgY29kZSBp
biB0aGlzIGZpbGUgd2FzCisgICAgICAgIHJld3JpdHRlbiwgcmVtb3ZlZCBvbGQgY29weXJpZ2h0
cy4gRGVsZXRlZCB0aGUgYWRkSW5jcmVtZW50VmFsdWUgZnVuY3Rpb24sCisgICAgICAgIHNpbmNl
IGl0IGlzIGNsZWFyIGVub3VnaCBpbiB0aGUgb25lIGNhbGwgc2l0ZSBpbiB0aGUgc3R5bGUgYnVp
bGRlci4KKyAgICAgICAgRGVsZXRlZCB0aGUgYWRkQ2xhbXBlZCBmdW5jdGlvbiBiZWNhdXNlIGl0
IHdhcyBqdXN0IGEgbXVjaCBzbG93ZXIKKyAgICAgICAgdmVyc2lvbiBvZiB0aGUgc2F0dXJhdGVk
QWRkaXRpb24gZnVuY3Rpb24uIE1hZGUgPT0gYW5kICE9IGludG8gY29uc3RleHByCisgICAgICAg
IGZ1bmN0aW9ucyBzaW5jZSB0aGV5IGFyZSBzaW1wbGUgZW5vdWdoIHRvIGJlLgorCisgICAgICAg
ICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclN0eWxlOjpnZXRDb3VudGVyRGlyZWN0aXZlcyBjb25zdCk6IERlbGV0ZWQuIENhbGxlciBj
YW4KKyAgICAgICAgaGFuZGxlIHRoaXMganVzdCBmaW5lIHdpdGhvdXQgYSBoZWxwZXIgZnVuY3Rp
b24uCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6IERpdHRvLgorCiAy
MDE4LTAxLTA5ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
bGVhc2UgYXNzZXJ0IGluIGFkZFJlc291cmNlVGltaW5nIHdoZW4gYSBjYWNoZSByZXNvdXJjZSBp
cyByZXF1ZXN0ZWQgZHVyaW5nIHN0eWxlIHJlY2FsYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVp
bGRlckN1c3RvbS5oCmluZGV4IGYxYTcwNzk5ODk5YzM1ZDQ2NTg4ZWQxNmRjYWFmNTY3ZTRkOTNi
OTguLjA3NDE4Y2UzMzQ5OTViNGUxZDBkZTI5YTE4ZTM0MmIyYzY2Yzk4Y2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDdXN0b20uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKQEAgLTExMzYsOSArMTEzNiw5IEBAIGlubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdFRleHRFbXBoYXNpc1N0
eWxlKFN0eWxlUmVzb2x2ZXImCiB0ZW1wbGF0ZSA8U3R5bGVCdWlsZGVyQ3VzdG9tOjpDb3VudGVy
QmVoYXZpb3IgY291bnRlckJlaGF2aW9yPgogaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseUluaGVyaXRDb3VudGVyKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCiB7Ci0g
ICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5hY2Nl
c3NDb3VudGVyRGlyZWN0aXZlcygpOworICAgIGF1dG8mIG1hcCA9IHN0eWxlUmVzb2x2ZXIuc3R5
bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKICAgICBmb3IgKGF1dG8mIGtleVZhbHVl
IDogY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSkt
PmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCkpIHsKLSAgICAgICAgQ291bnRlckRpcmVjdGl2ZXMm
IGRpcmVjdGl2ZXMgPSBtYXAuYWRkKGtleVZhbHVlLmtleSwgQ291bnRlckRpcmVjdGl2ZXMoKSku
aXRlcmF0b3ItPnZhbHVlOworICAgICAgICBhdXRvJiBkaXJlY3RpdmVzID0gbWFwLmFkZChrZXlW
YWx1ZS5rZXksIENvdW50ZXJEaXJlY3RpdmVzIHsgfSkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAg
ICBpZiAoY291bnRlckJlaGF2aW9yID09IFJlc2V0KQogICAgICAgICAgICAgZGlyZWN0aXZlcy5y
ZXNldFZhbHVlID0ga2V5VmFsdWUudmFsdWUucmVzZXRWYWx1ZTsKICAgICAgICAgZWxzZQpAQCAt
MTE2NywxNiArMTE2NywxMyBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
VmFsdWVDb3VudGVyKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsCiAKICAgICBmb3IgKGF1
dG8mIGl0ZW0gOiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgewogICAgICAgICBQYWly
KiBwYWlyID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0uZ2V0KCkpLnBhaXJWYWx1
ZSgpOwotICAgICAgICBpZiAoIXBhaXIgfHwgIXBhaXItPmZpcnN0KCkgfHwgIXBhaXItPnNlY29u
ZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KICAgICAgICAgQXRvbWljU3RyaW5nIGlkZW50
aWZpZXIgPSBwYWlyLT5maXJzdCgpLT5zdHJpbmdWYWx1ZSgpOwogICAgICAgICBpbnQgdmFsdWUg
PSBwYWlyLT5zZWNvbmQoKS0+aW50VmFsdWUoKTsKLSAgICAgICAgQ291bnRlckRpcmVjdGl2ZXMm
IGRpcmVjdGl2ZXMgPSBtYXAuYWRkKGlkZW50aWZpZXIsIENvdW50ZXJEaXJlY3RpdmVzKCkpLml0
ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgYXV0byYgZGlyZWN0aXZlcyA9IG1hcC5hZGQoaWRlbnRp
ZmllciwgQ291bnRlckRpcmVjdGl2ZXMgeyB9KS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlm
IChjb3VudGVyQmVoYXZpb3IgPT0gUmVzZXQpCiAgICAgICAgICAgICBkaXJlY3RpdmVzLnJlc2V0
VmFsdWUgPSB2YWx1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZGlyZWN0aXZlcy5hZGRJ
bmNyZW1lbnRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICBkaXJlY3RpdmVzLmluY3JlbWVudFZh
bHVlID0gc2F0dXJhdGVkQWRkaXRpb24oZGlyZWN0aXZlcy5pbmNyZW1lbnRWYWx1ZS52YWx1ZV9v
cigwKSwgdmFsdWUpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckNvdW50ZXIuY3BwCmluZGV4IDQ2ZDdjMDZiN2MxODk0YjA0YmYyZmU0YmM5NjY3NmRhM2M0Y2Y0
MzMuLjNmMTRlNjkxZThlNGVjZDQ0NjI2OThmMTQ1OTc1NTk1YjYwMDJjM2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKQEAgLTQ2LDggKzQ2LDggQEAgdXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFJl
bmRlckNvdW50ZXIpOwogCi10eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8Q291
bnRlck5vZGU+PiBDb3VudGVyTWFwOwotdHlwZWRlZiBIYXNoTWFwPGNvbnN0IFJlbmRlckVsZW1l
bnQqLCBzdGQ6OnVuaXF1ZV9wdHI8Q291bnRlck1hcD4+IENvdW50ZXJNYXBzOwordXNpbmcgQ291
bnRlck1hcCA9IEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWY8Q291bnRlck5vZGU+PjsKK3VzaW5n
IENvdW50ZXJNYXBzID0gSGFzaE1hcDxjb25zdCBSZW5kZXJFbGVtZW50KiwgQ291bnRlck1hcD47
CiAKIHN0YXRpYyBDb3VudGVyTm9kZSogbWFrZUNvdW50ZXJOb2RlKFJlbmRlckVsZW1lbnQmLCBj
b25zdCBBdG9taWNTdHJpbmcmIGlkZW50aWZpZXIsIGJvb2wgYWx3YXlzQ3JlYXRlQ291bnRlcik7
CiAKQEAgLTEwOCwzMCArMTA4LDM0IEBAIHN0YXRpYyBSZW5kZXJFbGVtZW50KiBuZXh0SW5QcmVP
cmRlcihjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRWxlbWVuCiAKIHN0YXRp
YyBDb3VudGVyRGlyZWN0aXZlcyBsaXN0SXRlbUNvdW50ZXJEaXJlY3RpdmVzKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyKQogewotICAgIENvdW50ZXJEaXJlY3RpdmVzIGRpcmVjdGl2ZXM7CiAgICAg
aWYgKGlzPFJlbmRlckxpc3RJdGVtPihyZW5kZXJlcikpIHsKICAgICAgICAgYXV0byYgaXRlbSA9
IGRvd25jYXN0PFJlbmRlckxpc3RJdGVtPihyZW5kZXJlcik7CiAgICAgICAgIGlmIChhdXRvIGV4
cGxpY2l0VmFsdWUgPSBpdGVtLmV4cGxpY2l0VmFsdWUoKSkKLSAgICAgICAgICAgIGRpcmVjdGl2
ZXMucmVzZXRWYWx1ZSA9IGV4cGxpY2l0VmFsdWUudmFsdWUoKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgZGlyZWN0aXZlcy5hZGRJbmNyZW1lbnRWYWx1ZShpdGVtLmlzSW5SZXZlcnNlZE9y
ZGVyZWRMaXN0KCkgPyAtMSA6IDEpOwotICAgIH0gZWxzZSBpZiAoYXV0byBlbGVtZW50ID0gcmVu
ZGVyZXIuZWxlbWVudCgpKSB7CisgICAgICAgICAgICByZXR1cm4geyAqZXhwbGljaXRWYWx1ZSwg
c3RkOjpudWxsb3B0IH07CisgICAgICAgIHJldHVybiB7IHN0ZDo6bnVsbG9wdCwgaXRlbS5pc0lu
UmV2ZXJzZWRPcmRlcmVkTGlzdCgpID8gLTEgOiAxIH07CisgICAgfQorICAgIGlmIChhdXRvIGVs
ZW1lbnQgPSByZW5kZXJlci5lbGVtZW50KCkpIHsKICAgICAgICAgaWYgKGlzPEhUTUxPTGlzdEVs
ZW1lbnQ+KCplbGVtZW50KSkgewogICAgICAgICAgICAgYXV0byYgbGlzdCA9IGRvd25jYXN0PEhU
TUxPTGlzdEVsZW1lbnQ+KCplbGVtZW50KTsKLSAgICAgICAgICAgIGRpcmVjdGl2ZXMucmVzZXRW
YWx1ZSA9IGxpc3Quc3RhcnQoKTsKLSAgICAgICAgICAgIGRpcmVjdGl2ZXMuYWRkSW5jcmVtZW50
VmFsdWUobGlzdC5pc1JldmVyc2VkKCkgPyAxIDogLTEpOwotICAgICAgICB9IGVsc2UgaWYgKGVs
ZW1lbnQtPmhhc1RhZ05hbWUodWxUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUobWVudVRhZykg
fHwgZWxlbWVudC0+aGFzVGFnTmFtZShkaXJUYWcpKQotICAgICAgICAgICAgZGlyZWN0aXZlcy5y
ZXNldFZhbHVlID0gMDsKKyAgICAgICAgICAgIHJldHVybiB7IGxpc3Quc3RhcnQoKSwgbGlzdC5p
c1JldmVyc2VkKCkgPyAxIDogLTEgfTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNIVE1MTGlz
dEVsZW1lbnQoKmVsZW1lbnQpKQorICAgICAgICAgICAgcmV0dXJuIHsgMCwgc3RkOjpudWxsb3B0
IH07CiAgICAgfQotICAgIHJldHVybiBkaXJlY3RpdmVzOworICAgIHJldHVybiB7IH07CiB9CiAK
LXN0YXRpYyBib29sIHBsYW5Db3VudGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBB
dG9taWNTdHJpbmcmIGlkZW50aWZpZXIsIGJvb2wmIGlzUmVzZXQsIGludCYgdmFsdWUpCitzdHJ1
Y3QgQ291bnRlclBsYW4geworICAgIGJvb2wgaXNSZXNldDsKKyAgICBpbnQgdmFsdWU7Cit9Owor
CitzdGF0aWMgc3RkOjpvcHRpb25hbDxDb3VudGVyUGxhbj4gcGxhbkNvdW50ZXIoUmVuZGVyRWxl
bWVudCYgcmVuZGVyZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmllcikKIHsKICAgICAv
LyBXZSBtdXN0IGhhdmUgYSBnZW5lcmF0aW5nIG5vZGUgb3IgZWxzZSB3ZSBjYW5ub3QgaGF2ZSBh
IGNvdW50ZXIuCiAgICAgRWxlbWVudCogZ2VuZXJhdGluZ0VsZW1lbnQgPSByZW5kZXJlci5nZW5l
cmF0aW5nRWxlbWVudCgpOwogICAgIGlmICghZ2VuZXJhdGluZ0VsZW1lbnQpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIGF1dG8mIHN0
eWxlID0gcmVuZGVyZXIuc3R5bGUoKTsKIApAQCAtMTQwLDE2ICsxNDQsMTkgQEAgc3RhdGljIGJv
b2wgcGxhbkNvdW50ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgaWRlbnRpZmllciwKICAgICAgICAgLy8gU29tZXRpbWVzIGVsZW1lbnRzIGhhdmUgbW9yZSB0
aGVuIG9uZSByZW5kZXJlci4gT25seSB0aGUgZmlyc3Qgb25lIGdldHMgdGhlIGNvdW50ZXIKICAg
ICAgICAgLy8gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jc3MvY291bnRlci1jcmFzaC5odG1sCiAg
ICAgICAgIGlmIChnZW5lcmF0aW5nRWxlbWVudC0+cmVuZGVyZXIoKSAhPSAmcmVuZGVyZXIpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEJFRk9SRToKICAgICBjYXNlIEFGVEVSOgogICAg
ICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIENvdW50
ZXJzIGFyZSBmb3JiaWRkZW4gZnJvbSBhbGwgb3RoZXIgcHNldWRvIGVsZW1lbnRzLgorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OyAvLyBDb3VudGVycyBhcmUgZm9yYmlkZGVuIGZyb20gYWxs
IG90aGVyIHBzZXVkbyBlbGVtZW50cy4KICAgICB9CiAKLSAgICBhdXRvIGRpcmVjdGl2ZXMgPSBz
dHlsZS5nZXRDb3VudGVyRGlyZWN0aXZlcyhpZGVudGlmaWVyKTsKKyAgICBDb3VudGVyRGlyZWN0
aXZlcyBkaXJlY3RpdmVzOworCisgICAgaWYgKGF1dG8gbWFwID0gc3R5bGUuY291bnRlckRpcmVj
dGl2ZXMoKSkKKyAgICAgICAgZGlyZWN0aXZlcyA9IG1hcC0+Z2V0KGlkZW50aWZpZXIpOwogCiAg
ICAgaWYgKGlkZW50aWZpZXIgPT0gImxpc3QtaXRlbSIpIHsKICAgICAgICAgYXV0byBpdGVtRGly
ZWN0aXZlcyA9IGxpc3RJdGVtQ291bnRlckRpcmVjdGl2ZXMocmVuZGVyZXIpOwpAQCAtMTU5LDE3
ICsxNjYsMTEgQEAgc3RhdGljIGJvb2wgcGxhbkNvdW50ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmllciwKICAgICAgICAgICAgIGRpcmVjdGl2
ZXMuaW5jcmVtZW50VmFsdWUgPSBpdGVtRGlyZWN0aXZlcy5pbmNyZW1lbnRWYWx1ZTsKICAgICB9
CiAKLSAgICBpZiAoZGlyZWN0aXZlcy5yZXNldFZhbHVlKSB7Ci0gICAgICAgIHZhbHVlID0gQ291
bnRlckRpcmVjdGl2ZXM6OmFkZENsYW1wZWQoZGlyZWN0aXZlcy5yZXNldFZhbHVlLnZhbHVlKCks
IGRpcmVjdGl2ZXMuaW5jcmVtZW50VmFsdWUudmFsdWVfb3IoMCkpOwotICAgICAgICBpc1Jlc2V0
ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmIChkaXJlY3RpdmVz
LmluY3JlbWVudFZhbHVlKSB7Ci0gICAgICAgIHZhbHVlID0gZGlyZWN0aXZlcy5pbmNyZW1lbnRW
YWx1ZS52YWx1ZSgpOwotICAgICAgICBpc1Jlc2V0ID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGRpcmVjdGl2ZXMucmVzZXRW
YWx1ZSkKKyAgICAgICAgcmV0dXJuIENvdW50ZXJQbGFuIHsgdHJ1ZSwgc2F0dXJhdGVkQWRkaXRp
b24oKmRpcmVjdGl2ZXMucmVzZXRWYWx1ZSwgZGlyZWN0aXZlcy5pbmNyZW1lbnRWYWx1ZS52YWx1
ZV9vcigwKSkgfTsKKyAgICBpZiAoZGlyZWN0aXZlcy5pbmNyZW1lbnRWYWx1ZSkKKyAgICAgICAg
cmV0dXJuIENvdW50ZXJQbGFuIHsgZmFsc2UsICpkaXJlY3RpdmVzLmluY3JlbWVudFZhbHVlIH07
CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAogLy8gLSBGaW5kcyB0aGUgaW5zZXJ0aW9u
IHBvaW50IGZvciB0aGUgY291bnRlciBkZXNjcmliZWQgYnkgY291bnRlck93bmVyLCBpc1Jlc2V0
IGFuZCAKQEAgLTE4OCw3ICsxODksMTIgQEAgc3RhdGljIGJvb2wgcGxhbkNvdW50ZXIoUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmllciwKIC8vIHJl
c2V0IG5vZGUuCiAvLyAtIE5vbi1yZXNldCBDb3VudGVyTm9kZXMgY2Fubm90IGhhdmUgZGVzY2Vu
ZGFudHMuCiAKLXN0YXRpYyBib29sIGZpbmRQbGFjZUZvckNvdW50ZXIoUmVuZGVyRWxlbWVudCYg
Y291bnRlck93bmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIGlkZW50aWZpZXIsIGJvb2wgaXNSZXNl
dCwgUmVmUHRyPENvdW50ZXJOb2RlPiYgcGFyZW50LCBSZWZQdHI8Q291bnRlck5vZGU+JiBwcmV2
aW91c1NpYmxpbmcpCitzdHJ1Y3QgQ291bnRlckluc2VydGlvblBvaW50IHsKKyAgICBSZWZQdHI8
Q291bnRlck5vZGU+IHBhcmVudDsKKyAgICBSZWZQdHI8Q291bnRlck5vZGU+IHByZXZpb3VzU2li
bGluZzsKK307CisKK3N0YXRpYyBDb3VudGVySW5zZXJ0aW9uUG9pbnQgZmluZFBsYWNlRm9yQ291
bnRlcihSZW5kZXJFbGVtZW50JiBjb3VudGVyT3duZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgaWRl
bnRpZmllciwgYm9vbCBpc1Jlc2V0KQogewogICAgIC8vIFdlIGNhbm5vdCBzdG9wIHNlYXJjaGlu
ZyBmb3IgY291bnRlcnMgd2l0aCB0aGUgc2FtZSBpZGVudGlmaWVyIGJlZm9yZSB3ZSBhbHNvCiAg
ICAgLy8gY2hlY2sgdGhpcyByZW5kZXJlciwgYmVjYXVzZSBpdCBtYXkgYWZmZWN0IHRoZSBwb3Np
dGlvbmluZyBpbiB0aGUgdHJlZSBvZiBvdXIgY291bnRlci4KQEAgLTE5Nyw0OCArMjAzLDQxIEBA
IHN0YXRpYyBib29sIGZpbmRQbGFjZUZvckNvdW50ZXIoUmVuZGVyRWxlbWVudCYgY291bnRlck93
bmVyLCBjb25zdCBBdG9taWNTdHJpbmcmCiAgICAgLy8gdG93YXJkcyB0aGUgYmVnaW5pbmcgb2Yg
dGhlIGRvY3VtZW50IGZvciBjb3VudGVycyB3aXRoIHRoZSBzYW1lIGlkZW50aWZpZXIgYXMgdGhl
IG9uZQogICAgIC8vIHdlIGFyZSB0cnlpbmcgdG8gZmluZCBhIHBsYWNlIGZvci4gVGhpcyBpcyB0
aGUgbmV4dCByZW5kZXJlciB0byBiZSBjaGVja2VkLgogICAgIFJlbmRlckVsZW1lbnQqIGN1cnJl
bnRSZW5kZXJlciA9IHByZXZpb3VzSW5QcmVPcmRlcihjb3VudGVyT3duZXIpOwotICAgIHByZXZp
b3VzU2libGluZyA9IG51bGxwdHI7Ci0gICAgUmVmUHRyPENvdW50ZXJOb2RlPiBwcmV2aW91c1Np
YmxpbmdQcm90ZWN0b3I7CisgICAgUmVmUHRyPENvdW50ZXJOb2RlPiBwcmV2aW91c1NpYmxpbmc7
CiAKICAgICB3aGlsZSAoY3VycmVudFJlbmRlcmVyKSB7Ci0gICAgICAgIENvdW50ZXJOb2RlKiBj
dXJyZW50Q291bnRlciA9IG1ha2VDb3VudGVyTm9kZSgqY3VycmVudFJlbmRlcmVyLCBpZGVudGlm
aWVyLCBmYWxzZSk7CisgICAgICAgIGF1dG8gY3VycmVudENvdW50ZXIgPSBtYWtlQ291bnRlck5v
ZGUoKmN1cnJlbnRSZW5kZXJlciwgaWRlbnRpZmllciwgZmFsc2UpOwogICAgICAgICBpZiAoc2Vh
cmNoRW5kUmVuZGVyZXIgPT0gY3VycmVudFJlbmRlcmVyKSB7CiAgICAgICAgICAgICAvLyBXZSBt
YXkgYmUgYXQgdGhlIGVuZCBvZiBvdXIgc2VhcmNoLgogICAgICAgICAgICAgaWYgKGN1cnJlbnRD
b3VudGVyKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIHN1aXRhYmxlIGNvdW50ZXIg
b24gdGhlIEVuZFNlYXJjaFJlbmRlcmVyLgotICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1Np
YmxpbmdQcm90ZWN0b3IpIHsgLy8gQnV0IHdlIGFscmVhZHkgZm91bmQgYW5vdGhlciBjb3VudGVy
IHRoYXQgd2UgY29tZSBhZnRlci4KKyAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNTaWJsaW5n
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEJ1dCB3ZSBhbHJlYWR5IGZvdW5kIGFub3RoZXIg
Y291bnRlciB0aGF0IHdlIGNvbWUgYWZ0ZXIuCiAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJy
ZW50Q291bnRlci0+YWN0c0FzUmVzZXQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
V2UgZm91bmQgYSByZXNldCBjb3VudGVyIHRoYXQgaXMgb24gYSByZW5kZXJlciB0aGF0IGlzIGEg
c2libGluZyBvZiBvdXJzIG9yIGEgcGFyZW50LgogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGlzUmVzZXQgJiYgYXJlUmVuZGVyZXJzRWxlbWVudHNTaWJsaW5ncygqY3VycmVudFJlbmRlcmVy
LCBjb3VudGVyT3duZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJl
IGFsc28gYSByZXNldCBjb3VudGVyIGFuZCB0aGUgcHJldmlvdXMgcmVzZXQgd2FzIG9uIGEgc2li
bGluZyByZW5kZXJlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhlbmNlIHdlIGFy
ZSB0aGUgbmV4dCBzaWJsaW5nIG9mIHRoYXQgY291bnRlciBpZiB0aGF0IHJlc2V0IGlzIG5vdCBh
IHJvb3Qgb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgYSByb290IG5v
ZGUgaWYgdGhhdCByZXNldCBpcyBhIHJvb3QuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyZW50ID0gY3VycmVudENvdW50ZXItPnBhcmVudCgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByZXZpb3VzU2libGluZyA9IHBhcmVudCA/IGN1cnJlbnRDb3VudGVyIDogbnVsbHB0
cjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGF1dG8qIHBhcmVudCA9IGN1cnJlbnRDb3VudGVyLT5wYXJlbnQo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBwYXJlbnQsIHBhcmVudCA/
IGN1cnJlbnRDb3VudGVyIDogbnVsbHB0ciB9OwogICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIG5vdCBhIHJlc2V0IG5vZGUgb3IgdGhl
IHByZXZpb3VzIHJlc2V0IG11c3QgYmUgb24gYW4gYW5jZXN0b3Igb2Ygb3VyIG93bmVyIHJlbmRl
cmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoZW5jZSB3ZSBtdXN0IGJlIGEgY2hpbGQg
b2YgdGhhdCByZXNldCBjb3VudGVyLgotICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0g
Y3VycmVudENvdW50ZXI7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiBzb21lIGNhc2Vz
IHJlbmRlcnMgY2FuIGJlIHJlcGFyZW50ZWQgKGV4LiBub2RlcyBpbnNpZGUgYSB0YWJsZSBidXQg
bm90IGluIGEgY29sdW1uIG9yIHJvdykuCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiB0
aGVzZSBjYXNlcyB0aGUgaWRlbnRpZmllZCBwcmV2aW91c1NpYmxpbmcgd2lsbCBiZSBpbnZhbGlk
IGFzIGl0cyBwYXJlbnQgaXMgZGlmZmVyZW50IGZyb20KICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG91ciBpZGVudGlmaWVkIHBhcmVudC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw
cmV2aW91c1NpYmxpbmdQcm90ZWN0b3ItPnBhcmVudCgpICE9IGN1cnJlbnRDb3VudGVyKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzU2libGluZ1Byb3RlY3RvciA9IG51bGxw
dHI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzU2libGluZyA9IHByZXZpb3Vz
U2libGluZ1Byb3RlY3Rvci5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzU2libGluZy0+cGFyZW50
KCkgIT0gY3VycmVudENvdW50ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlv
dXNTaWJsaW5nID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGN1
cnJlbnRDb3VudGVyLCBXVEZNb3ZlKHByZXZpb3VzU2libGluZykgfTsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAvLyBDdXJyZW50Q291bnRlciwgdGhlIGNvdW50
ZXIgYXQgdGhlIEVuZFNlYXJjaFJlbmRlcmVyLCBpcyBub3QgcmVzZXQuCiAgICAgICAgICAgICAg
ICAgICAgIGlmICghaXNSZXNldCB8fCAhYXJlUmVuZGVyZXJzRWxlbWVudHNTaWJsaW5ncygqY3Vy
cmVudFJlbmRlcmVyLCBjb3VudGVyT3duZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBJZiB0aGUgbm9kZSB3ZSBhcmUgcGxhY2luZyBpcyBub3QgcmVzZXQgb3Igd2UgaGF2ZSBmb3Vu
ZCBhIGNvdW50ZXIgdGhhdCBpcyBhdHRhY2hlZAogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dG8gYW4gYW5jZXN0b3Igb2YgdGhlIHBsYWNlZCBjb3VudGVyJ3Mgb3duZXIgcmVuZGVyZXIgd2Ug
a25vdyB3ZSBhcmUgYSBzaWJsaW5nIG9mIHRoYXQgbm9kZS4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChjdXJyZW50Q291bnRlci0+cGFyZW50KCkgIT0gcHJldmlvdXNTaWJsaW5nUHJvdGVj
dG9yLT5wYXJlbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IGN1cnJlbnRDb3VudGVyLT5wYXJl
bnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzU2libGluZyA9IHByZXZpb3Vz
U2libGluZ1Byb3RlY3Rvci5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDb3VudGVyLT5wYXJlbnQo
KSAhPSBwcmV2aW91c1NpYmxpbmctPnBhcmVudCgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB7IH07CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBjdXJyZW50
Q291bnRlci0+cGFyZW50KCksIFdURk1vdmUocHJldmlvdXNTaWJsaW5nKSB9OwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsgCiAgICAgICAgICAgICAgICAg
ICAgIC8vIFdlIGFyZSBhdCB0aGUgcG90ZW50aWFsIGVuZCBvZiB0aGUgc2VhcmNoLCBidXQgd2Ug
aGFkIG5vIHByZXZpb3VzIHNpYmxpbmcgY2FuZGlkYXRlCkBAIC0yNDYsMjEgKzI0NSwxMyBAQCBz
dGF0aWMgYm9vbCBmaW5kUGxhY2VGb3JDb3VudGVyKFJlbmRlckVsZW1lbnQmIGNvdW50ZXJPd25l
ciwgY29uc3QgQXRvbWljU3RyaW5nJgogICAgICAgICAgICAgICAgICAgICAvLyBwcmV2aW91c1Np
YmxpbmcsIGFuZCB3aGVuIHdlIGFyZSBhIHNpYmxpbmcgb2YgdGhlIGVuZCBjb3VudGVyIHdlIG11
c3Qgc2V0IHByZXZpb3VzU2libGluZwogICAgICAgICAgICAgICAgICAgICAvLyB0byBjdXJyZW50
Q291bnRlci4KICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDb3VudGVyLT5hY3RzQXNS
ZXNldCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZXNldCAmJiBhcmVSZW5k
ZXJlcnNFbGVtZW50c1NpYmxpbmdzKCpjdXJyZW50UmVuZGVyZXIsIGNvdW50ZXJPd25lcikpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBjdXJyZW50Q291bnRlci0+cGFy
ZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNTaWJsaW5nID0gY3Vy
cmVudENvdW50ZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudDsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVu
dCA9IGN1cnJlbnRDb3VudGVyOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNTaWJs
aW5nID0gcHJldmlvdXNTaWJsaW5nUHJvdGVjdG9yLmdldCgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpc1Jlc2V0IHx8ICFhcmVSZW5kZXJlcnNFbGVtZW50c1NpYmxpbmdzKCpjdXJy
ZW50UmVuZGVyZXIsIGNvdW50ZXJPd25lcikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBh
cmVudCA9IGN1cnJlbnRDb3VudGVyLT5wYXJlbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHByZXZpb3VzU2libGluZyA9IGN1cnJlbnRDb3VudGVyOwotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZXNldCAmJiBh
cmVSZW5kZXJlcnNFbGVtZW50c1NpYmxpbmdzKCpjdXJyZW50UmVuZGVyZXIsIGNvdW50ZXJPd25l
cikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgY3VycmVudENvdW50ZXIt
PnBhcmVudCgpLCBjdXJyZW50Q291bnRlciB9OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHsgY3VycmVudENvdW50ZXIsIFdURk1vdmUocHJldmlvdXNTaWJsaW5nKSB9OwogICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzU2libGluZ1Byb3Rl
Y3RvciA9IGN1cnJlbnRDb3VudGVyOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUmVzZXQg
fHwgIWFyZVJlbmRlcmVyc0VsZW1lbnRzU2libGluZ3MoKmN1cnJlbnRSZW5kZXJlciwgY291bnRl
ck93bmVyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGN1cnJlbnRDb3VudGVy
LT5wYXJlbnQoKSwgY3VycmVudENvdW50ZXIgfTsKKyAgICAgICAgICAgICAgICAgICAgcHJldmlv
dXNTaWJsaW5nID0gY3VycmVudENvdW50ZXI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgLy8gV2UgY29tZSBoZXJlIGlmIHRoZSBwcmV2aW91cyBzaWJsaW5n
IG9yIHBhcmVudCBvZiBvdXIgb3duZXIgcmVuZGVyZXIgaGFkIG5vCkBAIC0yNzMsMTggKzI2NCwx
OCBAQCBzdGF0aWMgYm9vbCBmaW5kUGxhY2VGb3JDb3VudGVyKFJlbmRlckVsZW1lbnQmIGNvdW50
ZXJPd25lciwgY29uc3QgQXRvbWljU3RyaW5nJgogICAgICAgICAgICAgLy8gY291bnRlciBiZWlu
ZyBwbGFjZWQgaXMgYXR0YWNoZWQgdG8uCiAgICAgICAgICAgICBpZiAoY3VycmVudENvdW50ZXIp
IHsKICAgICAgICAgICAgICAgICAvLyBXZSBmb3VuZCBhIHN1aXRhYmxlIGNvdW50ZXIuCi0gICAg
ICAgICAgICAgICAgaWYgKHByZXZpb3VzU2libGluZ1Byb3RlY3RvcikgeworICAgICAgICAgICAg
ICAgIGlmIChwcmV2aW91c1NpYmxpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gU2luY2Ug
d2UgaGFkIGEgc3VpdGFibGUgcHJldmlvdXMgY291bnRlciBiZWZvcmUsIHdlIHNob3VsZCBvbmx5
IGNvbnNpZGVyIHRoaXMgb25lIGFzIG91ciAKICAgICAgICAgICAgICAgICAgICAgLy8gcHJldmlv
dXNTaWJsaW5nIGlmIGl0IGlzIGEgcmVzZXQgY291bnRlciBhbmQgaGVuY2UgdGhlIGN1cnJlbnQg
cHJldmlvdXNTaWJsaW5nIGlzIGl0cyBjaGlsZC4KICAgICAgICAgICAgICAgICAgICAgaWYgKGN1
cnJlbnRDb3VudGVyLT5hY3RzQXNSZXNldCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBw
cmV2aW91c1NpYmxpbmdQcm90ZWN0b3IgPSBjdXJyZW50Q291bnRlcjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHByZXZpb3VzU2libGluZyA9IGN1cnJlbnRDb3VudGVyOwogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gV2UgYXJlIG5vIGxvbmdlciBpbnRlcmVzdGVkIGluIHByZXZpb3VzIHNp
YmxpbmdzIG9mIHRoZSBjdXJyZW50UmVuZGVyZXIgb3IgdGhlaXIgY2hpbGRyZW4KICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGFzIGNvdW50ZXJzIHRoZXkgbWF5IGhhdmUgYXR0YWNoZWQgY2Fu
bm90IGJlIHRoZSBwcmV2aW91cyBzaWJsaW5nIG9mIHRoZSBjb3VudGVyIHdlIGFyZSBwbGFjaW5n
LgogICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlbmRlcmVyID0gcGFyZW50T3JQc2V1
ZG9Ib3N0RWxlbWVudCgqY3VycmVudFJlbmRlcmVyKS0+cmVuZGVyZXIoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzU2libGluZ1Byb3RlY3Rv
ciA9IGN1cnJlbnRDb3VudGVyOworICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1NpYmxpbmcg
PSBjdXJyZW50Q291bnRlcjsKICAgICAgICAgICAgICAgICBjdXJyZW50UmVuZGVyZXIgPSBwcmV2
aW91c1NpYmxpbmdPclBhcmVudCgqY3VycmVudFJlbmRlcmVyKTsKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTI5Myw1NCArMjg0LDQ5IEBAIHN0YXRpYyBib29s
IGZpbmRQbGFjZUZvckNvdW50ZXIoUmVuZGVyRWxlbWVudCYgY291bnRlck93bmVyLCBjb25zdCBB
dG9taWNTdHJpbmcmCiAgICAgICAgIC8vIHdoaWNoIG1heSBiZSBkb25lIHR3aWNlIGluIHNvbWUg
Y2FzZXMuIFJlYXJyYW5naW5nIHRoZSBkZWNpc2lvbiBwb2ludHMgdGhvdWdoLCB0byBhY2NvbW1v
ZGF0ZSB0aGlzIAogICAgICAgICAvLyBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCB3b3VsZCBjcmVh
dGUgbW9yZSBjb2RlIGR1cGxpY2F0aW9uIHRoYW4gaXMgd29ydGh3aGlsZSBpbiBteSBvcHBpbmlv
biBhbmQgbWF5IGZ1cnRoZXIKICAgICAgICAgLy8gaW1wZWRlIHRoZSByZWFkYWJpbGl0eSBvZiB0
aGlzIGFscmVhZHkgY29tcGxleCBhbGdvcml0aG0uCi0gICAgICAgIGlmIChwcmV2aW91c1NpYmxp
bmdQcm90ZWN0b3IpCisgICAgICAgIGlmIChwcmV2aW91c1NpYmxpbmcpCiAgICAgICAgICAgICBj
dXJyZW50UmVuZGVyZXIgPSBwcmV2aW91c1NpYmxpbmdPclBhcmVudCgqY3VycmVudFJlbmRlcmVy
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY3VycmVudFJlbmRlcmVyID0gcHJldmlvdXNJ
blByZU9yZGVyKCpjdXJyZW50UmVuZGVyZXIpOwogICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIHsgfTsKIH0KIAogc3RhdGljIENvdW50ZXJOb2RlKiBtYWtlQ291bnRlck5vZGUo
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmllciwg
Ym9vbCBhbHdheXNDcmVhdGVDb3VudGVyKQogewogICAgIGlmIChyZW5kZXJlci5oYXNDb3VudGVy
Tm9kZU1hcCgpKSB7Ci0gICAgICAgIGlmIChDb3VudGVyTWFwKiBub2RlTWFwID0gY291bnRlck1h
cHMoKS5nZXQoJnJlbmRlcmVyKSkgewotICAgICAgICAgICAgaWYgKENvdW50ZXJOb2RlKiBub2Rl
ID0gbm9kZU1hcC0+Z2V0KGlkZW50aWZpZXIpKQotICAgICAgICAgICAgICAgIHJldHVybiBub2Rl
OwotICAgICAgICB9CisgICAgICAgIEFTU0VSVChjb3VudGVyTWFwcygpLmNvbnRhaW5zKCZyZW5k
ZXJlcikpOworICAgICAgICBpZiAoYXV0byogbm9kZSA9IGNvdW50ZXJNYXBzKCkuZmluZCgmcmVu
ZGVyZXIpLT52YWx1ZS5nZXQoaWRlbnRpZmllcikpCisgICAgICAgICAgICByZXR1cm4gbm9kZTsK
ICAgICB9CiAKLSAgICBib29sIGlzUmVzZXQgPSBmYWxzZTsKLSAgICBpbnQgdmFsdWUgPSAwOwot
ICAgIGlmICghcGxhbkNvdW50ZXIocmVuZGVyZXIsIGlkZW50aWZpZXIsIGlzUmVzZXQsIHZhbHVl
KSAmJiAhYWx3YXlzQ3JlYXRlQ291bnRlcikKKyAgICBhdXRvIHBsYW4gPSBwbGFuQ291bnRlcihy
ZW5kZXJlciwgaWRlbnRpZmllcik7CisgICAgaWYgKCFwbGFuICYmICFhbHdheXNDcmVhdGVDb3Vu
dGVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxDb3VudGVyTm9kZT4g
bmV3UGFyZW50OwotICAgIFJlZlB0cjxDb3VudGVyTm9kZT4gbmV3UHJldmlvdXNTaWJsaW5nOwot
ICAgIFJlZlB0cjxDb3VudGVyTm9kZT4gbmV3Tm9kZSA9IENvdW50ZXJOb2RlOjpjcmVhdGUocmVu
ZGVyZXIsIGlzUmVzZXQsIHZhbHVlKTsKLSAgICBpZiAoZmluZFBsYWNlRm9yQ291bnRlcihyZW5k
ZXJlciwgaWRlbnRpZmllciwgaXNSZXNldCwgbmV3UGFyZW50LCBuZXdQcmV2aW91c1NpYmxpbmcp
KQotICAgICAgICBuZXdQYXJlbnQtPmluc2VydEFmdGVyKCpuZXdOb2RlLCBuZXdQcmV2aW91c1Np
YmxpbmcuZ2V0KCksIGlkZW50aWZpZXIpOwotICAgIENvdW50ZXJNYXAqIG5vZGVNYXA7Ci0gICAg
aWYgKHJlbmRlcmVyLmhhc0NvdW50ZXJOb2RlTWFwKCkpCi0gICAgICAgIG5vZGVNYXAgPSBjb3Vu
dGVyTWFwcygpLmdldCgmcmVuZGVyZXIpOwotICAgIGVsc2UgewotICAgICAgICBub2RlTWFwID0g
bmV3IENvdW50ZXJNYXA7Ci0gICAgICAgIGNvdW50ZXJNYXBzKCkuc2V0KCZyZW5kZXJlciwgc3Rk
Ojp1bmlxdWVfcHRyPENvdW50ZXJNYXA+KG5vZGVNYXApKTsKLSAgICAgICAgcmVuZGVyZXIuc2V0
SGFzQ291bnRlck5vZGVNYXAodHJ1ZSk7Ci0gICAgfQotICAgIG5vZGVNYXAtPnNldChpZGVudGlm
aWVyLCBuZXdOb2RlKTsKKyAgICBhdXRvJiBtYXBzID0gY291bnRlck1hcHMoKTsKKworICAgIGF1
dG8gbmV3Tm9kZSA9IENvdW50ZXJOb2RlOjpjcmVhdGUocmVuZGVyZXIsIHBsYW4gJiYgcGxhbi0+
aXNSZXNldCwgcGxhbiA/IHBsYW4tPnZhbHVlIDogMCk7CisKKyAgICBhdXRvIHBsYWNlID0gZmlu
ZFBsYWNlRm9yQ291bnRlcihyZW5kZXJlciwgaWRlbnRpZmllciwgcGxhbiAmJiBwbGFuLT5pc1Jl
c2V0KTsKKyAgICBpZiAocGxhY2UucGFyZW50KQorICAgICAgICBwbGFjZS5wYXJlbnQtPmluc2Vy
dEFmdGVyKG5ld05vZGUsIHBsYWNlLnByZXZpb3VzU2libGluZy5nZXQoKSwgaWRlbnRpZmllcik7
CisKKyAgICBtYXBzLmFkZCgmcmVuZGVyZXIsIENvdW50ZXJNYXAgeyB9KS5pdGVyYXRvci0+dmFs
dWUuYWRkKGlkZW50aWZpZXIsIG5ld05vZGUuY29weVJlZigpKTsKKyAgICByZW5kZXJlci5zZXRI
YXNDb3VudGVyTm9kZU1hcCh0cnVlKTsKKwogICAgIGlmIChuZXdOb2RlLT5wYXJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuIG5ld05vZGUuZ2V0KCk7Ci0gICAgLy8gQ2hlY2tpbmcgaWYgc29tZSBub2Rl
cyB0aGF0IHdlcmUgcHJldmlvdXNseSBjb3VudGVyIHRyZWUgcm9vdCBub2RlcwotICAgIC8vIHNo
b3VsZCBiZWNvbWUgY2hpbGRyZW4gb2YgdGhpcyBub2RlIG5vdy4KLSAgICBDb3VudGVyTWFwcyYg
bWFwcyA9IGNvdW50ZXJNYXBzKCk7Ci0gICAgRWxlbWVudCogc3RheVdpdGhpbiA9IHBhcmVudE9y
UHNldWRvSG9zdEVsZW1lbnQocmVuZGVyZXIpOwotICAgIGJvb2wgc2tpcERlc2NlbmRhbnRzOwot
ICAgIGZvciAoUmVuZGVyRWxlbWVudCogY3VycmVudFJlbmRlcmVyID0gbmV4dEluUHJlT3JkZXIo
cmVuZGVyZXIsIHN0YXlXaXRoaW4pOyBjdXJyZW50UmVuZGVyZXI7IGN1cnJlbnRSZW5kZXJlciA9
IG5leHRJblByZU9yZGVyKCpjdXJyZW50UmVuZGVyZXIsIHN0YXlXaXRoaW4sIHNraXBEZXNjZW5k
YW50cykpIHsKKyAgICAgICAgcmV0dXJuIG5ld05vZGUucHRyKCk7CisKKyAgICAvLyBDaGVjayBp
ZiBzb21lIG5vZGVzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHJvb3Qgbm9kZXMgc2hvdWxkIGJlY29t
ZSBjaGlsZHJlbiBvZiB0aGlzIG5vZGUgbm93LgorICAgIGF1dG8qIGN1cnJlbnRSZW5kZXJlciA9
ICZyZW5kZXJlcjsKKyAgICBhdXRvKiBzdGF5V2l0aGluID0gcGFyZW50T3JQc2V1ZG9Ib3N0RWxl
bWVudChyZW5kZXJlcik7CisgICAgYm9vbCBza2lwRGVzY2VuZGFudHMgPSBmYWxzZTsKKyAgICB3
aGlsZSAoKGN1cnJlbnRSZW5kZXJlciA9IG5leHRJblByZU9yZGVyKCpjdXJyZW50UmVuZGVyZXIs
IHN0YXlXaXRoaW4sIHNraXBEZXNjZW5kYW50cykpKSB7CiAgICAgICAgIHNraXBEZXNjZW5kYW50
cyA9IGZhbHNlOwogICAgICAgICBpZiAoIWN1cnJlbnRSZW5kZXJlci0+aGFzQ291bnRlck5vZGVN
YXAoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBDb3VudGVyTm9kZSogY3VycmVu
dENvdW50ZXIgPSBtYXBzLmdldChjdXJyZW50UmVuZGVyZXIpLT5nZXQoaWRlbnRpZmllcik7Cisg
ICAgICAgIGF1dG8qIGN1cnJlbnRDb3VudGVyID0gbWFwcy5maW5kKGN1cnJlbnRSZW5kZXJlcikt
PnZhbHVlLmdldChpZGVudGlmaWVyKTsKICAgICAgICAgaWYgKCFjdXJyZW50Q291bnRlcikKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBza2lwRGVzY2VuZGFudHMgPSB0cnVlOwpAQCAt
MzUwLDcgKzMzNiw4IEBAIHN0YXRpYyBDb3VudGVyTm9kZSogbWFrZUNvdW50ZXJOb2RlKFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBBdG9taWNTdHJpbmcmCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgbmV3Tm9kZS0+aW5zZXJ0QWZ0ZXIoKmN1cnJlbnRDb3VudGVyLCBuZXdOb2Rl
LT5sYXN0Q2hpbGQoKSwgaWRlbnRpZmllcik7CiAgICAgfQotICAgIHJldHVybiBuZXdOb2RlLmdl
dCgpOworCisgICAgcmV0dXJuIG5ld05vZGUucHRyKCk7CiB9CiAKIFJlbmRlckNvdW50ZXI6OlJl
bmRlckNvdW50ZXIoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBDb3VudGVyQ29udGVudCYgY291
bnRlcikKQEAgLTQ0Myw1NSArNDMwLDQzIEBAIHZvaWQgUmVuZGVyQ291bnRlcjo6Y29tcHV0ZVBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHMoZmxvYXQgbGVhZCkKICAgICBSZW5kZXJUZXh0Ojpjb21wdXRl
UHJlZmVycmVkTG9naWNhbFdpZHRocyhsZWFkKTsKIH0KIAotc3RhdGljIHZvaWQgZGVzdHJveUNv
dW50ZXJOb2RlV2l0aG91dE1hcFJlbW92YWwoY29uc3QgQXRvbWljU3RyaW5nJiBpZGVudGlmaWVy
LCBDb3VudGVyTm9kZSogbm9kZSkKK3N0YXRpYyB2b2lkIGRlc3Ryb3lDb3VudGVyTm9kZVdpdGhv
dXRNYXBSZW1vdmFsKGNvbnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmllciwgQ291bnRlck5vZGUm
IG5vZGUpCiB7Ci0gICAgQ291bnRlck5vZGUqIHByZXZpb3VzOwotICAgIGZvciAoUmVmUHRyPENv
dW50ZXJOb2RlPiBjaGlsZCA9IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7IGNoaWxkICYmIGNoaWxk
ICE9IG5vZGU7IGNoaWxkID0gcHJldmlvdXMpIHsKKyAgICBSZWZQdHI8Q291bnRlck5vZGU+IHBy
ZXZpb3VzOworICAgIGZvciAoUmVmUHRyPENvdW50ZXJOb2RlPiBjaGlsZCA9IG5vZGUubGFzdERl
c2NlbmRhbnQoKTsgY2hpbGQgJiYgY2hpbGQgIT0gJm5vZGU7IGNoaWxkID0gV1RGTW92ZShwcmV2
aW91cykpIHsKICAgICAgICAgcHJldmlvdXMgPSBjaGlsZC0+cHJldmlvdXNJblByZU9yZGVyKCk7
CiAgICAgICAgIGNoaWxkLT5wYXJlbnQoKS0+cmVtb3ZlQ2hpbGQoKmNoaWxkKTsKLSAgICAgICAg
QVNTRVJUKGNvdW50ZXJNYXBzKCkuZ2V0KCZjaGlsZC0+b3duZXIoKSktPmdldChpZGVudGlmaWVy
KSA9PSBjaGlsZCk7Ci0gICAgICAgIGNvdW50ZXJNYXBzKCkuZ2V0KCZjaGlsZC0+b3duZXIoKSkt
PnJlbW92ZShpZGVudGlmaWVyKTsKKyAgICAgICAgQVNTRVJUKGNvdW50ZXJNYXBzKCkuZmluZCgm
Y2hpbGQtPm93bmVyKCkpLT52YWx1ZS5nZXQoaWRlbnRpZmllcikgPT0gY2hpbGQpOworICAgICAg
ICBjb3VudGVyTWFwcygpLmZpbmQoJmNoaWxkLT5vd25lcigpKS0+dmFsdWUucmVtb3ZlKGlkZW50
aWZpZXIpOwogICAgIH0KLSAgICBpZiAoQ291bnRlck5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVu
dCgpKQotICAgICAgICBwYXJlbnQtPnJlbW92ZUNoaWxkKCpub2RlKTsKKyAgICBpZiAoYXV0byog
cGFyZW50ID0gbm9kZS5wYXJlbnQoKSkKKyAgICAgICAgcGFyZW50LT5yZW1vdmVDaGlsZChub2Rl
KTsKIH0KIAogdm9pZCBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGVzKFJlbmRlckVs
ZW1lbnQmIG93bmVyKQogewotICAgIENvdW50ZXJNYXBzJiBtYXBzID0gY291bnRlck1hcHMoKTsK
LSAgICBDb3VudGVyTWFwczo6aXRlcmF0b3IgbWFwc0l0ZXJhdG9yID0gbWFwcy5maW5kKCZvd25l
cik7Ci0gICAgaWYgKG1hcHNJdGVyYXRvciA9PSBtYXBzLmVuZCgpKQotICAgICAgICByZXR1cm47
Ci0gICAgQ291bnRlck1hcCogbWFwID0gbWFwc0l0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLSAgICBD
b3VudGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgIGZvciAoQ291
bnRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBkZXN0cm95Q291bnRlck5vZGVXaXRob3V0TWFwUmVtb3ZhbChpdC0+a2V5
LCBpdC0+dmFsdWUuZ2V0KCkpOwotICAgIH0KLSAgICBtYXBzLnJlbW92ZShtYXBzSXRlcmF0b3Ip
OworICAgIEFTU0VSVChvd25lci5oYXNDb3VudGVyTm9kZU1hcCgpKTsKKyAgICBhdXRvJiBtYXBz
ID0gY291bnRlck1hcHMoKTsKKyAgICBBU1NFUlQobWFwcy5jb250YWlucygmb3duZXIpKTsKKyAg
ICBmb3IgKGF1dG8mIGtleVZhbHVlIDogbWFwcy50YWtlKCZvd25lcikpCisgICAgICAgIGRlc3Ry
b3lDb3VudGVyTm9kZVdpdGhvdXRNYXBSZW1vdmFsKGtleVZhbHVlLmtleSwga2V5VmFsdWUudmFs
dWUpOwogICAgIG93bmVyLnNldEhhc0NvdW50ZXJOb2RlTWFwKGZhbHNlKTsKIH0KIAogdm9pZCBS
ZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGUoUmVuZGVyRWxlbWVudCYgb3duZXIsIGNv
bnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmllcikKIHsKLSAgICBDb3VudGVyTWFwKiBtYXAgPSBj
b3VudGVyTWFwcygpLmdldCgmb3duZXIpOwotICAgIGlmICghbWFwKQorICAgIGF1dG8gbWFwID0g
Y291bnRlck1hcHMoKS5maW5kKCZvd25lcik7CisgICAgaWYgKG1hcCA9PSBjb3VudGVyTWFwcygp
LmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgQ291bnRlck1hcDo6aXRlcmF0b3IgbWFwSXRl
cmF0b3IgPSBtYXAtPmZpbmQoaWRlbnRpZmllcik7Ci0gICAgaWYgKG1hcEl0ZXJhdG9yID09IG1h
cC0+ZW5kKCkpCisgICAgYXV0byBub2RlID0gbWFwLT52YWx1ZS50YWtlKGlkZW50aWZpZXIpOwor
ICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwotICAgIGRlc3Ryb3lDb3VudGVyTm9kZVdp
dGhvdXRNYXBSZW1vdmFsKGlkZW50aWZpZXIsIG1hcEl0ZXJhdG9yLT52YWx1ZS5nZXQoKSk7Ci0g
ICAgbWFwLT5yZW1vdmUobWFwSXRlcmF0b3IpOwotICAgIC8vIFdlIGRvIG5vdCBkZWxldGUgIm1h
cCIgaGVyZSBldmVuIGlmIGVtcHR5IGJlY2F1c2Ugd2UgZXhwZWN0IHRvIHJldXNlCi0gICAgLy8g
aXQgc29vbi4gSW4gb3JkZXIgZm9yIGEgcmVuZGVyZXIgdG8gbG9zZSBhbGwgaXRzIGNvdW50ZXJz
IHBlcm1hbmVudGx5LAorICAgIGRlc3Ryb3lDb3VudGVyTm9kZVdpdGhvdXRNYXBSZW1vdmFsKGlk
ZW50aWZpZXIsICpub2RlKTsKKyAgICAvLyBXZSBkbyBub3QgZGVsZXRlIHRoZSBtYXAgaGVyZSBl
dmVuIGlmIGl0IGlzIG5vdyBlbXB0eSBiZWNhdXNlIHdlIGV4cGVjdCB0bworICAgIC8vIHJldXNl
IGl0LiBJbiBvcmRlciBmb3IgYSByZW5kZXJlciB0byBsb3NlIGFsbCBpdHMgY291bnRlcnMgcGVy
bWFuZW50bHksCiAgICAgLy8gYSBzdHlsZSBjaGFuZ2UgZm9yIHRoZSByZW5kZXJlciBpbnZvbHZp
bmcgcmVtb3ZhbCBvZiBhbGwgY291bnRlcgogICAgIC8vIGRpcmVjdGl2ZXMgbXVzdCBvY2N1ciwg
aW4gd2hpY2ggY2FzZSwgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlcygpCi0gICAg
Ly8gbXVzdCBiZSBjYWxsZWQuCi0gICAgLy8gVGhlIGRlc3RydWN0aW9uIG9mIHRoZSBSZW5kZXJl
ciAocG9zc2libHkgY2F1c2VkIGJ5IHRoZSByZW1vdmFsIG9mIGl0cyAKLSAgICAvLyBhc3NvY2lh
dGVkIERPTSBub2RlKSBpcyB0aGUgb3RoZXIgY2FzZSB0aGF0IGxlYWRzIHRvIHRoZSBwZXJtYW5l
bnQKLSAgICAvLyBkZXN0cnVjdGlvbiBvZiBhbGwgY291bnRlcnMgYXR0YWNoZWQgdG8gYSBSZW5k
ZXJlci4gSW4gdGhpcyBjYXNlCi0gICAgLy8gUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJO
b2RlcygpIG11c3QgYmUgYW5kIGlzIG5vdyBjYWxsZWQsIHRvby4KLSAgICAvLyBSZW5kZXJDb3Vu
dGVyOjpkZXN0cm95Q291bnRlck5vZGVzKCkgaGFuZGxlcyBkZXN0cnVjdGlvbiBvZiB0aGUgY291
bnRlcgotICAgIC8vIG1hcCBhc3NvY2lhdGVkIHdpdGggYSByZW5kZXJlciwgc28gdGhlcmUgaXMg
bm8gcmlzayBpbiBsZWFraW5nIHRoZSBtYXAuCisgICAgLy8gd2lsbCBiZSBjYWxsZWQuCiB9CiAK
IHZvaWQgUmVuZGVyQ291bnRlcjo6cmVuZGVyZXJSZW1vdmVkRnJvbVRyZWUoUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIpCkBAIC01MDIsOCArNDc3LDExIEBAIHZvaWQgUmVuZGVyQ291bnRlcjo6cmVu
ZGVyZXJSZW1vdmVkRnJvbVRyZWUoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCiAgICAgaWYgKCFj
dXJyZW50UmVuZGVyZXIpCiAgICAgICAgIGN1cnJlbnRSZW5kZXJlciA9ICZyZW5kZXJlcjsKICAg
ICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBpZiAoaXM8UmVuZGVyRWxlbWVudD4oKmN1cnJlbnRS
ZW5kZXJlcikpCi0gICAgICAgICAgICBkZXN0cm95Q291bnRlck5vZGVzKGRvd25jYXN0PFJlbmRl
ckVsZW1lbnQ+KCpjdXJyZW50UmVuZGVyZXIpKTsKKyAgICAgICAgaWYgKGlzPFJlbmRlckVsZW1l
bnQ+KCpjdXJyZW50UmVuZGVyZXIpKSB7CisgICAgICAgICAgICBhdXRvJiBjb3VudGVyTm9kZVJl
bmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oKmN1cnJlbnRSZW5kZXJlcik7CisgICAg
ICAgICAgICBpZiAoY291bnRlck5vZGVSZW5kZXJlci5oYXNDb3VudGVyTm9kZU1hcCgpKQorICAg
ICAgICAgICAgICAgIGRlc3Ryb3lDb3VudGVyTm9kZXMoY291bnRlck5vZGVSZW5kZXJlcik7Cisg
ICAgICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnRSZW5kZXJlciA9PSAmcmVuZGVyZXIpCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY3VycmVudFJlbmRlcmVyID0gY3VycmVudFJlbmRlcmVy
LT5wcmV2aW91c0luUHJlT3JkZXIoKTsKQEAgLTUxMiwzNiArNDkwLDMyIEBAIHZvaWQgUmVuZGVy
Q291bnRlcjo6cmVuZGVyZXJSZW1vdmVkRnJvbVRyZWUoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIp
CiAKIHN0YXRpYyB2b2lkIHVwZGF0ZUNvdW50ZXJzKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQog
ewotICAgIGNvbnN0IENvdW50ZXJEaXJlY3RpdmVNYXAqIGRpcmVjdGl2ZU1hcCA9IHJlbmRlcmVy
LnN0eWxlKCkuY291bnRlckRpcmVjdGl2ZXMoKTsKKyAgICBhdXRvKiBkaXJlY3RpdmVNYXAgPSBy
ZW5kZXJlci5zdHlsZSgpLmNvdW50ZXJEaXJlY3RpdmVzKCk7CiAgICAgaWYgKCFkaXJlY3RpdmVN
YXApCiAgICAgICAgIHJldHVybjsKLSAgICBDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBkaXJlY3RpdmVNYXAtPmVuZCgpOwogICAgIGlmICghcmVuZGVyZXIuaGFzQ291
bnRlck5vZGVNYXAoKSkgewotICAgICAgICBmb3IgKENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gZGlyZWN0aXZlTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGl0LT5rZXksIGZhbHNlKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBrZXkgOiBkaXJlY3RpdmVNYXAtPmtleXMoKSkKKyAgICAgICAgICAg
IG1ha2VDb3VudGVyTm9kZShyZW5kZXJlciwga2V5LCBmYWxzZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgQ291bnRlck1hcCogY291bnRlck1hcCA9IGNvdW50ZXJNYXBzKCkuZ2V0KCZy
ZW5kZXJlcik7Ci0gICAgQVNTRVJUKGNvdW50ZXJNYXApOwotICAgIGZvciAoQ291bnRlckRpcmVj
dGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkaXJlY3RpdmVNYXAtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8Q291bnRlck5vZGU+IG5vZGUgPSBjb3VudGVy
TWFwLT5nZXQoaXQtPmtleSk7CisgICAgQVNTRVJUKGNvdW50ZXJNYXBzKCkuY29udGFpbnMoJnJl
bmRlcmVyKSk7CisgICAgYXV0byYgY291bnRlck1hcCA9IGNvdW50ZXJNYXBzKCkuZmluZCgmcmVu
ZGVyZXIpLT52YWx1ZTsKKyAgICBmb3IgKGF1dG8mIGtleSA6IGRpcmVjdGl2ZU1hcC0+a2V5cygp
KSB7CisgICAgICAgIFJlZlB0cjxDb3VudGVyTm9kZT4gbm9kZSA9IGNvdW50ZXJNYXAuZ2V0KGtl
eSk7CiAgICAgICAgIGlmICghbm9kZSkgewotICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJl
bmRlcmVyLCBpdC0+a2V5LCBmYWxzZSk7CisgICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVu
ZGVyZXIsIGtleSwgZmFsc2UpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAg
ICAgICAgUmVmUHRyPENvdW50ZXJOb2RlPiBuZXdQYXJlbnQ7Ci0gICAgICAgIFJlZlB0cjxDb3Vu
dGVyTm9kZT4gbmV3UHJldmlvdXNTaWJsaW5nOwotICAgICAgICAKLSAgICAgICAgZmluZFBsYWNl
Rm9yQ291bnRlcihyZW5kZXJlciwgaXQtPmtleSwgbm9kZS0+aGFzUmVzZXRUeXBlKCksIG5ld1Bh
cmVudCwgbmV3UHJldmlvdXNTaWJsaW5nKTsKLSAgICAgICAgaWYgKG5vZGUgIT0gY291bnRlck1h
cC0+Z2V0KGl0LT5rZXkpKQorICAgICAgICBhdXRvIHBsYWNlID0gZmluZFBsYWNlRm9yQ291bnRl
cihyZW5kZXJlciwga2V5LCBub2RlLT5oYXNSZXNldFR5cGUoKSk7CisgICAgICAgIGlmIChub2Rl
ICE9IGNvdW50ZXJNYXAuZ2V0KGtleSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
Q291bnRlck5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudCgpOwotICAgICAgICBpZiAobmV3UGFy
ZW50ID09IHBhcmVudCAmJiBuZXdQcmV2aW91c1NpYmxpbmcgPT0gbm9kZS0+cHJldmlvdXNTaWJs
aW5nKCkpCisgICAgICAgIGlmIChwbGFjZS5wYXJlbnQgPT0gcGFyZW50ICYmIHBsYWNlLnByZXZp
b3VzU2libGluZyA9PSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBpZiAocGFyZW50KQogICAgICAgICAgICAgcGFyZW50LT5yZW1vdmVDaGls
ZCgqbm9kZSk7Ci0gICAgICAgIGlmIChuZXdQYXJlbnQpCi0gICAgICAgICAgICBuZXdQYXJlbnQt
Pmluc2VydEFmdGVyKCpub2RlLCBuZXdQcmV2aW91c1NpYmxpbmcuZ2V0KCksIGl0LT5rZXkpOwor
ICAgICAgICBpZiAocGxhY2UucGFyZW50KQorICAgICAgICAgICAgcGxhY2UucGFyZW50LT5pbnNl
cnRBZnRlcigqbm9kZSwgcGxhY2UucHJldmlvdXNTaWJsaW5nLmdldCgpLCBrZXkpOwogICAgIH0K
IH0KIApAQCAtNTY3LDQwICs1NDEsNDAgQEAgdm9pZCBSZW5kZXJDb3VudGVyOjpyZW5kZXJlclN0
eWxlQ2hhbmdlZChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3QKICAgICBF
bGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZ2VuZXJhdGluZ0VsZW1lbnQoKTsKICAgICBpZiAo
IWVsZW1lbnQgfHwgIWVsZW1lbnQtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsgLy8gY2Fu
bm90IGhhdmUgZ2VuZXJhdGVkIGNvbnRlbnQgb3IgaWYgaXQgY2FuIGhhdmUsIGl0IHdpbGwgYmUg
aGFuZGxlZCBkdXJpbmcgYXR0YWNoaW5nCisKICAgICBjb25zdCBDb3VudGVyRGlyZWN0aXZlTWFw
KiBuZXdDb3VudGVyRGlyZWN0aXZlczsKICAgICBjb25zdCBDb3VudGVyRGlyZWN0aXZlTWFwKiBv
bGRDb3VudGVyRGlyZWN0aXZlczsKICAgICBpZiAob2xkU3R5bGUgJiYgKG9sZENvdW50ZXJEaXJl
Y3RpdmVzID0gb2xkU3R5bGUtPmNvdW50ZXJEaXJlY3RpdmVzKCkpKSB7CiAgICAgICAgIGlmIChu
ZXdTdHlsZSAmJiAobmV3Q291bnRlckRpcmVjdGl2ZXMgPSBuZXdTdHlsZS0+Y291bnRlckRpcmVj
dGl2ZXMoKSkpIHsKLSAgICAgICAgICAgIENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJh
dG9yIG5ld01hcEVuZCA9IG5ld0NvdW50ZXJEaXJlY3RpdmVzLT5lbmQoKTsKLSAgICAgICAgICAg
IENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIG9sZE1hcEVuZCA9IG9sZENvdW50
ZXJEaXJlY3RpdmVzLT5lbmQoKTsKLSAgICAgICAgICAgIGZvciAoQ291bnRlckRpcmVjdGl2ZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdDb3VudGVyRGlyZWN0aXZlcy0+YmVnaW4oKTsgaXQg
IT0gbmV3TWFwRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1h
cDo6Y29uc3RfaXRlcmF0b3Igb2xkTWFwSXQgPSBvbGRDb3VudGVyRGlyZWN0aXZlcy0+ZmluZChp
dC0+a2V5KTsKLSAgICAgICAgICAgICAgICBpZiAob2xkTWFwSXQgIT0gb2xkTWFwRW5kKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChvbGRNYXBJdC0+dmFsdWUgPT0gaXQtPnZhbHVlKQorICAg
ICAgICAgICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6ICpuZXdDb3VudGVyRGlyZWN0aXZlcykgewor
ICAgICAgICAgICAgICAgIGF1dG8gZXhpc3RpbmdFbnRyeSA9IG9sZENvdW50ZXJEaXJlY3RpdmVz
LT5maW5kKGtleVZhbHVlLmtleSk7CisgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nRW50cnkg
IT0gb2xkQ291bnRlckRpcmVjdGl2ZXMtPmVuZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChleGlzdGluZ0VudHJ5LT52YWx1ZSA9PSBrZXlWYWx1ZS52YWx1ZSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBSZW5kZXJDb3VudGVyOjpk
ZXN0cm95Q291bnRlck5vZGUocmVuZGVyZXIsIGl0LT5rZXkpOworICAgICAgICAgICAgICAgICAg
ICBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGUocmVuZGVyZXIsIGtleVZhbHVlLmtl
eSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8vIFdlIG11c3QgY3JlYXRl
IHRoaXMgbm9kZSBoZXJlLCBiZWNhdXNlIHRoZSBjaGFuZ2VkIG5vZGUgbWF5IGJlIGEgbm9kZSB3
aXRoIG5vIGRpc3BsYXkgc3VjaCBhcwogICAgICAgICAgICAgICAgIC8vIGFzIHRob3NlIGNyZWF0
ZWQgYnkgdGhlIGluY3JlbWVudCBvciByZXNldCBkaXJlY3RpdmVzIGFuZCB0aGUgcmUtbGF5b3V0
IHRoYXQgd2lsbCBoYXBwZW4gd2lsbAogICAgICAgICAgICAgICAgIC8vIG5vdCBjYXRjaCB0aGUg
Y2hhbmdlIGlmIHRoZSBub2RlIGhhZCBubyBjaGlsZHJlbi4KLSAgICAgICAgICAgICAgICBtYWtl
Q291bnRlck5vZGUocmVuZGVyZXIsIGl0LT5rZXksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBt
YWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGtleVZhbHVlLmtleSwgZmFsc2UpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgLy8gRGVzdHJveWluZyBvbGQgY291bnRlcnMgdGhhdCBkbyBub3Qg
ZXhpc3QgaW4gdGhlIG5ldyBjb3VudGVyRGlyZWN0aXZlIG1hcC4KLSAgICAgICAgICAgIGZvciAo
Q291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBvbGRDb3VudGVyRGlyZWN0
aXZlcy0+YmVnaW4oKTsgaXQgIT1vbGRNYXBFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoIW5ld0NvdW50ZXJEaXJlY3RpdmVzLT5jb250YWlucyhpdC0+a2V5KSkKLSAgICAgICAgICAg
ICAgICAgICAgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+
a2V5KTsKKyAgICAgICAgICAgIGZvciAoYXV0byYga2V5IDogb2xkQ291bnRlckRpcmVjdGl2ZXMt
PmtleXMoKSkgeworICAgICAgICAgICAgICAgIGlmICghbmV3Q291bnRlckRpcmVjdGl2ZXMtPmNv
bnRhaW5zKGtleSkpCisgICAgICAgICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lD
b3VudGVyTm9kZShyZW5kZXJlciwga2V5KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIGlmIChyZW5kZXJlci5oYXNDb3VudGVyTm9kZU1hcCgpKQogICAgICAg
ICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZXMocmVuZGVyZXIpOwog
ICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChuZXdTdHlsZSAmJiAobmV3Q291bnRlckRpcmVjdGl2
ZXMgPSBuZXdTdHlsZS0+Y291bnRlckRpcmVjdGl2ZXMoKSkpIHsKLSAgICAgICAgQ291bnRlckRp
cmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3IgbmV3TWFwRW5kID0gbmV3Q291bnRlckRpcmVjdGl2
ZXMtPmVuZCgpOwotICAgICAgICBmb3IgKENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbmV3Q291bnRlckRpcmVjdGl2ZXMtPmJlZ2luKCk7IGl0ICE9IG5ld01hcEVuZDsg
KytpdCkgewotICAgICAgICAgICAgLy8gV2UgbXVzdCBjcmVhdGUgdGhpcyBub2RlIGhlcmUsIGJl
Y2F1c2UgdGhlIGFkZGVkIG5vZGUgbWF5IGJlIGEgbm9kZSB3aXRoIG5vIGRpc3BsYXkgc3VjaCBh
cwotICAgICAgICAgICAgLy8gYXMgdGhvc2UgY3JlYXRlZCBieSB0aGUgaW5jcmVtZW50IG9yIHJl
c2V0IGRpcmVjdGl2ZXMgYW5kIHRoZSByZS1sYXlvdXQgdGhhdCB3aWxsIGhhcHBlbiB3aWxsCi0g
ICAgICAgICAgICAvLyBub3QgY2F0Y2ggdGhlIGNoYW5nZSBpZiB0aGUgbm9kZSBoYWQgbm8gY2hp
bGRyZW4uCi0gICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGl0LT5rZXksIGZh
bHNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobmV3U3R5bGUgJiYgKG5ld0NvdW50ZXJE
aXJlY3RpdmVzID0gbmV3U3R5bGUtPmNvdW50ZXJEaXJlY3RpdmVzKCkpKSB7CisgICAgICAgICAg
ICBmb3IgKGF1dG8mIGtleSA6IG5ld0NvdW50ZXJEaXJlY3RpdmVzLT5rZXlzKCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBXZSBtdXN0IGNyZWF0ZSB0aGlzIG5vZGUgaGVyZSwgYmVjYXVzZSB0aGUg
YWRkZWQgbm9kZSBtYXkgYmUgYSBub2RlIHdpdGggbm8gZGlzcGxheSBzdWNoIGFzCisgICAgICAg
ICAgICAgICAgLy8gYXMgdGhvc2UgY3JlYXRlZCBieSB0aGUgaW5jcmVtZW50IG9yIHJlc2V0IGRp
cmVjdGl2ZXMgYW5kIHRoZSByZS1sYXlvdXQgdGhhdCB3aWxsIGhhcHBlbiB3aWxsCisgICAgICAg
ICAgICAgICAgLy8gbm90IGNhdGNoIHRoZSBjaGFuZ2UgaWYgdGhlIG5vZGUgaGFkIG5vIGNoaWxk
cmVuLgorICAgICAgICAgICAgICAgIG1ha2VDb3VudGVyTm9kZShyZW5kZXJlciwga2V5LCBmYWxz
ZSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC02MTMsMjEgKzU4Nywy
MSBAQCB2b2lkIHNob3dDb3VudGVyUmVuZGVyZXJUcmVlKGNvbnN0IFdlYkNvcmU6OlJlbmRlck9i
amVjdCogcmVuZGVyZXIsIGNvbnN0IGNoYXIqCiB7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAg
ICAgcmV0dXJuOwotICAgIGNvbnN0IFdlYkNvcmU6OlJlbmRlck9iamVjdCogcm9vdCA9IHJlbmRl
cmVyOworICAgIGF1dG8qIHJvb3QgPSByZW5kZXJlcjsKICAgICB3aGlsZSAocm9vdC0+cGFyZW50
KCkpCiAgICAgICAgIHJvb3QgPSByb290LT5wYXJlbnQoKTsKIAogICAgIEF0b21pY1N0cmluZyBp
ZGVudGlmaWVyKGNvdW50ZXJOYW1lKTsKLSAgICBmb3IgKGNvbnN0IFdlYkNvcmU6OlJlbmRlck9i
amVjdCogY3VycmVudCA9IHJvb3Q7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0SW5Q
cmVPcmRlcigpKSB7CisgICAgZm9yIChhdXRvKiBjdXJyZW50ID0gcm9vdDsgY3VycmVudDsgY3Vy
cmVudCA9IGN1cnJlbnQtPm5leHRJblByZU9yZGVyKCkpIHsKICAgICAgICAgaWYgKCFpczxXZWJD
b3JlOjpSZW5kZXJFbGVtZW50PigqY3VycmVudCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgZnByaW50ZihzdGRlcnIsICIlYyIsIChjdXJyZW50ID09IHJlbmRlcmVyKSA/ICcqJyA6
ICcgJyk7Ci0gICAgICAgIGZvciAoY29uc3QgV2ViQ29yZTo6UmVuZGVyT2JqZWN0KiBwYXJlbnQg
PSBjdXJyZW50OyBwYXJlbnQgJiYgcGFyZW50ICE9IHJvb3Q7IHBhcmVudCA9IHBhcmVudC0+cGFy
ZW50KCkpCisgICAgICAgIGZvciAoYXV0byogYW5jZXN0b3IgPSBjdXJyZW50OyBhbmNlc3RvciAm
JiBhbmNlc3RvciAhPSByb290OyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnQoKSkKICAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICIpOwogICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IiVwIE46JXAgUDolcCBQUzolcCBOUzolcCBDOiVwXG4iLAogICAgICAgICAgICAgY3VycmVudCwg
Y3VycmVudC0+bm9kZSgpLCBjdXJyZW50LT5wYXJlbnQoKSwgY3VycmVudC0+cHJldmlvdXNTaWJs
aW5nKCksCiAgICAgICAgICAgICBjdXJyZW50LT5uZXh0U2libGluZygpLCBkb3duY2FzdDxXZWJD
b3JlOjpSZW5kZXJFbGVtZW50PigqY3VycmVudCkuaGFzQ291bnRlck5vZGVNYXAoKSA/Ci0gICAg
ICAgICAgICBjb3VudGVyTmFtZSA/IFdlYkNvcmU6OmNvdW50ZXJNYXBzKCkuZ2V0KGRvd25jYXN0
PFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ+KGN1cnJlbnQpKS0+Z2V0KGlkZW50aWZpZXIpIDogKFdl
YkNvcmU6OkNvdW50ZXJOb2RlKikxIDogKFdlYkNvcmU6OkNvdW50ZXJOb2RlKikwKTsKKyAgICAg
ICAgICAgIGNvdW50ZXJOYW1lID8gV2ViQ29yZTo6Y291bnRlck1hcHMoKS5maW5kKGRvd25jYXN0
PFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ+KGN1cnJlbnQpKS0+dmFsdWUuZ2V0KGlkZW50aWZpZXIp
IDogKFdlYkNvcmU6OkNvdW50ZXJOb2RlKikxIDogKFdlYkNvcmU6OkNvdW50ZXJOb2RlKikwKTsK
ICAgICB9CiAgICAgZmZsdXNoKHN0ZGVycik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RJdGVtLmNwcAppbmRleCAwNWE4NDE3MjJmYzU2MTgxYjQyMjkzODllZjM5ZDI0
ZThjNGY3YTZkLi5iMzU0ZGRkNWQ1ZDhhMjRkZDI0M2RmMDg1YWJlOTkyMjEyNGQ5ZTNlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKQEAgLTMxLDE1ICsz
MSw5IEBACiAjaW5jbHVkZSAiSFRNTFVMaXN0RWxlbWVudC5oIgogI2luY2x1ZGUgIklubGluZUVs
ZW1lbnRCb3guaCIKICNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVy
Q2hpbGRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgotI2luY2x1ZGUgIlJl
bmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU3R5
bGVJbmhlcml0ZWREYXRhLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLSNp
ZiAhQVNTRVJUX0RJU0FCTEVECi0jaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+Ci0jZW5kaWYK
ICNpbmNsdWRlIDx3dGYvU3RhY2tTdGF0cy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KIApAQCAtODIsNyArNzYsNiBAQCBSZW5kZXJTdHlsZSBSZW5kZXJMaXN0SXRlbTo6Y29tcHV0
ZU1hcmtlclN0eWxlKCkgY29uc3QKICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudE51bWVy
aWNTcGFjaW5nKEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6OlRhYnVsYXJOdW1iZXJzKTsKICAg
ICBwYXJlbnRTdHlsZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICBw
YXJlbnRTdHlsZS5mb250Q2FzY2FkZSgpLnVwZGF0ZSgmZG9jdW1lbnQoKS5mb250U2VsZWN0b3Io
KSk7Ci0KICAgICBpZiAoYXV0byBtYXJrZXJTdHlsZSA9IGdldENhY2hlZFBzZXVkb1N0eWxlKE1B
UktFUiwgJnBhcmVudFN0eWxlKSkKICAgICAgICAgcmV0dXJuIFJlbmRlclN0eWxlOjpjbG9uZSgq
bWFya2VyU3R5bGUpOwogICAgIGF1dG8gbWFya2VyU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRl
KCk7CkBAIC0xMTIsODIgKzEwNSwxMDIgQEAgYm9vbCBpc0hUTUxMaXN0RWxlbWVudChjb25zdCBO
b2RlJiBub2RlKQogLy8gUmV0dXJucyB0aGUgZW5jbG9zaW5nIGxpc3Qgd2l0aCByZXNwZWN0IHRv
IHRoZSBET00gb3JkZXIuCiBzdGF0aWMgRWxlbWVudCogZW5jbG9zaW5nTGlzdChjb25zdCBSZW5k
ZXJMaXN0SXRlbSYgbGlzdEl0ZW0pCiB7Ci0gICAgRWxlbWVudCYgbGlzdEl0ZW1FbGVtZW50ID0g
bGlzdEl0ZW0uZWxlbWVudCgpOwotICAgIEVsZW1lbnQqIHBhcmVudCA9IGlzPFBzZXVkb0VsZW1l
bnQ+KGxpc3RJdGVtRWxlbWVudCkgPyBkb3duY2FzdDxQc2V1ZG9FbGVtZW50PihsaXN0SXRlbUVs
ZW1lbnQpLmhvc3RFbGVtZW50KCkgOiBsaXN0SXRlbUVsZW1lbnQucGFyZW50RWxlbWVudCgpOwot
ICAgIEVsZW1lbnQqIGZpcnN0Tm9kZSA9IHBhcmVudDsKLSAgICAvLyBXZSB1c2UgcGFyZW50Tm9k
ZSBiZWNhdXNlIHRoZSBlbmNsb3NpbmcgbGlzdCBjb3VsZCBiZSBhIFNoYWRvd1Jvb3QgdGhhdCdz
IG5vdCBFbGVtZW50LgotICAgIGZvciAoOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50
RWxlbWVudCgpKSB7Ci0gICAgICAgIGlmIChpc0hUTUxMaXN0RWxlbWVudCgqcGFyZW50KSkKLSAg
ICAgICAgICAgIHJldHVybiBwYXJlbnQ7CisgICAgYXV0byYgZWxlbWVudCA9IGxpc3RJdGVtLmVs
ZW1lbnQoKTsKKyAgICBhdXRvKiBwYXJlbnQgPSBpczxQc2V1ZG9FbGVtZW50PihlbGVtZW50KSA/
IGRvd25jYXN0PFBzZXVkb0VsZW1lbnQ+KGVsZW1lbnQpLmhvc3RFbGVtZW50KCkgOiBlbGVtZW50
LnBhcmVudEVsZW1lbnQoKTsKKyAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0gcGFyZW50OyBhbmNl
c3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgIGlm
IChpc0hUTUxMaXN0RWxlbWVudCgqYW5jZXN0b3IpKQorICAgICAgICAgICAgcmV0dXJuIGFuY2Vz
dG9yOwogICAgIH0KIAotICAgIC8vIElmIHRoZXJlJ3Mgbm8gYWN0dWFsIDx1bD4gb3IgPG9sPiBs
aXN0IGVsZW1lbnQsIHRoZW4gdGhlIGZpcnN0IGZvdW5kCi0gICAgLy8gbm9kZSBhY3RzIGFzIG91
ciBsaXN0IGZvciBwdXJwb3NlcyBvZiBkZXRlcm1pbmluZyB3aGF0IG90aGVyIGxpc3QgaXRlbXMK
LSAgICAvLyBzaG91bGQgYmUgbnVtYmVyZWQgYXMgcGFydCBvZiB0aGUgc2FtZSBsaXN0LgotICAg
IHJldHVybiBmaXJzdE5vZGU7CisgICAgLy8gSWYgdGhlcmUncyBubyBhY3R1YWwgbGlzdCBlbGVt
ZW50LCB0aGVuIHRoZSBwYXJlbnQgZWxlbWVudCBhY3RzIGFzIG91cgorICAgIC8vIGxpc3QgZm9y
IHB1cnBvc2VzIG9mIGRldGVybWluaW5nIHdoYXQgb3RoZXIgbGlzdCBpdGVtcyBzaG91bGQgYmUg
bnVtYmVyZWQgYXMKKyAgICAvLyBwYXJ0IG9mIHRoZSBzYW1lIGxpc3QuCisgICAgcmV0dXJuIHBh
cmVudDsKIH0KIAotLy8gUmV0dXJucyB0aGUgbmV4dCBsaXN0IGl0ZW0gd2l0aCByZXNwZWN0IHRv
IHRoZSBET00gb3JkZXIuCi1zdGF0aWMgUmVuZGVyTGlzdEl0ZW0qIG5leHRMaXN0SXRlbShjb25z
dCBFbGVtZW50JiBsaXN0Tm9kZSwgY29uc3QgRWxlbWVudCYgZWxlbWVudCkKK3N0YXRpYyBSZW5k
ZXJMaXN0SXRlbSogbmV4dExpc3RJdGVtSGVscGVyKGNvbnN0IEVsZW1lbnQmIGxpc3QsIGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgZm9yIChjb25zdCBFbGVtZW50KiBuZXh0ID0gRWxl
bWVudFRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkbyhlbGVtZW50LCAmbGlzdE5vZGUpOyBu
ZXh0OyApIHsKLSAgICAgICAgYXV0byogcmVuZGVyZXIgPSBuZXh0LT5yZW5kZXJlcigpOwotICAg
ICAgICBpZiAoIXJlbmRlcmVyIHx8IGlzSFRNTExpc3RFbGVtZW50KCpuZXh0KSkgewotICAgICAg
ICAgICAgLy8gV2UndmUgZm91bmQgYSBuZXN0ZWQsIGluZGVwZW5kZW50IGxpc3Qgb3IgYW4gdW5y
ZW5kZXJlZCBFbGVtZW50IDogbm90aGluZyB0byBkbyBoZXJlLgotICAgICAgICAgICAgbmV4dCA9
IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKCpu
ZXh0LCAmbGlzdE5vZGUpOworICAgIGF1dG8qIGN1cnJlbnQgPSAmZWxlbWVudDsKKyAgICBhdXRv
IGFkdmFuY2UgPSBbJl0geworICAgICAgICBjdXJyZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4
dEluY2x1ZGluZ1BzZXVkbygqY3VycmVudCwgJmxpc3QpOworICAgIH07CisgICAgYWR2YW5jZSgp
OworICAgIHdoaWxlIChjdXJyZW50KSB7CisgICAgICAgIGF1dG8qIHJlbmRlcmVyID0gY3VycmVu
dC0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKCFpczxSZW5kZXJMaXN0SXRlbT4ocmVuZGVyZXIp
KSB7CisgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorICAgICAgICBhdXRvJiBpdGVtID0gZG93bmNhc3Q8UmVuZGVyTGlzdEl0ZW0+KCpyZW5k
ZXJlcik7CisgICAgICAgIGF1dG8qIG90aGVyTGlzdCA9IGVuY2xvc2luZ0xpc3QoaXRlbSk7Cisg
ICAgICAgIGlmICghb3RoZXJMaXN0KSB7CisgICAgICAgICAgICBhZHZhbmNlKCk7CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChpczxSZW5kZXJMaXN0SXRl
bT4oKnJlbmRlcmVyKSkKLSAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJMaXN0SXRl
bT4ocmVuZGVyZXIpOworICAgICAgICAvLyBUaGlzIGl0ZW0gaXMgcGFydCBvZiBvdXIgY3VycmVu
dCBsaXN0LCBzbyBpdCdzIHdoYXQgd2UncmUgbG9va2luZyBmb3IuCisgICAgICAgIGlmICgmbGlz
dCA9PSBvdGhlckxpc3QpCisgICAgICAgICAgICByZXR1cm4gJml0ZW07CiAKLSAgICAgICAgbmV4
dCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8oKm5leHQsICZsaXN0Tm9k
ZSk7CisgICAgICAgIC8vIFdlIGZvdW5kIG91cnNlbGYgaW5zaWRlIGFub3RoZXIgbGlzdDsgc2tp
cCB0aGUgcmVzdCBvZiBpdHMgY29udGVudHMuCisgICAgICAgIGN1cnJlbnQgPSBFbGVtZW50VHJh
dmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGlsZHJlbigqY3VycmVudCwgJmxp
c3QpOwogICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgaW5saW5lIFJl
bmRlckxpc3RJdGVtKiBuZXh0TGlzdEl0ZW0oY29uc3QgRWxlbWVudCYgbGlzdE5vZGUsIGNvbnN0
IFJlbmRlckxpc3RJdGVtJiBpdGVtKQorc3RhdGljIGlubGluZSBSZW5kZXJMaXN0SXRlbSogbmV4
dExpc3RJdGVtKGNvbnN0IEVsZW1lbnQmIGxpc3QsIGNvbnN0IFJlbmRlckxpc3RJdGVtJiBpdGVt
KQogewotICAgIHJldHVybiBuZXh0TGlzdEl0ZW0obGlzdE5vZGUsIGl0ZW0uZWxlbWVudCgpKTsK
KyAgICByZXR1cm4gbmV4dExpc3RJdGVtSGVscGVyKGxpc3QsIGl0ZW0uZWxlbWVudCgpKTsKIH0K
IAotc3RhdGljIGlubGluZSBSZW5kZXJMaXN0SXRlbSogbmV4dExpc3RJdGVtKGNvbnN0IEVsZW1l
bnQmIGxpc3ROb2RlKQorc3RhdGljIGlubGluZSBSZW5kZXJMaXN0SXRlbSogZmlyc3RMaXN0SXRl
bShjb25zdCBFbGVtZW50JiBsaXN0KQogewotICAgIHJldHVybiBuZXh0TGlzdEl0ZW0obGlzdE5v
ZGUsIGxpc3ROb2RlKTsKKyAgICByZXR1cm4gbmV4dExpc3RJdGVtSGVscGVyKGxpc3QsIGxpc3Qp
OwogfQogCi0vLyBSZXR1cm5zIHRoZSBwcmV2aW91cyBsaXN0IGl0ZW0gd2l0aCByZXNwZWN0IHRv
IHRoZSBET00gb3JkZXIuCi1zdGF0aWMgUmVuZGVyTGlzdEl0ZW0qIHByZXZpb3VzTGlzdEl0ZW0o
Y29uc3QgRWxlbWVudCogbGlzdE5vZGUsIGNvbnN0IFJlbmRlckxpc3RJdGVtJiBpdGVtKQorc3Rh
dGljIFJlbmRlckxpc3RJdGVtKiBwcmV2aW91c0xpc3RJdGVtKGNvbnN0IEVsZW1lbnQmIGxpc3Qs
IGNvbnN0IFJlbmRlckxpc3RJdGVtJiBpdGVtKQogewotICAgIGZvciAoY29uc3QgRWxlbWVudCog
Y3VycmVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzSW5jbHVkaW5nUHNldWRvKGl0ZW0u
ZWxlbWVudCgpLCBsaXN0Tm9kZSk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBFbGVtZW50VHJhdmVyc2Fs
OjpwcmV2aW91c0luY2x1ZGluZ1BzZXVkbygqY3VycmVudCwgbGlzdE5vZGUpKSB7Ci0gICAgICAg
IFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0gY3VycmVudC0+cmVuZGVyZXIoKTsKLSAgICAgICAg
aWYgKCFpczxSZW5kZXJMaXN0SXRlbT4ocmVuZGVyZXIpKQorICAgIGF1dG8qIGN1cnJlbnQgPSAm
aXRlbS5lbGVtZW50KCk7CisgICAgYXV0byBhZHZhbmNlID0gWyZdIHsKKyAgICAgICAgY3VycmVu
dCA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzSW5jbHVkaW5nUHNldWRvKCpjdXJyZW50LCAm
bGlzdCk7CisgICAgfTsKKyAgICBhZHZhbmNlKCk7CisgICAgd2hpbGUgKGN1cnJlbnQpIHsKKyAg
ICAgICAgYXV0byogcmVuZGVyZXIgPSBjdXJyZW50LT5yZW5kZXJlcigpOworICAgICAgICBpZiAo
IWlzPFJlbmRlckxpc3RJdGVtPihyZW5kZXJlcikpIHsKKyAgICAgICAgICAgIGFkdmFuY2UoKTsK
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBFbGVtZW50KiBvdGhlckxpc3QgPSBlbmNs
b3NpbmdMaXN0KGRvd25jYXN0PFJlbmRlckxpc3RJdGVtPigqcmVuZGVyZXIpKTsKLSAgICAgICAg
Ly8gVGhpcyBpdGVtIGlzIHBhcnQgb2Ygb3VyIGN1cnJlbnQgbGlzdCwgc28gaXQncyB3aGF0IHdl
J3JlIGxvb2tpbmcgZm9yLgotICAgICAgICBpZiAobGlzdE5vZGUgPT0gb3RoZXJMaXN0KQotICAg
ICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxpc3RJdGVtPihyZW5kZXJlcik7Ci0gICAg
ICAgIC8vIFdlIGZvdW5kIG91cnNlbGYgaW5zaWRlIGFub3RoZXIgbGlzdDsgbGV0cyBza2lwIHRo
ZSByZXN0IG9mIGl0LgotICAgICAgICAvLyBVc2UgbmV4dEluY2x1ZGluZ1BzZXVkbygpIGhlcmUg
YmVjYXVzZSB0aGUgb3RoZXIgbGlzdCBpdHNlbGYgbWF5IGFjdHVhbGx5Ci0gICAgICAgIC8vIGJl
IGEgbGlzdCBpdGVtIGl0c2VsZi4gV2UgbmVlZCB0byBleGFtaW5lIGl0LCBzbyB3ZSBkbyB0aGlz
IHRvIGNvdW50ZXJhY3QKLSAgICAgICAgLy8gdGhlIHByZXZpb3VzSW5jbHVkaW5nUHNldWRvKCkg
dGhhdCB3aWxsIGJlIGRvbmUgYnkgdGhlIGxvb3AuCi0gICAgICAgIGlmIChvdGhlckxpc3QpCi0g
ICAgICAgICAgICBjdXJyZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVk
bygqb3RoZXJMaXN0KTsKKyAgICAgICAgfQorICAgICAgICBhdXRvJiBpdGVtID0gZG93bmNhc3Q8
UmVuZGVyTGlzdEl0ZW0+KCpyZW5kZXJlcik7CisgICAgICAgIGF1dG8qIG90aGVyTGlzdCA9IGVu
Y2xvc2luZ0xpc3QoaXRlbSk7CisgICAgICAgIGlmICghb3RoZXJMaXN0KSB7CisgICAgICAgICAg
ICBhZHZhbmNlKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIFRoaXMgaXRlbSBpcyBwYXJ0IG9mIG91ciBjdXJyZW50IGxpc3QsIHNvIHdlIGZvdW5kIHdo
YXQgd2UncmUgbG9va2luZyBmb3IuCisgICAgICAgIGlmICgmbGlzdCA9PSBvdGhlckxpc3QpCisg
ICAgICAgICAgICByZXR1cm4gJml0ZW07CisKKyAgICAgICAgLy8gV2UgZm91bmQgb3Vyc2VsZiBp
bnNpZGUgYW5vdGhlciBsaXN0OyBza2lwIHRoZSByZXN0IG9mIGl0cyBjb250ZW50cyBieQorICAg
ICAgICAvLyBhZHZhbmNpbmcgdG8gaXQuIEhvd2V2ZXIsIHNpbmNlIHRoZSBsaXN0IGl0c2VsZiBt
aWdodCBiZSBhIGxpc3QgaXRlbSwKKyAgICAgICAgLy8gZG9uJ3QgYWR2YW5jZSBwYXN0IGl0Lgor
ICAgICAgICBjdXJyZW50ID0gb3RoZXJMaXN0OwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAotdm9pZCBSZW5kZXJMaXN0SXRlbTo6dXBkYXRlSXRlbVZhbHVlc0Zvck9yZGVyZWRMaXN0
KGNvbnN0IEhUTUxPTGlzdEVsZW1lbnQmIGxpc3ROb2RlKQordm9pZCBSZW5kZXJMaXN0SXRlbTo6
dXBkYXRlSXRlbVZhbHVlc0Zvck9yZGVyZWRMaXN0KGNvbnN0IEhUTUxPTGlzdEVsZW1lbnQmIGxp
c3QpCiB7Ci0gICAgZm9yIChSZW5kZXJMaXN0SXRlbSogbGlzdEl0ZW0gPSBuZXh0TGlzdEl0ZW0o
bGlzdE5vZGUpOyBsaXN0SXRlbTsgbGlzdEl0ZW0gPSBuZXh0TGlzdEl0ZW0obGlzdE5vZGUsICps
aXN0SXRlbSkpCisgICAgZm9yIChhdXRvKiBsaXN0SXRlbSA9IGZpcnN0TGlzdEl0ZW0obGlzdCk7
IGxpc3RJdGVtOyBsaXN0SXRlbSA9IG5leHRMaXN0SXRlbShsaXN0LCAqbGlzdEl0ZW0pKQogICAg
ICAgICBsaXN0SXRlbS0+dXBkYXRlVmFsdWUoKTsKIH0KIAotdW5zaWduZWQgUmVuZGVyTGlzdEl0
ZW06Oml0ZW1Db3VudEZvck9yZGVyZWRMaXN0KGNvbnN0IEhUTUxPTGlzdEVsZW1lbnQmIGxpc3RO
b2RlKQordW5zaWduZWQgUmVuZGVyTGlzdEl0ZW06Oml0ZW1Db3VudEZvck9yZGVyZWRMaXN0KGNv
bnN0IEhUTUxPTGlzdEVsZW1lbnQmIGxpc3QpCiB7CiAgICAgdW5zaWduZWQgaXRlbUNvdW50ID0g
MDsKLSAgICBmb3IgKFJlbmRlckxpc3RJdGVtKiBsaXN0SXRlbSA9IG5leHRMaXN0SXRlbShsaXN0
Tm9kZSk7IGxpc3RJdGVtOyBsaXN0SXRlbSA9IG5leHRMaXN0SXRlbShsaXN0Tm9kZSwgKmxpc3RJ
dGVtKSkKKyAgICBmb3IgKGF1dG8qIGxpc3RJdGVtID0gZmlyc3RMaXN0SXRlbShsaXN0KTsgbGlz
dEl0ZW07IGxpc3RJdGVtID0gbmV4dExpc3RJdGVtKGxpc3QsICpsaXN0SXRlbSkpCiAgICAgICAg
ICsraXRlbUNvdW50OwogICAgIHJldHVybiBpdGVtQ291bnQ7CiB9CkBAIC0xOTcsMjQgKzIxMCwz
MyBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjp1cGRhdGVWYWx1ZU5vdygpIGNvbnN0CiAgICAgYXV0
byogbGlzdCA9IGVuY2xvc2luZ0xpc3QoKnRoaXMpOwogICAgIGF1dG8qIG9yZGVyZWRMaXN0ID0g
aXM8SFRNTE9MaXN0RWxlbWVudD4obGlzdCkgPyBkb3duY2FzdDxIVE1MT0xpc3RFbGVtZW50Pihs
aXN0KSA6IG51bGxwdHI7CiAKLSAgICAvLyBGSVhNRTogVGhpcyByZWN1cnNlcyB0byBhIHBvc3Np
YmxlIGRlcHRoIG9mIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QuCi0gICAgLy8gVGhhdCdzIG5vdCBn
b29kLCBhbmQgd2UgY2FuIGFuZCBzaG91bGQgY2hhbmdlIHRoaXMgdG8gYW4gaXRlcmF0aXZlIGFs
Z29yaXRobS4KLSAgICBpZiAoYXV0byogcHJldmlvdXNJdGVtID0gcHJldmlvdXNMaXN0SXRlbShs
aXN0LCAqdGhpcykpIHsKLSAgICAgICAgbV92YWx1ZSA9IHByZXZpb3VzSXRlbS0+dmFsdWUoKSAr
IChvcmRlcmVkTGlzdCAmJiBvcmRlcmVkTGlzdC0+aXNSZXZlcnNlZCgpID8gLTEgOiAxKTsKLSAg
ICAgICAgcmV0dXJuOworICAgIC8vIFRoZSBzdGFydCBpdGVtIGlzIGVpdGhlciB0aGUgY2xvc2Vz
dCBpdGVtIGJlZm9yZSB0aGlzIG9uZSBpbiB0aGUgbGlzdCB0aGF0IGFscmVhZHkgaGFzIGEgdmFs
dWUsCisgICAgLy8gb3IgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3QgaWYgbm9uZSBoYXZlIGJl
Zm9yZSB0aGlzIGhhdmUgdmFsdWVzIHlldC4KKyAgICBhdXRvKiBzdGFydEl0ZW0gPSB0aGlzOwor
ICAgIGlmIChsaXN0KSB7CisgICAgICAgIGF1dG8qIGl0ZW0gPSB0aGlzOworICAgICAgICB3aGls
ZSAoKGl0ZW0gPSBwcmV2aW91c0xpc3RJdGVtKCpsaXN0LCAqaXRlbSkpKSB7CisgICAgICAgICAg
ICBzdGFydEl0ZW0gPSBpdGVtOworICAgICAgICAgICAgaWYgKGl0ZW0tPm1fdmFsdWUpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAob3JkZXJlZExp
c3QpIHsKLSAgICAgICAgbV92YWx1ZSA9IG9yZGVyZWRMaXN0LT5zdGFydCgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGF1dG8mIHN0YXJ0VmFsdWUgPSBzdGFydEl0ZW0tPm1fdmFsdWU7
CisgICAgaWYgKCFzdGFydFZhbHVlKQorICAgICAgICBzdGFydFZhbHVlID0gb3JkZXJlZExpc3Qg
PyBvcmRlcmVkTGlzdC0+c3RhcnQoKSA6IDE7CisgICAgaW50IHZhbHVlID0gKnN0YXJ0VmFsdWU7
CisgICAgaW50IGluY3JlbWVudCA9IChvcmRlcmVkTGlzdCAmJiBvcmRlcmVkTGlzdC0+aXNSZXZl
cnNlZCgpKSA/IC0xIDogMTsKIAotICAgIG1fdmFsdWUgPSAxOworICAgIGZvciAoYXV0byogaXRl
bSA9IHN0YXJ0SXRlbTsgaXRlbSAhPSB0aGlzOyApIHsKKyAgICAgICAgaXRlbSA9IG5leHRMaXN0
SXRlbSgqbGlzdCwgKml0ZW0pOworICAgICAgICBpdGVtLT5tX3ZhbHVlID0gKHZhbHVlICs9IGlu
Y3JlbWVudCk7CisgICAgfQogfQogCiB2b2lkIFJlbmRlckxpc3RJdGVtOjp1cGRhdGVWYWx1ZSgp
CiB7Ci0gICAgaWYgKCFtX2V4cGxpY2l0VmFsdWUpIHsKKyAgICBpZiAoIW1fdmFsdWVXYXNTZXRF
eHBsaWNpdGx5KSB7CiAgICAgICAgIG1fdmFsdWUgPSBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIGlm
IChtX21hcmtlcikKICAgICAgICAgICAgIG1fbWFya2VyLT5zZXROZWVkc0xheW91dEFuZFByZWZX
aWR0aHNSZWNhbGMoKTsKQEAgLTM3Myw1NyArMzk1LDUzIEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06
OmV4cGxpY2l0VmFsdWVDaGFuZ2VkKCkKICAgICAgICAgbV9tYXJrZXItPnNldE5lZWRzTGF5b3V0
QW5kUHJlZldpZHRoc1JlY2FsYygpOwogCiAgICAgdXBkYXRlVmFsdWUoKTsKLSAgICBFbGVtZW50
KiBsaXN0Tm9kZSA9IGVuY2xvc2luZ0xpc3QoKnRoaXMpOwotICAgIGlmICghbGlzdE5vZGUpCisg
ICAgYXV0byogbGlzdCA9IGVuY2xvc2luZ0xpc3QoKnRoaXMpOworICAgIGlmICghbGlzdCkKICAg
ICAgICAgcmV0dXJuOwotICAgIGZvciAoUmVuZGVyTGlzdEl0ZW0qIGl0ZW0gPSBuZXh0TGlzdEl0
ZW0oKmxpc3ROb2RlLCAqdGhpcyk7IGl0ZW07IGl0ZW0gPSBuZXh0TGlzdEl0ZW0oKmxpc3ROb2Rl
LCAqaXRlbSkpCisgICAgYXV0byogaXRlbSA9IHRoaXM7CisgICAgd2hpbGUgKChpdGVtID0gbmV4
dExpc3RJdGVtKCpsaXN0LCAqaXRlbSkpKQogICAgICAgICBpdGVtLT51cGRhdGVWYWx1ZSgpOwog
fQogCiB2b2lkIFJlbmRlckxpc3RJdGVtOjpzZXRFeHBsaWNpdFZhbHVlKHN0ZDo6b3B0aW9uYWw8
aW50PiB2YWx1ZSkKIHsKLSAgICBpZiAobV9leHBsaWNpdFZhbHVlID09IHZhbHVlKQotICAgICAg
ICByZXR1cm47Ci0gICAgbV9leHBsaWNpdFZhbHVlID0gdmFsdWU7CisgICAgaWYgKCF2YWx1ZSkg
eworICAgICAgICBpZiAoIW1fdmFsdWVXYXNTZXRFeHBsaWNpdGx5KQorICAgICAgICAgICAgcmV0
dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX3ZhbHVlV2FzU2V0RXhwbGljaXRseSAm
JiBtX3ZhbHVlID09IHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3Zh
bHVlV2FzU2V0RXhwbGljaXRseSA9IHZhbHVlLmhhc192YWx1ZSgpOwogICAgIG1fdmFsdWUgPSB2
YWx1ZTsKICAgICBleHBsaWNpdFZhbHVlQ2hhbmdlZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIFJl
bmRlckxpc3RJdGVtKiBwcmV2aW91c09yTmV4dEl0ZW0oYm9vbCBpc0xpc3RSZXZlcnNlZCwgRWxl
bWVudCYgbGlzdCwgUmVuZGVyTGlzdEl0ZW0mIGl0ZW0pCi17Ci0gICAgcmV0dXJuIGlzTGlzdFJl
dmVyc2VkID8gcHJldmlvdXNMaXN0SXRlbSgmbGlzdCwgaXRlbSkgOiBuZXh0TGlzdEl0ZW0obGlz
dCwgaXRlbSk7Ci19Ci0KIHZvaWQgUmVuZGVyTGlzdEl0ZW06OnVwZGF0ZUxpc3RNYXJrZXJOdW1i
ZXJzKCkKIHsKLSAgICBFbGVtZW50KiBsaXN0Tm9kZSA9IGVuY2xvc2luZ0xpc3QoKnRoaXMpOwot
ICAgIC8vIFRoZSBsaXN0IG5vZGUgY2FuIGJlIHRoZSBzaGFkb3cgcm9vdCB3aGljaCBoYXMgbm8g
cmVuZGVyZXIuCi0gICAgaWYgKCFsaXN0Tm9kZSkKKyAgICBhdXRvKiBsaXN0ID0gZW5jbG9zaW5n
TGlzdCgqdGhpcyk7CisgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBib29s
IGlzTGlzdFJldmVyc2VkID0gZmFsc2U7Ci0gICAgaWYgKGlzPEhUTUxPTGlzdEVsZW1lbnQ+KCps
aXN0Tm9kZSkpIHsKLSAgICAgICAgSFRNTE9MaXN0RWxlbWVudCYgb0xpc3RFbGVtZW50ID0gZG93
bmNhc3Q8SFRNTE9MaXN0RWxlbWVudD4oKmxpc3ROb2RlKTsKLSAgICAgICAgb0xpc3RFbGVtZW50
Lml0ZW1Db3VudENoYW5nZWQoKTsKLSAgICAgICAgaXNMaXN0UmV2ZXJzZWQgPSBvTGlzdEVsZW1l
bnQuaXNSZXZlcnNlZCgpOworICAgIGJvb2wgaXNJblJldmVyc2VkT3JkZXJlZExpc3QgPSBmYWxz
ZTsKKyAgICBpZiAoaXM8SFRNTE9MaXN0RWxlbWVudD4oKmxpc3QpKSB7CisgICAgICAgIGF1dG8m
IG9yZGVyZWRMaXN0ID0gZG93bmNhc3Q8SFRNTE9MaXN0RWxlbWVudD4oKmxpc3QpOworICAgICAg
ICBvcmRlcmVkTGlzdC5pdGVtQ291bnRDaGFuZ2VkKCk7CisgICAgICAgIGlzSW5SZXZlcnNlZE9y
ZGVyZWRMaXN0ID0gb3JkZXJlZExpc3QuaXNSZXZlcnNlZCgpOwogICAgIH0KLSAgICBmb3IgKFJl
bmRlckxpc3RJdGVtKiBpdGVtID0gcHJldmlvdXNPck5leHRJdGVtKGlzTGlzdFJldmVyc2VkLCAq
bGlzdE5vZGUsICp0aGlzKTsgaXRlbTsgaXRlbSA9IHByZXZpb3VzT3JOZXh0SXRlbShpc0xpc3RS
ZXZlcnNlZCwgKmxpc3ROb2RlLCAqaXRlbSkpIHsKLSAgICAgICAgaWYgKCFpdGVtLT5tX3ZhbHVl
KSB7Ci0gICAgICAgICAgICAvLyBJZiBhbiBpdGVtIGhhcyBiZWVuIG1hcmtlZCBmb3IgdXBkYXRl
IGJlZm9yZSwgd2UgY2FuIHNhZmVseQotICAgICAgICAgICAgLy8gYXNzdW1lIHRoYXQgYWxsIHRo
ZSBmb2xsb3dpbmcgb25lcyBoYXZlIHRvby4KLSAgICAgICAgICAgIC8vIFRoaXMgZ2l2ZXMgdXMg
dGhlIG9wcG9ydHVuaXR5IHRvIHN0b3AgaGVyZSBhbmQgYXZvaWQKLSAgICAgICAgICAgIC8vIG1h
cmtpbmcgdGhlIHNhbWUgbm9kZXMgYWdhaW4uCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQorCisgICAgLy8gSWYgYW4gaXRlbSBoYXMgYmVlbiBtYXJrZWQgZm9yIHVwZGF0ZSBiZWZvcmUs
IHdlIGtub3cgdGhhdCBhbGwgZm9sbG93aW5nIGl0ZW1zIGhhdmUsIHRvby4KKyAgICAvLyBUaGlz
IGdpdmVzIHVzIHRoZSBvcHBvcnR1bml0eSB0byBzdG9wIGFuZCBhdm9pZCBtYXJraW5nIHRoZSBz
YW1lIG5vZGVzIGFnYWluLgorICAgIGF1dG8qIGl0ZW0gPSB0aGlzOworICAgIGF1dG8gc3Vic2Vx
dWVudExpc3RJdGVtID0gaXNJblJldmVyc2VkT3JkZXJlZExpc3QgPyBwcmV2aW91c0xpc3RJdGVt
IDogbmV4dExpc3RJdGVtOworICAgIHdoaWxlICgoaXRlbSA9IHN1YnNlcXVlbnRMaXN0SXRlbSgq
bGlzdCwgKml0ZW0pKSAmJiBpdGVtLT5tX3ZhbHVlKQogICAgICAgICBpdGVtLT51cGRhdGVWYWx1
ZSgpOwotICAgIH0KIH0KIAogYm9vbCBSZW5kZXJMaXN0SXRlbTo6aXNJblJldmVyc2VkT3JkZXJl
ZExpc3QoKSBjb25zdAogewogICAgIGF1dG8qIGxpc3QgPSBlbmNsb3NpbmdMaXN0KCp0aGlzKTsK
LSAgICBhdXRvKiBvcmRlcmVkTGlzdCA9IGlzPEhUTUxPTGlzdEVsZW1lbnQ+KGxpc3QpID8gZG93
bmNhc3Q8SFRNTE9MaXN0RWxlbWVudD4obGlzdCkgOiBudWxscHRyOwotICAgIHJldHVybiBvcmRl
cmVkTGlzdCAmJiBvcmRlcmVkTGlzdC0+aXNSZXZlcnNlZCgpOworICAgIHJldHVybiBpczxIVE1M
T0xpc3RFbGVtZW50PihsaXN0KSAmJiBkb3duY2FzdDxIVE1MT0xpc3RFbGVtZW50PigqbGlzdCku
aXNSZXZlcnNlZCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5oCmluZGV4IDExMDYwN2FkMGZkODlhMmY0MGExMzg1
YjYxYjY3MjFjNTc0ZDQ2ODQuLmU2N2Q2NDBkYjZjMGI0MmM2ZWRjNmI0YTI4ZmIxYzM3OTkzNDAy
ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5oCkBAIC00MCw3
ICs0MCw3IEBAIHB1YmxpYzoKICAgICBpbnQgdmFsdWUoKSBjb25zdDsKICAgICB2b2lkIHVwZGF0
ZVZhbHVlKCk7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPGludD4gZXhwbGljaXRWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZXhwbGljaXRWYWx1ZTsgfQorICAgIHN0ZDo6b3B0aW9uYWw8aW50PiBleHBs
aWNpdFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZVdhc1NldEV4cGxpY2l0bHkgPyBtX3Zh
bHVlIDogc3RkOjpudWxsb3B0OyB9CiAgICAgdm9pZCBzZXRFeHBsaWNpdFZhbHVlKHN0ZDo6b3B0
aW9uYWw8aW50Pik7CiAKICAgICB2b2lkIHNldE5vdEluTGlzdChib29sIG5vdEluTGlzdCkgeyBt
X25vdEluTGlzdCA9IG5vdEluTGlzdDsgfQpAQCAtODMsOSArODMsOSBAQCBwcml2YXRlOgogICAg
IHZvaWQgdXBkYXRlVmFsdWVOb3coKSBjb25zdDsKICAgICB2b2lkIGV4cGxpY2l0VmFsdWVDaGFu
Z2VkKCk7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPGludD4gbV9leHBsaWNpdFZhbHVlOwogICAgIFdl
YWtQdHI8UmVuZGVyTGlzdE1hcmtlcj4gbV9tYXJrZXI7CiAgICAgbXV0YWJsZSBzdGQ6Om9wdGlv
bmFsPGludD4gbV92YWx1ZTsKKyAgICBib29sIG1fdmFsdWVXYXNTZXRFeHBsaWNpdGx5IHsgZmFs
c2UgfTsKICAgICBib29sIG1fbm90SW5MaXN0IHsgZmFsc2UgfTsKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Db3VudGVyRGlyZWN0aXZlcy5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0NvdW50ZXJEaXJlY3RpdmVzLmgKaW5kZXggZWYw
ZjE0MjFlMDk4ODY3Y2NhYWEyYjQ2NjRiZDJiZWQxMGQxNjVjMS4uNGE5YWFkZTY2NjRmMDJmM2Iy
ZGE0YWRhNDc5NDM2ZjJjYmJhM2RkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL0NvdW50ZXJEaXJlY3RpdmVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL0NvdW50ZXJEaXJlY3RpdmVzLmgKQEAgLTEsOSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAgICAg
KEMpIDIwMDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiAgICAgICAgICAg
KEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYgR3JhaGFtIERlbm5pcyAoZ3JhaGFtLmRlbm5pc0BnbWFpbC5jb20pCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yNCwxMCArMjAsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUg
PG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvQXRvbWljU3RyaW5nSGFzaC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNSwx
OSArMjgsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RydWN0IENvdW50ZXJEaXJlY3RpdmVz
IHsKICAgICBzdGQ6Om9wdGlvbmFsPGludD4gcmVzZXRWYWx1ZTsKICAgICBzdGQ6Om9wdGlvbmFs
PGludD4gaW5jcmVtZW50VmFsdWU7Ci0KLSAgICB2b2lkIGFkZEluY3JlbWVudFZhbHVlKGludCBh
ZGRpdGlvbmFsSW5jcmVtZW50KSB7IGluY3JlbWVudFZhbHVlID0gYWRkQ2xhbXBlZChpbmNyZW1l
bnRWYWx1ZS52YWx1ZV9vcigwKSwgYWRkaXRpb25hbEluY3JlbWVudCk7IH0KLSAgICBzdGF0aWMg
aW50IGFkZENsYW1wZWQoaW50IGEsIGludCBiKSB7IHJldHVybiBjbGFtcFRvSW50ZWdlcihzdGF0
aWNfY2FzdDxkb3VibGU+KGEpICsgYik7ICB9CiB9OwogCi1ib29sIG9wZXJhdG9yPT0oY29uc3Qg
Q291bnRlckRpcmVjdGl2ZXMmLCBjb25zdCBDb3VudGVyRGlyZWN0aXZlcyYpOwotaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBDb3VudGVyRGlyZWN0aXZlcyYgYSwgY29uc3QgQ291bnRlckRp
cmVjdGl2ZXMmIGIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQotCi11c2luZyBDb3VudGVyRGlyZWN0
aXZlTWFwID0gSGFzaE1hcDxBdG9taWNTdHJpbmcsIENvdW50ZXJEaXJlY3RpdmVzPjsKLQotaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb3VudGVyRGlyZWN0aXZlcyYgYSwgY29uc3QgQ291
bnRlckRpcmVjdGl2ZXMmIGIpCitjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvdW50
ZXJEaXJlY3RpdmVzJiBhLCBjb25zdCBDb3VudGVyRGlyZWN0aXZlcyYgYikKIHsKICAgICByZXR1
cm4gYS5pbmNyZW1lbnRWYWx1ZSA9PSBiLmluY3JlbWVudFZhbHVlICYmIGEucmVzZXRWYWx1ZSA9
PSBiLnJlc2V0VmFsdWU7CiB9CiAKK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgQ291
bnRlckRpcmVjdGl2ZXMmIGEsIGNvbnN0IENvdW50ZXJEaXJlY3RpdmVzJiBiKQoreworICAgIHJl
dHVybiAhKGEgPT0gYik7Cit9CisKK3VzaW5nIENvdW50ZXJEaXJlY3RpdmVNYXAgPSBIYXNoTWFw
PEF0b21pY1N0cmluZywgQ291bnRlckRpcmVjdGl2ZXM+OworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcApp
bmRleCA1NDQ4MTg0NGJmNjcxMGYwZjY1NGI0Y2RhN2VlYjBlMTJmODZjMTczLi5mMjFlYWM3NDM1
ZjcxMTFlNjg0MjY5OTE5MzM0NThmYjcxNzk3YzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKQEAgLTEzNTYsMTMgKzEzNTYsNiBAQCBDb3Vu
dGVyRGlyZWN0aXZlTWFwJiBSZW5kZXJTdHlsZTo6YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKQog
ICAgIHJldHVybiAqbWFwOwogfQogCi1jb25zdCBDb3VudGVyRGlyZWN0aXZlcyBSZW5kZXJTdHls
ZTo6Z2V0Q291bnRlckRpcmVjdGl2ZXMoY29uc3QgQXRvbWljU3RyaW5nJiBpZGVudGlmaWVyKSBj
b25zdAotewotICAgIGlmIChjb25zdCBDb3VudGVyRGlyZWN0aXZlTWFwKiBkaXJlY3RpdmVzID0g
Y291bnRlckRpcmVjdGl2ZXMoKSkKLSAgICAgICAgcmV0dXJuIGRpcmVjdGl2ZXMtPmdldChpZGVu
dGlmaWVyKTsKLSAgICByZXR1cm4gQ291bnRlckRpcmVjdGl2ZXMoKTsKLX0KLQogY29uc3QgQXRv
bWljU3RyaW5nJiBSZW5kZXJTdHlsZTo6aHlwaGVuU3RyaW5nKCkgY29uc3QKIHsKICAgICBBU1NF
UlQoaHlwaGVucygpICE9IEh5cGhlbnNOb25lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1JlbmRlclN0eWxlLmgKaW5kZXggNTc2ZTZkNTVjZGU5NmU0ZDZkNmFmNzFmYmJjNmM1
ZmM3NGM3MWFlNi4uNWQxZTllYWEyZjU5NmRiMTQ4MmNlZDRiZTg4NGY5MzJlYmI3YzQ4NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKQEAgLTEzNjIs
NyArMTM2Miw2IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IENvdW50ZXJEaXJlY3RpdmVNYXAqIGNv
dW50ZXJEaXJlY3RpdmVzKCkgY29uc3Q7CiAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgYWNjZXNz
Q291bnRlckRpcmVjdGl2ZXMoKTsKLSAgICBjb25zdCBDb3VudGVyRGlyZWN0aXZlcyBnZXRDb3Vu
dGVyRGlyZWN0aXZlcyhjb25zdCBBdG9taWNTdHJpbmcmIGlkZW50aWZpZXIpIGNvbnN0OwogCiAg
ICAgUXVvdGVzRGF0YSogcXVvdGVzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlSW5oZXJpdGVkRGF0
YS0+cXVvdGVzLmdldCgpOyB9CiAgICAgdm9pZCBzZXRRdW90ZXMoUmVmUHRyPFF1b3Rlc0RhdGE+
JiYpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDQ2ODQ1NTFlNWRkOTM3MWYyMDlmYjg2NmEyY2YyYWI5MWI3NjdkMDkuLmY0
YTJmYWQ5NDQ4MDU0MWRlYmIyNGI3N2E4NWI1YjNmNjA1YmQwOTYgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MyBAQAorMjAxOC0wMS0wOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgRnVydGhlciByZWZpbmVtZW50IHRvIGxpc3QgaXRlbSBhbmQgY291bnRlciBjb2RlIGFmdGVy
ICJsaXN0LWl0ZW0iIGNvdW50ZXIgZml4CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xODE0MjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIGZhc3QvY3NzL2NvdW50ZXJzL2NvdW50ZXItbGlzdC1pdGVtLmh0
bWw6IFJlbW92ZWQgYW4gZXh0cmEgbmV3bGluZSBhdCB0aGUgZW5kIG9mCisgICAgICAgIHRoZSBm
aWxlLgorCiAyMDE4LTAxLTA5ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJlbGVhc2UgYXNzZXJ0IGluIGFkZFJlc291cmNlVGltaW5nIHdoZW4gYSBjYWNoZSBy
ZXNvdXJjZSBpcyByZXF1ZXN0ZWQgZHVyaW5nIHN0eWxlIHJlY2FsYwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9jc3MvY291bnRlcnMvY291bnRlci1saXN0LWl0ZW0uaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvY3NzL2NvdW50ZXJzL2NvdW50ZXItbGlzdC1pdGVtLmh0bWwKaW5kZXggYTc0
Y2M0ZmQ2ZWEyMmU3MDgxZGYzNDY1MGQzYjY4Y2Q3MDQxMmI2Ni4uYTUxZWU2YjA1MjAwMWE1M2I5
YWRkNmQ2NTY0ZTQ2ODRmYjY1MTdjZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mv
Y291bnRlcnMvY291bnRlci1saXN0LWl0ZW0uaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nz
cy9jb3VudGVycy9jb3VudGVyLWxpc3QtaXRlbS5odG1sCkBAIC0xMDUsNCArMTA1LDMgQEAgU29t
ZSBzaW1wbGUgY29tYmluYXRpb25zIHdpdGggZGlyZWN0aXZlcwogPC9vbD4KIAogPC9kaXY+Ci0K
</data>

          </attachment>
      

    </bug>

</bugzilla>