<?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>48701</bug_id>
          
          <creation_ts>2010-10-29 17:19:29 -0700</creation_ts>
          <short_desc>Windows Popup widget support (&lt;select&gt;)</short_desc>
          <delta_ts>2010-11-09 09:46:17 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>302202</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-29 17:19:29 -0700</bug_when>
    <thetext>Add windows Popup widget support (&lt;select&gt;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302203</commentid>
    <comment_count>1</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-29 17:19:38 -0700</bug_when>
    <thetext>&lt;rdar://problem/8559439&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302206</commentid>
    <comment_count>2</comment_count>
      <attachid>72419</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-29 17:32:44 -0700</bug_when>
    <thetext>Created attachment 72419
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303731</commentid>
    <comment_count>3</comment_count>
      <attachid>72419</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-11-02 15:41:57 -0700</bug_when>
    <thetext>Comment on attachment 72419
Patch

Looks good, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306837</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-11-09 09:46:17 -0800</bug_when>
    <thetext>Landed in r71640.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72419</attachid>
            <date>2010-10-29 17:32:44 -0700</date>
            <delta_ts>2010-11-02 15:41:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>winPopup.diff</filename>
            <type>text/plain</type>
            <size>80519</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDk1NykKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODggQEAKKzIwMTAtMTAtMjkgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaW5kb3dz
IFBvcHVwIHdpZGdldCBzdXBwb3J0ICg8c2VsZWN0PikKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
Lzg1NTk0Mzk+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00ODcwMQorCisgICAgICAgIFBvcnQgV2ViQ29yZSdzIFBvcHVwTWVudVdpbidzIGltcGxlbWVu
dGF0aW9uIHRvIHdvcmsgd2l0aGluIHRoZSBjb25maW5lcyBvZiBXZWJLaXQyLgorICAgICAgICBT
aW5jZSB3ZSBjdXJyZW50bHkgY2FuJ3QgZHJhdyB0ZXh0IHVzaW5nIFdlYkNvcmUgaW4gdGhlIFVJ
UHJvY2VzcywgdGhpcyBhcHByb2FjaCB1c2VzCisgICAgICAgIHRoZSBXZWJQcm9jZXNzIHRvIGNy
ZWF0ZSB0d28gYml0bWFwcyByZXByZXNlbnRpbmcgdGhlIGZ1bGwgcG9wdXAgbWVudSAoYm90aCB1
bnNlbGVjdGVkIGFuZCAKKyAgICAgICAgc2VsZWN0ZWQpIGFuZCBzZW5kcyB0aGVtIHRvIHRoZSBV
SVByb2Nlc3MgdG8gYmUgZHJhd24gaW4gYW4gSFdORC4KKworICAgICAgICAqIFNoYXJlZC9CYWNr
aW5nU3RvcmUuaDoKKyAgICAgICAgKiBTaGFyZWQvY2cvQmFja2luZ1N0b3JlQ0cuY3BwOgorICAg
ICAgICAqIFNoYXJlZC9xdC9CYWNraW5nU3RvcmVRdC5jcHA6CisKKyAgICAgICAgQWRkIG5ldyBm
dW5jdGlvbiB0byBjcmVhdGUgYSBmbGlwcGVkIGdyYXBoaWNzIGNvbnRleHQgZnJvbSB0aGUgYmFj
a2luZyBzdG9yZSwgCisgICAgICAgIGFuZCBhZGQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIHRvIHBh
aW50LCB0byBhbGxvdyBtb3JlIGNvbnRyb2wgb2YgaG93IHRoZSBiYWNraW5nCisgICAgICAgIHN0
b3JlIGlzIHBhaW50ZWQgaW50byB0aGUgZGVzdGluYXRpb24gY29udGV4dC4KKworICAgICAgICAq
IFNoYXJlZC9QbGF0Zm9ybVBvcHVwTWVudURhdGEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6UGxhdGZvcm1Qb3B1cE1lbnVEYXRhOjpQbGF0Zm9ybVBvcHVwTWVudURhdGEpOgorICAgICAg
ICAoV2ViS2l0OjpQbGF0Zm9ybVBvcHVwTWVudURhdGE6OmVuY29kZSk6CisgICAgICAgIChXZWJL
aXQ6OlBsYXRmb3JtUG9wdXBNZW51RGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvUGxh
dGZvcm1Qb3B1cE1lbnVEYXRhLmg6IEFkZGVkLgorICAgICAgICBBZGQgc3RydWN0IHNvIHBsYXRm
b3JtcyBjYW4gc2VuZCBwbGF0Zm9ybSBzcGVjaWZpYyBkYXRhIHRvIHRoZWlyIHBvcHVwIG1lbnUg
aW1wbGVtZW50YXRpb25zLgorCisgICAgICAgICogU2hhcmVkL1dlYlBvcHVwSXRlbS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBvcHVwSXRlbTo6V2ViUG9wdXBJdGVtKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUG9wdXBJdGVtOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cEl0
ZW06OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYlBvcHVwSXRlbS5oOgorICAgICAgICBB
ZGQgaXNMYWJlbCBmb3IgZWFjaCBtZW51IGl0ZW0uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvRmlu
ZEluZGljYXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRJbmRpY2F0b3I6OmRyYXcpOgor
ICAgICAgICBVcGRhdGUgZm9yIG5ldyBCYWNraW5nU3RvcmU6OnBhaW50IHNpZ25hdHVyZS4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OnNob3dQb3B1cE1lbnUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQb3B1cE1lbnVQcm94eS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9tYWMvV2ViUG9wdXBNZW51UHJveHlNYWMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFj
L1dlYlBvcHVwTWVudVByb3h5TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQ
cm94eU1hYzo6c2hvd1BvcHVwTWVudSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1dlYlBvcHVw
TWVudVByb3h5UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVF0Ojpz
aG93UG9wdXBNZW51KToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvV2ViUG9wdXBNZW51UHJveHlR
dC5oOgorICAgICAgICBQYXNzIHRocm91Z2ggdGhlIG5ldyBQbGF0Zm9ybVBvcHVwTWVudURhdGEu
CisKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcDoKKyAg
ICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmg6CisgICAgICAgIFBv
cnQgaW1wbGVtZW50YXRpb24gZnJvbSBXZWJDb3JlLgorCisgICAgICAgICogVUlQcm9jZXNzL3dp
bi9XZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y3JlYXRlUG9wdXBNZW51
UHJveHkpOgorICAgICAgICBQYXNzIHRoZSBXZWJWaWV3IHRvIHRoZSBXZWJQb3B1cE1lbnVQcm94
eVdpbi4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlBsdWdpblByb3h5OjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OlBs
dWdpblByb3h5Ojp1cGRhdGUpOgorICAgICAgICBVcGRhdGUgZm9yIG5ldyBCYWNraW5nU3RvcmU6
OnBhaW50IHNpZ25hdHVyZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViUG9wdXBNZW51LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51Ojpwb3B1bGF0
ZUl0ZW1zKTogQWRkIGlzTGFiZWwgZm9yIGVhY2ggaXRlbS4KKyAgICAgICAgKFdlYktpdDo6V2Vi
UG9wdXBNZW51OjpzaG93KTogR2l2ZSBlYWNoIHBsYXRmb3JtIGEgY2hhbmNlIHRvIGFkZCBwbGF0
Zm9ybSBzcGVjaWZpYyBkYXRhLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViUG9wdXBNZW51Lmg6CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21h
Yy9XZWJQb3B1cE1lbnVNYWMubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1l
bnU6OnNldFVwUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L3F0L1dlYlBvcHVwTWVudVF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBv
cHVwTWVudTo6c2V0VXBQbGF0Zm9ybURhdGEpOgorICAgICAgICBBZGQgc3R1YmJlZCBvdXQgc2V0
VXBQbGF0Zm9ybURhdGEuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3dp
bi9XZWJQb3B1cE1lbnVXaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBN
ZW51OjpzZXRVcFBsYXRmb3JtRGF0YSk6CisgICAgICAgIENvbXB1dGUgZGF0YSBuZWVkZWQgaW4g
dGhlIFVJUHJvY2VzcyBpbmNsdWRpbmcgZ2VuZXJhdGluZyB0aGUgYml0bWFwcy4KKworICAgICAg
ICAqIFdlYktpdDIucHJvOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiB3aW4vV2ViS2l0Mi52Y3Byb2o6CisgICAgICAgIEFkZCBuZXcgZmls
ZXMuCisKIDIwMTAtMTAtMjkgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFN0b3AgdXNpbmcgZW5jb2RlL2RlY29kZUJ5dGVzIGZvciBXZWJFdmVudCBzdWJjbGFzc2Vz
CkluZGV4OiBXZWJLaXQyL1dlYktpdDIucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViS2l0
Mi5wcm8JKHJldmlzaW9uIDcwOTU0KQorKysgV2ViS2l0Mi9XZWJLaXQyLnBybwkod29ya2luZyBj
b3B5KQpAQCAtMjExLDYgKzIxMSw3IEBAIEhFQURFUlMgKz0gXAogICAgIFNoYXJlZC9xdC9QbGF0
Zm9ybUNlcnRpZmljYXRlSW5mby5oIFwKICAgICBTaGFyZWQvcXQvVXBkYXRlQ2h1bmsuaCBcCiAg
ICAgU2hhcmVkL3F0L1dlYkV2ZW50RmFjdG9yeVF0LmggXAorICAgIFNoYXJlZC9QbGF0Zm9ybVBv
cHVwTWVudURhdGEuaCBcCiAgICAgU2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJzLmggXAogICAgIFNo
YXJlZC9WaXNpdGVkTGlua1RhYmxlLmggXAogICAgIFNoYXJlZC9XZWJDZXJ0aWZpY2F0ZUluZm8u
aCBcCkBAIC0zNzUsNiArMzc2LDcgQEAgU09VUkNFUyArPSBcCiAgICAgU2hhcmVkL3F0L1dlYkV2
ZW50RmFjdG9yeVF0LmNwcCBcCiAgICAgU2hhcmVkL3F0L1dlYlVSTFJlcXVlc3RRdC5jcHAgXAog
ICAgIFNoYXJlZC9xdC9XZWJVUkxSZXNwb25zZVF0LmNwcCBcCisgICAgU2hhcmVkL1BsYXRmb3Jt
UG9wdXBNZW51RGF0YS5jcHAgXAogICAgIFNoYXJlZC9WaXNpdGVkTGlua1RhYmxlLmNwcCBcCiAg
ICAgU2hhcmVkL1dlYkVycm9yLmNwcCBcCiAgICAgU2hhcmVkL1dlYkV2ZW50LmNwcCBcCkluZGV4
OiBXZWJLaXQyL1NoYXJlZC9CYWNraW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1No
YXJlZC9CYWNraW5nU3RvcmUuaAkocmV2aXNpb24gNzA5NTQpCisrKyBXZWJLaXQyL1NoYXJlZC9C
YWNraW5nU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsOSArNjIsMTAgQEAgcHVibGljOgog
CiAgICAgLy8gQ3JlYXRlIGEgZ3JhcGhpY3MgY29udGV4dCB0aGF0IGNhbiBiZSB1c2VkIHRvIHBh
aW50IGludG8gdGhlIGJhY2tpbmcgc3RvcmUuCiAgICAgUGFzc093blB0cjxXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ+IGNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworICAgIFBhc3NPd25QdHI8V2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0PiBjcmVhdGVGbGlwcGVkR3JhcGhpY3NDb250ZXh0KCk7CiAK
ICAgICAvLyBQYWludCB0aGUgYmFja2luZyBzdG9yZSBpbnRvIHRoZSBnaXZlbiBjb250ZXh0Lgot
ICAgIHZvaWQgcGFpbnQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOworICAgIHZvaWQgcGFpbnQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIGRzdFBvaW50LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBz
cmNSZWN0KTsKIAogcHJpdmF0ZToKICAgICBCYWNraW5nU3RvcmUoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYsIHZvaWQqKTsKSW5kZXg6IFdlYktpdDIvU2hhcmVkL1BsYXRmb3JtUG9wdXBNZW51RGF0
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvUGxhdGZvcm1Qb3B1cE1lbnVEYXRh
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvU2hhcmVkL1BsYXRmb3JtUG9wdXBNZW51RGF0
YS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiUGxhdGZvcm1Qb3B1cE1lbnVEYXRhLmgiCisKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRD
b2RlcnMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1BsYXRmb3JtUG9wdXBNZW51RGF0YTo6
UGxhdGZvcm1Qb3B1cE1lbnVEYXRhKCkKKyNpZiBQTEFURk9STShXSU4pCisgICAgOiBtX2NsaWVu
dFBhZGRpbmdMZWZ0KDApCisgICAgLCBtX2NsaWVudFBhZGRpbmdSaWdodCgwKQorICAgICwgbV9j
bGllbnRJbnNldExlZnQoMCkKKyAgICAsIG1fY2xpZW50SW5zZXRSaWdodCgwKQorICAgICwgbV9w
b3B1cFdpZHRoKDApCisgICAgLCBtX2l0ZW1IZWlnaHQoMCkKKyNlbmRpZgoreworfQorCit2b2lk
IFBsYXRmb3JtUG9wdXBNZW51RGF0YTo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rlciog
ZW5jb2RlcikgY29uc3QKK3sKKyNpZiBQTEFURk9STShXSU4pCisgICAgZW5jb2Rlci0+ZW5jb2Rl
KG1fY2xpZW50UGFkZGluZ0xlZnQpOworICAgIGVuY29kZXItPmVuY29kZShtX2NsaWVudFBhZGRp
bmdSaWdodCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKG1fY2xpZW50SW5zZXRMZWZ0KTsKKyAgICBl
bmNvZGVyLT5lbmNvZGUobV9jbGllbnRJbnNldFJpZ2h0KTsKKyAgICBlbmNvZGVyLT5lbmNvZGUo
bV9wb3B1cFdpZHRoKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUobV9pdGVtSGVpZ2h0KTsKKyAgICBl
bmNvZGVyLT5lbmNvZGUobV9iYWNraW5nU3RvcmVTaXplKTsKKworICAgIFNoYXJlZE1lbW9yeTo6
SGFuZGxlIG5vdFNlbGVjdGVkQmFja2luZ1N0b3JlSGFuZGxlOworICAgIG1fbm90U2VsZWN0ZWRC
YWNraW5nU3RvcmUtPmNyZWF0ZUhhbmRsZShub3RTZWxlY3RlZEJhY2tpbmdTdG9yZUhhbmRsZSk7
CisgICAgZW5jb2Rlci0+ZW5jb2RlKG5vdFNlbGVjdGVkQmFja2luZ1N0b3JlSGFuZGxlKTsKKwor
ICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIHNlbGVjdGVkQmFja2luZ1N0b3JlSGFuZGxlOworICAg
IG1fc2VsZWN0ZWRCYWNraW5nU3RvcmUtPmNyZWF0ZUhhbmRsZShzZWxlY3RlZEJhY2tpbmdTdG9y
ZUhhbmRsZSk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKHNlbGVjdGVkQmFja2luZ1N0b3JlSGFuZGxl
KTsKKyNlbmRpZgorfQorCitib29sIFBsYXRmb3JtUG9wdXBNZW51RGF0YTo6ZGVjb2RlKENvcmVJ
UEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUGxhdGZvcm1Qb3B1cE1lbnVEYXRhJiBkYXRh
KQoreworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBQbGF0Zm9ybVBvcHVwTWVudURhdGEgZDsKKyAg
ICBpZiAoIWRlY29kZXItPmRlY29kZShkLm1fY2xpZW50UGFkZGluZ0xlZnQpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZC5tX2NsaWVudFBhZGRpbmdS
aWdodCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShk
Lm1fY2xpZW50SW5zZXRMZWZ0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVj
b2Rlci0+ZGVjb2RlKGQubV9jbGllbnRJbnNldFJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGQubV9wb3B1cFdpZHRoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGQubV9pdGVtSGVpZ2h0KSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGQubV9iYWNraW5n
U3RvcmVTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU2hhcmVkTWVtb3J5OjpI
YW5kbGUgbm90U2VsZWN0ZWRCYWNraW5nU3RvcmVIYW5kbGU7CisgICAgaWYgKCFkZWNvZGVyLT5k
ZWNvZGUobm90U2VsZWN0ZWRCYWNraW5nU3RvcmVIYW5kbGUpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgZC5tX25vdFNlbGVjdGVkQmFja2luZ1N0b3JlID0gQmFja2luZ1N0b3JlOjpjcmVh
dGUoZC5tX2JhY2tpbmdTdG9yZVNpemUsIG5vdFNlbGVjdGVkQmFja2luZ1N0b3JlSGFuZGxlKTsK
KworICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIHNlbGVjdGVkQmFja2luZ1N0b3JlSGFuZGxlOwor
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHNlbGVjdGVkQmFja2luZ1N0b3JlSGFuZGxlKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGQubV9zZWxlY3RlZEJhY2tpbmdTdG9yZSA9IEJhY2tp
bmdTdG9yZTo6Y3JlYXRlKGQubV9iYWNraW5nU3RvcmVTaXplLCBzZWxlY3RlZEJhY2tpbmdTdG9y
ZUhhbmRsZSk7CisKKyAgICBkYXRhID0gZDsKKyNlbmRpZgorICAgIHJldHVybiB0cnVlOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdDIvU2hh
cmVkL1BsYXRmb3JtUG9wdXBNZW51RGF0YS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1
dGFibGUKICAgKyAqCgpJbmRleDogV2ViS2l0Mi9TaGFyZWQvUGxhdGZvcm1Qb3B1cE1lbnVEYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvUGxhdGZvcm1Qb3B1cE1lbnVEYXRhLmgJ
KHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1NoYXJlZC9QbGF0Zm9ybVBvcHVwTWVudURhdGEuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGxhdGZv
cm1Qb3B1cE1lbnVEYXRhX2gKKyNkZWZpbmUgUGxhdGZvcm1Qb3B1cE1lbnVEYXRhX2gKKworI2lu
Y2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgQ29yZUlQQyB7CisgICAgY2xhc3MgQXJndW1lbnREZWNvZGVyOworICAgIGNs
YXNzIEFyZ3VtZW50RW5jb2RlcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBQ
bGF0Zm9ybVBvcHVwTWVudURhdGEgeworICAgIFBsYXRmb3JtUG9wdXBNZW51RGF0YSgpOworICAg
IAorICAgIHZvaWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciopIGNvbnN0OworICAg
IHN0YXRpYyBib29sIGRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqLCBQbGF0Zm9ybVBv
cHVwTWVudURhdGEmKTsKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBpbnQgbV9jbGllbnRQYWRk
aW5nTGVmdDsKKyAgICBpbnQgbV9jbGllbnRQYWRkaW5nUmlnaHQ7CisgICAgaW50IG1fY2xpZW50
SW5zZXRMZWZ0OworICAgIGludCBtX2NsaWVudEluc2V0UmlnaHQ7CisgICAgaW50IG1fcG9wdXBX
aWR0aDsKKyAgICBpbnQgbV9pdGVtSGVpZ2h0OworICAgIFdlYkNvcmU6OkludFNpemUgbV9iYWNr
aW5nU3RvcmVTaXplOworICAgIFJlZlB0cjxCYWNraW5nU3RvcmU+IG1fbm90U2VsZWN0ZWRCYWNr
aW5nU3RvcmU7CisgICAgUmVmUHRyPEJhY2tpbmdTdG9yZT4gbV9zZWxlY3RlZEJhY2tpbmdTdG9y
ZTsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQbGF0
Zm9ybVBvcHVwTWVudURhdGFfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0Mi9TaGFyZWQv
UGxhdGZvcm1Qb3B1cE1lbnVEYXRhLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUK
ICAgKyAqCgpJbmRleDogV2ViS2l0Mi9TaGFyZWQvV2ViUG9wdXBJdGVtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL1NoYXJlZC9XZWJQb3B1cEl0ZW0uY3BwCShyZXZpc2lvbiA3MDk1NCkKKysr
IFdlYktpdDIvU2hhcmVkL1dlYlBvcHVwSXRlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDIx
ICszOSwyMyBAQCBXZWJQb3B1cEl0ZW06OldlYlBvcHVwSXRlbSgpCiBXZWJQb3B1cEl0ZW06Oldl
YlBvcHVwSXRlbShUeXBlIHR5cGUpCiAgICAgOiBtX3R5cGUodHlwZSkKICAgICAsIG1faXNFbmFi
bGVkKHRydWUpCisgICAgLCBtX2lzTGFiZWwoZmFsc2UpCiB7CiB9CiAKLVdlYlBvcHVwSXRlbTo6
V2ViUG9wdXBJdGVtKFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcm
IHRvb2xUaXAsIGNvbnN0IFN0cmluZyYgYWNjZXNzaWJpbGl0eVRleHQsIGJvb2wgaXNFbmFibGVk
KQorV2ViUG9wdXBJdGVtOjpXZWJQb3B1cEl0ZW0oVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHRl
eHQsIGNvbnN0IFN0cmluZyYgdG9vbFRpcCwgY29uc3QgU3RyaW5nJiBhY2Nlc3NpYmlsaXR5VGV4
dCwgYm9vbCBpc0VuYWJsZWQsIGJvb2wgaXNMYWJlbCkKICAgICA6IG1fdHlwZSh0eXBlKQogICAg
ICwgbV90ZXh0KHRleHQpCiAgICAgLCBtX3Rvb2xUaXAodG9vbFRpcCkKICAgICAsIG1fYWNjZXNz
aWJpbGl0eVRleHQoYWNjZXNzaWJpbGl0eVRleHQpCiAgICAgLCBtX2lzRW5hYmxlZChpc0VuYWJs
ZWQpCisgICAgLCBtX2lzTGFiZWwoaXNMYWJlbCkKIHsKIH0KIAogdm9pZCBXZWJQb3B1cEl0ZW06
OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAg
ZW5jb2Rlci0+ZW5jb2RlKENvcmVJUEM6OkluKHN0YXRpY19jYXN0PHVpbnQzMl90PihtX3R5cGUp
LCBtX3RleHQsIG1fdG9vbFRpcCwgbV9hY2Nlc3NpYmlsaXR5VGV4dCwgbV9pc0VuYWJsZWQpKTsK
KyAgICBlbmNvZGVyLT5lbmNvZGUoQ29yZUlQQzo6SW4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1f
dHlwZSksIG1fdGV4dCwgbV90b29sVGlwLCBtX2FjY2Vzc2liaWxpdHlUZXh0LCBtX2lzRW5hYmxl
ZCwgbV9pc0xhYmVsKSk7CiB9CiAKIGJvb2wgV2ViUG9wdXBJdGVtOjpkZWNvZGUoQ29yZUlQQzo6
QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBXZWJQb3B1cEl0ZW0mIGl0ZW0pCkBAIC02MywxMCAr
NjUsMTEgQEAgYm9vbCBXZWJQb3B1cEl0ZW06OmRlY29kZShDb3JlSVBDOjpBcmd1bQogICAgIFN0
cmluZyB0b29sVGlwOwogICAgIFN0cmluZyBhY2Nlc3NpYmlsaXR5VGV4dDsKICAgICBib29sIGlz
RW5hYmxlZDsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZShDb3JlSVBDOjpPdXQodHlwZSwgdGV4
dCwgdG9vbFRpcCwgYWNjZXNzaWJpbGl0eVRleHQsIGlzRW5hYmxlZCkpKQorICAgIGJvb2wgaXNM
YWJlbDsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShDb3JlSVBDOjpPdXQodHlwZSwgdGV4dCwg
dG9vbFRpcCwgYWNjZXNzaWJpbGl0eVRleHQsIGlzRW5hYmxlZCwgaXNMYWJlbCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpdGVtID0gV2ViUG9wdXBJdGVtKHN0YXRpY19jYXN0PFR5
cGU+KHR5cGUpLCB0ZXh0LCB0b29sVGlwLCBhY2Nlc3NpYmlsaXR5VGV4dCwgaXNFbmFibGVkKTsK
KyAgICBpdGVtID0gV2ViUG9wdXBJdGVtKHN0YXRpY19jYXN0PFR5cGU+KHR5cGUpLCB0ZXh0LCB0
b29sVGlwLCBhY2Nlc3NpYmlsaXR5VGV4dCwgaXNFbmFibGVkLCBpc0xhYmVsKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApJbmRleDogV2ViS2l0Mi9TaGFyZWQvV2ViUG9wdXBJdGVtLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvV2ViUG9wdXBJdGVtLmgJKHJldmlzaW9uIDcwOTU0KQor
KysgV2ViS2l0Mi9TaGFyZWQvV2ViUG9wdXBJdGVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcg
KzQzLDcgQEAgc3RydWN0IFdlYlBvcHVwSXRlbSB7CiAKICAgICBXZWJQb3B1cEl0ZW0oKTsKICAg
ICBXZWJQb3B1cEl0ZW0oVHlwZSk7Ci0gICAgV2ViUG9wdXBJdGVtKFR5cGUsIGNvbnN0IFN0cmlu
ZyYgdGV4dCwgY29uc3QgU3RyaW5nJiB0b29sVGlwLCBjb25zdCBTdHJpbmcmIGFjY2Vzc2liaWxp
dHlUZXh0LCBib29sIGlzRW5hYmxlZCk7CisgICAgV2ViUG9wdXBJdGVtKFR5cGUsIGNvbnN0IFN0
cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiB0b29sVGlwLCBjb25zdCBTdHJpbmcmIGFjY2Vzc2li
aWxpdHlUZXh0LCBib29sIGlzRW5hYmxlZCwgYm9vbCBtX2lzTGFiZWwpOwogCiAgICAgdm9pZCBl
bmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKikgY29uc3Q7CiAgICAgc3RhdGljIGJvb2wg
ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIFdlYlBvcHVwSXRlbSYpOwpAQCAtNTMs
NiArNTMsNyBAQCBzdHJ1Y3QgV2ViUG9wdXBJdGVtIHsKICAgICBTdHJpbmcgbV90b29sVGlwOwog
ICAgIFN0cmluZyBtX2FjY2Vzc2liaWxpdHlUZXh0OwogICAgIGJvb2wgbV9pc0VuYWJsZWQ7Cisg
ICAgYm9vbCBtX2lzTGFiZWw7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdl
YktpdDIvU2hhcmVkL2NnL0JhY2tpbmdTdG9yZUNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQy
L1NoYXJlZC9jZy9CYWNraW5nU3RvcmVDRy5jcHAJKHJldmlzaW9uIDcwOTU0KQorKysgV2ViS2l0
Mi9TaGFyZWQvY2cvQmFja2luZ1N0b3JlQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxOCAr
NDUsMjggQEAgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IEJhY2tpbmdTdG9yZQogICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0KGJpdG1hcENvbnRleHQuZ2V0KCkpKTsK
IH0KIAotdm9pZCBCYWNraW5nU3RvcmU6OnBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpCitQYXNzT3duUHRyPEdy
YXBoaWNzQ29udGV4dD4gQmFja2luZ1N0b3JlOjpjcmVhdGVGbGlwcGVkR3JhcGhpY3NDb250ZXh0
KCkKK3sKKyAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlKEFkb3B0Q0Ys
IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0
UmVmPiBiaXRtYXBDb250ZXh0KEFkb3B0Q0YsIENHQml0bWFwQ29udGV4dENyZWF0ZShkYXRhKCks
IG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDgsICBtX3NpemUud2lkdGgoKSAqIDQs
IGNvbG9yU3BhY2UuZ2V0KCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0
aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3QpKTsKKworICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0KGJpdG1hcENvbnRleHQuZ2V0KCkpKTsKK30KKwor
dm9pZCBCYWNraW5nU3RvcmU6OnBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRzdFBvaW50LCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBzcmNSZWN0KQogewotICAgIC8vIEZJWE1FOiBIb25vciB0aGUgY2xpcCByZWN0IQogICAg
IE93blB0cjxHcmFwaGljc0NvbnRleHQ+IHNvdXJjZUNvbnRleHQoY3JlYXRlR3JhcGhpY3NDb250
ZXh0KCkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgY3JlYXRlcyBhbiBleHRyYSBjb3B5LgogICAg
IFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZShBZG9wdENGLCBDR0JpdG1hcENvbnRleHRDcmVh
dGVJbWFnZShzb3VyY2VDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSkpOwogCi0gICAgQ0dDb250
ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIENHQ29u
dGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwogICAgIAogICAg
IENHQ29udGV4dFNhdmVHU3RhdGUoY2dDb250ZXh0KTsKLSAgICBDR0NvbnRleHREcmF3SW1hZ2Uo
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIENHUmVjdE1ha2UoMCwgMCwgQ0dJbWFnZUdldFdp
ZHRoKGltYWdlLmdldCgpKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkpLCBpbWFnZS5n
ZXQoKSk7CisgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjZ0NvbnRleHQsIENHUmVjdE1ha2UoZHN0
UG9pbnQueCgpLCBkc3RQb2ludC55KCksIHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQo
KSkpOworICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjZ0NvbnRleHQsIC1zcmNSZWN0LngoKSwg
LXNyY1JlY3QueSgpKTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY2dDb250ZXh0LCBDR1JlY3RN
YWtlKGRzdFBvaW50LngoKSwgZHN0UG9pbnQueSgpLCBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0
KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSksIGltYWdlLmdldCgpKTsKICAgICBD
R0NvbnRleHRSZXN0b3JlR1N0YXRlKGNnQ29udGV4dCk7CiB9CiAgICAgICAgIApJbmRleDogV2Vi
S2l0Mi9TaGFyZWQvcXQvQmFja2luZ1N0b3JlUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIv
U2hhcmVkL3F0L0JhY2tpbmdTdG9yZVF0LmNwcAkocmV2aXNpb24gNzA5NTQpCisrKyBXZWJLaXQy
L1NoYXJlZC9xdC9CYWNraW5nU3RvcmVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4
LDEzIEBAIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBCYWNraW5nU3RvcmUKICAgICByZXR1
cm4gMDsKIH0KIAotdm9pZCBCYWNraW5nU3RvcmU6OnBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpCitQYXNzT3du
UHRyPEdyYXBoaWNzQ29udGV4dD4gQmFja2luZ1N0b3JlOjpjcmVhdGVGbGlwcGVkR3JhcGhpY3ND
b250ZXh0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2
b2lkIEJhY2tpbmdTdG9yZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UG9pbnQm
LCBjb25zdCBJbnRSZWN0JikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpJbmRleDogV2Vi
S2l0Mi9VSVByb2Nlc3MvRmluZEluZGljYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9V
SVByb2Nlc3MvRmluZEluZGljYXRvci5jcHAJKHJldmlzaW9uIDcwOTU0KQorKysgV2ViS2l0Mi9V
SVByb2Nlc3MvRmluZEluZGljYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw3ICsxNjcs
NyBAQCB2b2lkIEZpbmRJbmRpY2F0b3I6OmRyYXcoR3JhcGhpY3NDb250ZXh0CiAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC5zYXZlKCk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUo
RmxvYXRTaXplKHJvdW5kZihsZWZ0Qm9yZGVyVGhpY2tuZXNzKSwgcm91bmRmKHRvcEJvcmRlclRo
aWNrbmVzcykgKyBtX2NvbnRlbnRJbWFnZS0+Ym91bmRzKCkuaGVpZ2h0KCkpKTsKICAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwotICAgICAgICBtX2NvbnRl
bnRJbWFnZS0+cGFpbnQoJmdyYXBoaWNzQ29udGV4dCwgbV9jb250ZW50SW1hZ2UtPmJvdW5kcygp
KTsKKyAgICAgICAgbV9jb250ZW50SW1hZ2UtPnBhaW50KGdyYXBoaWNzQ29udGV4dCwgSW50UG9p
bnQoMCwgMCksIG1fY29udGVudEltYWdlLT5ib3VuZHMoKSk7CiAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC5yZXN0b3JlKCk7CiAgICAgfQogfQpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCShyZXZpc2lvbiA3MDk1NCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExMDEsNyArMTEwMSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpkaWRGYWlsVG9GaW5kU3RyaW5nKGMKICAgICBtX2ZpbmRDbGllbnQuZGlkRmFpbFRvRmluZFN0
cmluZyh0aGlzLCBzdHJpbmcpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6c2hvd1BvcHVwTWVu
dShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYgaXRlbXMs
IGludDMyX3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpzaG93UG9wdXBNZW51
KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiBpdGVtcywg
aW50MzJfdCBzZWxlY3RlZEluZGV4LCBjb25zdCBQbGF0Zm9ybVBvcHVwTWVudURhdGEmIGRhdGEp
CiB7CiAgICAgaWYgKG1fYWN0aXZlUG9wdXBNZW51KQogICAgICAgICBtX2FjdGl2ZVBvcHVwTWVu
dS0+aGlkZVBvcHVwTWVudSgpOwpAQCAtMTEwOSw3ICsxMTA5LDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OnNob3dQb3B1cE1lbnUoY29uc3QgSQogICAgICAgICBtX2FjdGl2ZVBvcHVwTWVudSA9IG1f
cGFnZUNsaWVudC0+Y3JlYXRlUG9wdXBNZW51UHJveHkoKTsKIAogICAgIGludDMyX3QgbmV3U2Vs
ZWN0ZWRJbmRleCA9IDA7Ci0gICAgbV9hY3RpdmVQb3B1cE1lbnUtPnNob3dQb3B1cE1lbnUocmVj
dCwgaXRlbXMsIHNlbGVjdGVkSW5kZXgsIG5ld1NlbGVjdGVkSW5kZXgpOworICAgIG1fYWN0aXZl
UG9wdXBNZW51LT5zaG93UG9wdXBNZW51KHJlY3QsIGl0ZW1zLCBkYXRhLCBzZWxlY3RlZEluZGV4
LCBuZXdTZWxlY3RlZEluZGV4KTsKIAogICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6RGlkQ2hhbmdlU2VsZWN0ZWRJbmRleEZvckFjdGl2ZVBvcHVwTWVudShuZXdTZWxlY3Rl
ZEluZGV4KSwgbV9wYWdlSUQpOwogICAgIG1fYWN0aXZlUG9wdXBNZW51ID0gMDsKSW5kZXg6IFdl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiA3MDk1NCkKKysrIFdlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw3IEBAIGNsYXNz
IFdlYlBvcHVwTWVudVByb3h5OwogY2xhc3MgV2ViUHJvY2Vzc1Byb3h5OwogY2xhc3MgV2ViVVJM
UmVxdWVzdDsKIGNsYXNzIFdlYldoZWVsRXZlbnQ7CitzdHJ1Y3QgUGxhdGZvcm1Qb3B1cE1lbnVE
YXRhOwogc3RydWN0IFdlYk5hdmlnYXRpb25EYXRhU3RvcmU7CiBzdHJ1Y3QgV2ViUGFnZUNyZWF0
aW9uUGFyYW1ldGVyczsKIHN0cnVjdCBXZWJQb3B1cEl0ZW07CkBAIC0zMTgsNyArMzE5LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGRpZEZhaWxUb0ZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAK
ICAgICAvLyBQb3B1cCBNZW51LgotICAgIHZvaWQgc2hvd1BvcHVwTWVudShjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiByZWN0LCBjb25zdCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYgaXRlbXMsIGludDMy
X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBzaG93UG9wdXBNZW51KGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHJlY3QsIGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiBpdGVtcywgaW50MzJf
dCBzZWxlY3RlZEluZGV4LCBjb25zdCBQbGF0Zm9ybVBvcHVwTWVudURhdGEmKTsKICAgICB2b2lk
IGhpZGVQb3B1cE1lbnUoKTsKIAogICAgIHZvaWQgdGFrZUZvY3VzKGJvb2wgZGlyZWN0aW9uKTsK
SW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlz
aW9uIDcwOTU0KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmlu
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVBy
b3h5IHsKICAgICBEaWRGYWlsVG9GaW5kU3RyaW5nKFdURjo6U3RyaW5nIHN0cmluZykKIAogICAg
ICMgUG9wdXBNZW51LgotICAgIFNob3dQb3B1cE1lbnUoV2ViQ29yZTo6SW50UmVjdCByZWN0LCBW
ZWN0b3I8V2ViS2l0OjpXZWJQb3B1cEl0ZW0+IGl0ZW1zLCBpbnQzMl90IHNlbGVjdGVkSW5kZXgp
CisgICAgU2hvd1BvcHVwTWVudShXZWJDb3JlOjpJbnRSZWN0IHJlY3QsIFZlY3RvcjxXZWJLaXQ6
OldlYlBvcHVwSXRlbT4gaXRlbXMsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCwgV2ViS2l0OjpQbGF0
Zm9ybVBvcHVwTWVudURhdGEgZGF0YSkKICAgICBIaWRlUG9wdXBNZW51KCkKIAogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBvcHVw
TWVudVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUG9wdXBNZW51
UHJveHkuaAkocmV2aXNpb24gNzA5NTQpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQb3B1cE1l
bnVQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3N0cnVjdCBQbGF0Zm9ybVBvcHVwTWVudURh
dGE7CiBzdHJ1Y3QgV2ViUG9wdXBJdGVtOwogCiBjbGFzcyBXZWJQb3B1cE1lbnVQcm94eSA6IHB1
YmxpYyBSZWZDb3VudGVkPFdlYlBvcHVwTWVudVByb3h5PiB7CkBAIC00NCw3ICs0NSw3IEBAIHB1
YmxpYzogICAgCiAgICAgewogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBzaG93UG9wdXBNZW51
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QsIGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+
JiBpdGVtcywgaW50MzJfdCBzZWxlY3RlZEluZGV4LCBpbnQzMl90JiBuZXdTZWxlY3RlZEluZGV4
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNob3dQb3B1cE1lbnUoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgcmVjdCwgY29uc3QgVmVjdG9yPFdlYlBvcHVwSXRlbT4mIGl0ZW1zLCBjb25zdCBQbGF0
Zm9ybVBvcHVwTWVudURhdGEmLCBpbnQzMl90IHNlbGVjdGVkSW5kZXgsIGludDMyX3QmIG5ld1Nl
bGVjdGVkSW5kZXgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgaGlkZVBvcHVwTWVudSgpID0gMDsK
IAogcHJvdGVjdGVkOgpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBvcHVwTWVudVBy
b3h5TWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBvcHVwTWVu
dVByb3h5TWFjLmgJKHJldmlzaW9uIDcwOTU0KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dl
YlBvcHVwTWVudVByb3h5TWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVi
bGljOgogICAgIH0KICAgICB+V2ViUG9wdXBNZW51UHJveHlNYWMoKTsKIAotICAgIHZpcnR1YWwg
dm9pZCBzaG93UG9wdXBNZW51KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBWZWN0b3I8
V2ViUG9wdXBJdGVtPiYsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCwgaW50MzJfdCYgbmV3U2VsZWN0
ZWRJbmRleCk7CisgICAgdmlydHVhbCB2b2lkIHNob3dQb3B1cE1lbnUoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYsIGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiwgY29uc3QgUGxhdGZvcm1Qb3B1
cE1lbnVEYXRhJiwgaW50MzJfdCBzZWxlY3RlZEluZGV4LCBpbnQzMl90JiBuZXdTZWxlY3RlZElu
ZGV4KTsKICAgICB2aXJ0dWFsIHZvaWQgaGlkZVBvcHVwTWVudSgpOwogCiBwcml2YXRlOgpJbmRl
eDogV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBvcHVwTWVudVByb3h5TWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQb3B1cE1lbnVQcm94eU1hYy5tbQkocmV2
aXNpb24gNzA5NTQpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUG9wdXBNZW51UHJveHlN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJXZWJQb3B1
cE1lbnVQcm94eU1hYy5oIgogCiAjaW5jbHVkZSAiUGFnZUNsaWVudEltcGwuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybVBvcHVwTWVudURhdGEuaCIKICNpbmNsdWRlICJXS1ZpZXcuaCIKICNpbmNsdWRl
ICJXZWJQb3B1cEl0ZW0uaCIKICNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KQEAg
LTY5LDcgKzcwLDcgQEAgdm9pZCBXZWJQb3B1cE1lbnVQcm94eU1hYzo6cG9wdWxhdGUoY29ucwog
ICAgIH0KIH0KIAotdm9pZCBXZWJQb3B1cE1lbnVQcm94eU1hYzo6c2hvd1BvcHVwTWVudShjb25z
dCBJbnRSZWN0JiByZWN0LCBjb25zdCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYgaXRlbXMsIGludDMy
X3Qgc2VsZWN0ZWRJbmRleCwgaW50MzJfdCYgbmV3U2VsZWN0ZWRJbmRleCkKK3ZvaWQgV2ViUG9w
dXBNZW51UHJveHlNYWM6OnNob3dQb3B1cE1lbnUoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3Qg
VmVjdG9yPFdlYlBvcHVwSXRlbT4mIGl0ZW1zLCBjb25zdCBQbGF0Zm9ybVBvcHVwTWVudURhdGEm
LCBpbnQzMl90IHNlbGVjdGVkSW5kZXgsIGludDMyX3QmIG5ld1NlbGVjdGVkSW5kZXgpCiB7CiAg
ICAgcG9wdWxhdGUoaXRlbXMpOwogCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJQb3B1
cE1lbnVQcm94eVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJQ
b3B1cE1lbnVQcm94eVF0LmNwcAkocmV2aXNpb24gNzA5NTQpCisrKyBXZWJLaXQyL1VJUHJvY2Vz
cy9xdC9XZWJQb3B1cE1lbnVQcm94eVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUs
NyBAQAogCiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHlRdC5oIgogCisjaW5jbHVkZSAiUGxh
dGZvcm1Qb3B1cE1lbnVEYXRhLmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBJdGVtLmgiCiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMzksNyArNDAsNyBAQCBXZWJQb3B1cE1lbnVQcm94eVF0
Ojp+V2ViUG9wdXBNZW51UHJveHlRCiB7CiB9CiAKLXZvaWQgV2ViUG9wdXBNZW51UHJveHlRdDo6
c2hvd1BvcHVwTWVudShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBWZWN0b3I8V2ViUG9wdXBJ
dGVtPiYgaXRlbXMsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCwgaW50MzJfdCYgbmV3U2VsZWN0ZWRJ
bmRleCkKK3ZvaWQgV2ViUG9wdXBNZW51UHJveHlRdDo6c2hvd1BvcHVwTWVudShjb25zdCBJbnRS
ZWN0JiByZWN0LCBjb25zdCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYgaXRlbXMsIGNvbnN0IFBsYXRm
b3JtUG9wdXBNZW51RGF0YSYsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCwgaW50MzJfdCYgbmV3U2Vs
ZWN0ZWRJbmRleCkKIHsKIH0KIApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViUG9wdXBN
ZW51UHJveHlRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL3F0L1dlYlBvcHVw
TWVudVByb3h5UXQuaAkocmV2aXNpb24gNzA5NTQpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9xdC9X
ZWJQb3B1cE1lbnVQcm94eVF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVi
bGljOgogICAgIH0KICAgICB+V2ViUG9wdXBNZW51UHJveHlRdCgpOwogCi0gICAgdmlydHVhbCB2
b2lkIHNob3dQb3B1cE1lbnUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFZlY3RvcjxX
ZWJQb3B1cEl0ZW0+JiwgaW50MzJfdCBzZWxlY3RlZEluZGV4LCBpbnQzMl90JiBuZXdTZWxlY3Rl
ZEluZGV4KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd1BvcHVwTWVudShjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiwgY29uc3QgVmVjdG9yPFdlYlBvcHVwSXRlbT4mLCBjb25zdCBQbGF0Zm9ybVBvcHVw
TWVudURhdGEmLCBpbnQzMl90IHNlbGVjdGVkSW5kZXgsIGludDMyX3QmIG5ld1NlbGVjdGVkSW5k
ZXgpOwogICAgIHZpcnR1YWwgdm9pZCBoaWRlUG9wdXBNZW51KCk7CiAKIHByaXZhdGU6CkluZGV4
OiBXZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAJKHJl
dmlzaW9uIDcwOTU0KQorKysgV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsMjggKzIzLDkxNSBAQAogICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKy8vIE5PVEU6IFRoaXMgaW1wbGVtZW50YXRp
b24gaXMgdmVyeSBzaW1pbGFyIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBwb3B1cHMgaW4gV2Vi
Q29yZTo6UG9wdXBNZW51V2luLgorLy8gV2Ugc2hvdWxkIHRyeSBhbmQgZmFjdG9yIG91dCB0aGUg
Y29tbW9uIGJpdHMgYW5kIHNoYXJlIHRoZW0uCisKICNpbmNsdWRlICJXZWJQb3B1cE1lbnVQcm94
eVdpbi5oIgogCi0jaW5jbHVkZSAiV2ViUG9wdXBJdGVtLmgiCisjaW5jbHVkZSAiV2ViVmlldy5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvV2ViQ29yZUluc3RhbmNlSGFuZGxlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9TY3JvbGxiYXJUaGVtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQml0bWFwSW5mby5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Nb3VzZUV2ZW50Lmg+CisjaW5jbHVkZSA8d2lu
ZG93c3guaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2Ugc3Rk
OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV2ViUG9wdXBNZW51UHJveHlXaW46OldlYlBvcHVw
TWVudVByb3h5V2luKCkKK3N0YXRpYyBjb25zdCBMUENXU1RSIGtXZWJLaXQyV2ViUG9wdXBNZW51
UHJveHlXaW5kb3dDbGFzc05hbWUgPSBMIldlYktpdDJXZWJQb3B1cE1lbnVQcm94eVdpbmRvd0Ns
YXNzIjsKKworc3RhdGljIGNvbnN0IGludCBkZWZhdWx0QW5pbWF0aW9uRHVyYXRpb24gPSAyMDA7
CitzdGF0aWMgY29uc3QgaW50IG1heFBvcHVwSGVpZ2h0ID0gMzIwOworc3RhdGljIGNvbnN0IGlu
dCBwb3B1cFdpbmRvd0JvcmRlcldpZHRoID0gMTsKK3N0YXRpYyBjb25zdCBpbnQgc2VwYXJhdG9y
UGFkZGluZyA9IDQ7CitzdGF0aWMgY29uc3QgaW50IHNlcGFyYXRvckhlaWdodCA9IDE7CisKKy8v
IFRoaXMgaXMgdXNlZCBmcm9tIHdpdGhpbiBvdXIgY3VzdG9tIG1lc3NhZ2UgcHVtcCB3aGVuIHdl
IHdhbnQgdG8gc2VuZCBhCisvLyBtZXNzYWdlIHRvIHRoZSB3ZWIgdmlldyBhbmQgbm90IGhhdmUg
b3VyIG1lc3NhZ2Ugc3RvbGVuIGFuZCBzZW50IHRvCisvLyB0aGUgcG9wdXAgd2luZG93Lgorc3Rh
dGljIGNvbnN0IFVJTlQgV01fSE9TVF9XSU5ET1dfRklSU1QgPSBXTV9VU0VSOworc3RhdGljIGNv
bnN0IFVJTlQgV01fSE9TVF9XSU5ET1dfQ0hBUiA9IFdNX1VTRVIgKyBXTV9DSEFSOyAKK3N0YXRp
YyBjb25zdCBVSU5UIFdNX0hPU1RfV0lORE9XX01PVVNFTU9WRSA9IFdNX1VTRVIgKyBXTV9NT1VT
RU1PVkU7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0FTQ0lJUHJpbnRhYmxlKHVuc2lnbmVkIGMp
Cit7CisgICAgcmV0dXJuIGMgPj0gMHgyMCAmJiBjIDw9IDB4N0U7Cit9CisKK3N0YXRpYyB2b2lk
IHRyYW5zbGF0ZVBvaW50KExQQVJBTSYgbFBhcmFtLCBIV05EIGZyb20sIEhXTkQgdG8pCit7Cisg
ICAgUE9JTlQgcHQ7CisgICAgcHQueCA9IHN0YXRpY19jYXN0PHNob3J0PihHRVRfWF9MUEFSQU0o
bFBhcmFtKSk7CisgICAgcHQueSA9IHN0YXRpY19jYXN0PHNob3J0PihHRVRfWV9MUEFSQU0obFBh
cmFtKSk7CisgICAgOjpNYXBXaW5kb3dQb2ludHMoZnJvbSwgdG8sICZwdCwgMSk7CisgICAgbFBh
cmFtID0gTUFLRUxQQVJBTShwdC54LCBwdC55KTsKK30KKworTFJFU1VMVCBDQUxMQkFDSyBXZWJQ
b3B1cE1lbnVQcm94eVdpbjo6V2ViUG9wdXBNZW51UHJveHlXbmRQcm9jKEhXTkQgaFduZCwgVUlO
VCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIExPTkdfUFRS
IGxvbmdQdHIgPSA6OkdldFdpbmRvd0xvbmdQdHIoaFduZCwgMCk7CisgICAKKyAgICBpZiAoV2Vi
UG9wdXBNZW51UHJveHlXaW4qIHBvcHVwTWVudVByb3h5ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJQ
b3B1cE1lbnVQcm94eVdpbio+KGxvbmdQdHIpKQorICAgICAgICByZXR1cm4gcG9wdXBNZW51UHJv
eHktPnduZFByb2MoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOworCisgICAgaWYgKG1l
c3NhZ2UgPT0gV01fQ1JFQVRFKSB7CisgICAgICAgIExQQ1JFQVRFU1RSVUNUIGNyZWF0ZVN0cnVj
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TFBDUkVBVEVTVFJVQ1Q+KGxQYXJhbSk7CisKKyAgICAgICAg
Ly8gQXNzb2NpYXRlIHRoZSBXZWJWaWV3IHdpdGggdGhlIHdpbmRvdy4KKyAgICAgICAgOjpTZXRX
aW5kb3dMb25nUHRyKGhXbmQsIDAsIChMT05HX1BUUiljcmVhdGVTdHJ1Y3QtPmxwQ3JlYXRlUGFy
YW1zKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIDo6RGVmV2luZG93
UHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Cit9CisKK0xSRVNVTFQgV2ViUG9w
dXBNZW51UHJveHlXaW46OnduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3
UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgTFJFU1VMVCBsUmVzdWx0ID0gMDsKKyAgICBi
b29sIGhhbmRsZWQgPSB0cnVlOworCisgICAgc3dpdGNoIChtZXNzYWdlKSB7CisgICAgICAgIGNh
c2UgV01fTU9VU0VBQ1RJVkFURToKKyAgICAgICAgICAgIGxSZXN1bHQgPSBvbk1vdXNlQWN0aXZh
dGUoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgV01fU0laRToKKyAgICAgICAgICAgIGxSZXN1bHQgPSBvblNp
emUoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgV01fS0VZRE9XTjoKKyAgICAgICAgICAgIGxSZXN1bHQgPSBv
bktleURvd24oaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV01fQ0hBUjoKKyAgICAgICAgICAgIGxSZXN1bHQg
PSBvbkNoYXIoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV01fTU9VU0VNT1ZFOgorICAgICAgICAgICAgbFJl
c3VsdCA9IG9uTW91c2VNb3ZlKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVk
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdNX0xCVVRUT05ET1dOOgorICAg
ICAgICAgICAgbFJlc3VsdCA9IG9uTEJ1dHRvbkRvd24oaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBs
UGFyYW0sIGhhbmRsZWQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV01fTEJV
VFRPTlVQOgorICAgICAgICAgICAgbFJlc3VsdCA9IG9uTEJ1dHRvblVwKGhXbmQsIG1lc3NhZ2Us
IHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFdNX01PVVNFV0hFRUw6CisgICAgICAgICAgICBsUmVzdWx0ID0gb25Nb3VzZVdoZWVsKGhX
bmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFdNX1BBSU5UOgorICAgICAgICAgICAgbFJlc3VsdCA9IG9uUGFpbnQo
aFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgV01fUFJJTlRDTElFTlQ6CisgICAgICAgICAgICBsUmVzdWx0ID0g
b25QcmludENsaWVudChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGhhbmRsZWQg
PSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghaGFuZGxlZCkK
KyAgICAgICAgbFJlc3VsdCA9IDo6RGVmV2luZG93UHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0s
IGxQYXJhbSk7CisKKyAgICByZXR1cm4gbFJlc3VsdDsKK30KKworYm9vbCBXZWJQb3B1cE1lbnVQ
cm94eVdpbjo6cmVnaXN0ZXJXaW5kb3dDbGFzcygpCit7CisgICAgc3RhdGljIGJvb2wgaGF2ZVJl
Z2lzdGVyZWRXaW5kb3dDbGFzcyA9IGZhbHNlOworICAgIGlmIChoYXZlUmVnaXN0ZXJlZFdpbmRv
d0NsYXNzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBoYXZlUmVnaXN0ZXJlZFdpbmRvd0Ns
YXNzID0gdHJ1ZTsKKworICAgIFdORENMQVNTRVggd2NleDsKKyAgICB3Y2V4LmNiU2l6ZSAgICAg
ICAgID0gc2l6ZW9mKFdORENMQVNTRVgpOworICAgIHdjZXguc3R5bGUgICAgICAgICAgPSBDU19E
Uk9QU0hBRE9XOworICAgIHdjZXgubHBmblduZFByb2MgICAgPSBXZWJQb3B1cE1lbnVQcm94eVdp
bjo6V2ViUG9wdXBNZW51UHJveHlXbmRQcm9jOworICAgIHdjZXguY2JDbHNFeHRyYSAgICAgPSAw
OworICAgIHdjZXguY2JXbmRFeHRyYSAgICAgPSBzaXplb2YoV2ViUG9wdXBNZW51UHJveHlXaW4q
KTsKKyAgICB3Y2V4LmhJbnN0YW5jZSAgICAgID0gaW5zdGFuY2VIYW5kbGUoKTsKKyAgICB3Y2V4
LmhJY29uICAgICAgICAgID0gMDsKKyAgICB3Y2V4LmhDdXJzb3IgICAgICAgID0gOjpMb2FkQ3Vy
c29yKDAsIElEQ19BUlJPVyk7CisgICAgd2NleC5oYnJCYWNrZ3JvdW5kICA9IDA7CisgICAgd2Nl
eC5scHN6TWVudU5hbWUgICA9IDA7CisgICAgd2NleC5scHN6Q2xhc3NOYW1lICA9IGtXZWJLaXQy
V2ViUG9wdXBNZW51UHJveHlXaW5kb3dDbGFzc05hbWU7CisgICAgd2NleC5oSWNvblNtICAgICAg
ICA9IDA7CisKKyAgICByZXR1cm4gISE6OlJlZ2lzdGVyQ2xhc3NFeCgmd2NleCk7Cit9CisKK1dl
YlBvcHVwTWVudVByb3h5V2luOjpXZWJQb3B1cE1lbnVQcm94eVdpbihXZWJWaWV3KiB3ZWJWaWV3
KQorICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCisgICAgLCBtX25ld1NlbGVjdGVkSW5kZXgoMCkK
KyAgICAsIG1fcG9wdXAoMCkKKyAgICAsIG1fREMoMCkKKyAgICAsIG1fYm1wKDApCisgICAgLCBt
X2l0ZW1IZWlnaHQoMCkKKyAgICAsIG1fc2Nyb2xsT2Zmc2V0KDApCisgICAgLCBtX3doZWVsRGVs
dGEoMCkKKyAgICAsIG1fZm9jdXNlZEluZGV4KDApCisgICAgLCBtX3dhc0NsaWNrZWQoZmFsc2Up
CisgICAgLCBtX3Njcm9sbGJhckNhcHR1cmluZ01vdXNlKGZhbHNlKQorICAgICwgbV9zaG93UG9w
dXAoZmFsc2UpCiB7CiB9CiAKIFdlYlBvcHVwTWVudVByb3h5V2luOjp+V2ViUG9wdXBNZW51UHJv
eHlXaW4oKQogeworICAgIGlmIChtX2JtcCkKKyAgICAgICAgOjpEZWxldGVPYmplY3QobV9ibXAp
OworICAgIGlmIChtX0RDKQorICAgICAgICA6OkRlbGV0ZURDKG1fREMpOworICAgIGlmIChtX3Bv
cHVwKQorICAgICAgICA6OkRlc3Ryb3lXaW5kb3cobV9wb3B1cCk7CisgICAgaWYgKG1fc2Nyb2xs
YmFyKQorICAgICAgICBtX3Njcm9sbGJhci0+c2V0UGFyZW50KDApOwogfQogCi12b2lkIFdlYlBv
cHVwTWVudVByb3h5V2luOjpzaG93UG9wdXBNZW51KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0
IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiBpdGVtcywgaW50MzJfdCBzZWxlY3RlZEluZGV4LCBpbnQz
Ml90JiBuZXdTZWxlY3RlZEluZGV4KQordm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2hvd1Bv
cHVwTWVudShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYg
aXRlbXMsIGNvbnN0IFBsYXRmb3JtUG9wdXBNZW51RGF0YSYgZGF0YSwgaW50MzJfdCBzZWxlY3Rl
ZEluZGV4LCBpbnQzMl90JiBuZXdTZWxlY3RlZEluZGV4KQogeworICAgIG1faXRlbXMgPSBpdGVt
czsKKyAgICBtX2RhdGEgPSBkYXRhOworICAgIG1fbmV3U2VsZWN0ZWRJbmRleCA9IHNlbGVjdGVk
SW5kZXg7CisKKyAgICBjYWxjdWxhdGVQb3NpdGlvbkFuZFNpemUocmVjdCk7CisgICAgaWYgKGNs
aWVudFJlY3QoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEhXTkQgaG9zdFdp
bmRvdyA9IG1fd2ViVmlldy0+d2luZG93KCk7CisKKyAgICBpZiAoIW1fc2Nyb2xsYmFyICYmIHZp
c2libGVJdGVtcygpIDwgbV9pdGVtcy5zaXplKCkpIHsKKyAgICAgICAgbV9zY3JvbGxiYXIgPSBT
Y3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcih0aGlzLCBWZXJ0aWNhbFNjcm9sbGJhciwg
U21hbGxTY3JvbGxiYXIpOworICAgICAgICBtX3Njcm9sbGJhci0+c3R5bGVDaGFuZ2VkKCk7Cisg
ICAgfQorCisgICAgaWYgKCFtX3BvcHVwKSB7CisgICAgICAgIHJlZ2lzdGVyV2luZG93Q2xhc3Mo
KTsKKworICAgICAgICBEV09SRCBleFN0eWxlID0gV1NfRVhfTFRSUkVBRElORzsKKworICAgICAg
ICBtX3BvcHVwID0gOjpDcmVhdGVXaW5kb3dFeChleFN0eWxlLCBrV2ViS2l0MldlYlBvcHVwTWVu
dVByb3h5V2luZG93Q2xhc3NOYW1lLCBURVhUKCJQb3B1cE1lbnUiKSwKKyAgICAgICAgICAgIFdT
X1BPUFVQIHwgV1NfQk9SREVSLAorICAgICAgICAgICAgbV93aW5kb3dSZWN0LngoKSwgbV93aW5k
b3dSZWN0LnkoKSwgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSwK
KyAgICAgICAgICAgIGhvc3RXaW5kb3csIDAsIGluc3RhbmNlSGFuZGxlKCksIHRoaXMpOworCisg
ICAgICAgIGlmICghbV9wb3B1cCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBC
T09MIHNob3VsZEFuaW1hdGUgPSBGQUxTRTsKKyAgICA6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQ
SV9HRVRDT01CT0JPWEFOSU1BVElPTiwgMCwgJnNob3VsZEFuaW1hdGUsIDApOworCisgICAgaWYg
KHNob3VsZEFuaW1hdGUpIHsKKyAgICAgICAgUkVDVCB2aWV3UmVjdCA9IHswfTsKKyAgICAgICAg
OjpHZXRXaW5kb3dSZWN0KGhvc3RXaW5kb3csICZ2aWV3UmVjdCk7CisKKyAgICAgICAgaWYgKCE6
OklzUmVjdEVtcHR5KCZ2aWV3UmVjdCkpIHsKKyAgICAgICAgICAgIC8vIFBvcHVwcyBzaG91bGQg
c2xpZGUgaW50byB2aWV3IGF3YXkgZnJvbSB0aGUgPHNlbGVjdD4gYm94CisgICAgICAgICAgICAv
LyBOT1RFOiBUaGlzIG1heSBoYXZlIHRvIGNoYW5nZSBmb3IgVmlzdGEKKyAgICAgICAgICAgIERX
T1JEIHNsaWRlRGlyZWN0aW9uID0gKG1fd2luZG93UmVjdC55KCkgPCB2aWV3UmVjdC50b3AgKyBy
ZWN0LmxvY2F0aW9uKCkueSgpKSA/IEFXX1ZFUl9ORUdBVElWRSA6IEFXX1ZFUl9QT1NJVElWRTsK
KworICAgICAgICAgICAgOjpBbmltYXRlV2luZG93KG1fcG9wdXAsIGRlZmF1bHRBbmltYXRpb25E
dXJhdGlvbiwgQVdfU0xJREUgfCBzbGlkZURpcmVjdGlvbik7CisgICAgICAgIH0KKyAgICB9IGVs
c2UKKyAgICAgICAgOjpTaG93V2luZG93KG1fcG9wdXAsIFNXX1NIT1dOT0FDVElWQVRFKTsKKwor
CisgICAgaW50IGluZGV4ID0gc2VsZWN0ZWRJbmRleDsKKyAgICBpZiAoaW5kZXggPj0gMCkKKyAg
ICAgICAgc2V0Rm9jdXNlZEluZGV4KGluZGV4KTsKKworICAgIG1fc2hvd1BvcHVwID0gdHJ1ZTsK
KworICAgIC8vIFByb3RlY3QgdGhlIHBvcHVwIG1lbnUgaW4gY2FzZSBpdHMgb3duZXIgaXMgZGVz
dHJveWVkIHdoaWxlIHdlJ3JlIHJ1bm5pbmcgdGhlIG1lc3NhZ2UgcHVtcC4KKyAgICBSZWZQdHI8
V2ViUG9wdXBNZW51UHJveHlXaW4+IHByb3RlY3QodGhpcyk7CisKKyAgICA6OlNldENhcHR1cmUo
aG9zdFdpbmRvdyk7CisKKyAgICBNU0cgbXNnOworICAgIEhXTkQgYWN0aXZlV2luZG93OworCisg
ICAgd2hpbGUgKDo6R2V0TWVzc2FnZSgmbXNnLCAwLCAwLCAwKSkgeworICAgICAgICBzd2l0Y2gg
KG1zZy5tZXNzYWdlKSB7CisgICAgICAgIGNhc2UgV01fSE9TVF9XSU5ET1dfTU9VU0VNT1ZFOgor
ICAgICAgICBjYXNlIFdNX0hPU1RfV0lORE9XX0NIQVI6IAorICAgICAgICAgICAgaWYgKG1zZy5o
d25kID09IG1fcG9wdXApIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIG1lc3NhZ2Ugc2hvdWxk
IGJlIHNlbnQgdG8gdGhlIGhvc3Qgd2luZG93LgorICAgICAgICAgICAgICAgIG1zZy5od25kID0g
aG9zdFdpbmRvdzsKKyAgICAgICAgICAgICAgICBtc2cubWVzc2FnZSAtPSBXTV9IT1NUX1dJTkRP
V19GSVJTVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8v
IFN0ZWFsIG1vdXNlIG1lc3NhZ2VzLgorICAgICAgICBjYXNlIFdNX05DTU9VU0VNT1ZFOgorICAg
ICAgICBjYXNlIFdNX05DTEJVVFRPTkRPV046CisgICAgICAgIGNhc2UgV01fTkNMQlVUVE9OVVA6
CisgICAgICAgIGNhc2UgV01fTkNMQlVUVE9OREJMQ0xLOgorICAgICAgICBjYXNlIFdNX05DUkJV
VFRPTkRPV046CisgICAgICAgIGNhc2UgV01fTkNSQlVUVE9OVVA6CisgICAgICAgIGNhc2UgV01f
TkNSQlVUVE9OREJMQ0xLOgorICAgICAgICBjYXNlIFdNX05DTUJVVFRPTkRPV046CisgICAgICAg
IGNhc2UgV01fTkNNQlVUVE9OVVA6CisgICAgICAgIGNhc2UgV01fTkNNQlVUVE9OREJMQ0xLOgor
ICAgICAgICBjYXNlIFdNX01PVVNFV0hFRUw6CisgICAgICAgICAgICBtc2cuaHduZCA9IG1fcG9w
dXA7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBUaGVzZSBtb3VzZSBtZXNzYWdl
cyB1c2UgY2xpZW50IGNvb3JkaW5hdGVzIHNvIHdlIG5lZWQgdG8gY29udmVydCB0aGVtLgorICAg
ICAgICBjYXNlIFdNX01PVVNFTU9WRToKKyAgICAgICAgY2FzZSBXTV9MQlVUVE9ORE9XTjoKKyAg
ICAgICAgY2FzZSBXTV9MQlVUVE9OVVA6CisgICAgICAgIGNhc2UgV01fTEJVVFRPTkRCTENMSzoK
KyAgICAgICAgY2FzZSBXTV9SQlVUVE9ORE9XTjoKKyAgICAgICAgY2FzZSBXTV9SQlVUVE9OVVA6
CisgICAgICAgIGNhc2UgV01fUkJVVFRPTkRCTENMSzoKKyAgICAgICAgY2FzZSBXTV9NQlVUVE9O
RE9XTjoKKyAgICAgICAgY2FzZSBXTV9NQlVUVE9OVVA6CisgICAgICAgIGNhc2UgV01fTUJVVFRP
TkRCTENMSzogeworICAgICAgICAgICAgLy8gVHJhbnNsYXRlIHRoZSBjb29yZGluYXRlLgorICAg
ICAgICAgICAgdHJhbnNsYXRlUG9pbnQobXNnLmxQYXJhbSwgbXNnLmh3bmQsIG1fcG9wdXApOwor
ICAgICAgICAgICAgbXNnLmh3bmQgPSBtX3BvcHVwOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBTdGVhbCBhbGwga2V5Ym9hcmQgbWVzc2FnZXMuCisgICAgICAg
IGNhc2UgV01fS0VZRE9XTjoKKyAgICAgICAgY2FzZSBXTV9LRVlVUDoKKyAgICAgICAgY2FzZSBX
TV9DSEFSOgorICAgICAgICBjYXNlIFdNX0RFQURDSEFSOgorICAgICAgICBjYXNlIFdNX1NZU0tF
WVVQOgorICAgICAgICBjYXNlIFdNX1NZU0NIQVI6CisgICAgICAgIGNhc2UgV01fU1lTREVBRENI
QVI6CisgICAgICAgICAgICBtc2cuaHduZCA9IG1fcG9wdXA7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIDo6VHJhbnNsYXRlTWVzc2FnZSgmbXNnKTsKKyAgICAgICAg
OjpEaXNwYXRjaE1lc3NhZ2UoJm1zZyk7CisKKyAgICAgICAgaWYgKCFtX3Nob3dQb3B1cCkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBhY3RpdmVXaW5kb3cgPSA6OkdldEFjdGl2ZVdpbmRv
dygpOworICAgICAgICBpZiAoYWN0aXZlV2luZG93ICE9IGhvc3RXaW5kb3cgJiYgITo6SXNDaGls
ZChhY3RpdmVXaW5kb3csIGhvc3RXaW5kb3cpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGlmICg6OkdldENhcHR1cmUoKSAhPSBob3N0V2luZG93KQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgaWYgKDo6R2V0Q2FwdHVyZSgpID09IGhvc3RXaW5kb3cpCisgICAgICAgIDo6
UmVsZWFzZUNhcHR1cmUoKTsKKworICAgIG1fc2hvd1BvcHVwID0gZmFsc2U7CisgICAgOjpTaG93
V2luZG93KG1fcG9wdXAsIFNXX0hJREUpOworCisgICAgbmV3U2VsZWN0ZWRJbmRleCA9IG1fbmV3
U2VsZWN0ZWRJbmRleDsKIH0KIAogdm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6aGlkZVBvcHVw
TWVudSgpCiB7CisgICAgaWYgKCFtX3Nob3dQb3B1cCkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
c2hvd1BvcHVwID0gZmFsc2U7CisKKyAgICA6OlNob3dXaW5kb3cobV9wb3B1cCwgU1dfSElERSk7
CisKKyAgICAvLyBQb3N0IGEgV01fTlVMTCBtZXNzYWdlIHRvIHdha2UgdXAgdGhlIG1lc3NhZ2Ug
cHVtcCBpZiBuZWNlc3NhcnkuCisgICAgOjpQb3N0TWVzc2FnZShtX3BvcHVwLCBXTV9OVUxMLCAw
LCAwKTsKK30KKwordm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6Y2FsY3VsYXRlUG9zaXRpb25B
bmRTaXplKGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgLy8gQ29udmVydCB0aGUgcmVjdCAo
d2hpY2ggaXMgaW4gdmlldyBjb29yaWRhdGVzKSBpbnRvIHNjcmVlbiBjb29yZGluYXRlcy4KKyAg
ICBJbnRSZWN0IHJlY3RJblNjcmVlbkNvb3JkcyA9IHJlY3Q7CisgICAgUE9JTlQgbG9jYXRpb24o
cmVjdEluU2NyZWVuQ29vcmRzIC5sb2NhdGlvbigpKTsKKyAgICBpZiAoITo6Q2xpZW50VG9TY3Jl
ZW4obV93ZWJWaWV3LT53aW5kb3coKSwgJmxvY2F0aW9uKSkKKyAgICAgICAgcmV0dXJuOworICAg
IHJlY3RJblNjcmVlbkNvb3Jkcy5zZXRMb2NhdGlvbihsb2NhdGlvbik7CisKKyAgICBpbnQgaXRl
bUNvdW50ID0gbV9pdGVtcy5zaXplKCk7CisgICAgbV9pdGVtSGVpZ2h0ID0gbV9kYXRhLm1faXRl
bUhlaWdodDsKKworICAgIGludCBuYXR1cmFsSGVpZ2h0ID0gbV9pdGVtSGVpZ2h0ICogaXRlbUNv
dW50OworICAgIGludCBwb3B1cEhlaWdodCA9IG1pbihtYXhQb3B1cEhlaWdodCwgbmF0dXJhbEhl
aWdodCk7CisKKyAgICAvLyBUaGUgcG9wdXAgc2hvdWxkIHNob3cgYW4gaW50ZWdyYWwgbnVtYmVy
IG9mIGl0ZW1zIChpLmUuIG5vIHBhcnRpYWwgaXRlbXMgc2hvdWxkIGJlIHZpc2libGUpCisgICAg
cG9wdXBIZWlnaHQgLT0gcG9wdXBIZWlnaHQgJSBtX2l0ZW1IZWlnaHQ7CisKKyAgICAvLyBOZXh0
IGRldGVybWluZSBpdHMgd2lkdGgKKyAgICBpbnQgcG9wdXBXaWR0aCA9IG1fZGF0YS5tX3BvcHVw
V2lkdGg7CisKKyAgICBpZiAobmF0dXJhbEhlaWdodCA+IG1heFBvcHVwSGVpZ2h0KSB7CisgICAg
ICAgIC8vIFdlIG5lZWQgcm9vbSBmb3IgYSBzY3JvbGxiYXIKKyAgICAgICAgcG9wdXBXaWR0aCAr
PSBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+c2Nyb2xsYmFyVGhpY2tuZXNzKFNtYWxs
U2Nyb2xsYmFyKTsKKyAgICB9CisKKyAgICBwb3B1cEhlaWdodCArPSAyICogcG9wdXBXaW5kb3dC
b3JkZXJXaWR0aDsKKworICAgIC8vIFRoZSBwb3B1cCBzaG91bGQgYmUgYXQgbGVhc3QgYXMgd2lk
ZSBhcyB0aGUgY29udHJvbCBvbiB0aGUgcGFnZQorICAgIHBvcHVwV2lkdGggPSBtYXgocmVjdElu
U2NyZWVuQ29vcmRzLndpZHRoKCkgLSBtX2RhdGEubV9jbGllbnRJbnNldExlZnQgLSBtX2RhdGEu
bV9jbGllbnRJbnNldFJpZ2h0LCBwb3B1cFdpZHRoKTsKKworICAgIC8vIEFsd2F5cyBsZWZ0LWFs
aWduIGl0ZW1zIGluIHRoZSBwb3B1cC4gIFRoaXMgbWF0Y2hlcyBwb3B1cCBtZW51cyBvbiB0aGUg
bWFjLgorICAgIGludCBwb3B1cFggPSByZWN0SW5TY3JlZW5Db29yZHMueCgpICsgbV9kYXRhLm1f
Y2xpZW50SW5zZXRMZWZ0OworCisgICAgSW50UmVjdCBwb3B1cFJlY3QocG9wdXBYLCByZWN0SW5T
Y3JlZW5Db29yZHMuYm90dG9tKCksIHBvcHVwV2lkdGgsIHBvcHVwSGVpZ2h0KTsKKworICAgIC8v
IFRoZSBwb3B1cCBuZWVkcyB0byBzdGF5IHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBzY3JlZW4g
YW5kIG5vdCBvdmVybGFwIGFueSB0b29sYmFycworICAgIEhNT05JVE9SIG1vbml0b3IgPSA6Ok1v
bml0b3JGcm9tV2luZG93KG1fd2ViVmlldy0+d2luZG93KCksIE1PTklUT1JfREVGQVVMVFRPUFJJ
TUFSWSk7CisgICAgTU9OSVRPUklORk9FWCBtb25pdG9ySW5mbzsKKyAgICBtb25pdG9ySW5mby5j
YlNpemUgPSBzaXplb2YoTU9OSVRPUklORk9FWCk7CisgICAgOjpHZXRNb25pdG9ySW5mbyhtb25p
dG9yLCAmbW9uaXRvckluZm8pOworICAgIEZsb2F0UmVjdCBzY3JlZW4gPSBtb25pdG9ySW5mby5y
Y1dvcms7CisKKyAgICAvLyBDaGVjayB0aGF0IHdlIGRvbid0IGdvIG9mZiB0aGUgc2NyZWVuIHZl
cnRpY2FsbHkKKyAgICBpZiAocG9wdXBSZWN0LmJvdHRvbSgpID4gc2NyZWVuLmhlaWdodCgpKSB7
CisgICAgICAgIC8vIFRoZSBwb3B1cCB3aWxsIGdvIG9mZiB0aGUgc2NyZWVuLCBzbyB0cnkgcGxh
Y2luZyBpdCBhYm92ZSB0aGUgY2xpZW50CisgICAgICAgIGlmIChyZWN0SW5TY3JlZW5Db29yZHMu
eSgpIC0gcG9wdXBSZWN0LmhlaWdodCgpIDwgMCkgeworICAgICAgICAgICAgLy8gVGhlIHBvcHVw
IHdvbid0IGZpdCBhYm92ZSwgZWl0aGVyLCBzbyBwbGFjZSBpdCB3aGVyZWV2ZXIncyBiaWdnZXIg
YW5kIHJlc2l6ZSBpdCB0byBmaXQKKyAgICAgICAgICAgIGlmICgocmVjdEluU2NyZWVuQ29vcmRz
LnkoKSArIHJlY3RJblNjcmVlbkNvb3Jkcy5oZWlnaHQoKSAvIDIpIDwgKHNjcmVlbi5oZWlnaHQo
KSAvIDIpKSB7CisgICAgICAgICAgICAgICAgLy8gQmVsb3cgaXMgYmlnZ2VyCisgICAgICAgICAg
ICAgICAgcG9wdXBSZWN0LnNldEhlaWdodChzY3JlZW4uaGVpZ2h0KCkgLSBwb3B1cFJlY3QueSgp
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gQWJvdmUgaXMgYmln
Z2VyCisgICAgICAgICAgICAgICAgcG9wdXBSZWN0LnNldFkoMCk7CisgICAgICAgICAgICAgICAg
cG9wdXBSZWN0LnNldEhlaWdodChyZWN0SW5TY3JlZW5Db29yZHMueSgpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFRoZSBwb3B1cCBmaXRzIGFib3Zl
LCBzbyByZXBvc2l0aW9uIGl0CisgICAgICAgICAgICBwb3B1cFJlY3Quc2V0WShyZWN0SW5TY3Jl
ZW5Db29yZHMueSgpIC0gcG9wdXBSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIENoZWNrIHRoYXQgd2UgZG9uJ3QgZ28gb2ZmIHRoZSBzY3JlZW4gaG9yaXpvbnRhbGx5
CisgICAgaWYgKHBvcHVwUmVjdC54KCkgPCBzY3JlZW4ueCgpKSB7CisgICAgICAgIHBvcHVwUmVj
dC5zZXRXaWR0aChwb3B1cFJlY3Qud2lkdGgoKSAtIChzY3JlZW4ueCgpIC0gcG9wdXBSZWN0Lngo
KSkpOworICAgICAgICBwb3B1cFJlY3Quc2V0WChzY3JlZW4ueCgpKTsKKyAgICB9CisKKyAgICBt
X3dpbmRvd1JlY3QgPSBwb3B1cFJlY3Q7Cit9CisKK0ludFJlY3QgV2ViUG9wdXBNZW51UHJveHlX
aW46OmNsaWVudFJlY3QoKSBjb25zdAoreworICAgIEludFJlY3QgY2xpZW50UmVjdCA9IG1fd2lu
ZG93UmVjdDsKKyAgICBjbGllbnRSZWN0LmluZmxhdGUoLXBvcHVwV2luZG93Qm9yZGVyV2lkdGgp
OworICAgIGNsaWVudFJlY3Quc2V0TG9jYXRpb24oSW50UG9pbnQoMCwgMCkpOworICAgIHJldHVy
biBjbGllbnRSZWN0OworfQorCit2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjppbnZhbGlkYXRl
SXRlbShpbnQgaW5kZXgpCit7CisgICAgaWYgKCFtX3BvcHVwKQorICAgICAgICByZXR1cm47CisK
KyAgICBJbnRSZWN0IGRhbWFnZVJlY3QoY2xpZW50UmVjdCgpKTsKKyAgICBkYW1hZ2VSZWN0LnNl
dFkobV9pdGVtSGVpZ2h0ICogKGluZGV4IC0gbV9zY3JvbGxPZmZzZXQpKTsKKyAgICBkYW1hZ2VS
ZWN0LnNldEhlaWdodChtX2l0ZW1IZWlnaHQpOworICAgIGlmIChtX3Njcm9sbGJhcikKKyAgICAg
ICAgZGFtYWdlUmVjdC5zZXRXaWR0aChkYW1hZ2VSZWN0LndpZHRoKCkgLSBtX3Njcm9sbGJhci0+
ZnJhbWVSZWN0KCkud2lkdGgoKSk7CisKKyAgICBSRUNUIHIgPSBkYW1hZ2VSZWN0OworICAgIDo6
SW52YWxpZGF0ZVJlY3QobV9wb3B1cCwgJnIsIFRSVUUpOworfQorCisvLyBTY3JvbGxiYXJDbGll
bnQKKworaW50IFdlYlBvcHVwTWVudVByb3h5V2luOjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIHJldHVybiAoKG9yaWVudGF0aW9uID09
IFZlcnRpY2FsU2Nyb2xsYmFyKSAmJiBtX3Njcm9sbGJhcikgPyAobV9zY3JvbGxiYXItPnRvdGFs
U2l6ZSgpIC0gbV9zY3JvbGxiYXItPnZpc2libGVTaXplKCkpIDogMDsKK30KKwordm9pZCBXZWJQ
b3B1cE1lbnVQcm94eVdpbjo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQ
b2ludCYgb2Zmc2V0KQoreworICAgIGlmIChtX3Njcm9sbGJhcikKKyAgICAgICAgbV9zY3JvbGxi
YXItPnNldFZhbHVlKG9mZnNldC55KCksIFNjcm9sbGJhcjo6RnJvbVNjcm9sbEFuaW1hdG9yKTsK
K30KKwordm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciog
c2Nyb2xsQmFyKQoreworICAgIEFTU0VSVChtX3Njcm9sbGJhcik7CisKKyAgICBpZiAoIW1fcG9w
dXApCisgICAgICAgIHJldHVybjsKKworICAgIGludCBvZmZzZXQgPSBzY3JvbGxCYXItPnZhbHVl
KCk7CisKKyAgICBpZiAobV9zY3JvbGxPZmZzZXQgPT0gb2Zmc2V0KQorICAgICAgICByZXR1cm47
CisKKyAgICBpbnQgc2Nyb2xsZWRMaW5lcyA9IG1fc2Nyb2xsT2Zmc2V0IC0gb2Zmc2V0OworICAg
IG1fc2Nyb2xsT2Zmc2V0ID0gb2Zmc2V0OworCisgICAgVUlOVCBmbGFncyA9IFNXX0lOVkFMSURB
VEU7CisKKyNpZmRlZiBDQU5fU0VUX1NNT09USF9TQ1JPTExJTkdfRFVSQVRJT04KKyAgICBCT09M
IHNob3VsZFNtb290aFNjcm9sbCA9IEZBTFNFOworICAgIDo6U3lzdGVtUGFyYW1ldGVyc0luZm8o
U1BJX0dFVExJU1RCT1hTTU9PVEhTQ1JPTExJTkcsIDAsICZzaG91bGRTbW9vdGhTY3JvbGwsIDAp
OworICAgIGlmIChzaG91bGRTbW9vdGhTY3JvbGwpCisgICAgICAgIGZsYWdzIHw9IE1BS0VXT1JE
KFNXX1NNT09USFNDUk9MTCwgc21vb3RoU2Nyb2xsQW5pbWF0aW9uRHVyYXRpb24pOworI2VuZGlm
CisKKyAgICBJbnRSZWN0IGxpc3RSZWN0ID0gY2xpZW50UmVjdCgpOworICAgIGlmIChtX3Njcm9s
bGJhcikKKyAgICAgICAgbGlzdFJlY3Quc2V0V2lkdGgobGlzdFJlY3Qud2lkdGgoKSAtIG1fc2Ny
b2xsYmFyLT5mcmFtZVJlY3QoKS53aWR0aCgpKTsKKyAgICBSRUNUIHIgPSBsaXN0UmVjdDsKKyAg
ICA6OlNjcm9sbFdpbmRvd0V4KG1fcG9wdXAsIDAsIHNjcm9sbGVkTGluZXMgKiBtX2l0ZW1IZWln
aHQsICZyLCAwLCAwLCAwLCBmbGFncyk7CisgICAgaWYgKG1fc2Nyb2xsYmFyKSB7CisgICAgICAg
IHIgPSBtX3Njcm9sbGJhci0+ZnJhbWVSZWN0KCk7CisgICAgICAgIDo6SW52YWxpZGF0ZVJlY3Qo
bV9wb3B1cCwgJnIsIFRSVUUpOworICAgIH0KKyAgICA6OlVwZGF0ZVdpbmRvdyhtX3BvcHVwKTsK
K30KKwordm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3Qo
U2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgSW50UmVj
dCBzY3JvbGxSZWN0ID0gcmVjdDsKKyAgICBzY3JvbGxSZWN0Lm1vdmUoc2Nyb2xsYmFyLT54KCks
IHNjcm9sbGJhci0+eSgpKTsKKyAgICBSRUNUIHIgPSBzY3JvbGxSZWN0OworICAgIDo6SW52YWxp
ZGF0ZVJlY3QobV9wb3B1cCwgJnIsIGZhbHNlKTsKK30KKworLy8gTWVzc2FnZSBwdW1wIG1lc3Nh
Z2VzLgorCitMUkVTVUxUIFdlYlBvcHVwTWVudVByb3h5V2luOjpvbk1vdXNlQWN0aXZhdGUoSFdO
RCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKQorewor
ICAgIGhhbmRsZWQgPSB0cnVlOworICAgIHJldHVybiBNQV9OT0FDVElWQVRFOworfQorCitMUkVT
VUxUIFdlYlBvcHVwTWVudVByb3h5V2luOjpvblNpemUoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2Us
IFdQQVJBTSwgTFBBUkFNIGxQYXJhbSwgYm9vbCYgaGFuZGxlZCkKK3sKKyAgICBoYW5kbGVkID0g
dHJ1ZTsKKyAgICBpZiAoIXNjcm9sbGJhcigpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIElu
dFNpemUgc2l6ZShMT1dPUkQobFBhcmFtKSwgSElXT1JEKGxQYXJhbSkpOworICAgIHNjcm9sbGJh
cigpLT5zZXRGcmFtZVJlY3QoSW50UmVjdChzaXplLndpZHRoKCkgLSBzY3JvbGxiYXIoKS0+d2lk
dGgoKSwgMCwgc2Nyb2xsYmFyKCktPndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKKworICAgIGlu
dCB2aXNpYmxlSXRlbXMgPSB0aGlzLT52aXNpYmxlSXRlbXMoKTsKKyAgICBzY3JvbGxiYXIoKS0+
c2V0RW5hYmxlZCh2aXNpYmxlSXRlbXMgPCBtX2l0ZW1zLnNpemUoKSk7CisgICAgc2Nyb2xsYmFy
KCktPnNldFN0ZXBzKDEsIG1heCgxLCB2aXNpYmxlSXRlbXMgLSAxKSk7CisgICAgc2Nyb2xsYmFy
KCktPnNldFByb3BvcnRpb24odmlzaWJsZUl0ZW1zLCBtX2l0ZW1zLnNpemUoKSk7CisgICAgcmV0
dXJuIDA7Cit9CisKK0xSRVNVTFQgV2ViUG9wdXBNZW51UHJveHlXaW46Om9uS2V5RG93bihIV05E
IGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSwgYm9vbCYg
aGFuZGxlZCkKK3sKKyAgICBoYW5kbGVkID0gdHJ1ZTsKKworICAgIExSRVNVTFQgbFJlc3VsdCA9
IDA7CisgICAgc3dpdGNoIChMT1dPUkQod1BhcmFtKSkgeworICAgIGNhc2UgVktfRE9XTjoKKyAg
ICBjYXNlIFZLX1JJR0hUOgorICAgICAgICBkb3duKCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgVktfVVA6CisgICAgY2FzZSBWS19MRUZUOgorICAgICAgICB1cCgpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFZLX0hPTUU6CisgICAgICAgIGZvY3VzRmlyc3QoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBWS19FTkQ6CisgICAgICAgIGZvY3VzTGFzdCgpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFZLX1BSSU9SOgorICAgICAgICBpZiAoZm9jdXNlZEluZGV4KCkgIT0gc2Ny
b2xsT2Zmc2V0KCkpIHsKKyAgICAgICAgICAgIC8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSBm
aXJzdCB2aXNpYmxlIGl0ZW0KKyAgICAgICAgICAgIGludCBmaXJzdFZpc2libGVJdGVtID0gc2Ny
b2xsT2Zmc2V0KCk7CisgICAgICAgICAgICB1cChmb2N1c2VkSW5kZXgoKSAtIGZpcnN0VmlzaWJs
ZUl0ZW0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gVGhlIGZpcnN0IHZpc2li
bGUgaXRlbSBpcyBzZWxlY3RlZCwgc28gbW92ZSB0aGUgc2VsZWN0aW9uIGJhY2sgb25lIHBhZ2UK
KyAgICAgICAgICAgIHVwKHZpc2libGVJdGVtcygpKTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICBjYXNlIFZLX05FWFQ6IHsKKyAgICAgICAgaW50IGxhc3RWaXNpYmxlSXRlbSA9IHNj
cm9sbE9mZnNldCgpICsgdmlzaWJsZUl0ZW1zKCkgLSAxOworICAgICAgICBpZiAoZm9jdXNlZElu
ZGV4KCkgIT0gbGFzdFZpc2libGVJdGVtKSB7CisgICAgICAgICAgICAvLyBTZXQgdGhlIHNlbGVj
dGlvbiB0byB0aGUgbGFzdCB2aXNpYmxlIGl0ZW0KKyAgICAgICAgICAgIGRvd24obGFzdFZpc2li
bGVJdGVtIC0gZm9jdXNlZEluZGV4KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gVGhlIGxhc3QgdmlzaWJsZSBpdGVtIGlzIHNlbGVjdGVkLCBzbyBtb3ZlIHRoZSBzZWxlY3Rp
b24gZm9yd2FyZCBvbmUgcGFnZQorICAgICAgICAgICAgZG93bih2aXNpYmxlSXRlbXMoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgVktfVEFCOgorICAgICAg
ICA6OlNlbmRNZXNzYWdlKG1fd2ViVmlldy0+d2luZG93KCksIG1lc3NhZ2UsIHdQYXJhbSwgbFBh
cmFtKTsKKyAgICAgICAgaGlkZSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZLX0VTQ0FQ
RToKKyAgICAgICAgaGlkZSgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBpZiAoaXNBU0NJSVByaW50YWJsZSh3UGFyYW0pKSB7CisgICAgICAgICAgICAvLyBTZW5kIHRo
ZSBrZXlkb3duIHRvIHRoZSBXZWJWaWV3IHNvIGl0IGNhbiBiZSB1c2VkIGZvciB0eXBlLXRvLXNl
bGVjdC4KKyAgICAgICAgICAgIC8vIFNpbmNlIHdlIGtub3cgdGhhdCB0aGUgdmlydHVhbCBrZXkg
aXMgQVNDSUkgcHJpbnRhYmxlLCBpdCdzIE9LIHRvIGNvbnZlcnQgdGhpcyB0bworICAgICAgICAg
ICAgLy8gYSBXTV9DSEFSIG1lc3NhZ2UuIChXZSBkb24ndCB3YW50IHRvIGNhbGwgVHJhbnNsYXRl
TWVzc2FnZSBiZWNhdXNlIHRoYXQgd2lsbCBwb3N0IGEKKyAgICAgICAgICAgIC8vIFdNX0NIQVIg
bWVzc2FnZSB0aGF0IHdpbGwgYmUgc3RvbGVuIGFuZCByZWRpcmVjdGVkIHRvIHRoZSBwb3B1cCBI
V05ELgorICAgICAgICAgICAgOjpQb3N0TWVzc2FnZShtX3BvcHVwLCBXTV9IT1NUX1dJTkRPV19D
SEFSLCB3UGFyYW0sIGxQYXJhbSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbFJlc3Vs
dCA9IDE7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBsUmVzdWx0OworfQor
CitMUkVTVUxUIFdlYlBvcHVwTWVudVByb3h5V2luOjpvbkNoYXIoSFdORCBoV25kLCBVSU5UIG1l
c3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSwgYm9vbCYgaGFuZGxlZCkKK3sKKyAgICBoYW5k
bGVkID0gdHJ1ZTsKKworICAgIExSRVNVTFQgbFJlc3VsdCA9IDA7CisgICAgaW50IGluZGV4Owor
ICAgIHN3aXRjaCAod1BhcmFtKSB7CisgICAgY2FzZSAweDBEOiAgIC8vIEVudGVyL1JldHVybgor
ICAgICAgICBoaWRlKCk7CisgICAgICAgIGluZGV4ID0gZm9jdXNlZEluZGV4KCk7CisgICAgICAg
IEFTU0VSVChpbmRleCA+PSAwKTsKKyAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gc2Vu
ZCBiYWNrIHRoZSBpbmRleCByaWdodCBhd2F5PworICAgICAgICBtX25ld1NlbGVjdGVkSW5kZXgg
PSBpbmRleDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAweDFCOiAgIC8vIEVzY2FwZQorICAg
ICAgICBoaWRlKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMHgwOTogICAvLyBUQUIKKyAg
ICBjYXNlIDB4MDg6ICAgLy8gQmFja3NwYWNlCisgICAgY2FzZSAweDBBOiAgIC8vIExpbmVmZWVk
CisgICAgZGVmYXVsdDogICAgIC8vIENoYXJhY3RlcgorICAgICAgICBsUmVzdWx0ID0gMTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGxSZXN1bHQ7Cit9CisKK0xSRVNVTFQg
V2ViUG9wdXBNZW51UHJveHlXaW46Om9uTW91c2VNb3ZlKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdl
LCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtLCBib29sJiBoYW5kbGVkKQoreworICAgIGhh
bmRsZWQgPSB0cnVlOworCisgICAgSW50UG9pbnQgbW91c2VQb2ludChNQUtFUE9JTlRTKGxQYXJh
bSkpOworICAgIGlmIChzY3JvbGxiYXIoKSkgeworICAgICAgICBJbnRSZWN0IHNjcm9sbEJhclJl
Y3QgPSBzY3JvbGxiYXIoKS0+ZnJhbWVSZWN0KCk7CisgICAgICAgIGlmIChzY3JvbGxiYXJDYXB0
dXJpbmdNb3VzZSgpIHx8IHNjcm9sbEJhclJlY3QuY29udGFpbnMobW91c2VQb2ludCkpIHsKKyAg
ICAgICAgICAgIC8vIFB1dCB0aGUgcG9pbnQgaW50byBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0
aGUgc2Nyb2xsIGJhcgorICAgICAgICAgICAgbW91c2VQb2ludC5tb3ZlKC1zY3JvbGxCYXJSZWN0
LngoKSwgLXNjcm9sbEJhclJlY3QueSgpKTsKKyAgICAgICAgICAgIFBsYXRmb3JtTW91c2VFdmVu
dCBldmVudChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIE1BS0VMUEFSQU0obW91c2VQb2ludC54KCks
IG1vdXNlUG9pbnQueSgpKSk7CisgICAgICAgICAgICBzY3JvbGxiYXIoKS0+bW91c2VNb3ZlZChl
dmVudCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIEJP
T0wgc2hvdWxkSG90VHJhY2sgPSBGQUxTRTsKKyAgICA6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQ
SV9HRVRIT1RUUkFDS0lORywgMCwgJnNob3VsZEhvdFRyYWNrLCAwKTsKKworICAgIFJFQ1QgYm91
bmRzOworICAgIDo6R2V0Q2xpZW50UmVjdChtX3BvcHVwLCAmYm91bmRzKTsKKyAgICBpZiAoITo6
UHRJblJlY3QoJmJvdW5kcywgbW91c2VQb2ludCkgJiYgISh3UGFyYW0gJiBNS19MQlVUVE9OKSkg
eworICAgICAgICAvLyBXaGVuIHRoZSBtb3VzZSBpcyBub3QgaW5zaWRlIHRoZSBwb3B1cCBtZW51
IGFuZCB0aGUgbGVmdCBidXR0b24gaXNuJ3QgZG93biwganVzdAorICAgICAgICAvLyByZXBvc3Qg
dGhlIG1lc3NhZ2UgdG8gdGhlIHdlYiB2aWV3LgorCisgICAgICAgIC8vIFRyYW5zbGF0ZSB0aGUg
Y29vcmRpbmF0ZS4KKyAgICAgICAgdHJhbnNsYXRlUG9pbnQobFBhcmFtLCBtX3BvcHVwLCBtX3dl
YlZpZXctPndpbmRvdygpKTsKKworICAgICAgICA6OlBvc3RNZXNzYWdlKG1fcG9wdXAsIFdNX0hP
U1RfV0lORE9XX01PVVNFTU9WRSwgd1BhcmFtLCBsUGFyYW0pOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICBpZiAoKHNob3VsZEhvdFRyYWNrIHx8IHdQYXJhbSAmIE1LX0xCVVRUT04p
ICYmIDo6UHRJblJlY3QoJmJvdW5kcywgbW91c2VQb2ludCkpCisgICAgICAgIHNldEZvY3VzZWRJ
bmRleChsaXN0SW5kZXhBdFBvaW50KG1vdXNlUG9pbnQpLCB0cnVlKTsKKworICAgIHJldHVybiAw
OworfQorCitMUkVTVUxUIFdlYlBvcHVwTWVudVByb3h5V2luOjpvbkxCdXR0b25Eb3duKEhXTkQg
aFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtLCBib29sJiBo
YW5kbGVkKQoreworICAgIGhhbmRsZWQgPSB0cnVlOworCisgICAgSW50UG9pbnQgbW91c2VQb2lu
dChNQUtFUE9JTlRTKGxQYXJhbSkpOworICAgIGlmIChzY3JvbGxiYXIoKSkgeworICAgICAgICBJ
bnRSZWN0IHNjcm9sbEJhclJlY3QgPSBzY3JvbGxiYXIoKS0+ZnJhbWVSZWN0KCk7CisgICAgICAg
IGlmIChzY3JvbGxCYXJSZWN0LmNvbnRhaW5zKG1vdXNlUG9pbnQpKSB7CisgICAgICAgICAgICAv
LyBQdXQgdGhlIHBvaW50IGludG8gY29vcmRpbmF0ZXMgcmVsYXRpdmUgdG8gdGhlIHNjcm9sbCBi
YXIKKyAgICAgICAgICAgIG1vdXNlUG9pbnQubW92ZSgtc2Nyb2xsQmFyUmVjdC54KCksIC1zY3Jv
bGxCYXJSZWN0LnkoKSk7CisgICAgICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQoaFdu
ZCwgbWVzc2FnZSwgd1BhcmFtLCBNQUtFTFBBUkFNKG1vdXNlUG9pbnQueCgpLCBtb3VzZVBvaW50
LnkoKSkpOworICAgICAgICAgICAgc2Nyb2xsYmFyKCktPm1vdXNlRG93bihldmVudCk7CisgICAg
ICAgICAgICBzZXRTY3JvbGxiYXJDYXB0dXJpbmdNb3VzZSh0cnVlKTsKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSWYgdGhlIG1vdXNlIGlzIGluc2lk
ZSB0aGUgd2luZG93LCB1cGRhdGUgdGhlIGZvY3VzZWQgaW5kZXguIE90aGVyd2lzZSwgCisgICAg
Ly8gaGlkZSB0aGUgcG9wdXAuCisgICAgUkVDVCBib3VuZHM7CisgICAgOjpHZXRDbGllbnRSZWN0
KG1fcG9wdXAsICZib3VuZHMpOworICAgIGlmICg6OlB0SW5SZWN0KCZib3VuZHMsIG1vdXNlUG9p
bnQpKQorICAgICAgICBzZXRGb2N1c2VkSW5kZXgobGlzdEluZGV4QXRQb2ludChtb3VzZVBvaW50
KSwgdHJ1ZSk7CisgICAgZWxzZQorICAgICAgICBoaWRlKCk7CisKKyAgICByZXR1cm4gMDsKK30K
KworCitMUkVTVUxUIFdlYlBvcHVwTWVudVByb3h5V2luOjpvbkxCdXR0b25VcChIV05EIGhXbmQs
IFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSwgYm9vbCYgaGFuZGxl
ZCkKK3sKKyAgICBoYW5kbGVkID0gdHJ1ZTsKKworICAgIEludFBvaW50IG1vdXNlUG9pbnQoTUFL
RVBPSU5UUyhsUGFyYW0pKTsKKyAgICBpZiAoc2Nyb2xsYmFyKCkpIHsKKyAgICAgICAgSW50UmVj
dCBzY3JvbGxCYXJSZWN0ID0gc2Nyb2xsYmFyKCktPmZyYW1lUmVjdCgpOworICAgICAgICBpZiAo
c2Nyb2xsYmFyQ2FwdHVyaW5nTW91c2UoKSB8fCBzY3JvbGxCYXJSZWN0LmNvbnRhaW5zKG1vdXNl
UG9pbnQpKSB7CisgICAgICAgICAgICBzZXRTY3JvbGxiYXJDYXB0dXJpbmdNb3VzZShmYWxzZSk7
CisgICAgICAgICAgICAvLyBQdXQgdGhlIHBvaW50IGludG8gY29vcmRpbmF0ZXMgcmVsYXRpdmUg
dG8gdGhlIHNjcm9sbCBiYXIKKyAgICAgICAgICAgIG1vdXNlUG9pbnQubW92ZSgtc2Nyb2xsQmFy
UmVjdC54KCksIC1zY3JvbGxCYXJSZWN0LnkoKSk7CisgICAgICAgICAgICBQbGF0Zm9ybU1vdXNl
RXZlbnQgZXZlbnQoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBNQUtFTFBBUkFNKG1vdXNlUG9pbnQu
eCgpLCBtb3VzZVBvaW50LnkoKSkpOworICAgICAgICAgICAgc2Nyb2xsYmFyKCktPm1vdXNlVXAo
KTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgaGFjayB0byB3b3JrIGFyb3VuZCBT
Y3JvbGxiYXIgbm90IGludmFsaWRhdGluZyBjb3JyZWN0bHkgd2hlbiBpdCBkb2Vzbid0IGhhdmUg
YSBwYXJlbnQgd2lkZ2V0CisgICAgICAgICAgICBSRUNUIHIgPSBzY3JvbGxCYXJSZWN0OworICAg
ICAgICAgICAgOjpJbnZhbGlkYXRlUmVjdChtX3BvcHVwLCAmciwgVFJVRSk7CisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBPbmx5IGhpZGUgdGhlIHBvcHVw
IGlmIHRoZSBtb3VzZSBpcyBpbnNpZGUgdGhlIHBvcHVwIHdpbmRvdy4KKyAgICBSRUNUIGJvdW5k
czsKKyAgICA6OkdldENsaWVudFJlY3QobV9wb3B1cCwgJmJvdW5kcyk7CisgICAgaWYgKDo6UHRJ
blJlY3QoJmJvdW5kcywgbW91c2VQb2ludCkpIHsKKyAgICAgICAgaGlkZSgpOworICAgICAgICBp
bnQgaW5kZXggPSBmb2N1c2VkSW5kZXgoKTsKKyAgICAgICAgaWYgKGluZGV4ID49IDApIHsKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIHNlbmQgYmFjayB0aGUgaW5kZXggcmln
aHQgYXdheT8KKyAgICAgICAgICAgICBtX25ld1NlbGVjdGVkSW5kZXggPSBpbmRleDsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitMUkVTVUxUIFdlYlBvcHVwTWVudVBy
b3h5V2luOjpvbk1vdXNlV2hlZWwoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFy
YW0sIExQQVJBTSwgYm9vbCYgaGFuZGxlZCkKK3sKKyAgICBoYW5kbGVkID0gdHJ1ZTsKKworICAg
IGlmICghc2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaW50IGkgPSAwOwor
ICAgIGZvciAoaW5jcmVtZW50V2hlZWxEZWx0YShHRVRfV0hFRUxfREVMVEFfV1BBUkFNKHdQYXJh
bSkpOyBhYnMod2hlZWxEZWx0YSgpKSA+PSBXSEVFTF9ERUxUQTsgcmVkdWNlV2hlZWxEZWx0YShX
SEVFTF9ERUxUQSkpIHsKKyAgICAgICAgaWYgKHdoZWVsRGVsdGEoKSA+IDApCisgICAgICAgICAg
ICArK2k7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIC0taTsKKyAgICB9CisgICAgc2Nyb2xs
YmFyKCktPnNjcm9sbChpID4gMCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5l
LCBhYnMoaSkpOworICAgIHJldHVybiAwOworfQorCitMUkVTVUxUIFdlYlBvcHVwTWVudVByb3h5
V2luOjpvblBhaW50KEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSwgYm9v
bCYgaGFuZGxlZCkKK3sKKyAgICBoYW5kbGVkID0gdHJ1ZTsKKworICAgIFBBSU5UU1RSVUNUIHBh
aW50U3RydWN0OworICAgIDo6QmVnaW5QYWludChtX3BvcHVwLCAmcGFpbnRTdHJ1Y3QpOworICAg
IHBhaW50KHBhaW50U3RydWN0LnJjUGFpbnQsIHBhaW50U3RydWN0LmhkYyk7CisgICAgOjpFbmRQ
YWludChtX3BvcHVwLCAmcGFpbnRTdHJ1Y3QpOworCisgICAgcmV0dXJuIDA7Cit9CisKK0xSRVNV
TFQgV2ViUG9wdXBNZW51UHJveHlXaW46Om9uUHJpbnRDbGllbnQoSFdORCBoV25kLCBVSU5ULCBX
UEFSQU0gd1BhcmFtLCBMUEFSQU0sIGJvb2wmIGhhbmRsZWQpCit7CisgICAgaGFuZGxlZCA9IHRy
dWU7CisKKyAgICBIREMgaGRjID0gcmVpbnRlcnByZXRfY2FzdDxIREM+KHdQYXJhbSk7CisgICAg
cGFpbnQoY2xpZW50UmVjdCgpLCBoZGMpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgV2Vi
UG9wdXBNZW51UHJveHlXaW46OmRvd24odW5zaWduZWQgbGluZXMpCit7CisgICAgaW50IHNpemUg
PSBtX2l0ZW1zLnNpemUoKTsKKworICAgIGludCBsYXN0U2VsZWN0YWJsZUluZGV4LCBzZWxlY3Rl
ZExpc3RJbmRleDsKKyAgICBsYXN0U2VsZWN0YWJsZUluZGV4ID0gc2VsZWN0ZWRMaXN0SW5kZXgg
PSBmb2N1c2VkSW5kZXgoKTsKKyAgICBmb3IgKGludCBpID0gc2VsZWN0ZWRMaXN0SW5kZXggKyAx
OyBpID49IDAgJiYgaSA8IHNpemU7ICsraSkgeworICAgICAgICBpZiAobV9pdGVtc1tpXS5tX2lz
RW5hYmxlZCkgeworICAgICAgICAgICAgbGFzdFNlbGVjdGFibGVJbmRleCA9IGk7CisgICAgICAg
ICAgICBpZiAoaSA+PSBzZWxlY3RlZExpc3RJbmRleCArIChpbnQpbGluZXMpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc2V0Rm9jdXNlZElu
ZGV4KGxhc3RTZWxlY3RhYmxlSW5kZXgpOworfQorCitib29sIFdlYlBvcHVwTWVudVByb3h5V2lu
Ojp1cCh1bnNpZ25lZCBsaW5lcykKK3sKKyAgICBpbnQgc2l6ZSA9IG1faXRlbXMuc2l6ZSgpOwor
CisgICAgaW50IGxhc3RTZWxlY3RhYmxlSW5kZXgsIHNlbGVjdGVkTGlzdEluZGV4OworICAgIGxh
c3RTZWxlY3RhYmxlSW5kZXggPSBzZWxlY3RlZExpc3RJbmRleCA9IGZvY3VzZWRJbmRleCgpOwor
ICAgIGZvciAoaW50IGkgPSBzZWxlY3RlZExpc3RJbmRleCAtIDE7IGkgPj0gMCAmJiBpIDwgc2l6
ZTsgLS1pKSB7CisgICAgICAgIGlmIChtX2l0ZW1zW2ldLm1faXNFbmFibGVkKSB7CisgICAgICAg
ICAgICBsYXN0U2VsZWN0YWJsZUluZGV4ID0gaTsKKyAgICAgICAgICAgIGlmIChpIDw9IHNlbGVj
dGVkTGlzdEluZGV4IC0gKGludClsaW5lcykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBzZXRGb2N1c2VkSW5kZXgobGFzdFNlbGVjdGFibGVJ
bmRleCk7Cit9CisKK3ZvaWQgV2ViUG9wdXBNZW51UHJveHlXaW46OnBhaW50KGNvbnN0IEludFJl
Y3QmIGRhbWFnZVJlY3QsIEhEQyBoZGMpCit7CisgICAgaWYgKCFtX3BvcHVwKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIW1fREMpIHsKKyAgICAgICAgbV9EQyA9IDo6Q3JlYXRlQ29tcGF0
aWJsZURDKDo6R2V0REMobV9wb3B1cCkpOworICAgICAgICBpZiAoIW1fREMpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fYm1wKSB7CisgICAgICAgIGJvb2wga2VlcEJp
dG1hcCA9IGZhbHNlOworICAgICAgICBCSVRNQVAgYml0bWFwOworICAgICAgICBpZiAoOjpHZXRP
YmplY3QobV9ibXAsIHNpemVvZihiaXRtYXApLCAmYml0bWFwKSkKKyAgICAgICAgICAgIGtlZXBC
aXRtYXAgPSBiaXRtYXAuYm1XaWR0aCA9PSBjbGllbnRSZWN0KCkud2lkdGgoKSAmJiBiaXRtYXAu
Ym1IZWlnaHQgPT0gY2xpZW50UmVjdCgpLmhlaWdodCgpOworICAgICAgICBpZiAoIWtlZXBCaXRt
YXApIHsKKyAgICAgICAgICAgIDo6RGVsZXRlT2JqZWN0KG1fYm1wKTsKKyAgICAgICAgICAgIG1f
Ym1wID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghbV9ibXApIHsKKyAgICAgICAg
Qml0bWFwSW5mbyBiaXRtYXBJbmZvID0gQml0bWFwSW5mbzo6Y3JlYXRlQm90dG9tVXAoY2xpZW50
UmVjdCgpLnNpemUoKSk7CisgICAgICAgIHZvaWQqIHBpeGVscyA9IDA7CisgICAgICAgIG1fYm1w
ID0gOjpDcmVhdGVESUJTZWN0aW9uKG1fREMsICZiaXRtYXBJbmZvLCBESUJfUkdCX0NPTE9SUywg
JnBpeGVscywgMCwgMCk7CisgICAgICAgIGlmICghbV9ibXApCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIDo6U2VsZWN0T2JqZWN0KG1fREMsIG1fYm1wKTsKKyAgICB9CisKKyAgICBHcmFw
aGljc0NvbnRleHQgY29udGV4dChtX0RDKTsKKworICAgIEludFJlY3QgdHJhbnNsYXRlZERhbWFn
ZVJlY3QgPSBkYW1hZ2VSZWN0OworICAgIHRyYW5zbGF0ZWREYW1hZ2VSZWN0Lm1vdmUoSW50U2l6
ZSgwLCBtX3Njcm9sbE9mZnNldCAqIG1faXRlbUhlaWdodCkpOworICAgIG1fZGF0YS5tX25vdFNl
bGVjdGVkQmFja2luZ1N0b3JlLT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0LmxvY2F0aW9uKCks
IHRyYW5zbGF0ZWREYW1hZ2VSZWN0KTsKKworICAgIEludFJlY3Qgc2VsZWN0ZWRJbmRleFJlY3RJ
bkJhY2tpbmdTdG9yZSgwLCBmb2N1c2VkSW5kZXgoKSAqIG1faXRlbUhlaWdodCwgbV9kYXRhLm1f
cG9wdXBXaWR0aCwgbV9pdGVtSGVpZ2h0KTsKKyAgICBJbnRQb2ludCBzZWxlY3RlZEluZGV4RHN0
UG9pbnQgPSBzZWxlY3RlZEluZGV4UmVjdEluQmFja2luZ1N0b3JlLmxvY2F0aW9uKCk7CisgICAg
c2VsZWN0ZWRJbmRleERzdFBvaW50Lm1vdmUoMCwgLW1fc2Nyb2xsT2Zmc2V0ICogbV9pdGVtSGVp
Z2h0KTsKKworICAgIG1fZGF0YS5tX3NlbGVjdGVkQmFja2luZ1N0b3JlLT5wYWludChjb250ZXh0
LCBzZWxlY3RlZEluZGV4RHN0UG9pbnQsIHNlbGVjdGVkSW5kZXhSZWN0SW5CYWNraW5nU3RvcmUp
OworCisgICAgaWYgKG1fc2Nyb2xsYmFyKQorICAgICAgICBtX3Njcm9sbGJhci0+cGFpbnQoJmNv
bnRleHQsIGRhbWFnZVJlY3QpOworCisgICAgSERDIGxvY2FsREMgPSBoZGMgPyBoZGMgOiA6Okdl
dERDKG1fcG9wdXApOworCisgICAgOjpCaXRCbHQobG9jYWxEQywgZGFtYWdlUmVjdC54KCksIGRh
bWFnZVJlY3QueSgpLCBkYW1hZ2VSZWN0LndpZHRoKCksIGRhbWFnZVJlY3QuaGVpZ2h0KCksIG1f
REMsIGRhbWFnZVJlY3QueCgpLCBkYW1hZ2VSZWN0LnkoKSwgU1JDQ09QWSk7CisKKyAgICBpZiAo
IWhkYykKKyAgICAgICAgOjpSZWxlYXNlREMobV9wb3B1cCwgbG9jYWxEQyk7Cit9CisKK2Jvb2wg
V2ViUG9wdXBNZW51UHJveHlXaW46OnNldEZvY3VzZWRJbmRleChpbnQgaSwgYm9vbCBob3RUcmFj
a2luZykKK3sKKyAgICBpZiAoaSA8IDAgfHwgaSA+PSBtX2l0ZW1zLnNpemUoKSB8fCBpID09IGZv
Y3VzZWRJbmRleCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1faXRlbXNb
aV0ubV9pc0VuYWJsZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGludmFsaWRhdGVJ
dGVtKGZvY3VzZWRJbmRleCgpKTsKKyAgICBpbnZhbGlkYXRlSXRlbShpKTsKKworICAgIG1fZm9j
dXNlZEluZGV4ID0gaTsKKworICAgIC8vIEZJWE1FOiBJZiB3ZSBhcmUgbm90IGhvdFRyYWNraW5n
LCB3ZSBuZWVkIHRvIHNlbmQgYSBtZXNzYWdlIGJhY2sgdG8gdGhlIFdlYlByb2Nlc3MgdG8KKyAg
ICAvLyBjYWxsIHRoZSBwb3B1cE1lbnVDbGllbnQncyBzZXRUZXh0RnJvbUl0ZW0gZnVuY3Rpb24g
b2YgdGhpcyBpbmRleC4gIFRoaXMgd2lsbCB1cGRhdGUKKyAgICAvLyB0aGUgY3VycmVudGx5IGRp
c3BsYXllZCBpdGVtIGF0IHRoZSB0b3Agb2YgdGhlIGxpc3QuCisKKyAgICBpZiAoIXNjcm9sbFRv
UmV2ZWFsU2VsZWN0aW9uKCkpCisgICAgICAgIDo6VXBkYXRlV2luZG93KG1fcG9wdXApOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2ludCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6dmlzaWJsZUl0
ZW1zKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2xpZW50UmVjdCgpLmhlaWdodCgpIC8gbV9pdGVt
SGVpZ2h0OworfQorCitpbnQgV2ViUG9wdXBNZW51UHJveHlXaW46Omxpc3RJbmRleEF0UG9pbnQo
Y29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIHJldHVybiBtX3Njcm9sbE9mZnNl
dCArIHBvaW50LnkoKSAvIG1faXRlbUhlaWdodDsKK30KKworaW50IFdlYlBvcHVwTWVudVByb3h5
V2luOjpmb2N1c2VkSW5kZXgoKSBjb25zdAoreworICAgIHJldHVybiBtX2ZvY3VzZWRJbmRleDsK
K30KKwordm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6Zm9jdXNGaXJzdCgpCit7CisgICAgaW50
IHNpemUgPSBtX2l0ZW1zLnNpemUoKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7CisgICAgICAgIGlmIChtX2l0ZW1zW2ldLm1faXNFbmFibGVkKSB7CisgICAgICAgICAg
ICBzZXRGb2N1c2VkSW5kZXgoaSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6Zm9jdXNMYXN0KCkKK3sKKyAgICBp
bnQgc2l6ZSA9IG1faXRlbXMuc2l6ZSgpOworCisgICAgZm9yIChpbnQgaSA9IHNpemUgLSAxOyBp
ID4gMDsgLS1pKSB7CisgICAgICAgIGlmIChtX2l0ZW1zW2ldLm1faXNFbmFibGVkKSB7CisgICAg
ICAgICAgICBzZXRGb2N1c2VkSW5kZXgoaSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KK30KKworCit2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjppbmNyZW1lbnRXaGVl
bERlbHRhKGludCBkZWx0YSkKK3sKKyAgICBtX3doZWVsRGVsdGEgKz0gZGVsdGE7Cit9CisKK3Zv
aWQgV2ViUG9wdXBNZW51UHJveHlXaW46OnJlZHVjZVdoZWVsRGVsdGEoaW50IGRlbHRhKQorewor
ICAgIEFTU0VSVChkZWx0YSA+PSAwKTsKKyAgICBBU1NFUlQoZGVsdGEgPD0gYWJzKG1fd2hlZWxE
ZWx0YSkpOworCisgICAgaWYgKG1fd2hlZWxEZWx0YSA+IDApCisgICAgICAgIG1fd2hlZWxEZWx0
YSAtPSBkZWx0YTsKKyAgICBlbHNlIGlmIChtX3doZWVsRGVsdGEgPCAwKQorICAgICAgICBtX3do
ZWVsRGVsdGEgKz0gZGVsdGE7CisgICAgZWxzZQorICAgICAgICByZXR1cm47Cit9CisKK2Jvb2wg
V2ViUG9wdXBNZW51UHJveHlXaW46OnNjcm9sbFRvUmV2ZWFsU2VsZWN0aW9uKCkKK3sKKyAgICBp
ZiAoIW1fc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgaW5kZXgg
PSBmb2N1c2VkSW5kZXgoKTsKKworICAgIGlmIChpbmRleCA8IG1fc2Nyb2xsT2Zmc2V0KSB7Cisg
ICAgICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1ZShpbmRleCwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Ny
b2xsQW5pbWF0b3IpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoaW5k
ZXggPj0gbV9zY3JvbGxPZmZzZXQgKyB2aXNpYmxlSXRlbXMoKSkgeworICAgICAgICBtX3Njcm9s
bGJhci0+c2V0VmFsdWUoaW5kZXggLSB2aXNpYmxlSXRlbXMoKSArIDEsIFNjcm9sbGJhcjo6Tm90
RnJvbVNjcm9sbEFuaW1hdG9yKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIv
VUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dDIvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5oCShyZXZpc2lvbiA3MDk1NCkK
KysrIFdlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiwyMyArMjYsMTA5IEBACiAjaWZuZGVmIFdlYlBvcHVwTWVudVByb3h5V2lu
X2gKICNkZWZpbmUgV2ViUG9wdXBNZW51UHJveHlXaW5faAogCisjaW5jbHVkZSAiUGxhdGZvcm1Q
b3B1cE1lbnVEYXRhLmgiCisjaW5jbHVkZSAiV2ViUG9wdXBJdGVtLmgiCiAjaW5jbHVkZSAiV2Vi
UG9wdXBNZW51UHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhci5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvU2Nyb2xsYmFyQ2xpZW50Lmg+CisKK3R5cGVkZWYgc3RydWN0IEhXTkRfXyog
SFdORDsKK3R5cGVkZWYgc3RydWN0IEhEQ19fKiBIREM7Cit0eXBlZGVmIHN0cnVjdCBIQklUTUFQ
X18qIEhCSVRNQVA7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBXZWJQb3B1cE1lbnVQ
cm94eVdpbiA6IHB1YmxpYyBXZWJQb3B1cE1lbnVQcm94eSB7CitjbGFzcyBXZWJWaWV3OworCitj
bGFzcyBXZWJQb3B1cE1lbnVQcm94eVdpbiA6IHB1YmxpYyBXZWJQb3B1cE1lbnVQcm94eSwgcHJp
dmF0ZSBXZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQgIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxXZWJQb3B1cE1lbnVQcm94eVdpbj4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxXZWJQb3B1cE1lbnVQcm94eVdpbj4gY3JlYXRlKFdlYlZpZXcqIHdlYlZpZXcpCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlBvcHVwTWVudVByb3h5V2luKCkpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlBvcHVwTWVudVByb3h5V2luKHdlYlZpZXcp
KTsKICAgICB9CiAgICAgfldlYlBvcHVwTWVudVByb3h5V2luKCk7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgc2hvd1BvcHVwTWVudShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgVmVjdG9yPFdl
YlBvcHVwSXRlbT4mLCBpbnQzMl90IHNlbGVjdGVkSW5kZXgsIGludDMyX3QmIG5ld1NlbGVjdGVk
SW5kZXgpOworICAgIHZpcnR1YWwgdm9pZCBzaG93UG9wdXBNZW51KGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmLCBjb25zdCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYsIGNvbnN0IFBsYXRmb3JtUG9wdXBN
ZW51RGF0YSYsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCwgaW50MzJfdCYgbmV3U2VsZWN0ZWRJbmRl
eCk7CiAgICAgdmlydHVhbCB2b2lkIGhpZGVQb3B1cE1lbnUoKTsKIAorICAgIHZvaWQgaGlkZSgp
IHsgaGlkZVBvcHVwTWVudSgpOyB9CisKIHByaXZhdGU6Ci0gICAgV2ViUG9wdXBNZW51UHJveHlX
aW4oKTsKKyAgICBXZWJQb3B1cE1lbnVQcm94eVdpbihXZWJWaWV3Kik7CisKKyAgICBXZWJDb3Jl
OjpTY3JvbGxiYXIqIHNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYmFyLmdldCgp
OyB9CisKKyAgICAvLyBTY3JvbGxCYXJDbGllbnQKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXpl
KFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoV2ViQ29yZTo6U2Nyb2xs
YmFyKik7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFdlYkNvcmU6
OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNBY3RpdmUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHNjcm9s
bGJhckNvcm5lclByZXNlbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgc3RhdGlj
IGJvb2wgcmVnaXN0ZXJXaW5kb3dDbGFzcygpOworICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNL
IFdlYlBvcHVwTWVudVByb3h5V25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7Cisg
ICAgTFJFU1VMVCB3bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFt
LCBMUEFSQU0gbFBhcmFtKTsKKworICAgIC8vIE1lc3NhZ2UgcHVtcCBtZXNzYWdlcy4KKyAgICBM
UkVTVUxUIG9uTW91c2VBY3RpdmF0ZShIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFN
LCBib29sJiBoYW5kbGVkKTsKKyAgICBMUkVTVUxUIG9uU2l6ZShIV05ELCBVSU5UIG1lc3NhZ2Us
IFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsKKyAgICBMUkVTVUxUIG9uS2V5RG93bihI
V05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsKKyAgICBM
UkVTVUxUIG9uQ2hhcihIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBo
YW5kbGVkKTsKKyAgICBMUkVTVUxUIG9uTW91c2VNb3ZlKEhXTkQsIFVJTlQgbWVzc2FnZSwgV1BB
UkFNLCBMUEFSQU0sIGJvb2wmIGhhbmRsZWQpOworICAgIExSRVNVTFQgb25MQnV0dG9uRG93bihI
V05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsKKyAgICBM
UkVTVUxUIG9uTEJ1dHRvblVwKEhXTkQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0sIGJv
b2wmIGhhbmRsZWQpOworICAgIExSRVNVTFQgb25Nb3VzZVdoZWVsKEhXTkQsIFVJTlQgbWVzc2Fn
ZSwgV1BBUkFNLCBMUEFSQU0sIGJvb2wmIGhhbmRsZWQpOworICAgIExSRVNVTFQgb25QYWludChI
V05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsKKyAgICBM
UkVTVUxUIG9uUHJpbnRDbGllbnQoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSwg
Ym9vbCYgaGFuZGxlZCk7CisKKyAgICB2b2lkIGNhbGN1bGF0ZVBvc2l0aW9uQW5kU2l6ZShjb25z
dCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgV2ViQ29yZTo6SW50UmVjdCBjbGllbnRSZWN0KCkg
Y29uc3Q7CisgICAgdm9pZCBpbnZhbGlkYXRlSXRlbShpbnQgaW5kZXgpOworCisgICAgaW50IGl0
ZW1IZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2l0ZW1IZWlnaHQ7IH0KKyAgICBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiB3aW5kb3dSZWN0KCkgY29uc3QgeyByZXR1cm4gbV93aW5kb3dSZWN0OyB9
CisgICAgaW50IHdoZWVsRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3doZWVsRGVsdGE7IH0KKyAg
ICB2b2lkIHNldFdhc0NsaWNrZWQoYm9vbCBiID0gdHJ1ZSkgeyBtX3dhc0NsaWNrZWQgPSBiOyB9
CisgICAgYm9vbCB3YXNDbGlja2VkKCkgY29uc3QgeyByZXR1cm4gbV93YXNDbGlja2VkOyB9Cisg
ICAgdm9pZCBzZXRTY3JvbGxPZmZzZXQoaW50IG9mZnNldCkgeyBtX3Njcm9sbE9mZnNldCA9IG9m
ZnNldDsgfQorICAgIGludCBzY3JvbGxPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbE9m
ZnNldDsgfQorICAgIGJvb2wgc2Nyb2xsYmFyQ2FwdHVyaW5nTW91c2UoKSBjb25zdCB7IHJldHVy
biBtX3Njcm9sbGJhckNhcHR1cmluZ01vdXNlOyB9CisgICAgdm9pZCBzZXRTY3JvbGxiYXJDYXB0
dXJpbmdNb3VzZShib29sIGIpIHsgbV9zY3JvbGxiYXJDYXB0dXJpbmdNb3VzZSA9IGI7IH0KKwor
CisgICAgYm9vbCB1cCh1bnNpZ25lZCBsaW5lcyA9IDEpOworICAgIGJvb2wgZG93bih1bnNpZ25l
ZCBsaW5lcyA9IDEpOworCisgICAgdm9pZCBwYWludChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBk
YW1hZ2VSZWN0LCBIREMgPSAwKTsKKyAgICBpbnQgdmlzaWJsZUl0ZW1zKCkgY29uc3Q7CisgICAg
aW50IGxpc3RJbmRleEF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKKyAg
ICBib29sIHNldEZvY3VzZWRJbmRleChpbnQgaW5kZXgsIGJvb2wgaG90VHJhY2tpbmcgPSBmYWxz
ZSk7CisgICAgaW50IGZvY3VzZWRJbmRleCgpIGNvbnN0OworICAgIHZvaWQgZm9jdXNGaXJzdCgp
OworICAgIHZvaWQgZm9jdXNMYXN0KCk7CisgICAgYm9vbCBzY3JvbGxUb1JldmVhbFNlbGVjdGlv
bigpOworICAgIHZvaWQgaW5jcmVtZW50V2hlZWxEZWx0YShpbnQgZGVsdGEpOworICAgIHZvaWQg
cmVkdWNlV2hlZWxEZWx0YShpbnQgZGVsdGEpOworCisgICAgV2ViVmlldyogbV93ZWJWaWV3Owor
ICAgIFZlY3RvcjxXZWJQb3B1cEl0ZW0+IG1faXRlbXM7CisgICAgUGxhdGZvcm1Qb3B1cE1lbnVE
YXRhIG1fZGF0YTsKKyAgICBpbnQgbV9uZXdTZWxlY3RlZEluZGV4OworCisgICAgUmVmUHRyPFdl
YkNvcmU6OlNjcm9sbGJhcj4gbV9zY3JvbGxiYXI7CisgICAgSFdORCBtX3BvcHVwOworICAgIEhE
QyBtX0RDOworICAgIEhCSVRNQVAgbV9ibXA7CisgICAgV2ViQ29yZTo6SW50UmVjdCBtX3dpbmRv
d1JlY3Q7CisKKyAgICBpbnQgbV9pdGVtSGVpZ2h0OworICAgIGludCBtX3Njcm9sbE9mZnNldDsK
KyAgICBpbnQgbV93aGVlbERlbHRhOworICAgIGludCBtX2ZvY3VzZWRJbmRleDsKKyAgICBib29s
IG1fd2FzQ2xpY2tlZDsKKyAgICBib29sIG1fc2Nyb2xsYmFyQ2FwdHVyaW5nTW91c2U7CisgICAg
Ym9vbCBtX3Nob3dQb3B1cDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2Vi
S2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQ
cm9jZXNzL3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gNzA5NTQpCisrKyBXZWJLaXQyL1VJUHJv
Y2Vzcy93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyMiw3ICs2MjIsNyBAQCB2
b2lkIFdlYlZpZXc6OmRpZE5vdEhhbmRsZUtleUV2ZW50KGNvbnN0CiAKIFBhc3NSZWZQdHI8V2Vi
UG9wdXBNZW51UHJveHk+IFdlYlZpZXc6OmNyZWF0ZVBvcHVwTWVudVByb3h5KCkKIHsKLSAgICBy
ZXR1cm4gV2ViUG9wdXBNZW51UHJveHlXaW46OmNyZWF0ZSgpOworICAgIHJldHVybiBXZWJQb3B1
cE1lbnVQcm94eVdpbjo6Y3JlYXRlKHRoaXMpOwogfQogCiB2b2lkIFdlYlZpZXc6OnNldEZpbmRJ
bmRpY2F0b3IoUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiwgYm9vbCBmYWRlT3V0KQpJbmRleDog
V2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDcwOTU0
KQorKysgV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTM5Nyw2ICszOTcsOSBAQAogCQlCQ0JEMzkxNDEyNUJCMUE4MDBEMkMyOUYgLyog
V2ViUGFnZVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQkQzOTEyMTI1QkIxQTgwMEQyQzI5RiAvKiBXZWJQYWdl
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQlCQ0JEMzkxNTEyNUJCMUE4MDBEMkMy
OUYgLyogV2ViUGFnZVByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDQkQzOTEzMTI1QkIxQTgwMEQyQzI5RiAvKiBXZWJQYWdlUHJv
eHlNZXNzYWdlcy5oICovOyB9OwogCQlCQ0JEM0MzQjEyNUJGQTdBMDBEMkMyOUYgLyogU3RyaW5n
UGFpclZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNCRDNDM0ExMjVCRkE3QTAwRDJDMjlGIC8qIFN0cmluZ1BhaXJWZWN0b3IuaCAqLzsgfTsK
KwkJQkNDNDNBQkExMjdCOTVEQzAwMzE3RjE2IC8qIFBsYXRmb3JtUG9wdXBNZW51RGF0YS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0M0M0FCODEy
N0I5NURDMDAzMTdGMTYgLyogUGxhdGZvcm1Qb3B1cE1lbnVEYXRhLmNwcCAqLzsgfTsKKwkJQkND
NDNBQkIxMjdCOTVEQzAwMzE3RjE2IC8qIFBsYXRmb3JtUG9wdXBNZW51RGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNDNDNBQjkxMjdCOTVEQzAw
MzE3RjE2IC8qIFBsYXRmb3JtUG9wdXBNZW51RGF0YS5oICovOyB9OworCQlCQ0M0M0FDNzEyN0I5
OURFMDAzMTdGMTYgLyogV2ViUG9wdXBNZW51TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNDNDNBQzYxMjdCOTlERTAwMzE3RjE2IC8qIFdlYlBv
cHVwTWVudU1hYy5tbSAqLzsgfTsKIAkJQkNDNTZGNzkxMTU5OTU3RDAwMUNDQUY5IC8qIE1hY2hQ
b3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0M1
NkY3NzExNTk5NTdEMDAxQ0NBRjkgLyogTWFjaFBvcnQuaCAqLzsgfTsKIAkJQkNDNTcxNUIxMTVB
REFFRjAwMUNDQUY5IC8qIFdlYlN5c3RlbUludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNDNTcxNTkxMTVBREFFRjAwMUNDQUY5IC8qIFdl
YlN5c3RlbUludGVyZmFjZS5oICovOyB9OwogCQlCQ0M1NzE1QzExNUFEQUVGMDAxQ0NBRjkgLyog
V2ViU3lzdGVtSW50ZXJmYWNlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkNDNTcxNUExMTVBREFFRjAwMUNDQUY5IC8qIFdlYlN5c3RlbUludGVyZmFj
ZS5tbSAqLzsgfTsKQEAgLTkxMCw2ICs5MTMsOSBAQAogCQlCQ0JEMzkxMjEyNUJCMUE4MDBEMkMy
OUYgLyogV2ViUGFnZVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBhZ2VQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQkQzOTEzMTI1QkIxQTgwMEQyQzI5RiAvKiBXZWJQ
YWdlUHJveHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQ
YWdlUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0JEM0Mz
QTEyNUJGQTdBMDBEMkMyOUYgLyogU3RyaW5nUGFpclZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdHJpbmdQYWlyVmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUJDQzQzQUI4MTI3Qjk1REMwMDMxN0YxNiAvKiBQbGF0Zm9ybVBvcHVwTWVudURh
dGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGxhdGZvcm1Qb3B1
cE1lbnVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNDNDNBQjkxMjdC
OTVEQzAwMzE3RjE2IC8qIFBsYXRmb3JtUG9wdXBNZW51RGF0YS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybVBvcHVwTWVudURhdGEuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQkNDNDNBQzYxMjdCOTlERTAwMzE3RjE2IC8qIFdlYlBvcHVwTWVudU1h
Yy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlBvcHVwTWVu
dU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNDNTZGNzcxMTU5OTU3RDAw
MUNDQUY5IC8qIE1hY2hQb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1h
Y2hQb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQzU3MTU5MTE1QURBRUYw
MDFDQ0FGOSAvKiBXZWJTeXN0ZW1JbnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViU3lzdGVtSW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDQzU3MTVBMTE1QURBRUYwMDFDQ0FGOSAvKiBXZWJTeXN0ZW1JbnRlcmZhY2UubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJTeXN0ZW1JbnRlcmZhY2Uu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjc4LDYgKzEyODQsOCBAQAogCQkJ
CUJDQjBBRUU3MTIyRjUzRTMwMEIxMzQxRSAvKiBNdXRhYmxlRGljdGlvbmFyeS5oICovLAogCQkJ
CUMwMkJGRjE1MTI1MTRGRDgwMDlDQ0JFQSAvKiBOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmggKi8s
CiAJCQkJQkNDNTcxNjExMTVBREI0MjAwMUNDQUY5IC8qIE5vdEltcGxlbWVudGVkLmggKi8sCisJ
CQkJQkNDNDNBQjgxMjdCOTVEQzAwMzE3RjE2IC8qIFBsYXRmb3JtUG9wdXBNZW51RGF0YS5jcHAg
Ki8sCisJCQkJQkNDNDNBQjkxMjdCOTVEQzAwMzE3RjE2IC8qIFBsYXRmb3JtUG9wdXBNZW51RGF0
YS5oICovLAogCQkJCUJDQjBCMERGMTIzMDVBQjEwMEIxMzQxRSAvKiBVc2VyTWVzc2FnZUNvZGVy
cy5oICovLAogCQkJCTFBMEYyOUM5MTIwQjM3MTYwMDUzRDFCOSAvKiBWaXNpdGVkTGlua1RhYmxl
LmNwcCAqLywKIAkJCQkxQTBGMjlDQTEyMEIzNzE2MDA1M0QxQjkgLyogVmlzaXRlZExpbmtUYWJs
ZS5oICovLApAQCAtMTYxNCw2ICsxNjIyLDcgQEAKIAkJCQlCQzExMUFERjExMkY1QkMyMDAzMzdC
QUIgLyogV2ViRXJyb3JzTWFjLm1tICovLAogCQkJCTkzOTFGMjgzMTIxQjM4RjUwMEVCRjdFOCAv
KiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmggKi8sCiAJCQkJOTM5MUYyODQxMjFCMzhGNTAw
RUJGN0U4IC8qIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0gKi8sCisJCQkJQkNDNDNBQzYx
MjdCOTlERTAwMzE3RjE2IC8qIFdlYlBvcHVwTWVudU1hYy5tbSAqLywKIAkJCQlCQ0M1NzE1OTEx
NUFEQUVGMDAxQ0NBRjkgLyogV2ViU3lzdGVtSW50ZXJmYWNlLmggKi8sCiAJCQkJQkNDNTcxNUEx
MTVBREFFRjAwMUNDQUY5IC8qIFdlYlN5c3RlbUludGVyZmFjZS5tbSAqLywKIAkJCSk7CkBAIC0y
MjE5LDYgKzIyMjgsNyBAQAogCQkJCTFBNjE2MTUwMTI3Nzk4QjUwMDNBQ0Q4NiAvKiBEb3dubG9h
ZE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNjE2MUQ0MTI3ODk4MUMwMDNBQ0Q4NiAv
KiBEb3dubG9hZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUExMTlBOTUxMjdCNzk2MjAwQTlFQ0Ix
IC8qIE1lc3NhZ2VTZW5kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDQzQzQUJCMTI3Qjk1REMw
MDMxN0YxNiAvKiBQbGF0Zm9ybVBvcHVwTWVudURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjU0
OCw2ICsyNTU4LDggQEAKIAkJCQlDMDMzN0REMzEyN0EyQTBFMDA4RkY0RjQgLyogV2ViS2V5Ym9h
cmRFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMDMzN0REODEyN0E1MUI2MDA4RkY0RjQg
LyogV2ViVG91Y2hFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMDMzN0RERDEyN0E1MjFD
MDA4RkY0RjQgLyogV2ViUGxhdGZvcm1Ub3VjaFBvaW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUJDQzQzQUJBMTI3Qjk1REMwMDMxN0YxNiAvKiBQbGF0Zm9ybVBvcHVwTWVudURhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQkNDNDNBQzcxMjdCOTlERTAwMzE3RjE2IC8qIFdlYlBvcHVwTWVu
dU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblByb3h5LmNwcAkocmV2aXNpb24gNzA5NTQpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5Qcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCwyMCArMTE4LDE1
IEBAIHZvaWQgUGx1Z2luUHJveHk6OnBhaW50KEdyYXBoaWNzQ29udGV4dCoKICAgICAgICAgLy8g
QmxpdCB0aGUgcGx1Zy1pbiBiYWNraW5nIHN0b3JlIGludG8gb3VyIG93biBiYWNraW5nIHN0b3Jl
LgogICAgICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRl
eHQgPSBtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CiAgICAgICAgIAot
ICAgICAgICBtX3BsdWdpbkJhY2tpbmdTdG9yZS0+cGFpbnQoZ3JhcGhpY3NDb250ZXh0LmdldCgp
LCBJbnRSZWN0KDAsIDAsIG1fZnJhbWVSZWN0LndpZHRoKCksIG1fZnJhbWVSZWN0LmhlaWdodCgp
KSk7Ci0gICAgICAgIAorICAgICAgICBtX3BsdWdpbkJhY2tpbmdTdG9yZS0+cGFpbnQoKmdyYXBo
aWNzQ29udGV4dCwgSW50UG9pbnQoKSwgSW50UmVjdCgwLCAwLCBtX2ZyYW1lUmVjdC53aWR0aCgp
LCBtX2ZyYW1lUmVjdC5oZWlnaHQoKSkpOworCiAgICAgICAgIG1fcGx1Z2luQmFja2luZ1N0b3Jl
Q29udGFpbnNWYWxpZERhdGEgPSB0cnVlOwogICAgIH0KIAogICAgIEludFJlY3QgZGlydHlSZWN0
SW5QbHVnaW5Db29yZGluYXRlcyA9IGRpcnR5UmVjdDsKICAgICBkaXJ0eVJlY3RJblBsdWdpbkNv
b3JkaW5hdGVzLm1vdmUoLW1fZnJhbWVSZWN0LngoKSwgLW1fZnJhbWVSZWN0LnkoKSk7CiAKLSAg
ICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKLQotICAgIGdyYXBoaWNzQ29udGV4dC0+dHJhbnNs
YXRlKG1fZnJhbWVSZWN0LngoKSwgbV9mcmFtZVJlY3QueSgpKTsKLSAgICBtX2JhY2tpbmdTdG9y
ZS0+cGFpbnQoZ3JhcGhpY3NDb250ZXh0LCBkaXJ0eVJlY3RJblBsdWdpbkNvb3JkaW5hdGVzKTsK
LQotICAgIGdyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOworICAgIG1fYmFja2luZ1N0b3JlLT5w
YWludCgqZ3JhcGhpY3NDb250ZXh0LCBtX2ZyYW1lUmVjdC5sb2NhdGlvbigpLCBkaXJ0eVJlY3RJ
blBsdWdpbkNvb3JkaW5hdGVzKTsKIAogICAgIGlmIChtX3dhaXRpbmdGb3JQYWludEluUmVzcG9u
c2VUb1VwZGF0ZSkgewogICAgICAgICBtX3dhaXRpbmdGb3JQYWludEluUmVzcG9uc2VUb1VwZGF0
ZSA9IGZhbHNlOwpAQCAtMzYxLDkgKzM1Niw5IEBAIHZvaWQgUGx1Z2luUHJveHk6OnVwZGF0ZShj
b25zdCBJbnRSZWN0JiAKIAogICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgewogICAgICAgICAvLyBC
bGl0IHRoZSBwbHVnLWluIGJhY2tpbmcgc3RvcmUgaW50byBvdXIgb3duIGJhY2tpbmcgc3RvcmUu
Ci0gICAgICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4
dCA9IG1fYmFja2luZ1N0b3JlLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICAgICAgT3du
UHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gbV9iYWNraW5nU3RvcmUtPmNy
ZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwogCi0gICAgICAgIG1fcGx1Z2luQmFja2luZ1N0b3JlLT5w
YWludChncmFwaGljc0NvbnRleHQuZ2V0KCksIHBhaW50ZWRSZWN0UGx1Z2luQ29vcmRpbmF0ZXMp
OworICAgICAgICBtX3BsdWdpbkJhY2tpbmdTdG9yZS0+cGFpbnQoKmdyYXBoaWNzQ29udGV4dCwg
SW50UG9pbnQoKSwgcGFpbnRlZFJlY3RQbHVnaW5Db29yZGluYXRlcyk7CiAgICAgfQogCiAgICAg
Ly8gQXNrIHRoZSBjb250cm9sbGVyIHRvIGludmFsaWRhdGUgdGhlIHJlY3QgZm9yIHVzLgpJbmRl
eDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBvcHVwTWVudS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBvcHVwTWVu
dS5jcHAJKHJldmlzaW9uIDcwOTU0KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYlBvcHVwTWVudS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKIAog
I2luY2x1ZGUgIldlYlBvcHVwTWVudS5oIgogCisjaW5jbHVkZSAiUGxhdGZvcm1Qb3B1cE1lbnVE
YXRhLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2Vi
UGFnZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCkBAIC03Niw3ICs3Nyw3
IEBAIFZlY3RvcjxXZWJQb3B1cEl0ZW0+IFdlYlBvcHVwTWVudTo6cG9wdWwKICAgICAgICAgICAg
IC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igc3R5bGluZyB0aGUgZm9udC4KICAgICAgICAgICAg
IC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igc3R5bGluZyB0aGUgZm9yZWdyb3VuZCBhbmQgYmFj
a2dyb3VuZCBjb2xvcnMuCiAgICAgICAgICAgICAvLyBGSVhNRTogRmluZCBhIHdheSB0byBjdXN0
b21pemUgdGV4dCBjb2xvciB3aGVuIGFuIGl0ZW0gaXMgaGlnaGxpZ2h0ZWQuCi0gICAgICAgICAg
ICBpdGVtcy5hcHBlbmQoV2ViUG9wdXBJdGVtKFdlYlBvcHVwSXRlbTo6SXRlbSwgbV9wb3B1cENs
aWVudC0+aXRlbVRleHQoaSksIG1fcG9wdXBDbGllbnQtPml0ZW1Ub29sVGlwKGkpLCBtX3BvcHVw
Q2xpZW50LT5pdGVtQWNjZXNzaWJpbGl0eVRleHQoaSksIG1fcG9wdXBDbGllbnQtPml0ZW1Jc0Vu
YWJsZWQoaSkpKTsKKyAgICAgICAgICAgIGl0ZW1zLmFwcGVuZChXZWJQb3B1cEl0ZW0oV2ViUG9w
dXBJdGVtOjpJdGVtLCBtX3BvcHVwQ2xpZW50LT5pdGVtVGV4dChpKSwgbV9wb3B1cENsaWVudC0+
aXRlbVRvb2xUaXAoaSksIG1fcG9wdXBDbGllbnQtPml0ZW1BY2Nlc3NpYmlsaXR5VGV4dChpKSwg
bV9wb3B1cENsaWVudC0+aXRlbUlzRW5hYmxlZChpKSwgbV9wb3B1cENsaWVudC0+aXRlbUlzTGFi
ZWwoaSkpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtOTcsNyArOTgsMTEgQEAgdm9pZCBXZWJQ
b3B1cE1lbnU6OnNob3coY29uc3QgSW50UmVjdCYgcgogCiAgICAgLy8gTW92ZSB0byBwYWdlIGNv
b3JkaW5hdGVzCiAgICAgSW50UmVjdCBwYWdlQ29vcmRpbmF0ZXModmlldy0+Y29udGVudHNUb1dp
bmRvdyhyZWN0LmxvY2F0aW9uKCkpLCByZWN0LnNpemUoKSk7Ci0gICAgV2ViUHJvY2Vzczo6c2hh
cmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dQb3B1
cE1lbnUocGFnZUNvb3JkaW5hdGVzLCBpdGVtcywgaW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
KworICAgIFBsYXRmb3JtUG9wdXBNZW51RGF0YSBwbGF0Zm9ybURhdGE7CisgICAgc2V0VXBQbGF0
Zm9ybURhdGEocGxhdGZvcm1EYXRhKTsKKworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93UG9wdXBNZW51KHBhZ2VD
b29yZGluYXRlcywgaXRlbXMsIGluZGV4LCBwbGF0Zm9ybURhdGEpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKIH0KIAogdm9pZCBXZWJQb3B1cE1lbnU6OmhpZGUoKQpJbmRleDogV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBvcHVwTWVudS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQb3B1cE1lbnUuaAkocmV2aXNpb24gNzA5NTQp
CisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUG9wdXBNZW51LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAgY2xhc3MgUG9wdXBNZW51Q2xpZW50OwogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2U7CitzdHJ1Y3QgUGxhdGZvcm1Qb3B1cE1l
bnVEYXRhOwogc3RydWN0IFdlYlBvcHVwSXRlbTsKIAogY2xhc3MgV2ViUG9wdXBNZW51IDogcHVi
bGljIFdlYkNvcmU6OlBvcHVwTWVudSB7CkBAIC01NCw2ICs1NSw3IEBAIHByaXZhdGU6CiAgICAg
V2ViUG9wdXBNZW51KFdlYlBhZ2UqLCBXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQqKTsKIAogICAg
IFZlY3RvcjxXZWJQb3B1cEl0ZW0+IHBvcHVsYXRlSXRlbXMoKTsKKyAgICB2b2lkIHNldFVwUGxh
dGZvcm1EYXRhKFBsYXRmb3JtUG9wdXBNZW51RGF0YSYpOwogCiAgICAgV2ViQ29yZTo6UG9wdXBN
ZW51Q2xpZW50KiBtX3BvcHVwQ2xpZW50OwogICAgIFdlYlBhZ2UqIG1fcGFnZTsKSW5kZXg6IFdl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViUG9wdXBNZW51TWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViUG9w
dXBNZW51TWFjLm1tCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L21hYy9XZWJQb3B1cE1lbnVNYWMubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiV2ViUG9wdXBNZW51LmgiCisKKyNpbmNsdWRlICJQ
bGF0Zm9ybVBvcHVwTWVudURhdGEuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2Vi
UG9wdXBNZW51OjpzZXRVcFBsYXRmb3JtRGF0YShQbGF0Zm9ybVBvcHVwTWVudURhdGEmKQorewor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9xdC9XZWJQb3B1cE1lbnVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYlBvcHVwTWVudVF0LmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJQb3B1cE1lbnVR
dC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiV2ViUG9wdXBNZW51LmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybVBvcHVwTWVudURhdGEuaCIK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViUG9wdXBNZW51OjpzZXRVcFBsYXRmb3Jt
RGF0YShQbGF0Zm9ybVBvcHVwTWVudURhdGEmKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4vV2ViUG9wdXBN
ZW51V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvd2luL1dlYlBvcHVwTWVudVdpbi5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvd2luL1dlYlBvcHVwTWVudVdpbi5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIldlYlBvcHVwTWVudS5o
IgorCisjaW5jbHVkZSAiUGxhdGZvcm1Qb3B1cE1lbnVEYXRhLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9Gb250Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1RleHRSdW4uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BvcHVwTWVudUNsaWVudC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvUG9wdXBNZW51U3R5bGUuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1JlbmRlclRoZW1lLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworc3RhdGljIGNvbnN0IGludCBzZXBhcmF0b3JQYWRkaW5nID0gNDsKK3N0YXRp
YyBjb25zdCBpbnQgc2VwYXJhdG9ySGVpZ2h0ID0gMTsKK3N0YXRpYyBjb25zdCBpbnQgcG9wdXBX
aW5kb3dCb3JkZXJXaWR0aCA9IDE7CisKK3ZvaWQgV2ViUG9wdXBNZW51OjpzZXRVcFBsYXRmb3Jt
RGF0YShQbGF0Zm9ybVBvcHVwTWVudURhdGEmIGRhdGEpCit7CisgICAgaW50IGl0ZW1Db3VudCA9
IG1fcG9wdXBDbGllbnQtPmxpc3RTaXplKCk7CisKKyAgICBkYXRhLm1fY2xpZW50UGFkZGluZ0xl
ZnQgPSBtX3BvcHVwQ2xpZW50LT5jbGllbnRQYWRkaW5nTGVmdCgpOworICAgIGRhdGEubV9jbGll
bnRQYWRkaW5nUmlnaHQgPSBtX3BvcHVwQ2xpZW50LT5jbGllbnRQYWRkaW5nUmlnaHQoKTsKKyAg
ICBkYXRhLm1fY2xpZW50SW5zZXRMZWZ0ID0gbV9wb3B1cENsaWVudC0+Y2xpZW50SW5zZXRMZWZ0
KCk7CisgICAgZGF0YS5tX2NsaWVudEluc2V0UmlnaHQgPSBtX3BvcHVwQ2xpZW50LT5jbGllbnRJ
bnNldFJpZ2h0KCk7CisgICAgZGF0YS5tX2l0ZW1IZWlnaHQgPSBtX3BvcHVwQ2xpZW50LT5tZW51
U3R5bGUoKS5mb250KCkuaGVpZ2h0KCkgKyAxOworCisgICAgaW50IHBvcHVwV2lkdGggPSAwOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbUNvdW50OyArK2kpIHsKKyAgICAgICAgU3Ry
aW5nIHRleHQgPSBtX3BvcHVwQ2xpZW50LT5pdGVtVGV4dChpKTsKKyAgICAgICAgaWYgKHRleHQu
aXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgRm9udCBpdGVtRm9u
dCA9IG1fcG9wdXBDbGllbnQtPm1lbnVTdHlsZSgpLmZvbnQoKTsKKyAgICAgICAgaWYgKG1fcG9w
dXBDbGllbnQtPml0ZW1Jc0xhYmVsKGkpKSB7CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24g
ZCA9IGl0ZW1Gb250LmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgZC5zZXRXZWlnaHQo
ZC5ib2xkZXJXZWlnaHQoKSk7CisgICAgICAgICAgICBpdGVtRm9udCA9IEZvbnQoZCwgaXRlbUZv
bnQubGV0dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3JkU3BhY2luZygpKTsKKyAgICAgICAgICAg
IGl0ZW1Gb250LnVwZGF0ZShtX3BvcHVwQ2xpZW50LT5mb250U2VsZWN0b3IoKSk7CisgICAgICAg
IH0KKworICAgICAgICBwb3B1cFdpZHRoID0gc3RkOjptYXgocG9wdXBXaWR0aCwgaXRlbUZvbnQu
d2lkdGgoVGV4dFJ1bih0ZXh0LmNoYXJhY3RlcnMoKSwgdGV4dC5sZW5ndGgoKSkpKTsKKyAgICB9
CisKKyAgICAvLyBGSVhNRTogcG9wdXBXaWR0aCBzaG91bGQgcHJvYmFibHkgdGFrZSBpbnRvIGFj
Y291bnQgbW9uaXRvciBjb25zdHJhaXRzIGFzIGlzIGRvbmUgd2l0aCBXZWJQb3B1cE1lbnVQcm94
eVdpbjo6Y2FsY3VsYXRlUG9zaXRpb25BbmRTaXplLgorCisgICAgcG9wdXBXaWR0aCArPSBtYXgo
MCwgZGF0YS5tX2NsaWVudFBhZGRpbmdSaWdodCAtIGRhdGEubV9jbGllbnRJbnNldFJpZ2h0KSAr
IG1heCgwLCBkYXRhLm1fY2xpZW50UGFkZGluZ0xlZnQgLSBkYXRhLm1fY2xpZW50SW5zZXRMZWZ0
KTsKKyAgICBwb3B1cFdpZHRoICs9IDIgKiBwb3B1cFdpbmRvd0JvcmRlcldpZHRoOworICAgIGRh
dGEubV9wb3B1cFdpZHRoID0gcG9wdXBXaWR0aDsKKworICAgIGRhdGEubV9iYWNraW5nU3RvcmVT
aXplID0gSW50U2l6ZShkYXRhLm1fcG9wdXBXaWR0aCwgKGl0ZW1Db3VudCAqIGRhdGEubV9pdGVt
SGVpZ2h0KSk7CisgICAgZGF0YS5tX25vdFNlbGVjdGVkQmFja2luZ1N0b3JlID0gQmFja2luZ1N0
b3JlOjpjcmVhdGVTaGFyYWJsZShkYXRhLm1fYmFja2luZ1N0b3JlU2l6ZSk7CisgICAgZGF0YS5t
X3NlbGVjdGVkQmFja2luZ1N0b3JlID0gQmFja2luZ1N0b3JlOjpjcmVhdGVTaGFyYWJsZShkYXRh
Lm1fYmFja2luZ1N0b3JlU2l6ZSk7CisKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBub3RT
ZWxlY3RlZEJhY2tpbmdTdG9yZUNvbnRleHQgPSBkYXRhLm1fbm90U2VsZWN0ZWRCYWNraW5nU3Rv
cmUtPmNyZWF0ZUZsaXBwZWRHcmFwaGljc0NvbnRleHQoKTsKKyAgICBPd25QdHI8R3JhcGhpY3ND
b250ZXh0PiBzZWxlY3RlZEJhY2tpbmdTdG9yZUNvbnRleHQgPSBkYXRhLm1fc2VsZWN0ZWRCYWNr
aW5nU3RvcmUtPmNyZWF0ZUZsaXBwZWRHcmFwaGljc0NvbnRleHQoKTsKKworICAgIENvbG9yIGFj
dGl2ZU9wdGlvbkJhY2tncm91bmRDb2xvciA9IFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+
YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOworICAgIENvbG9yIGFjdGl2
ZU9wdGlvblRleHRDb2xvciA9IFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+YWN0aXZlTGlz
dEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpOworCisgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBkYXRhLm1fYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKTsgeSArPSBkYXRhLm1faXRlbUhlaWdo
dCkgeworICAgICAgICBpbnQgaW5kZXggPSB5IC8gZGF0YS5tX2l0ZW1IZWlnaHQ7CisKKyAgICAg
ICAgUG9wdXBNZW51U3R5bGUgaXRlbVN0eWxlID0gbV9wb3B1cENsaWVudC0+aXRlbVN0eWxlKGlu
ZGV4KTsKKworICAgICAgICBDb2xvciBvcHRpb25CYWNrZ3JvdW5kQ29sb3IgPSBpdGVtU3R5bGUu
YmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgIENvbG9yIG9wdGlvblRleHRDb2xvciA9IGl0ZW1T
dHlsZS5mb3JlZ3JvdW5kQ29sb3IoKTsKKworICAgICAgICBJbnRSZWN0IGl0ZW1SZWN0KDAsIHks
IGRhdGEubV9wb3B1cFdpZHRoLCBkYXRhLm1faXRlbUhlaWdodCk7CisKKyAgICAgICAgLy8gRHJh
dyB0aGUgYmFja2dyb3VuZCBmb3IgdGhpcyBtZW51IGl0ZW0KKyAgICAgICAgaWYgKGl0ZW1TdHls
ZS5pc1Zpc2libGUoKSkgeworICAgICAgICAgICAgbm90U2VsZWN0ZWRCYWNraW5nU3RvcmVDb250
ZXh0LT5maWxsUmVjdChpdGVtUmVjdCwgb3B0aW9uQmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNl
RGV2aWNlUkdCKTsKKyAgICAgICAgICAgIHNlbGVjdGVkQmFja2luZ1N0b3JlQ29udGV4dC0+Zmls
bFJlY3QoaXRlbVJlY3QsIGFjdGl2ZU9wdGlvbkJhY2tncm91bmRDb2xvciwgQ29sb3JTcGFjZURl
dmljZVJHQik7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9wb3B1cENsaWVudC0+aXRlbUlz
U2VwYXJhdG9yKGluZGV4KSkgeworICAgICAgICAgICAgSW50UmVjdCBzZXBhcmF0b3JSZWN0KGl0
ZW1SZWN0LngoKSArIHNlcGFyYXRvclBhZGRpbmcsIGl0ZW1SZWN0LnkoKSArIChpdGVtUmVjdC5o
ZWlnaHQoKSAtIHNlcGFyYXRvckhlaWdodCkgLyAyLCBpdGVtUmVjdC53aWR0aCgpIC0gMiAqIHNl
cGFyYXRvclBhZGRpbmcsIHNlcGFyYXRvckhlaWdodCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG5vdFNlbGVjdGVkQmFja2luZ1N0b3JlQ29udGV4dC0+ZmlsbFJlY3Qoc2VwYXJhdG9yUmVj
dCwgb3B0aW9uVGV4dENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgICAgIHNl
bGVjdGVkQmFja2luZ1N0b3JlQ29udGV4dC0+ZmlsbFJlY3Qoc2VwYXJhdG9yUmVjdCwgYWN0aXZl
T3B0aW9uVGV4dENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIGl0ZW1UZXh0ID0gbV9wb3B1cENsaWVu
dC0+aXRlbVRleHQoaW5kZXgpOworCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGl0ZW1UZXh0
Lmxlbmd0aCgpOworICAgICAgICBjb25zdCBVQ2hhciogc3RyaW5nID0gaXRlbVRleHQuY2hhcmFj
dGVycygpOworICAgICAgICBUZXh0UnVuIHRleHRSdW4oc3RyaW5nLCBsZW5ndGgsIGZhbHNlLCAw
LCAwLCBpdGVtVGV4dC5kZWZhdWx0V3JpdGluZ0RpcmVjdGlvbigpID09IFdURjo6VW5pY29kZTo6
UmlnaHRUb0xlZnQpOworCisgICAgICAgIG5vdFNlbGVjdGVkQmFja2luZ1N0b3JlQ29udGV4dC0+
c2V0RmlsbENvbG9yKG9wdGlvblRleHRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAg
ICAgIHNlbGVjdGVkQmFja2luZ1N0b3JlQ29udGV4dC0+c2V0RmlsbENvbG9yKGFjdGl2ZU9wdGlv
blRleHRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgIAorICAgICAgICBGb250
IGl0ZW1Gb250ID0gbV9wb3B1cENsaWVudC0+bWVudVN0eWxlKCkuZm9udCgpOworICAgICAgICBp
ZiAobV9wb3B1cENsaWVudC0+aXRlbUlzTGFiZWwoaW5kZXgpKSB7CisgICAgICAgICAgICBGb250
RGVzY3JpcHRpb24gZCA9IGl0ZW1Gb250LmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAg
ZC5zZXRXZWlnaHQoZC5ib2xkZXJXZWlnaHQoKSk7CisgICAgICAgICAgICBpdGVtRm9udCA9IEZv
bnQoZCwgaXRlbUZvbnQubGV0dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3JkU3BhY2luZygpKTsK
KyAgICAgICAgICAgIGl0ZW1Gb250LnVwZGF0ZShtX3BvcHVwQ2xpZW50LT5mb250U2VsZWN0b3Io
KSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBEcmF3IHRoZSBpdGVtIHRleHQKKyAgICAgICAg
aWYgKGl0ZW1TdHlsZS5pc1Zpc2libGUoKSkgeworICAgICAgICAgICAgaW50IHRleHRYID0gc3Rk
OjptYXgoMCwgZGF0YS5tX2NsaWVudFBhZGRpbmdMZWZ0IC0gZGF0YS5tX2NsaWVudEluc2V0TGVm
dCk7CisgICAgICAgICAgICBpZiAoUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5wb3B1cE9w
dGlvblN1cHBvcnRzVGV4dEluZGVudCgpICYmIGl0ZW1TdHlsZS50ZXh0RGlyZWN0aW9uKCkgPT0g
TFRSKQorICAgICAgICAgICAgICAgIHRleHRYICs9IGl0ZW1TdHlsZS50ZXh0SW5kZW50KCkuY2Fs
Y01pblZhbHVlKGl0ZW1SZWN0LndpZHRoKCkpOworICAgICAgICAgICAgaW50IHRleHRZID0gaXRl
bVJlY3QueSgpICsgaXRlbUZvbnQuYXNjZW50KCkgKyAoaXRlbVJlY3QuaGVpZ2h0KCkgLSBpdGVt
Rm9udC5oZWlnaHQoKSkgLyAyOworCisgICAgICAgICAgICBub3RTZWxlY3RlZEJhY2tpbmdTdG9y
ZUNvbnRleHQtPmRyYXdCaWRpVGV4dChpdGVtRm9udCwgdGV4dFJ1biwgSW50UG9pbnQodGV4dFgs
IHRleHRZKSk7CisgICAgICAgICAgICBzZWxlY3RlZEJhY2tpbmdTdG9yZUNvbnRleHQtPmRyYXdC
aWRpVGV4dChpdGVtRm9udCwgdGV4dFJ1biwgSW50UG9pbnQodGV4dFgsIHRleHRZKSk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAoKUHJvcGVydHkgY2hhbmdl
cyBvbjogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3dpbi9XZWJQb3B1cE1lbnVX
aW4uY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdl
YktpdDIvd2luL1dlYktpdDIudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvd2luL1dlYktp
dDIudmNwcm9qCShyZXZpc2lvbiA3MDk1NCkKKysrIFdlYktpdDIvd2luL1dlYktpdDIudmNwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC00NjksNiArNDY5LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4N
CiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFNoYXJlZFxQbGF0Zm9ybVBvcHVwTWVu
dURhdGEuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5cU2hhcmVkXFBsYXRmb3JtUG9wdXBNZW51RGF0YS5oIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cU2hhcmVkXFN0cmluZ1BhaXJW
ZWN0b3IuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0xMTQyLDYgKzExNTAsMTAgQEAKIAkJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5cV2ViUHJvY2Vzc1xXZWJDb3JlU3VwcG9ydFx3aW5cV2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dC5oIg0KIAkJCQkJCT4NCiAJCQkJCTwvRmlsZT4NCisJCQkJCTxG
aWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuXFdlYlByb2Nlc3NcV2ViQ29yZVN1cHBvcnRcd2lu
XFdlYlBvcHVwTWVudVdpbi5jcHAiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KIAkJCQk8L0Zp
bHRlcj4NCiAJCQk8L0ZpbHRlcj4NCiAJCQk8RmlsdGVyDQo=
</data>
<flag name="review"
          id="62665"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>