<?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>21314</bug_id>
          
          <creation_ts>2008-10-02 12:57:41 -0700</creation_ts>
          <short_desc>Make scrollBackingStore cross-platform.</short_desc>
          <delta_ts>2008-10-02 13:17:25 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>21083</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>93779</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-02 12:57:41 -0700</bug_when>
    <thetext>Make scrollBackingStore cross-platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93780</commentid>
    <comment_count>1</comment_count>
      <attachid>24028</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-02 12:58:37 -0700</bug_when>
    <thetext>Created attachment 24028
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93784</commentid>
    <comment_count>2</comment_count>
      <attachid>24028</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-10-02 13:10:30 -0700</bug_when>
    <thetext>Comment on attachment 24028
Patch

+    virtual void scroll(const IntSize&amp; scrollDelta, const IntRect&amp; rectToScroll, const IntRect&amp; clipRect) { }
There should not be the &quot;= false&quot;

+    if (canBlitOnScroll()) // The main frame can just blit the WebView window
+       // FIXME: Find a way to blit subframes without blitting overlapping content
+       hostWindow()-&gt;scroll(-scrollDelta, scrollViewRect, clipRect);
+    else 
+       // We need to go ahead and repaint the entire backing store.  Do it now before moving the
+       // plugins.
+       hostWindow()-&gt;repaint(updateRect, true, false, true); // Invalidate the backing store and repaint it synchronously
This if-else needs braces as the statements + comments are more than 1 line.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93788</commentid>
    <comment_count>3</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-02 13:17:25 -0700</bug_when>
    <thetext>Fixed in r37204.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24028</attachid>
            <date>2008-10-02 12:58:37 -0700</date>
            <delta_ts>2008-10-02 13:10:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>39384</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNzIwMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMDgtMTAtMDIgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29t
PgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTMx
NAorICAgICAgICAKKyAgICAgICAgTWFrZSBzY3JvbGxCYWNraW5nU3RvcmUgY3Jvc3MtcGxhdGZv
cm0uCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0FS
TklORzogTk8gVEVTVCBDQVNFUyBBRERFRCBPUiBDSEFOR0VECisKKyAgICAgICAgKiBsb2FkZXIv
RW1wdHlDbGllbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUNocm9tZUNsaWVudDo6cmVw
YWludCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUNocm9tZUNsaWVudDo6c2Nyb2xsKToKKyAg
ICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWU6OnJlcGFp
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpzY3JvbGwpOgorICAgICAgICAqIHBhZ2Uv
Q2hyb21lLmg6CisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBwYWdl
L0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRs
ZUF1dG9zY3JvbGwpOgorICAgICAgICAqIHBsYXRmb3JtL0hvc3RXaW5kb3cuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6
OnNjcm9sbENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OmFkZFBhblNj
cm9sbEljb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cmVtb3ZlUGFuU2Nyb2xs
SWNvbik6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9TY3JvbGxW
aWV3UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZh
dGU6OlNjcm9sbFZpZXdQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6On5T
Y3JvbGxWaWV3KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2Nyb2xsVmlld1dpbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpTY3JvbGxWaWV3KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbFZpZXc6On5TY3JvbGxWaWV3KToKKwogMjAwOC0xMC0wMiAgQnJldHQgV2lsc29u
ICA8YnJldHR3QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2Vpbmln
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkocmV2aXNpb24gMzcxODkpCisrKyBXZWJDb3JlL2xv
YWRlci9FbXB0eUNsaWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw4IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQmFja2luZ1N0b3JlKGludCBkeCwgaW50IGR5
LCBjb25zdCBJbnRSZWN0JiBzY3JvbGxWaWV3UmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3Qp
IHsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVCYWNraW5nU3RvcmUoKSB7IH0KIAotICAgIHZp
cnR1YWwgdm9pZCByZXBhaW50KGNvbnN0IEludFJlY3QmLCBib29sIGNvbnRlbnRDaGFuZ2VkLCBi
b29sIGltbWVkaWF0ZSA9IGZhbHNlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVwYWludChjb25z
dCBJbnRSZWN0JiwgYm9vbCBjb250ZW50Q2hhbmdlZCwgYm9vbCBpbW1lZGlhdGUgPSBmYWxzZSwg
Ym9vbCByZXBhaW50Q29udGVudE9ubHkpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoY29u
c3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29u
c3QgSW50UmVjdCYgY2xpcFJlY3QpIHsgfQogICAgIHZpcnR1YWwgSW50UG9pbnQgc2NyZWVuVG9X
aW5kb3coY29uc3QgSW50UG9pbnQmIHApIGNvbnN0IHsgcmV0dXJuIHA7IH0KICAgICB2aXJ0dWFs
IEludFJlY3Qgd2luZG93VG9TY3JlZW4oY29uc3QgSW50UmVjdCYgcikgY29uc3QgeyByZXR1cm4g
cjsgfQogCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BhZ2UvQ2hyb21lLmNwcAkocmV2aXNpb24gMzcxODkpCisrKyBXZWJDb3JlL3BhZ2UvQ2hy
b21lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsOSArNzYsMTQgQEAgQ2hyb21lOjp+Q2hyb21l
KCkKICAgICBtX2NsaWVudC0+Y2hyb21lRGVzdHJveWVkKCk7CiB9CiAKLXZvaWQgQ2hyb21lOjpy
ZXBhaW50KGNvbnN0IEludFJlY3QmIHdpbmRvd1JlY3QsIGJvb2wgY29udGVudENoYW5nZWQsIGJv
b2wgaW1tZWRpYXRlKQordm9pZCBDaHJvbWU6OnJlcGFpbnQoY29uc3QgSW50UmVjdCYgd2luZG93
UmVjdCwgYm9vbCBjb250ZW50Q2hhbmdlZCwgYm9vbCBpbW1lZGlhdGUsIGJvb2wgcmVwYWludENv
bnRlbnRPbmx5KQogewotICAgIG1fY2xpZW50LT5yZXBhaW50KHdpbmRvd1JlY3QsIGNvbnRlbnRD
aGFuZ2VkLCBpbW1lZGlhdGUpOworICAgIG1fY2xpZW50LT5yZXBhaW50KHdpbmRvd1JlY3QsIGNv
bnRlbnRDaGFuZ2VkLCBpbW1lZGlhdGUsIHJlcGFpbnRDb250ZW50T25seSk7Cit9CisKK3ZvaWQg
Q2hyb21lOjpzY3JvbGwoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3Qm
IHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCit7CisgICAgbV9jbGllbnQt
PnNjcm9sbChzY3JvbGxEZWx0YSwgcmVjdFRvU2Nyb2xsLCBjbGlwUmVjdCk7CiB9CiAKIEludFBv
aW50IENocm9tZTo6c2NyZWVuVG9XaW5kb3coY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdApA
QCAtMzE0LDE2ICszMTksNiBAQCB2b2lkIENocm9tZTo6YWRkVG9EaXJ0eVJlZ2lvbihjb25zdCBJ
bnRSCiAgICAgbV9jbGllbnQtPmFkZFRvRGlydHlSZWdpb24ocmVjdCk7CiB9CiAKLXZvaWQgQ2hy
b21lOjpzY3JvbGxCYWNraW5nU3RvcmUoaW50IGR4LCBpbnQgZHksIGNvbnN0IEludFJlY3QmIHNj
cm9sbFZpZXdSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKLXsKLSAgICBtX2NsaWVudC0+
c2Nyb2xsQmFja2luZ1N0b3JlKGR4LCBkeSwgc2Nyb2xsVmlld1JlY3QsIGNsaXBSZWN0KTsKLX0K
LQotdm9pZCBDaHJvbWU6OnVwZGF0ZUJhY2tpbmdTdG9yZSgpCi17Ci0gICAgbV9jbGllbnQtPnVw
ZGF0ZUJhY2tpbmdTdG9yZSgpOwotfQotCiB2b2lkIENocm9tZTo6bW91c2VEaWRNb3ZlT3ZlckVs
ZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBtb2RpZmllckZsYWdz
KQogewogICAgIGlmIChyZXN1bHQuaW5uZXJOb2RlKCkpIHsKSW5kZXg6IFdlYkNvcmUvcGFnZS9D
aHJvbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21lLmgJKHJldmlzaW9uIDM3
MTg5KQorKysgV2ViQ29yZS9wYWdlL0Nocm9tZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1
Myw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQ2hyb21lQ2xpZW50KiBjbGllbnQo
KSB7IHJldHVybiBtX2NsaWVudDsgfQogCiAgICAgICAgIC8vIEhvc3RXaW5kb3cgbWV0aG9kcy4K
LSAgICAgICAgdmlydHVhbCB2b2lkIHJlcGFpbnQoY29uc3QgSW50UmVjdCYsIGJvb2wgY29udGVu
dENoYW5nZWQsIGJvb2wgaW1tZWRpYXRlID0gZmFsc2UpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
cmVwYWludChjb25zdCBJbnRSZWN0JiwgYm9vbCBjb250ZW50Q2hhbmdlZCwgYm9vbCBpbW1lZGlh
dGUgPSBmYWxzZSwgYm9vbCByZXBhaW50Q29udGVudE9ubHkgPSBmYWxzZSk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBzY3JvbGwoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJl
Y3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpOwogICAgICAgICB2aXJ0
dWFsIEludFBvaW50IHNjcmVlblRvV2luZG93KGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAgICAg
ICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBJbnRSZWN0JikgY29uc3Q7
CiAgICAgCkBAIC0xMDQsOCArMTA1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAg
IEludFJlY3Qgd2luZG93UmVzaXplclJlY3QoKSBjb25zdDsKICAgICAgICAgdm9pZCBhZGRUb0Rp
cnR5UmVnaW9uKGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdm9pZCBzY3JvbGxCYWNraW5nU3Rv
cmUoaW50IGR4LCBpbnQgZHksIGNvbnN0IEludFJlY3QmIHNjcm9sbFZpZXdSZWN0LCBjb25zdCBJ
bnRSZWN0JiBjbGlwUmVjdCk7Ci0gICAgICAgIHZvaWQgdXBkYXRlQmFja2luZ1N0b3JlKCk7CiAK
ICAgICAgICAgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0
JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFncyk7CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWVD
bGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHJldmlz
aW9uIDM3MTg5KQorKysgV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDksMTUgKzEwOSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmly
dHVhbCBJbnRSZWN0IHdpbmRvd1Jlc2l6ZXJSZWN0KCkgY29uc3QgPSAwOwogCi0gICAgICAgIC8v
IFRoZSBmb2xsb3dpbmcgdGhyZWUgbWV0aG9kcyBhcmUgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSBy
ZW1vdmVkIG9uY2UgYWxsIG9mIHRoZSBjYWxsZXJzIGhhdmUgYmVlbgotICAgICAgICAvLyBlbGlt
aW5hdGVkLgorICAgICAgICAvLyBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJl
IHJlbW92ZWQgb25jZSBhbGwgb2YgdGhlIGNhbGxlcnMgaGF2ZSBiZWVuIGVsaW1pbmF0ZWQuCiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBhZGRUb0RpcnR5UmVnaW9uKGNvbnN0IEludFJlY3QmKSA9IDA7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCYWNraW5nU3RvcmUoaW50IGR4LCBpbnQgZHks
IGNvbnN0IEludFJlY3QmIHNjcm9sbFZpZXdSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkg
PSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQmFja2luZ1N0b3JlKCkgPSAwOwotICAg
ICAgICAvLyBFbmQgZGVwcmVjYXRlZCBtZXRob2RzLgogCiAgICAgICAgIC8vIE1ldGhvZHMgdXNl
ZCBieSBIb3N0V2luZG93LgotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVwYWludChjb25zdCBJbnRS
ZWN0JiwgYm9vbCBjb250ZW50Q2hhbmdlZCwgYm9vbCBpbW1lZGlhdGUgPSBmYWxzZSkgPSAwOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcmVwYWludChjb25zdCBJbnRSZWN0JiwgYm9vbCBjb250ZW50
Q2hhbmdlZCwgYm9vbCBpbW1lZGlhdGUgPSBmYWxzZSwgYm9vbCByZXBhaW50Q29udGVudE9ubHkg
PSBmYWxzZSkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKGNvbnN0IEludFNpemUm
IHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9TY3JvbGwsIGNvbnN0IEludFJlY3Qm
IGNsaXBSZWN0KSA9IDA7CiAgICAgICAgIHZpcnR1YWwgSW50UG9pbnQgc2NyZWVuVG9XaW5kb3co
Y29uc3QgSW50UG9pbnQmKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgSW50UmVjdCB3aW5k
b3dUb1NjcmVlbihjb25zdCBJbnRSZWN0JikgY29uc3QgPSAwOwogICAgICAgICAvLyBFbmQgbWV0
aG9kcyB1c2VkIGJ5IEhvc3RXaW5kb3cuCkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNp
b24gMzcxODkpCisrKyBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTczLDcgKzU3Myw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpoYW5kbGVBdXRvc2Nyb2xs
KFJlbmQKICNpZiBQTEFURk9STShXSU4pCiAgICAgaWYgKG1fcGFuU2Nyb2xsSW5Qcm9ncmVzcykg
ewogICAgICAgICBtX3BhblNjcm9sbFN0YXJ0UG9zID0gY3VycmVudE1vdXNlUG9zaXRpb24oKTsK
LSAgICAgICAgbV9mcmFtZS0+dmlldygpLT5wcmludFBhblNjcm9sbEljb24obV9wYW5TY3JvbGxT
dGFydFBvcyk7CisgICAgICAgIG1fZnJhbWUtPnZpZXcoKS0+YWRkUGFuU2Nyb2xsSWNvbihtX3Bh
blNjcm9sbFN0YXJ0UG9zKTsKICAgICAgICAgLy8gSWYgd2UncmUgbm90IGluIHRoZSB0b3AgZnJh
bWUgd2Ugbm90aWZ5IGl0IHRoYXQgd2UgYXJlIHVzaW5nIHRoZSBwYW5TY3JvbGwKICAgICAgICAg
aWYgKG1fZnJhbWUgIT0gbV9mcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKSkKICAgICAgICAgICAg
IG1fZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5zZXRQYW5TY3Jv
bGxJblByb2dyZXNzKHRydWUpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgJKHJldmlzaW9uIDM3
MTg5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDcgKzQyLDggQEAgcHVibGljOgogICAgIC8vIFRoZSByZXBhaW50IG1ldGhvZCBhc2tzIHRo
ZSBob3N0IHdpbmRvdyB0byByZXBhaW50IGEgcmVjdCBpbiB0aGUgd2luZG93J3MgY29vcmRpbmF0
ZSBzcGFjZS4gIFRoZQogICAgIC8vIGNvbnRlbnRDaGFuZ2VkIGJvb2xlYW4gaW5kaWNhdGVzIHdo
ZXRoZXIgb3Igbm90IHRoZSBXZWIgcGFnZSBjb250ZW50IGFjdHVhbGx5IGNoYW5nZWQgKG9yIGlm
IGEgcmVwYWludAogICAgIC8vIG9mIHVuY2hhbmdlZCBjb250ZW50IGlzIGJlaW5nIHJlcXVlc3Rl
ZCkuCi0gICAgdmlydHVhbCB2b2lkIHJlcGFpbnQoY29uc3QgSW50UmVjdCYsIGJvb2wgY29udGVu
dENoYW5nZWQsIGJvb2wgaW1tZWRpYXRlID0gZmFsc2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVwYWludChjb25zdCBJbnRSZWN0JiwgYm9vbCBjb250ZW50Q2hhbmdlZCwgYm9vbCBpbW1lZGlh
dGUgPSBmYWxzZSwgYm9vbCByZXBhaW50Q29udGVudE9ubHkgPSBmYWxzZSkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzY3JvbGwoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJl
Y3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpID0gMDsKIAogICAgIC8v
IFRoZSBwYWludCBtZXRob2QganVzdCBjYXVzZXMgYSBzeW5jaHJvbm91cyB1cGRhdGUgb2YgdGhl
IHdpbmRvdyB0byBoYXBwZW4gZm9yIHBsYXRmb3JtcyB0aGF0IG5lZWQgaXQgKFdpbmRvd3MpLgog
ICAgIHZvaWQgcGFpbnQoKSB7IHJlcGFpbnQoSW50UmVjdCgpLCBmYWxzZSwgdHJ1ZSk7IH0KSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkocmV2aXNpb24gMzcxOTgpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzMsMTIgKzM3Myw0MyBA
QCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAgICAgbV9pblVwZGF0
ZVNjcm9sbGJhcnMgPSBmYWxzZTsKIH0KIAotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0o
V1gpCi0vLyBGSVhNRTogVGhpcyBpcyBqdXN0IHRlbXBvcmFyeSBzbyB3ZSBjYW4gY29tbWl0IGEg
Y3Jvc3MtcGxhdGZvcm0gdmVyc2lvbiBvZiB1cGRhdGVTY3JvbGxiYXJzLgotdm9pZCBTY3JvbGxW
aWV3OjpzY3JvbGxDb250ZW50cyhjb25zdCBJbnRTaXplJikKK2NvbnN0IGludCBwYW5JY29uU2l6
ZUxlbmd0aCA9IDIwOworCit2b2lkIFNjcm9sbFZpZXc6OnNjcm9sbENvbnRlbnRzKGNvbnN0IElu
dFNpemUmIHNjcm9sbERlbHRhKQogeworICAgIC8vIFNpbmNlIHNjcm9sbGluZyBpcyBkb3VibGUg
YnVmZmVyZWQsIHdlIHdpbGwgYmUgYmxpdHRpbmcgdGhlIHNjcm9sbCB2aWV3J3MgaW50ZXJzZWN0
aW9uCisgICAgLy8gd2l0aCB0aGUgY2xpcCByZWN0IGV2ZXJ5IHRpbWUgdG8ga2VlcCBpdCBzbW9v
dGguCisgICAgSW50UmVjdCBjbGlwUmVjdCA9IHN0YXRpY19jYXN0PFdpZGdldCo+KHRoaXMpLT53
aW5kb3dDbGlwUmVjdCgpOworICAgIEludFJlY3Qgc2Nyb2xsVmlld1JlY3QgPSBjb252ZXJ0VG9D
b250YWluaW5nV2luZG93KEludFJlY3QoMCwgMCwgdmlzaWJsZVdpZHRoKCksIHZpc2libGVIZWln
aHQoKSkpOworICAgIEludFJlY3QgdXBkYXRlUmVjdCA9IGNsaXBSZWN0OworICAgIHVwZGF0ZVJl
Y3QuaW50ZXJzZWN0KHNjcm9sbFZpZXdSZWN0KTsKKworICAgIC8vIEludmFsaWRhdGUgdGhlIHdp
bmRvdyAobm90IHRoZSBiYWNraW5nIHN0b3JlKS4KKyAgICBob3N0V2luZG93KCktPnJlcGFpbnQo
dXBkYXRlUmVjdCwgZmFsc2UpOworCisgICAgaWYgKG1fZHJhd1BhblNjcm9sbEljb24pIHsKKyAg
ICAgICAgaW50IHBhbkljb25EaXJ0eVNxdWFyZVNpemVMZW5ndGggPSAyICogKHBhbkljb25TaXpl
TGVuZ3RoICsgbWF4KGFicyhzY3JvbGxEZWx0YS53aWR0aCgpKSwgYWJzKHNjcm9sbERlbHRhLmhl
aWdodCgpKSkpOyAvLyBXZSBvbmx5IHdhbnQgdG8gcmVwYWludCB3aGF0J3MgbmVjZXNzYXJ5Cisg
ICAgICAgIEludFBvaW50IHBhbkljb25EaXJ0eVNxdWFyZUxvY2F0aW9uID0gSW50UG9pbnQobV9w
YW5TY3JvbGxJY29uUG9pbnQueCgpIC0gKHBhbkljb25EaXJ0eVNxdWFyZVNpemVMZW5ndGggLyAy
KSwgbV9wYW5TY3JvbGxJY29uUG9pbnQueSgpIC0gKHBhbkljb25EaXJ0eVNxdWFyZVNpemVMZW5n
dGggLyAyKSk7CisgICAgICAgIEludFJlY3QgcGFuU2Nyb2xsSWNvbkRpcnR5UmVjdCA9IEludFJl
Y3QocGFuSWNvbkRpcnR5U3F1YXJlTG9jYXRpb24gLCBJbnRTaXplKHBhbkljb25EaXJ0eVNxdWFy
ZVNpemVMZW5ndGgsIHBhbkljb25EaXJ0eVNxdWFyZVNpemVMZW5ndGgpKTsKKyAgICAgICAgcGFu
U2Nyb2xsSWNvbkRpcnR5UmVjdC5pbnRlcnNlY3QoY2xpcFJlY3QpOworICAgICAgICBob3N0V2lu
ZG93KCktPnJlcGFpbnQocGFuU2Nyb2xsSWNvbkRpcnR5UmVjdCwgdHJ1ZSwgdHJ1ZSk7CisgICAg
fQorCisgICAgaWYgKGNhbkJsaXRPblNjcm9sbCgpKSAvLyBUaGUgbWFpbiBmcmFtZSBjYW4ganVz
dCBibGl0IHRoZSBXZWJWaWV3IHdpbmRvdworICAgICAgIC8vIEZJWE1FOiBGaW5kIGEgd2F5IHRv
IGJsaXQgc3ViZnJhbWVzIHdpdGhvdXQgYmxpdHRpbmcgb3ZlcmxhcHBpbmcgY29udGVudAorICAg
ICAgIGhvc3RXaW5kb3coKS0+c2Nyb2xsKC1zY3JvbGxEZWx0YSwgc2Nyb2xsVmlld1JlY3QsIGNs
aXBSZWN0KTsKKyAgICBlbHNlIAorICAgICAgIC8vIFdlIG5lZWQgdG8gZ28gYWhlYWQgYW5kIHJl
cGFpbnQgdGhlIGVudGlyZSBiYWNraW5nIHN0b3JlLiAgRG8gaXQgbm93IGJlZm9yZSBtb3Zpbmcg
dGhlCisgICAgICAgLy8gcGx1Z2lucy4KKyAgICAgICBob3N0V2luZG93KCktPnJlcGFpbnQodXBk
YXRlUmVjdCwgdHJ1ZSwgZmFsc2UsIHRydWUpOyAvLyBJbnZhbGlkYXRlIHRoZSBiYWNraW5nIHN0
b3JlIGFuZCByZXBhaW50IGl0IHN5bmNocm9ub3VzbHkKKworICAgIC8vIFRoaXMgY2FsbCB3aWxs
IG1vdmUgY2hpbGRyZW4gd2l0aCBuYXRpdmUgd2lkZ2V0cyAocGx1Z2lucykgYW5kIGludmFsaWRh
dGUgdGhlbSBhcyB3ZWxsLgorICAgIGZyYW1lUmVjdHNDaGFuZ2VkKCk7CisKKyAgICAvLyBOb3cg
dXBkYXRlIHRoZSB3aW5kb3cgKHdoaWNoIHNob3VsZCBkbyBub3RoaW5nIGJ1dCBhIGJsaXQgb2Yg
dGhlIGJhY2tpbmcgc3RvcmUncyB1cGRhdGVSZWN0IGFuZCBzbyBzaG91bGQKKyAgICAvLyBiZSB2
ZXJ5IGZhc3QpLgorICAgIGhvc3RXaW5kb3coKS0+cGFpbnQoKTsKIH0KLSNlbmRpZgogCiBJbnRQ
b2ludCBTY3JvbGxWaWV3Ojp3aW5kb3dUb0NvbnRlbnRzKGNvbnN0IEludFBvaW50JiB3aW5kb3dQ
b2ludCkgY29uc3QKIHsKQEAgLTcwMiw2ICs3MzMsMjAgQEAgYm9vbCBTY3JvbGxWaWV3Ojppc09m
ZnNjcmVlbigpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCisKK3ZvaWQgU2Nyb2xsVmll
dzo6YWRkUGFuU2Nyb2xsSWNvbihjb25zdCBJbnRQb2ludCYgaWNvblBvc2l0aW9uKQoreworICAg
IG1fZHJhd1BhblNjcm9sbEljb24gPSB0cnVlOyAgICAKKyAgICBtX3BhblNjcm9sbEljb25Qb2lu
dCA9IEludFBvaW50KGljb25Qb3NpdGlvbi54KCkgLSBwYW5JY29uU2l6ZUxlbmd0aCAvIDIgLCBp
Y29uUG9zaXRpb24ueSgpIC0gcGFuSWNvblNpemVMZW5ndGggLyAyKSA7CisgICAgaG9zdFdpbmRv
dygpLT5yZXBhaW50KEludFJlY3QobV9wYW5TY3JvbGxJY29uUG9pbnQsIEludFNpemUocGFuSWNv
blNpemVMZW5ndGgscGFuSWNvblNpemVMZW5ndGgpKSwgdHJ1ZSwgdHJ1ZSk7ICAgIAorfQorCit2
b2lkIFNjcm9sbFZpZXc6OnJlbW92ZVBhblNjcm9sbEljb24oKQoreworICAgIG1fZHJhd1BhblNj
cm9sbEljb24gPSBmYWxzZTsgCisgICAgaG9zdFdpbmRvdygpLT5yZXBhaW50KEludFJlY3QobV9w
YW5TY3JvbGxJY29uUG9pbnQsIEludFNpemUocGFuSWNvblNpemVMZW5ndGgsIHBhbkljb25TaXpl
TGVuZ3RoKSksIHRydWUsIHRydWUpOworfQorCiAjaWYgIVBMQVRGT1JNKE1BQykKIHZvaWQgU2Ny
b2xsVmlldzo6cGxhdGZvcm1TZXRDYW5CbGl0T25TY3JvbGwoKQogewpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxWaWV3LmgJKHJldmlzaW9uIDM3MTk4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMiwxNCArMjAyLDE2IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgaGlkZSgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJlbnRWaXNpYmxlKGJvb2wp
OwogICAgIAorICAgIC8vIFBhbiBzY3JvbGxpbmcgbWV0aG9kcy4KKyAgICB2b2lkIGFkZFBhblNj
cm9sbEljb24oY29uc3QgSW50UG9pbnQmKTsKKyAgICB2b2lkIHJlbW92ZVBhblNjcm9sbEljb24o
KTsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50Q29udGVudFJlY3Rhbmds
ZShjb25zdCBJbnRSZWN0JiwgYm9vbCBub3cgPSBmYWxzZSk7CiAgICAgdmlydHVhbCB2b2lkIHBh
aW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkg
PSAwOwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1Jlc2l6ZWQoKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHZpc2libGVDb250ZW50c1Jlc2l6ZWQoKSA9IDA7Ci0gICAgCi0gICAgdm9p
ZCB1cGRhdGVXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmLCBib29sIG5vdyA9IGZhbHNlKTsKIAog
cHJpdmF0ZToKICAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX2hvcml6b250YWxTY3JvbGxiYXI7CkBA
IC0yNzAsNyArMjcyLDcgQEAgcHJpdmF0ZToKICAgICBOU1Njcm9sbFZpZXc8V2ViQ29yZUZyYW1l
U2Nyb2xsVmlldz4qIHNjcm9sbFZpZXcoKSBjb25zdDsKICNlbmRpZgogCi0jaWYgIVBMQVRGT1JN
KE1BQykKKyNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oV0lOKQogLy8gRklYTUU6IFNj
cm9sbFZpZXdQcml2YXRlIHdpbGwgZXZlbnR1YWxseSBiZSBjb21wbGV0ZWx5IGdvbmUuCiAgICAg
Y2xhc3MgU2Nyb2xsVmlld1ByaXZhdGU7CiAgICAgU2Nyb2xsVmlld1ByaXZhdGUqIG1fZGF0YTsK
QEAgLTI4MSwxNiArMjgzLDYgQEAgcHJpdmF0ZToKICNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExB
VEZPUk0oV1gpCiBwdWJsaWM6CiAgICAgdm9pZCBhZGRUb0RpcnR5UmVnaW9uKGNvbnN0IEludFJl
Y3QmKTsKLSAgICB2b2lkIHNjcm9sbEJhY2tpbmdTdG9yZShpbnQgZHgsIGludCBkeSwgY29uc3Qg
SW50UmVjdCYgc2Nyb2xsVmlld1JlY3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KTsKLSAgICB2
b2lkIHVwZGF0ZUJhY2tpbmdTdG9yZSgpOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi1w
dWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpOwotCi0gICAgdm9pZCBwcmlu
dFBhblNjcm9sbEljb24oY29uc3QgSW50UG9pbnQmKTsKLSAgICB2b2lkIHJlbW92ZVBhblNjcm9s
bEljb24oKTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2d0ay9TY3JvbGxWaWV3R3RrLmNwcAkocmV2aXNpb24gMzcxOTgpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsOCArNzQsNiBA
QCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIHNjcm9sbEJhY2tpbmdTdG9y
ZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSk7Ci0KICAgICBzdGF0aWMgdm9pZCBhZGp1c3Rt
ZW50Q2hhbmdlZChHdGtBZGp1c3RtZW50KiwgZ3BvaW50ZXIpOwogCiAgICAgU2Nyb2xsVmlldyog
dmlldzsKQEAgLTg0LDM1ICs4Miw2IEBAIHB1YmxpYzoKICAgICBHdGtBZGp1c3RtZW50KiB2ZXJ0
aWNhbEFkanVzdG1lbnQ7CiB9OwogCi12b2lkIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRl
OjpzY3JvbGxCYWNraW5nU3RvcmUoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpCi17Ci0gICAg
Ly8gU2luY2Ugc2Nyb2xsaW5nIGlzIGRvdWJsZSBidWZmZXJlZCwgd2Ugd2lsbCBiZSBibGl0dGlu
ZyB0aGUgc2Nyb2xsIHZpZXcncyBpbnRlcnNlY3Rpb24KLSAgICAvLyB3aXRoIHRoZSBjbGlwIHJl
Y3QgZXZlcnkgdGltZSB0byBrZWVwIGl0IHNtb290aC4KLSAgICBJbnRSZWN0IGNsaXBSZWN0ID0g
dmlldy0+d2luZG93Q2xpcFJlY3QoKTsKLSAgICBJbnRSZWN0IHNjcm9sbFZpZXdSZWN0ID0gdmll
dy0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhJbnRSZWN0KDAsIDAsIHZpZXctPnZpc2libGVX
aWR0aCgpLCB2aWV3LT52aXNpYmxlSGVpZ2h0KCkpKTsKLQotICAgIEludFJlY3QgdXBkYXRlUmVj
dCA9IGNsaXBSZWN0OwotICAgIHVwZGF0ZVJlY3QuaW50ZXJzZWN0KHNjcm9sbFZpZXdSZWN0KTsK
LQotICAgIC8vRklYTUUgdXBkYXRlIGhlcmU/Ci0KLSAgICBpZiAodmlldy0+Y2FuQmxpdE9uU2Ny
b2xsKCkpIC8vIFRoZSBtYWluIGZyYW1lIGNhbiBqdXN0IGJsaXQgdGhlIFdlYlZpZXcgd2luZG93
Ci0gICAgICAgLy8gRklYTUU6IEZpbmQgYSB3YXkgdG8gYmxpdCBzdWJmcmFtZXMgd2l0aG91dCBi
bGl0dGluZyBvdmVybGFwcGluZyBjb250ZW50Ci0gICAgICAgdmlldy0+c2Nyb2xsQmFja2luZ1N0
b3JlKC1zY3JvbGxEZWx0YS53aWR0aCgpLCAtc2Nyb2xsRGVsdGEuaGVpZ2h0KCksIHNjcm9sbFZp
ZXdSZWN0LCBjbGlwUmVjdCk7Ci0gICAgZWxzZSAgewotICAgICAgIC8vIFdlIG5lZWQgdG8gZ28g
YWhlYWQgYW5kIHJlcGFpbnQgdGhlIGVudGlyZSBiYWNraW5nIHN0b3JlLiAgRG8gaXQgbm93IGJl
Zm9yZSBtb3ZpbmcgdGhlCi0gICAgICAgLy8gcGx1Z2lucy4KLSAgICAgICB2aWV3LT5hZGRUb0Rp
cnR5UmVnaW9uKHVwZGF0ZVJlY3QpOwotICAgICAgIHZpZXctPnVwZGF0ZUJhY2tpbmdTdG9yZSgp
OwotICAgIH0KLQotICAgIHZpZXctPmZyYW1lUmVjdHNDaGFuZ2VkKCk7Ci0KLSAgICAvLyBOb3cg
dXBkYXRlIHRoZSB3aW5kb3cgKHdoaWNoIHNob3VsZCBkbyBub3RoaW5nIGJ1dCBhIGJsaXQgb2Yg
dGhlIGJhY2tpbmcgc3RvcmUncyB1cGRhdGVSZWN0IGFuZCBzbyBzaG91bGQKLSAgICAvLyBiZSB2
ZXJ5IGZhc3QpLgotICAgIGludmFsaWRhdGUoKTsKLX0KLQogdm9pZCBTY3JvbGxWaWV3OjpTY3Jv
bGxWaWV3UHJpdmF0ZTo6YWRqdXN0bWVudENoYW5nZWQoR3RrQWRqdXN0bWVudCogYWRqdXN0bWVu
dCwgZ3BvaW50ZXIgX3RoYXQpCiB7CiAgICAgU2Nyb2xsVmlld1ByaXZhdGUqIHRoYXQgPSByZWlu
dGVycHJldF9jYXN0PFNjcm9sbFZpZXdQcml2YXRlKj4oX3RoYXQpOwpAQCAtMjQzLDI0ICsyMTIs
NCBAQCB2b2lkIFNjcm9sbFZpZXc6OmFkZFRvRGlydHlSZWdpb24oY29uc3QgCiAgICAgcGFnZS0+
Y2hyb21lKCktPmFkZFRvRGlydHlSZWdpb24oY29udGFpbmluZ1dpbmRvd1JlY3QpOwogfQogCi12
b2lkIFNjcm9sbFZpZXc6OnNjcm9sbEJhY2tpbmdTdG9yZShpbnQgZHgsIGludCBkeSwgY29uc3Qg
SW50UmVjdCYgc2Nyb2xsVmlld1JlY3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQotewotICAg
IEFTU0VSVChpc0ZyYW1lVmlldygpKTsKLSAgICBjb25zdCBGcmFtZVZpZXcqIGZyYW1lVmlldyA9
IHN0YXRpY19jYXN0PGNvbnN0IEZyYW1lVmlldyo+KHRoaXMpOwotICAgIFBhZ2UqIHBhZ2UgPSBm
cmFtZVZpZXctPmZyYW1lKCkgPyBmcmFtZVZpZXctPmZyYW1lKCktPnBhZ2UoKSA6IDA7Ci0gICAg
aWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgcGFnZS0+Y2hyb21lKCktPnNjcm9sbEJh
Y2tpbmdTdG9yZShkeCwgZHksIHNjcm9sbFZpZXdSZWN0LCBjbGlwUmVjdCk7Ci19Ci0KLXZvaWQg
U2Nyb2xsVmlldzo6dXBkYXRlQmFja2luZ1N0b3JlKCkKLXsKLSAgICBBU1NFUlQoaXNGcmFtZVZp
ZXcoKSk7Ci0gICAgY29uc3QgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxjb25z
dCBGcmFtZVZpZXcqPih0aGlzKTsKLSAgICBQYWdlKiBwYWdlID0gZnJhbWVWaWV3LT5mcmFtZSgp
ID8gZnJhbWVWaWV3LT5mcmFtZSgpLT5wYWdlKCkgOiAwOwotICAgIGlmICghcGFnZSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIHBhZ2UtPmNocm9tZSgpLT51cGRhdGVCYWNraW5nU3RvcmUoKTsKLX0K
LQogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxWaWV3UXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsVmlld1F0LmNwcAkocmV2aXNpb24gMzcx
OTgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbFZpZXdRdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY4LDcgKzY4LDYgQEAgcHVibGljOgogICAgIFNjcm9sbFZpZXdQcml2YXRlKFNjcm9s
bFZpZXcqIHZpZXcpCiAgICAgICA6IG1fdmlldyh2aWV3KQogICAgICAgLCBtX3BsYXRmb3JtV2lk
Z2V0cygwKQotICAgICAgLCBtX2luVXBkYXRlU2Nyb2xsYmFycyhmYWxzZSkKICAgICB7CiAgICAg
fQogCkBAIC03NiwzNCArNzUsMTAgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICB2b2lk
IHNjcm9sbEJhY2tpbmdTdG9yZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSk7Ci0KICAgICBT
Y3JvbGxWaWV3KiBtX3ZpZXc7CiAgICAgaW50ICBtX3BsYXRmb3JtV2lkZ2V0czsKIH07CiAKLXZv
aWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNjcm9sbEJhY2tpbmdTdG9yZShjb25z
dCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKLXsKLSAgICAvLyBTaW5jZSBzY3JvbGxpbmcgaXMgZG91
YmxlIGJ1ZmZlcmVkLCB3ZSB3aWxsIGJlIGJsaXR0aW5nIHRoZSBzY3JvbGwgdmlldydzIGludGVy
c2VjdGlvbgotICAgIC8vIHdpdGggdGhlIGNsaXAgcmVjdCBldmVyeSB0aW1lIHRvIGtlZXAgaXQg
c21vb3RoLgotICAgIEludFJlY3QgY2xpcFJlY3QgPSBtX3ZpZXctPndpbmRvd0NsaXBSZWN0KCk7
Ci0gICAgSW50UmVjdCBzY3JvbGxWaWV3UmVjdCA9IG1fdmlldy0+Y29udmVydFRvQ29udGFpbmlu
Z1dpbmRvdyhJbnRSZWN0KDAsIDAsIG1fdmlldy0+dmlzaWJsZVdpZHRoKCksIG1fdmlldy0+dmlz
aWJsZUhlaWdodCgpKSk7Ci0KLSAgICBJbnRSZWN0IHVwZGF0ZVJlY3QgPSBjbGlwUmVjdDsKLSAg
ICB1cGRhdGVSZWN0LmludGVyc2VjdChzY3JvbGxWaWV3UmVjdCk7Ci0KLSAgICBpZiAobV92aWV3
LT5jYW5CbGl0T25TY3JvbGwoKSAmJiAhbV92aWV3LT5yb290KCktPmhhc05hdGl2ZVdpZGdldHMo
KSkgewotICAgICAgIG1fdmlldy0+c2Nyb2xsQmFja2luZ1N0b3JlKC1zY3JvbGxEZWx0YS53aWR0
aCgpLCAtc2Nyb2xsRGVsdGEuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2Nyb2xsVmlld1JlY3QsIGNsaXBSZWN0KTsKLSAgICB9IGVsc2UgIHsKLSAgICAgICAv
LyBXZSBuZWVkIHRvIGdvIGFoZWFkIGFuZCByZXBhaW50IHRoZSBlbnRpcmUgYmFja2luZyBzdG9y
ZS4KLSAgICAgICBtX3ZpZXctPmFkZFRvRGlydHlSZWdpb24odXBkYXRlUmVjdCk7Ci0gICAgICAg
bV92aWV3LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKLSAgICB9Ci0KLSAgICBtX3ZpZXctPmZyYW1l
UmVjdHNDaGFuZ2VkKCk7Ci19Ci0KIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXcoKQogICAgIDogbV9k
YXRhKG5ldyBTY3JvbGxWaWV3UHJpdmF0ZSh0aGlzKSkKIHsKQEAgLTExMiwxNCArODcsMTAgQEAg
U2Nyb2xsVmlldzo6U2Nyb2xsVmlldygpCiAKIFNjcm9sbFZpZXc6On5TY3JvbGxWaWV3KCkKIHsK
KyAgICBkZXN0cm95KCk7CiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3
OjpzY3JvbGxDb250ZW50cyhjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIG1fZGF0YS0+c2Ny
b2xsQmFja2luZ1N0b3JlKHNpemUpOwotfQotCiB2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtQWRk
Q2hpbGQoV2lkZ2V0KiBjaGlsZCkKIHsKICAgICByb290KCktPmluY3JlbWVudE5hdGl2ZVdpZGdl
dENvdW50KCk7CkBAIC0xNDEsMjYgKzExMiw2IEBAIHZvaWQgU2Nyb2xsVmlldzo6YWRkVG9EaXJ0
eVJlZ2lvbihjb25zdCAKICAgICBwYWdlLT5jaHJvbWUoKS0+YWRkVG9EaXJ0eVJlZ2lvbihjb250
YWluaW5nV2luZG93UmVjdCk7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsQmFja2luZ1N0
b3JlKGludCBkeCwgaW50IGR5LCBjb25zdCBJbnRSZWN0JiBzY3JvbGxWaWV3UmVjdCwgY29uc3Qg
SW50UmVjdCYgY2xpcFJlY3QpCi17Ci0gICAgQVNTRVJUKGlzRnJhbWVWaWV3KCkpOwotICAgIGNv
bnN0IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVWaWV3Kj4o
dGhpcyk7Ci0gICAgUGFnZSogcGFnZSA9IGZyYW1lVmlldy0+ZnJhbWUoKSA/IGZyYW1lVmlldy0+
ZnJhbWUoKS0+cGFnZSgpIDogMDsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybjsKLSAg
ICBwYWdlLT5jaHJvbWUoKS0+c2Nyb2xsQmFja2luZ1N0b3JlKGR4LCBkeSwgc2Nyb2xsVmlld1Jl
Y3QsIGNsaXBSZWN0KTsKLX0KLQotdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVCYWNraW5nU3RvcmUo
KQotewotICAgIEFTU0VSVChpc0ZyYW1lVmlldygpKTsKLSAgICBjb25zdCBGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IHN0YXRpY19jYXN0PGNvbnN0IEZyYW1lVmlldyo+KHRoaXMpOwotICAgIFBhZ2Uq
IHBhZ2UgPSBmcmFtZVZpZXctPmZyYW1lKCkgPyBmcmFtZVZpZXctPmZyYW1lKCktPnBhZ2UoKSA6
IDA7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgcGFnZS0+Y2hyb21lKCkt
PnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwotfQotCiB2b2lkIFNjcm9sbFZpZXc6OmluY3JlbWVudE5h
dGl2ZVdpZGdldENvdW50KCkKIHsKICAgICArK21fZGF0YS0+bV9wbGF0Zm9ybVdpZGdldHM7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxWaWV3V2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxWaWV3V2luLmNwcAkocmV2aXNpb24gMzcxOTgp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxWaWV3V2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTQsNjAgKzU0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZSB7Ci1wdWJsaWM6
Ci0gICAgU2Nyb2xsVmlld1ByaXZhdGUoU2Nyb2xsVmlldyogdmlldykKLSAgICAgICAgOiBtX3Zp
ZXcodmlldykKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBzY3JvbGxCYWNraW5nU3RvcmUoY29u
c3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpOwotCi0gICAgU2Nyb2xsVmlldyogbV92aWV3OwotfTsK
LQotY29uc3QgaW50IHBhbkljb25TaXplTGVuZ3RoID0gMjA7Ci0KLXZvaWQgU2Nyb2xsVmlldzo6
U2Nyb2xsVmlld1ByaXZhdGU6OnNjcm9sbEJhY2tpbmdTdG9yZShjb25zdCBJbnRTaXplJiBzY3Jv
bGxEZWx0YSkKLXsKLSAgICAvLyBTaW5jZSBzY3JvbGxpbmcgaXMgZG91YmxlIGJ1ZmZlcmVkLCB3
ZSB3aWxsIGJlIGJsaXR0aW5nIHRoZSBzY3JvbGwgdmlldydzIGludGVyc2VjdGlvbgotICAgIC8v
IHdpdGggdGhlIGNsaXAgcmVjdCBldmVyeSB0aW1lIHRvIGtlZXAgaXQgc21vb3RoLgotICAgIEhX
TkQgY29udGFpbmluZ1dpbmRvd0hhbmRsZSA9IG1fdmlldy0+Y29udGFpbmluZ1dpbmRvdygpOwot
ICAgIEludFJlY3QgY2xpcFJlY3QgPSBzdGF0aWNfY2FzdDxXaWRnZXQqPihtX3ZpZXcpLT53aW5k
b3dDbGlwUmVjdCgpOwotICAgIEludFJlY3Qgc2Nyb2xsVmlld1JlY3QgPSBtX3ZpZXctPmNvbnZl
cnRUb0NvbnRhaW5pbmdXaW5kb3coSW50UmVjdCgwLCAwLCBtX3ZpZXctPnZpc2libGVXaWR0aCgp
LCBtX3ZpZXctPnZpc2libGVIZWlnaHQoKSkpOwotICAgIEludFJlY3QgdXBkYXRlUmVjdCA9IGNs
aXBSZWN0OwotICAgIHVwZGF0ZVJlY3QuaW50ZXJzZWN0KHNjcm9sbFZpZXdSZWN0KTsKLSAgICBS
RUNUIHIgPSB1cGRhdGVSZWN0OwotICAgIDo6SW52YWxpZGF0ZVJlY3QoY29udGFpbmluZ1dpbmRv
d0hhbmRsZSwgJnIsIGZhbHNlKTsKLQotICAgIGlmIChtX3ZpZXctPm1fZHJhd1BhblNjcm9sbElj
b24pIHsKLSAgICAgICAgaW50IHBhbkljb25EaXJ0eVNxdWFyZVNpemVMZW5ndGggPSAyICogKHBh
bkljb25TaXplTGVuZ3RoICsgbWF4KGFicyhzY3JvbGxEZWx0YS53aWR0aCgpKSwgYWJzKHNjcm9s
bERlbHRhLmhlaWdodCgpKSkpOyAvLyBXZSBvbmx5IHdhbnQgdG8gcmVwYWludCB3aGF0J3MgbmVj
ZXNzYXJ5Ci0gICAgICAgIEludFBvaW50IHBhbkljb25EaXJ0eVNxdWFyZUxvY2F0aW9uID0gSW50
UG9pbnQobV92aWV3LT5tX3BhblNjcm9sbEljb25Qb2ludC54KCkgLSAocGFuSWNvbkRpcnR5U3F1
YXJlU2l6ZUxlbmd0aCAvIDIpLCBtX3ZpZXctPm1fcGFuU2Nyb2xsSWNvblBvaW50LnkoKSAtIChw
YW5JY29uRGlydHlTcXVhcmVTaXplTGVuZ3RoIC8gMikpOwotICAgICAgICBJbnRSZWN0IHBhblNj
cm9sbEljb25EaXJ0eVJlY3QgPSBJbnRSZWN0KHBhbkljb25EaXJ0eVNxdWFyZUxvY2F0aW9uICwg
SW50U2l6ZShwYW5JY29uRGlydHlTcXVhcmVTaXplTGVuZ3RoLCBwYW5JY29uRGlydHlTcXVhcmVT
aXplTGVuZ3RoKSk7Ci0gICAgICAgIAotICAgICAgICBtX3ZpZXctPnVwZGF0ZVdpbmRvd1JlY3Qo
cGFuU2Nyb2xsSWNvbkRpcnR5UmVjdCk7Ci0gICAgfQotCi0gICAgaWYgKG1fdmlldy0+Y2FuQmxp
dE9uU2Nyb2xsKCkpIC8vIFRoZSBtYWluIGZyYW1lIGNhbiBqdXN0IGJsaXQgdGhlIFdlYlZpZXcg
d2luZG93Ci0gICAgICAgLy8gRklYTUU6IEZpbmQgYSB3YXkgdG8gYmxpdCBzdWJmcmFtZXMgd2l0
aG91dCBibGl0dGluZyBvdmVybGFwcGluZyBjb250ZW50Ci0gICAgICAgbV92aWV3LT5zY3JvbGxC
YWNraW5nU3RvcmUoLXNjcm9sbERlbHRhLndpZHRoKCksIC1zY3JvbGxEZWx0YS5oZWlnaHQoKSwg
c2Nyb2xsVmlld1JlY3QsIGNsaXBSZWN0KTsKLSAgICBlbHNlICB7Ci0gICAgICAgLy8gV2UgbmVl
ZCB0byBnbyBhaGVhZCBhbmQgcmVwYWludCB0aGUgZW50aXJlIGJhY2tpbmcgc3RvcmUuICBEbyBp
dCBub3cgYmVmb3JlIG1vdmluZyB0aGUKLSAgICAgICAvLyBwbHVnaW5zLgotICAgICAgIG1fdmll
dy0+YWRkVG9EaXJ0eVJlZ2lvbih1cGRhdGVSZWN0KTsKLSAgICAgICBtX3ZpZXctPnVwZGF0ZUJh
Y2tpbmdTdG9yZSgpOwotICAgIH0KLQotICAgIC8vIFRoaXMgY2FsbCB3aWxsIG1vdmUgY2hpbGQg
SFdORHMgKHBsdWdpbnMpIGFuZCBpbnZhbGlkYXRlIHRoZW0gYXMgd2VsbC4KLSAgICBtX3ZpZXct
PmZyYW1lUmVjdHNDaGFuZ2VkKCk7Ci0KLSAgICAvLyBOb3cgdXBkYXRlIHRoZSB3aW5kb3cgKHdo
aWNoIHNob3VsZCBkbyBub3RoaW5nIGJ1dCBhIGJsaXQgb2YgdGhlIGJhY2tpbmcgc3RvcmUncyB1
cGRhdGVSZWN0IGFuZCBzbyBzaG91bGQKLSAgICAvLyBiZSB2ZXJ5IGZhc3QpLgotICAgIDo6VXBk
YXRlV2luZG93KGNvbnRhaW5pbmdXaW5kb3dIYW5kbGUpOwotfQotCiBTY3JvbGxWaWV3OjpTY3Jv
bGxWaWV3KCkKLSAgICA6IG1fZGF0YShuZXcgU2Nyb2xsVmlld1ByaXZhdGUodGhpcykpCiB7CiAg
ICAgaW5pdCgpOwogfQpAQCAtMTE1LDcgKzYyLDYgQEAgU2Nyb2xsVmlldzo6U2Nyb2xsVmlldygp
CiBTY3JvbGxWaWV3Ojp+U2Nyb2xsVmlldygpCiB7CiAgICAgZGVzdHJveSgpOwotICAgIGRlbGV0
ZSBtX2RhdGE7CiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1BZGRDaGlsZChXaWRnZXQq
KQpAQCAtMTI2LDQ3ICs3Miw2IEBAIHZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1SZW1vdmVDaGls
ZChXaWQKIHsKIH0KIAotdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVXaW5kb3dSZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QsIGJvb2wgbm93KQotewotICAgIFJFQ1QgY29udGFpbmluZ1dpbmRvd1JlY3RX
aW4gPSByZWN0OwotICAgIEhXTkQgY29udGFpbmluZ1dpbmRvd0hhbmRsZSA9IGNvbnRhaW5pbmdX
aW5kb3coKTsKLQotICAgIDo6SW52YWxpZGF0ZVJlY3QoY29udGFpbmluZ1dpbmRvd0hhbmRsZSwg
JmNvbnRhaW5pbmdXaW5kb3dSZWN0V2luLCBmYWxzZSk7Ci0gICAgICAKLSAgICAvLyBDYWNoZSB0
aGUgZGlydHkgc3BvdC4KLSAgICBhZGRUb0RpcnR5UmVnaW9uKHJlY3QpOwotCi0gICAgaWYgKG5v
dykKLSAgICAgICAgOjpVcGRhdGVXaW5kb3coY29udGFpbmluZ1dpbmRvd0hhbmRsZSk7Ci19Ci0K
LXZvaWQgU2Nyb2xsVmlldzo6cHJpbnRQYW5TY3JvbGxJY29uKGNvbnN0IEludFBvaW50JiBpY29u
UG9zaXRpb24pCi17Ci0gICAgbV9kcmF3UGFuU2Nyb2xsSWNvbiA9IHRydWU7ICAgIAotICAgIG1f
cGFuU2Nyb2xsSWNvblBvaW50ID0gSW50UG9pbnQoaWNvblBvc2l0aW9uLngoKSAtIHBhbkljb25T
aXplTGVuZ3RoIC8gMiAsIGljb25Qb3NpdGlvbi55KCkgLSBwYW5JY29uU2l6ZUxlbmd0aCAvIDIp
IDsKLQotICAgIHVwZGF0ZVdpbmRvd1JlY3QoSW50UmVjdChtX3BhblNjcm9sbEljb25Qb2ludCwg
SW50U2l6ZShwYW5JY29uU2l6ZUxlbmd0aCxwYW5JY29uU2l6ZUxlbmd0aCkpLCB0cnVlKTsgICAg
Ci19Ci0KLXZvaWQgU2Nyb2xsVmlldzo6cmVtb3ZlUGFuU2Nyb2xsSWNvbigpCi17Ci0gICAgbV9k
cmF3UGFuU2Nyb2xsSWNvbiA9IGZhbHNlOyAKLQotICAgIHVwZGF0ZVdpbmRvd1JlY3QoSW50UmVj
dChtX3BhblNjcm9sbEljb25Qb2ludCwgSW50U2l6ZShwYW5JY29uU2l6ZUxlbmd0aCwgcGFuSWNv
blNpemVMZW5ndGgpKSwgdHJ1ZSk7Ci19Ci0KLXZvaWQgU2Nyb2xsVmlldzo6dGhlbWVDaGFuZ2Vk
KCkKLXsKLSAgICBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+dGhlbWVDaGFuZ2VkKCk7
Ci0gICAgdGhlbWUoKS0+dGhlbWVDaGFuZ2VkKCk7Ci0gICAgaW52YWxpZGF0ZSgpOwotfQotCi12
b2lkIFNjcm9sbFZpZXc6OnNjcm9sbENvbnRlbnRzKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0g
ICAgbV9kYXRhLT5zY3JvbGxCYWNraW5nU3RvcmUoc2l6ZSk7Ci19Ci0KIHZvaWQgU2Nyb2xsVmll
dzo6YWRkVG9EaXJ0eVJlZ2lvbihjb25zdCBJbnRSZWN0JiBjb250YWluaW5nV2luZG93UmVjdCkK
IHsKICAgICBBU1NFUlQoaXNGcmFtZVZpZXcoKSk7CkBAIC0xNzcsMjQgKzgyLDQgQEAgdm9pZCBT
Y3JvbGxWaWV3OjphZGRUb0RpcnR5UmVnaW9uKGNvbnN0IAogICAgIHBhZ2UtPmNocm9tZSgpLT5h
ZGRUb0RpcnR5UmVnaW9uKGNvbnRhaW5pbmdXaW5kb3dSZWN0KTsKIH0KIAotdm9pZCBTY3JvbGxW
aWV3OjpzY3JvbGxCYWNraW5nU3RvcmUoaW50IGR4LCBpbnQgZHksIGNvbnN0IEludFJlY3QmIHNj
cm9sbFZpZXdSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKLXsKLSAgICBBU1NFUlQoaXNG
cmFtZVZpZXcoKSk7Ci0gICAgY29uc3QgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2Fz
dDxjb25zdCBGcmFtZVZpZXcqPih0aGlzKTsKLSAgICBQYWdlKiBwYWdlID0gZnJhbWVWaWV3LT5m
cmFtZSgpID8gZnJhbWVWaWV3LT5mcmFtZSgpLT5wYWdlKCkgOiAwOwotICAgIGlmICghcGFnZSkK
LSAgICAgICAgcmV0dXJuOwotICAgIHBhZ2UtPmNocm9tZSgpLT5zY3JvbGxCYWNraW5nU3RvcmUo
ZHgsIGR5LCBzY3JvbGxWaWV3UmVjdCwgY2xpcFJlY3QpOwotfQotCi12b2lkIFNjcm9sbFZpZXc6
OnVwZGF0ZUJhY2tpbmdTdG9yZSgpCi17Ci0gICAgQVNTRVJUKGlzRnJhbWVWaWV3KCkpOwotICAg
IGNvbnN0IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVWaWV3
Kj4odGhpcyk7Ci0gICAgUGFnZSogcGFnZSA9IGZyYW1lVmlldy0+ZnJhbWUoKSA/IGZyYW1lVmll
dy0+ZnJhbWUoKS0+cGFnZSgpIDogMDsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybjsK
LSAgICBwYWdlLT5jaHJvbWUoKS0+dXBkYXRlQmFja2luZ1N0b3JlKCk7Ci19Ci0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9ndGsvQ2hhbmdlTG9nCShyZXZpc2lvbiAzNzIwMikKKysrIFdlYktpdC9ndGsvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDgtMTAtMDIgIERhdmlk
IEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50OjpyZXBhaW50KToKKyAgICAgICAgKFdlYktp
dDo6Q2hyb21lQ2xpZW50OjpzY3JvbGwpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudEd0ay5oOgorCiAyMDA4LTEwLTAxICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEy
ODIKSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5j
cHAJKHJldmlzaW9uIDM3MTg5KQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTksOSArMjU5LDEwIEBAIEludFJlY3Qg
Q2hyb21lQ2xpZW50Ojp3aW5kb3dSZXNpemVyUmVjdCgKICAgICByZXR1cm4gSW50UmVjdCgpOwog
fQogCi12b2lkIENocm9tZUNsaWVudDo6cmVwYWludChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3
aW5kb3dSZWN0LCBib29sIGNvbnRlbnRDaGFuZ2VkLCBib29sIGltbWVkaWF0ZSkKK3ZvaWQgQ2hy
b21lQ2xpZW50OjpyZXBhaW50KGNvbnN0IEludFJlY3QmIHdpbmRvd1JlY3QsIGJvb2wgY29udGVu
dENoYW5nZWQsIGJvb2wgaW1tZWRpYXRlLCBib29sIHJlcGFpbnRDb250ZW50T25seSkKIHsKLSAg
ICBpZiAoIW1fd2ViVmlldykKKyAgICAvLyBTaW5jZSB3ZSBoYXZlIG5vIGJhY2tpbmcgc3RvcmUs
IHdlIGRvIG5vdGhpbmcgaWYgcmVwYWludENvbnRlbnRPbmx5IGlzIHNldC4KKyAgICBpZiAoIW1f
d2ViVmlldyB8fCByZXBhaW50Q29udGVudE9ubHkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdk
a1JlY3RhbmdsZSByZWN0ID0gd2luZG93UmVjdDsKQEAgLTI3Niw2ICsyNzcsMTEgQEAgdm9pZCBD
aHJvbWVDbGllbnQ6OnJlcGFpbnQoY29uc3QgV2ViQ29yZQogICAgIH0KIH0KIAordm9pZCBDaHJv
bWVDbGllbnQ6OnNjcm9sbChjb25zdCBJbnRTaXplJiBkZWx0YSwgY29uc3QgSW50UmVjdCYgc2Ny
b2xsVmlld1JlY3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKIEludFJlY3QgQ2hyb21lQ2xpZW50Ojp3aW5kb3dUb1NjcmVlbihjb25zdCBJ
bnRSZWN0JiByZWN0KSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkBAIC0yOTMsMTYg
KzI5OSw2IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjphZGRUb0RpcnR5UmVnaW9uKGNvbnMKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIENocm9tZUNsaWVudDo6c2Nyb2xsQmFja2luZ1N0
b3JlKGludCBkeCwgaW50IGR5LCBjb25zdCBJbnRSZWN0JiBzY3JvbGxWaWV3UmVjdCwgY29uc3Qg
SW50UmVjdCYgY2xpcFJlY3QpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBD
aHJvbWVDbGllbnQ6OnVwZGF0ZUJhY2tpbmdTdG9yZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQogdm9pZCBDaHJvbWVDbGllbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0
IEhpdFRlc3RSZXN1bHQmIGhpdCwgdW5zaWduZWQgbW9kaWZpZXJGbGFncykKIHsKICAgICAvLyBj
aGVjayBpZiB0aGUgZWxlbWVudCBpcyBhIGxpbmsuLi4KSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaAkocmV2aXNpb24gMzcxODkpCisrKyBXZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCSh3b3JraW5nIGNvcHkpCkBAIC04
NCwxMCArODQsOSBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogICAgICAgICB2aXJ0dWFsIFdlYkNv
cmU6OkludFJlY3Qgd2luZG93UmVzaXplclJlY3QoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCB2
b2lkIGFkZFRvRGlydHlSZWdpb24oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgc2Nyb2xsQmFja2luZ1N0b3JlKGludCBkeCwgaW50IGR5LCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiBzY3JvbGxWaWV3UmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xp
cFJlY3QpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQmFja2luZ1N0b3JlKCk7Ci0KLSAg
ICAgICAgdmlydHVhbCB2b2lkIHJlcGFpbnQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGJvb2wg
Y29udGVudENoYW5nZWQsIGJvb2wgaW1tZWRpYXRlID0gZmFsc2UpOworICAgICAgICAKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHJlcGFpbnQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGJvb2wgY29u
dGVudENoYW5nZWQsIGJvb2wgaW1tZWRpYXRlID0gZmFsc2UsIGJvb2wgcmVwYWludENvbnRlbnRP
bmx5ID0gZmFsc2UpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0VG9TY3Jv
bGwsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKICAgICAgICAgdmlydHVhbCBX
ZWJDb3JlOjpJbnRQb2ludCBzY3JlZW5Ub1dpbmRvdyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYp
IGNvbnN0OwogICAgICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgd2luZG93VG9TY3JlZW4o
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0OwogCkluZGV4OiBXZWJLaXQvbWFjL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMzcyMDIp
CisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBA
CisyMDA4LTEwLTAyICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5tbToKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6cmVwYWludCk6CisgICAgICAgIChXZWJD
aHJvbWVDbGllbnQ6OnNjcm9sbCk6CisKIDIwMDgtMTAtMDEgIEdlb2ZmcmV5IEdhcmVuICA8Z2dh
cmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlciBhbmQgQ2Ft
ZXJvbiBad2FyaWNoLgpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oCShyZXZpc2lvbiAzNzE4OSkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDEwICs4OSw5IEBAIHB1Ymxp
YzoKICAgICAKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgd2luZG93UmVzaXplclJlY3Qo
KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYWRkVG9EaXJ0eVJlZ2lvbihjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNjcm9sbEJhY2tpbmdTdG9yZShpbnQgZHgs
IGludCBkeSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsVmlld1JlY3QsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQmFja2lu
Z1N0b3JlKCk7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIHJlcGFpbnQoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYsIGJvb2wgY29udGVudENoYW5nZWQsIGJvb2wgaW1tZWRpYXRlID0gZmFsc2UpOwor
CisgICAgdmlydHVhbCB2b2lkIHJlcGFpbnQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGJvb2wg
Y29udGVudENoYW5nZWQsIGJvb2wgaW1tZWRpYXRlID0gZmFsc2UsIGJvb2wgcmVwYWludENvbnRl
bnRPbmx5ID0gZmFsc2UpOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3RUb1Njcm9s
bCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOwogICAgIHZpcnR1YWwgV2ViQ29y
ZTo6SW50UG9pbnQgc2NyZWVuVG9XaW5kb3coY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25z
dDsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgd2luZG93VG9TY3JlZW4oY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpIGNvbnN0OwogCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5tbQkocmV2aXNpb24gMzcxODkpCisrKyBXZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDA0LDcg
KzQwNCwxMSBAQCBJbnRSZWN0IFdlYkNocm9tZUNsaWVudDo6d2luZG93UmVzaXplclJlCiB9CiAK
IC8vIEhvc3Qgd2luZG93IG1ldGhvZHMgYXJlIHJlYWxseSBvbmx5IG5lZWRlZCBvbmNlIHdlIGhh
dmUgYSB2aWV3bGVzcyBNYWMgV2Via2l0Lgotdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnJlcGFpbnQo
Y29uc3QgSW50UmVjdCYsIGJvb2wsIGJvb2wpCit2b2lkIFdlYkNocm9tZUNsaWVudDo6cmVwYWlu
dChjb25zdCBJbnRSZWN0JiwgYm9vbCwgYm9vbCwgYm9vbCkKK3sKK30KKwordm9pZCBXZWJDaHJv
bWVDbGllbnQ6OnNjcm9sbChjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IElu
dFJlY3QmKQogewogfQogCkBAIC00MjMsMTQgKzQyNyw2IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50
OjphZGRUb0RpcnR5UmVnaW9uKGMKIHsKIH0KIAotdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNjcm9s
bEJhY2tpbmdTdG9yZShpbnQsIGludCwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmKQot
ewotfQotCi12b2lkIFdlYkNocm9tZUNsaWVudDo6dXBkYXRlQmFja2luZ1N0b3JlKCkKLXsKLX0K
LQogdm9pZCBXZWJDaHJvbWVDbGllbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQgbW9kaWZpZXJGbGFncykKIHsKICAgICBXZWJF
bGVtZW50RGljdGlvbmFyeSAqZWxlbWVudCA9IFtbV2ViRWxlbWVudERpY3Rpb25hcnkgYWxsb2Nd
IGluaXRXaXRoSGl0VGVzdFJlc3VsdDpyZXN1bHRdOwpJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAzNzIwMikKKysr
IFdlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAw
OC0xMC0wMiAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6cmVwYWludCk6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6c2Nyb2xsKToKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oOgorCiAyMDA4LTEwLTAxICBEYXZpZCBIeWF0
dCAgPGh5YXR0QGFwcGxlLmNvbT4KICAgICAgICAgCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI4MgpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCShyZXZpc2lvbiAzNzE4OSkKKysrIFdlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Niw3
ICsyOTYsNyBAQCBJbnRSZWN0IENocm9tZUNsaWVudFF0Ojp3aW5kb3dSZXNpemVyUmVjCiAgICAg
cmV0dXJuIEludFJlY3QoKTsKIH0KIAotdm9pZCBDaHJvbWVDbGllbnRRdDo6cmVwYWludChjb25z
dCBJbnRSZWN0JiB3aW5kb3dSZWN0LCBib29sIGNvbnRlbnRDaGFuZ2VkLCBib29sKQordm9pZCBD
aHJvbWVDbGllbnRRdDo6cmVwYWludChjb25zdCBJbnRSZWN0JiB3aW5kb3dSZWN0LCBib29sIGNv
bnRlbnRDaGFuZ2VkLCBib29sIGltbWVkaWF0ZSwgYm9vbCByZXBhaW50Q29udGVudE9ubHkpCiB7
CiAgICAgLy8gTm8gZG91YmxlIGJ1ZmZlciwgc28gb25seSB1cGRhdGUgdGhlIFFXaWRnZXQgaWYg
Y29udGVudCBjaGFuZ2VkLgogICAgIGlmIChjb250ZW50Q2hhbmdlZCkgewpAQCAtMzEwLDEwICsz
MTAsMTkgQEAgdm9pZCBDaHJvbWVDbGllbnRRdDo6cmVwYWludChjb25zdCBJbnRSZQogICAgICAg
ICAgICAgZW1pdCBtX3dlYlBhZ2UtPnJlcGFpbnRSZXF1ZXN0ZWQod2luZG93UmVjdCk7CiAgICAg
fQogCi0gICAgLy8gRklYTUU6IFRoZXJlIGlzIG5vICJpbW1lZGlhdGUiIHN1cHBvcnQuICBUaGlz
IHNob3VsZCBiZSBkb25lIGFsd2F5cyB3aGVuZXZlciB0aGUgZmxhZworICAgIC8vIEZJWE1FOiBU
aGVyZSBpcyBubyAiaW1tZWRpYXRlIiBzdXBwb3J0IGZvciB3aW5kb3cgcGFpbnRpbmcuICBUaGlz
IHNob3VsZCBiZSBkb25lIGFsd2F5cyB3aGVuZXZlciB0aGUgZmxhZwogICAgIC8vIGlzIHNldC4K
IH0KIAordm9pZCBDaHJvbWVDbGllbnRRdDo6c2Nyb2xsKGNvbnN0IEludFNpemUmIGRlbHRhLCBj
b25zdCBJbnRSZWN0JiBzY3JvbGxWaWV3UmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCit7
CisgICAgUVdpZGdldCogdmlldyA9IG1fd2ViUGFnZS0+dmlldygpOworICAgIGlmICh2aWV3KQor
ICAgICAgICB2aWV3LT5zY3JvbGwoZGVsdGEueCgpLCBkZWx0YS55KCksIHNjcm9sbFZpZXdSZWN0
KTsKKyAgICBlbHNlCisgICAgICAgIGVtaXQgbV93ZWJQYWdlLT5zY3JvbGxSZXF1ZXN0ZWQoZGVs
dGEueCgpLCBkZWx0YS55KCksIHNjcm9sbFZpZXdSZWN0KTsKK30KKwogSW50UmVjdCBDaHJvbWVD
bGllbnRRdDo6d2luZG93VG9TY3JlZW4oY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwpAQCAtMzM4LDE1ICszNDcsNiBAQCB2b2lkIENocm9tZUNsaWVu
dFF0OjphZGRUb0RpcnR5UmVnaW9uKGNvCiAgICAgICAgIGVtaXQgbV93ZWJQYWdlLT5yZXBhaW50
UmVxdWVzdGVkKHIpOwogfQogCi12b2lkIENocm9tZUNsaWVudFF0OjpzY3JvbGxCYWNraW5nU3Rv
cmUoaW50IGR4LCBpbnQgZHksIGNvbnN0IEludFJlY3QmIHNjcm9sbFZpZXdSZWN0LCBjb25zdCBJ
bnRSZWN0JiBjbGlwUmVjdCkKLXsKLSAgICBRV2lkZ2V0KiB2aWV3ID0gbV93ZWJQYWdlLT52aWV3
KCk7Ci0gICAgaWYgKHZpZXcpCi0gICAgICAgIHZpZXctPnNjcm9sbChkeCwgZHksIHNjcm9sbFZp
ZXdSZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIGVtaXQgbV93ZWJQYWdlLT5zY3JvbGxSZXF1ZXN0
ZWQoZHgsIGR5LCBzY3JvbGxWaWV3UmVjdCk7Ci19Ci0KIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnVw
ZGF0ZUJhY2tpbmdTdG9yZSgpCiB7CiB9CkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50UXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50UXQuaAkocmV2aXNpb24gMzcxODkpCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDEwICsxMDAsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCB0YWJzVG9MaW5rcygp
IGNvbnN0OwogICAgICAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93UmVzaXplclJlY3QoKSBjb25z
dDsKICAgICAgICAgdmlydHVhbCB2b2lkIGFkZFRvRGlydHlSZWdpb24oY29uc3QgSW50UmVjdCYp
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQmFja2luZ1N0b3JlKGludCwgaW50LCBjb25z
dCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
QmFja2luZ1N0b3JlKCk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHJlcGFpbnQoY29uc3QgSW50
UmVjdCYsIGJvb2wgY29udGVudENoYW5nZWQsIGJvb2wgaW1tZWRpYXRlID0gZmFsc2UpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgcmVwYWludChjb25zdCBJbnRSZWN0JiwgYm9vbCBjb250ZW50Q2hh
bmdlZCwgYm9vbCBpbW1lZGlhdGUgPSBmYWxzZSwgYm9vbCByZXBhaW50Q29udGVudE9ubHkgPSBm
YWxzZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoY29uc3QgSW50U2l6ZSYgc2Nyb2xs
RGVsdGEsIGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVjdCYgY2xpcFJl
Y3QpOwogICAgICAgICB2aXJ0dWFsIEludFBvaW50IHNjcmVlblRvV2luZG93KGNvbnN0IEludFBv
aW50JikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25z
dCBJbnRSZWN0JikgY29uc3Q7CiAgICAgCkluZGV4OiBXZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gMzcyMDIpCisrKyBXZWJL
aXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDA4LTEw
LTAyICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5jcHA6CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OnJlcGFpbnQpOgorICAgICAgICAo
V2ViQ2hyb21lQ2xpZW50OjpzY3JvbGwpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5oOgorICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6
cmVwYWludCk6CisgICAgICAgICogV2ViVmlldy5oOgorCiAyMDA4LTEwLTAxICBEYXZpZCBIeWF0
dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjEyOTgKSW5kZXg6IFdlYktpdC93aW4vV2ViVmlldy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gMzcxODkpCisrKyBXZWJL
aXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw4ICs4OCwxMCBAQAogI2lu
Y2x1ZGUgPFdlYkNvcmUvUGx1Z2luSW5mb1N0b3JlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbHVn
aW5WaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Qcm9ncmVzc1RyYWNrZXIuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1JlbmRlclRoZW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRs
ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGVDbGllbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1Njcm9sbGJhclRoZW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZWxlY3Rpb25D
b250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvU2ltcGxlRm9udERhdGEuaD4KQEAgLTYyMSwxNCArNjIzLDIwIEBAIHZvaWQgV2ViVmll
dzo6Y2xvc2UoKQogICAgIGRlbGV0ZUJhY2tpbmdTdG9yZSgpOwogfQogCi12b2lkIFdlYlZpZXc6
OnJlcGFpbnQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93UmVjdCwgYm9vbCBjb250ZW50
Q2hhbmdlZCwgYm9vbCBpbW1lZGlhdGUpCit2b2lkIFdlYlZpZXc6OnJlcGFpbnQoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgd2luZG93UmVjdCwgYm9vbCBjb250ZW50Q2hhbmdlZCwgYm9vbCBpbW1l
ZGlhdGUsIGJvb2wgcmVwYWludENvbnRlbnRPbmx5KQogewotICAgIFJFQ1QgcmVjdCA9IHdpbmRv
d1JlY3Q7Ci0gICAgOjpJbnZhbGlkYXRlUmVjdChtX3ZpZXdXaW5kb3csICZyZWN0LCBmYWxzZSk7
CisgICAgaWYgKCFyZXBhaW50Q29udGVudE9ubHkpIHsKKyAgICAgICAgUkVDVCByZWN0ID0gd2lu
ZG93UmVjdDsKKyAgICAgICAgOjpJbnZhbGlkYXRlUmVjdChtX3ZpZXdXaW5kb3csICZyZWN0LCBm
YWxzZSk7CisgICAgfQogICAgIGlmIChjb250ZW50Q2hhbmdlZCkKICAgICAgICAgYWRkVG9EaXJ0
eVJlZ2lvbih3aW5kb3dSZWN0KTsKLSAgICBpZiAoaW1tZWRpYXRlKQotICAgICAgICA6OlVwZGF0
ZVdpbmRvdyhtX3ZpZXdXaW5kb3cpOworICAgIGlmIChpbW1lZGlhdGUpIHsKKyAgICAgICAgaWYg
KHJlcGFpbnRDb250ZW50T25seSkKKyAgICAgICAgICAgIHVwZGF0ZUJhY2tpbmdTdG9yZSgpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICA6OlVwZGF0ZVdpbmRvdyhtX3ZpZXdXaW5kb3cpOwor
ICAgIH0KIH0KIAogdm9pZCBXZWJWaWV3OjpkZWxldGVCYWNraW5nU3RvcmUoKQpAQCAtMTgwNCw3
ICsxODEyLDExIEBAIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFdlYlZpZXdXbmRQcm9jKEgKICAg
ICAgICAgY2FzZSBXTV9YUF9USEVNRUNIQU5HRUQ6CiAgICAgICAgICAgICBpZiAoRnJhbWUqIGNv
cmVGcmFtZSA9IGNvcmUobWFpbkZyYW1lSW1wbCkpIHsKICAgICAgICAgICAgICAgICB3ZWJWaWV3
LT5kZWxldGVCYWNraW5nU3RvcmUoKTsKLSAgICAgICAgICAgICAgICBjb3JlRnJhbWUtPnZpZXco
KS0+dGhlbWVDaGFuZ2VkKCk7CisgICAgICAgICAgICAgICAgdGhlbWUoKS0+dGhlbWVDaGFuZ2Vk
KCk7CisgICAgICAgICAgICAgICAgU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPnRoZW1l
Q2hhbmdlZCgpOworICAgICAgICAgICAgICAgIFJFQ1Qgd2luZG93UmVjdDsKKyAgICAgICAgICAg
ICAgICA6OkdldENsaWVudFJlY3QobV92aWV3V2luZG93LCAmd2luZG93UmVjdCk7CisgICAgICAg
ICAgICAgICAgOjpJbnZhbGlkYXRlUmVjdChtX3ZpZXdXaW5kb3csICZ3aW5kb3dSZWN0LCBmYWxz
ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXTV9N
T1VTRUFDVElWQVRFOgpJbmRleDogV2ViS2l0L3dpbi9XZWJWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L3dpbi9XZWJWaWV3LmgJKHJldmlzaW9uIDM3MTg5KQorKysgV2ViS2l0L3dpbi9XZWJW
aWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwOSw5ICs3MDksOSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBhZGRUb0RpcnR5UmVnaW9uKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2b2lkIGFk
ZFRvRGlydHlSZWdpb24oSFJHTik7CiAgICAgdm9pZCBzY3JvbGxCYWNraW5nU3RvcmUoV2ViQ29y
ZTo6RnJhbWVWaWV3KiwgaW50IGR4LCBpbnQgZHksIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNj
cm9sbFZpZXdSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7Ci0gICAgdm9p
ZCB1cGRhdGVCYWNraW5nU3RvcmUoV2ViQ29yZTo6RnJhbWVWaWV3KiwgSERDLCBib29sIGJhY2tp
bmdTdG9yZUNvbXBsZXRlbHlEaXJ0eSk7CisgICAgdm9pZCB1cGRhdGVCYWNraW5nU3RvcmUoV2Vi
Q29yZTo6RnJhbWVWaWV3KiwgSERDID0gMCwgYm9vbCBiYWNraW5nU3RvcmVDb21wbGV0ZWx5RGly
dHkgPSBmYWxzZSk7CiAgICAgdm9pZCBkZWxldGVCYWNraW5nU3RvcmUoKTsKLSAgICB2b2lkIHJl
cGFpbnQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGJvb2wgY29udGVudENoYW5nZWQsIGJvb2wg
aW1tZWRpYXRlID0gZmFsc2UpOworICAgIHZvaWQgcmVwYWludChjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiwgYm9vbCBjb250ZW50Q2hhbmdlZCwgYm9vbCBpbW1lZGlhdGUgPSBmYWxzZSwgYm9vbCBy
ZXBhaW50Q29udGVudE9ubHkgPSBmYWxzZSk7CiAgICAgdm9pZCBmcmFtZVJlY3QoUkVDVCogcmVj
dCk7CiAgICAgdm9pZCBjbG9zZVdpbmRvdygpOwogICAgIHZvaWQgY2xvc2VXaW5kb3dTb29uKCk7
CkluZGV4OiBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3Bw
CShyZXZpc2lvbiAzNzE4OSkKKysrIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE3LDEwICs0MTcsMTcgQEAgSW50UmVjdCBX
ZWJDaHJvbWVDbGllbnQ6OndpbmRvd1Jlc2l6ZXJSZQogICAgIHJldHVybiBpbnRSZWN0OwogfQog
Ci12b2lkIFdlYkNocm9tZUNsaWVudDo6cmVwYWludChjb25zdCBJbnRSZWN0JiB3aW5kb3dSZWN0
LCBib29sIGNvbnRlbnRDaGFuZ2VkLCBib29sIGltbWVkaWF0ZSkKK3ZvaWQgV2ViQ2hyb21lQ2xp
ZW50OjpyZXBhaW50KGNvbnN0IEludFJlY3QmIHdpbmRvd1JlY3QsIGJvb2wgY29udGVudENoYW5n
ZWQsIGJvb2wgaW1tZWRpYXRlLCBib29sIHJlcGFpbnRDb250ZW50T25seSkKIHsKICAgICBBU1NF
UlQoY29yZShtX3dlYlZpZXctPnRvcExldmVsRnJhbWUoKSkpOwotICAgIG1fd2ViVmlldy0+cmVw
YWludCh3aW5kb3dSZWN0LCBjb250ZW50Q2hhbmdlZCwgaW1tZWRpYXRlKTsKKyAgICBtX3dlYlZp
ZXctPnJlcGFpbnQod2luZG93UmVjdCwgY29udGVudENoYW5nZWQsIGltbWVkaWF0ZSwgcmVwYWlu
dENvbnRlbnRPbmx5KTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNjcm9sbChjb25zdCBJ
bnRTaXplJiBkZWx0YSwgY29uc3QgSW50UmVjdCYgc2Nyb2xsVmlld1JlY3QsIGNvbnN0IEludFJl
Y3QmIGNsaXBSZWN0KQoreworICAgIEFTU0VSVChjb3JlKG1fd2ViVmlldy0+dG9wTGV2ZWxGcmFt
ZSgpKSk7CisKKyAgICBtX3dlYlZpZXctPnNjcm9sbEJhY2tpbmdTdG9yZShjb3JlKG1fd2ViVmll
dy0+dG9wTGV2ZWxGcmFtZSgpKS0+dmlldygpLCBkZWx0YS54KCksIGRlbHRhLnkoKSwgc2Nyb2xs
Vmlld1JlY3QsIGNsaXBSZWN0KTsKIH0KIAogSW50UmVjdCBXZWJDaHJvbWVDbGllbnQ6OndpbmRv
d1RvU2NyZWVuKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CkBAIC00NTcsMjAgKzQ2NCw2IEBA
IHZvaWQgV2ViQ2hyb21lQ2xpZW50OjphZGRUb0RpcnR5UmVnaW9uKGMKICAgICBtX3dlYlZpZXct
PmFkZFRvRGlydHlSZWdpb24oZGlydHlSZWN0KTsKIH0KIAotdm9pZCBXZWJDaHJvbWVDbGllbnQ6
OnNjcm9sbEJhY2tpbmdTdG9yZShpbnQgZHgsIGludCBkeSwgY29uc3QgSW50UmVjdCYgc2Nyb2xs
Vmlld1JlY3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQotewotICAgIEFTU0VSVChjb3JlKG1f
d2ViVmlldy0+dG9wTGV2ZWxGcmFtZSgpKSk7Ci0KLSAgICBtX3dlYlZpZXctPnNjcm9sbEJhY2tp
bmdTdG9yZShjb3JlKG1fd2ViVmlldy0+dG9wTGV2ZWxGcmFtZSgpKS0+dmlldygpLCBkeCwgZHks
IHNjcm9sbFZpZXdSZWN0LCBjbGlwUmVjdCk7Ci19Ci0KLXZvaWQgV2ViQ2hyb21lQ2xpZW50Ojp1
cGRhdGVCYWNraW5nU3RvcmUoKQotewotICAgIEFTU0VSVChjb3JlKG1fd2ViVmlldy0+dG9wTGV2
ZWxGcmFtZSgpKSk7Ci0KLSAgICBtX3dlYlZpZXctPnVwZGF0ZUJhY2tpbmdTdG9yZShjb3JlKG1f
d2ViVmlldy0+dG9wTGV2ZWxGcmFtZSgpKS0+dmlldygpLCAwLCBmYWxzZSk7Ci19Ci0KIHZvaWQg
V2ViQ2hyb21lQ2xpZW50Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVz
dWx0JiByZXN1bHQsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpCiB7CiAgICAgQ09NUHRyPElXZWJV
SURlbGVnYXRlPiB1aURlbGVnYXRlOwpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5oCShyZXZpc2lvbiAzNzE4OSkKKysrIFdlYktpdC93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDEzICs5Miwx
MiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHRhYnNUb0xpbmtzKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHdpbmRvd1Jlc2l6ZXJSZWN0KCkgY29uc3Q7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVwYWludChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgYm9vbCBjb250
ZW50Q2hhbmdlZCwgYm9vbCBpbW1lZGlhdGUgPSBmYWxzZSk7CisgICAgdmlydHVhbCB2b2lkIHJl
cGFpbnQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGJvb2wgY29udGVudENoYW5nZWQsIGJvb2wg
aW1tZWRpYXRlID0gZmFsc2UsIGJvb2wgcmVwYWludENvbnRlbnRPbmx5ID0gZmFsc2UpOworICAg
IHZpcnR1YWwgdm9pZCBzY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsRGVsdGEs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgY2xpcFJlY3QpOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgc2NyZWVuVG9X
aW5kb3coY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHApIGNvbnN0OwogICAgIHZpcnR1YWwgV2Vi
Q29yZTo6SW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByKSBj
b25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRUb0RpcnR5UmVnaW9uKGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQmFja2luZ1N0b3JlKGludCBkeCwg
aW50IGR5LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxWaWV3UmVjdCwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVCYWNraW5n
U3RvcmUoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25z
dCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFncyk7CiAK
</data>
<flag name="review"
          id="10871"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>