<?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>126508</bug_id>
          
          <creation_ts>2014-01-05 17:03:01 -0800</creation_ts>
          <short_desc>[EFL] Merge ewk_view_single into ewk_view</short_desc>
          <delta_ts>2014-01-08 16:56:05 -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>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryuan Choi">ryuan.choi</reporter>
          <assigned_to name="Ryuan Choi">ryuan.choi</assigned_to>
          <cc>bunhere</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rakuco</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>964532</commentid>
    <comment_count>0</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-01-05 17:03:01 -0800</bug_when>
    <thetext>Since ewk_view_tiled is removed, we don&apos;t need to keep ewk_view_single.cpp out of ewk_view_single.cpp

It just makes extra hierarchy(ewk_base and ewk_single)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964535</commentid>
    <comment_count>1</comment_count>
      <attachid>220408</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-01-05 17:09:24 -0800</bug_when>
    <thetext>Created attachment 220408
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964536</commentid>
    <comment_count>2</comment_count>
      <attachid>220409</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-01-05 17:16:05 -0800</bug_when>
    <thetext>Created attachment 220409
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964537</commentid>
    <comment_count>3</comment_count>
      <attachid>220410</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-01-05 17:21:48 -0800</bug_when>
    <thetext>Created attachment 220410
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965310</commentid>
    <comment_count>4</comment_count>
      <attachid>220410</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2014-01-07 20:19:35 -0800</bug_when>
    <thetext>Comment on attachment 220410
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=220410&amp;action=review

&gt; Source/WebKit/efl/ewk/ewk_view.cpp:1014
&gt; +        Evas_Coord x, y, cw, ch;

How about using more meaningful name for cw, ch ? centerWidth, centerHeight ?

&gt; Source/WebKit/efl/ewk/ewk_view.cpp:1049
&gt; +            startHeight = startHeight + moveLineUpDown;

I wonder why we need this line.

&gt; Source/WebKit/efl/ewk/ewk_view.cpp:1135
&gt; +        return true;

I doubt if &quot;return true&quot; is correct logic.

&gt; Source/WebKit/efl/ewk/ewk_view.cpp:1147
&gt; +    if (smartData-&gt;animated_zoom.zoom.current &lt; 0.00001) {

How about use a constant variable for 0.00001 ?

&gt; Source/WebKit/efl/ewk/ewk_view.cpp:1404
&gt; +    // TODO: review

Need to re-write with more detail comment.

&gt; Source/WebKit/efl/ewk/ewk_view.cpp:1408
&gt; +    Evas_Coord dx, dy, cw, ch;

ditto.

&gt; Source/WebKit/efl/ewk/ewk_view.cpp:1442
&gt; +}

Add a new line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965340</commentid>
    <comment_count>5</comment_count>
      <attachid>220595</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-01-07 22:06:44 -0800</bug_when>
    <thetext>Created attachment 220595
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965374</commentid>
    <comment_count>6</comment_count>
      <attachid>220607</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-01-08 01:08:50 -0800</bug_when>
    <thetext>Created attachment 220607
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965376</commentid>
    <comment_count>7</comment_count>
      <attachid>220410</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-01-08 01:12:15 -0800</bug_when>
    <thetext>Comment on attachment 220410
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=220410&amp;action=review

&gt;&gt; Source/WebKit/efl/ewk/ewk_view.cpp:1014
&gt;&gt; +        Evas_Coord x, y, cw, ch;
&gt; 
&gt; How about using more meaningful name for cw, ch ? centerWidth, centerHeight ?

Ok, I changed to contentWidth, contentHeight.

&gt;&gt; Source/WebKit/efl/ewk/ewk_view.cpp:1049
&gt;&gt; +            startHeight = startHeight + moveLineUpDown;
&gt; 
&gt; I wonder why we need this line.

It&apos;s rquired. But I refactored little bit.
s/startHeight/row and moved into for loop.

&gt;&gt; Source/WebKit/efl/ewk/ewk_view.cpp:1135
&gt;&gt; +        return true;
&gt; 
&gt; I doubt if &quot;return true&quot; is correct logic.

You&apos;re right. scrolls_process doesn&apos;t need to return anything.

I fixed it.

&gt;&gt; Source/WebKit/efl/ewk/ewk_view.cpp:1147
&gt;&gt; +    if (smartData-&gt;animated_zoom.zoom.current &lt; 0.00001) {
&gt; 
&gt; How about use a constant variable for 0.00001 ?

It&apos;s for epsilon. I changed to std::numeric_limits&lt;float&gt;::epsilon()

&gt;&gt; Source/WebKit/efl/ewk/ewk_view.cpp:1404
&gt;&gt; +    // TODO: review
&gt; 
&gt; Need to re-write with more detail comment.

It looks wrong comment. removed

&gt;&gt; Source/WebKit/efl/ewk/ewk_view.cpp:1408
&gt;&gt; +    Evas_Coord dx, dy, cw, ch;
&gt; 
&gt; ditto.

fixed

&gt;&gt; Source/WebKit/efl/ewk/ewk_view.cpp:1442
&gt;&gt; +}
&gt; 
&gt; Add a new line.

Ooops. done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965670</commentid>
    <comment_count>8</comment_count>
      <attachid>220607</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2014-01-08 15:52:30 -0800</bug_when>
    <thetext>Comment on attachment 220607
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=220607&amp;action=review

Looks fine.

&gt; Source/WebKit/efl/ewk/ewk_view.cpp:1415
&gt; +    Evas_Coord dx, dy, contentWidth, contentHeight;

It would be nicer if we use more readable name for dx, dy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965686</commentid>
    <comment_count>9</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-01-08 16:55:34 -0800</bug_when>
    <thetext>Committed r161526: &lt;http://trac.webkit.org/changeset/161526&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965687</commentid>
    <comment_count>10</comment_count>
      <attachid>220607</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-01-08 16:56:05 -0800</bug_when>
    <thetext>Comment on attachment 220607
Patch

Clearing flags.

Landed manually after applied last comment.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220408</attachid>
            <date>2014-01-05 17:09:24 -0800</date>
            <delta_ts>2014-01-05 17:15:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126508-20140106100922.patch</filename>
            <type>text/plain</type>
            <size>33548</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxMzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU2ZWI4YjNjNGZlOGRjMDkx
NDE0Yjk1YTJjNWE5MzM5YTFhMDgzMWEuLjczYTM2NjhjMDM5Mjc3NGZjZmZiZDk1ZjJkYTAwMDQ3
YWFmODAzYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTQtMDEtMDUgIFJ5dWFuIENo
b2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdIE1lcmdlIGV3a192
aWV3X3NpbmdsZSBpbnRvIGV3a192aWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMjY1MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOiBSZW1vdmVkIGV3a192aWV3X3Np
bmdsZS5jcHAKKwogMjAxNC0wMS0wNCAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gW0NNYWtlXSBJbXByb3ZlIHRoZSB3YXkgd2UgbG9jYXRl
IGdvYmplY3QtaW50cm9zcGVjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCmluZGV4IDk4YzdlMTFhYzcxMDRl
MmYwYzU0MGIyZmI3MTdhMDM4YTNlMDI5NDEuLmVjNzlkMDMxOGEyODc2NzI1ZThlNzlhMjE2OTky
MTI5N2U5NzJlYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxNC0wMS0w
NSAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF0g
TWVyZ2UgZXdrX3ZpZXdfc2luZ2xlIGludG8gZXdrX3ZpZXcKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjUwOAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbmNlIGV3a192aWV3X3RpbGVkIGlzIHJlbW92
ZWQgYXQgcjE2MTEzNCwgd2UgZG9uJ3QgbmVlZCB0byBrZWVwCisgICAgICAgIGV3a192aWV3X3Np
bmdsZSBvdXQgb2YgZXdrX3ZpZXcuY3BwLgorCisgICAgICAgICogZXdrL2V3a192aWV3LmNwcDoK
KyAgICAgICAgKF9ld2tfdmlld19zbWFydF9hZGQpOgorICAgICAgICAoX2V3a192aWV3X3NtYXJ0
X3Jlc2l6ZSk6CisgICAgICAgIChfZXdrX3ZpZXdfc2NyZWVuX21vdmUpOiBNb3ZlZCBmcm9tIGV3
a192aWV3X3NpbmdsZS5jcHAKKyAgICAgICAgKF9ld2tfdmlld19zY3JvbGxfcHJvY2Vzc19zaW5n
bGUpOiBEaXR0by4KKyAgICAgICAgKF9ld2tfdmlld19zbWFydF9zY3JvbGxzX3Byb2Nlc3MpOiBE
aXR0by4KKyAgICAgICAgKF9ld2tfdmlld19zbWFydF9yZXBhaW50c19wcm9jZXNzKTogRGl0dG8u
CisgICAgICAgIChfZXdrX3ZpZXdfc21hcnRfem9vbV93ZWFrX3NldCk6IERpdHRvLgorICAgICAg
ICAoX2V3a192aWV3X3NtYXJ0X3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KTogRGl0dG8uCisg
ICAgICAgIChld2tfdmlld19iYXNlX3NtYXJ0X3NldCk6IE1lcmdlZCBzbWFydCBtZXRob2Qgb2Yg
ZXdrX3ZpZXdfc2luZ2xlLgorICAgICAgICAoZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3NldCk6Cisg
ICAgICAgIChfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2NsYXNzX25ldyk6CisgICAgICAgIChld2tf
dmlld19zaW5nbGVfYWRkKToKKyAgICAgICAgKGV3a192aWV3X2JnX2NvbG9yX3NldCk6CisgICAg
ICAgICogZXdrL2V3a192aWV3Lmg6IFJlbW92ZWQgYmFja2luZ3N0b3JlX2FkZCBhbmQgYmdfY29s
b3Jfc2V0IHdoaWNoIHdlcmUgZm9yIGV3a192aWV3X3RpbGVkLgorICAgICAgICAqIGV3ay9ld2tf
dmlld19zaW5nbGUuY3BwOgorCiAyMDE0LTAxLTAyICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJh
Y2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBNZXJnZSBkaWRNb3ZlT25zY3JlZW4gLyBwYWdl
IHZpc2liaWxpdHkgdG8gaXNWaXNpYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCAxNjBk
M2UzNGIxY2Y0OWU5ZjlhNmNhNDkzNTZiZjQ2OTA4ZTc1MGM0Li4yMTdjZTVlYWVjYWY2ZGE2MTNj
MWEwZmRlNjYzMzc5Y2Y1N2E5OWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
RWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTE0Miw3
ICsxNDIsNiBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwogICAgIGVmbC9ld2svZXdrX3Nl
dHRpbmdzLmNwcAogICAgIGVmbC9ld2svZXdrX3RvdWNoX2V2ZW50LmNwcAogICAgIGVmbC9ld2sv
ZXdrX3ZpZXcuY3BwCi0gICAgZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuY3BwCiAgICAgZWZsL2V3
ay9ld2tfd2ViX2RhdGFiYXNlLmNwcAogICAgIGVmbC9ld2svZXdrX3dpbmRvd19mZWF0dXJlcy5j
cHAKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAgYi9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCmluZGV4IDU1NjJmNTA0Yzg3MWNiNzcz
Nzc1NzI4YzM5ODEyYmM1ZjNhOTM5MzkuLjgwMDUwMzAwODYwYmEzODhlMWU1OTY0NmQwM2JkMWUz
Y2U5YmUzOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcApAQCAtOTA2LDcgKzkwNiw2
IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9hZGQoRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiAgICAgY29uc3QgRXZhc19TbWFydCogc21hcnQgPSBldmFzX29iamVjdF9zbWFydF9zbWFydF9n
ZXQoZXdrVmlldyk7CiAgICAgY29uc3QgRXZhc19TbWFydF9DbGFzcyogc21hcnRDbGFzcyA9IGV2
YXNfc21hcnRfY2xhc3NfZ2V0KHNtYXJ0KTsKICAgICBjb25zdCBFd2tfVmlld19TbWFydF9DbGFz
cyogYXBpID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBFd2tfVmlld19TbWFydF9DbGFzcyo+KHNt
YXJ0Q2xhc3MpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGFwaS0+YmFja2luZ19z
dG9yZV9hZGQpOwogICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpOwogCiAg
ICAgaWYgKCFzbWFydERhdGEpIHsKQEAgLTkzNCwxNSArOTMzLDIyIEBAIHN0YXRpYyB2b2lkIF9l
d2tfdmlld19zbWFydF9hZGQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAKICAgICBFV0tfVklFV19Q
UklWX0dFVChzbWFydERhdGEsIHByaXYpOwogCi0gICAgc21hcnREYXRhLT5iYWNraW5nX3N0b3Jl
ID0gYXBpLT5iYWNraW5nX3N0b3JlX2FkZChzbWFydERhdGEpOwotICAgIGlmICghc21hcnREYXRh
LT5iYWNraW5nX3N0b3JlKSB7CisgICAgc21hcnREYXRhLT5iYWNraW5nX3N0b3JlID0gZXZhc19v
YmplY3RfaW1hZ2VfYWRkKHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsKKyAgICBpZiAoRUlOQV9VTkxJ
S0VMWSghc21hcnREYXRhLT5iYWNraW5nX3N0b3JlKSkgewogICAgICAgICBFUlIoIkNvdWxkIG5v
dCBjcmVhdGUgYmFja2luZyBzdG9yZSBvYmplY3QuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKKyAgICBjb25zdCBFY29yZV9FdmFzKiBlY29yZUV2YXMgPSBlY29yZV9ldmFzX2Vjb3JlX2V2
YXNfZ2V0KHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsKKyAgICBjb25zdCBjaGFyKiBlbmdpbmUgPSBl
Y29yZV9ldmFzX2VuZ2luZV9uYW1lX2dldChlY29yZUV2YXMpOworICAgIGlmICghc3RybmNtcChl
bmdpbmUsICJvcGVuZ2xfeDExIiwgc3RybGVuKCJvcGVuZ2xfeDExIikpKQorICAgICAgICBldmFz
X29iamVjdF9pbWFnZV9jb250ZW50X2hpbnRfc2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwg
RVZBU19JTUFHRV9DT05URU5UX0hJTlRfRFlOQU1JQyk7CisKKyAgICBldmFzX29iamVjdF9pbWFn
ZV9hbHBoYV9zZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBmYWxzZSk7CisgICAgZXZhc19v
YmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHNt
YXJ0RGF0YS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZSk7CisgICAgZXZhc19vYmplY3RfcGFzc19l
dmVudHNfc2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgdHJ1ZSk7CiAgICAgZXZhc19vYmpl
Y3Rfc21hcnRfbWVtYmVyX2FkZChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIGV3a1ZpZXcpOwog
ICAgIGV2YXNfb2JqZWN0X3Nob3coc21hcnREYXRhLT5iYWNraW5nX3N0b3JlKTsKLSAgICBldmFz
X29iamVjdF9wYXNzX2V2ZW50c19zZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCB0cnVlKTsK
IAogICAgIHNtYXJ0RGF0YS0+ZXZlbnRzX3JlY3QgPSBldmFzX29iamVjdF9yZWN0YW5nbGVfYWRk
KHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsKICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc21hcnRE
YXRhLT5ldmVudHNfcmVjdCwgMCwgMCwgMCwgMCk7CkBAIC05OTgsOSArMTAwNCwyNCBAQCBzdGF0
aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfcmVzaXplKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFz
X0Nvb3JkIHcsIEV2YXNfQ29vcgogCiAgICAgLy8gdGhlc2Ugc2hvdWxkIGJlIHF1ZXVlZCBhbmQg
cHJvY2Vzc2VkIGluIGNhbGN1bGF0ZSBhcyB3ZWxsIQogICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShz
bWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHcsIGgpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Np
emVfc2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgdywgaCk7CiAKICAgICBzbWFydERhdGEt
PmNoYW5nZWQuc2l6ZSA9IHRydWU7CiAgICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc21hcnRE
YXRhKTsKKworICAgIGlmIChzbWFydERhdGEtPmFuaW1hdGVkX3pvb20uem9vbS5jdXJyZW50IDwg
MC4wMDAwMSkgeworICAgICAgICBFdmFzX09iamVjdCogY2xpcCA9IGV2YXNfb2JqZWN0X2NsaXBf
Z2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSk7CisgICAgICAgIEV2YXNfQ29vcmQgeCwgeSwg
Y3csIGNoOworICAgICAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3NldChzbWFydERhdGEtPmJh
Y2tpbmdfc3RvcmUsIDAsIDAsIHcsIGgpOworICAgICAgICBldmFzX29iamVjdF9nZW9tZXRyeV9n
ZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCAmeCwgJnksIDAsIDApOworICAgICAgICBldmFz
X29iamVjdF9tb3ZlKGNsaXAsIHgsIHkpOworICAgICAgICBld2tfZnJhbWVfY29udGVudHNfc2l6
ZV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmY3csICZjaCk7CisgICAgICAgIGlmICh3ID4g
Y3cpCisgICAgICAgICAgICB3ID0gY3c7CisgICAgICAgIGlmIChoID4gY2gpCisgICAgICAgICAg
ICBoID0gY2g7CisgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShjbGlwLCB3LCBoKTsKKyAgICB9
CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9tb3ZlKEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBFdmFzX0Nvb3JkIC8qeCovLCBFdmFzX0Nvb3JkIC8qeSovKQpAQCAtMTAxMCw2ICsxMDMx
LDE5OSBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfbW92ZShFdmFzX09iamVjdCogZXdr
VmlldywgRXZhc19Db29yZCAvKngqLywgRXZhc19DbwogICAgIF9ld2tfdmlld19zbWFydF9jaGFu
Z2VkKHNtYXJ0RGF0YSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfc2NyZWVu
X21vdmUodWludDMyX3QqIGltYWdlLCBzaXplX3QgZGVzdGluYXRpb25YLCBzaXplX3QgZGVzdGlu
YXRpb25ZLCBzaXplX3Qgc291cmNlWCwgc2l6ZV90IHNvdXJjZVksIHNpemVfdCBjb3B5V2lkdGgs
IHNpemVfdCBjb3B5SGVpZ2h0LCBzaXplX3QgaW1hZ2VXaWR0aCkKK3sKKyAgICB1aW50MzJfdCog
c291cmNlQmVnaW4gPSBpbWFnZSArIChpbWFnZVdpZHRoICogc291cmNlWSkgKyBzb3VyY2VYOwor
ICAgIHVpbnQzMl90KiBkZXN0aW5hdGlvbkJlZ2luID0gaW1hZ2UgKyAoaW1hZ2VXaWR0aCAqIGRl
c3RpbmF0aW9uWSkgKyBkZXN0aW5hdGlvblg7CisKKyAgICBzaXplX3QgY29weUxlbmd0aCA9IGNv
cHlXaWR0aCAqIDQ7CisgICAgY29uc3QgaW50IG1vdmVMaW5lVXBEb3duID0gc291cmNlWSA+PSBk
ZXN0aW5hdGlvblkgPyAxIDogLTE7CisgICAgaW50IHN0YXJ0SGVpZ2h0ID0gc291cmNlWSA+PSBk
ZXN0aW5hdGlvblkgPyAwIDogY29weUhlaWdodCAtIDE7CisKKyAgICB1aW50MzJfdCogc291cmNl
LCAqIGRlc3RpbmF0aW9uOworICAgIGlmICgoZGVzdGluYXRpb25YID4gc291cmNlWCAmJiBkZXN0
aW5hdGlvblggPCBzb3VyY2VYICsgY29weVdpZHRoKQorICAgICAgICB8fCAoZGVzdGluYXRpb25Y
IDwgc291cmNlWCAmJiBkZXN0aW5hdGlvblggKyBjb3B5V2lkdGggPiBzb3VyY2VYKSkgeworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvcHlIZWlnaHQ7IGkrKykgeworICAgICAgICAg
ICAgc291cmNlID0gc291cmNlQmVnaW4gKyAoaW1hZ2VXaWR0aCAqIHN0YXJ0SGVpZ2h0KTsKKyAg
ICAgICAgICAgIGRlc3RpbmF0aW9uID0gZGVzdGluYXRpb25CZWdpbiArIChpbWFnZVdpZHRoICog
c3RhcnRIZWlnaHQpOworICAgICAgICAgICAgc3RhcnRIZWlnaHQgPSBzdGFydEhlaWdodCArIG1v
dmVMaW5lVXBEb3duOworICAgICAgICAgICAgbWVtbW92ZShkZXN0aW5hdGlvbiwgc291cmNlLCBj
b3B5TGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY29weUhlaWdodDsgaSsrKSB7CisgICAgICAgICAgICBzb3VyY2UgPSBzb3Vy
Y2VCZWdpbiArIChpbWFnZVdpZHRoICogc3RhcnRIZWlnaHQpOworICAgICAgICAgICAgZGVzdGlu
YXRpb24gPSBkZXN0aW5hdGlvbkJlZ2luICsgKGltYWdlV2lkdGggKiBzdGFydEhlaWdodCk7Cisg
ICAgICAgICAgICBzdGFydEhlaWdodCA9IHN0YXJ0SGVpZ2h0ICsgbW92ZUxpbmVVcERvd247Cisg
ICAgICAgICAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNvdXJjZSwgY29weUxlbmd0aCk7CisgICAg
ICAgIH0KKyAgICB9Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a192aWV3X3Njcm9sbF9wcm9j
ZXNzX3NpbmdsZShFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIHZvaWQqIHBpeGVscywg
RXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIHNjcm9sbE9mZnNldCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdFRvU2Nyb2xsKQor
eworICAgIGludCBzY3JvbGxYID0gcmVjdFRvU2Nyb2xsLngoKTsKKyAgICBpbnQgc2Nyb2xsWSA9
IHJlY3RUb1Njcm9sbC55KCk7CisgICAgaW50IHNjcm9sbFdpZHRoID0gcmVjdFRvU2Nyb2xsLndp
ZHRoKCk7CisgICAgaW50IHNjcm9sbEhlaWdodCA9IHJlY3RUb1Njcm9sbC5oZWlnaHQoKTsKKwor
ICAgIERCRygiJWQsJWQgKyAlZCwlZCAlKzAzZCwlKzAzZCwgc3RvcmU6ICVwICVkeCVkIiwKKyAg
ICAgICAgc2Nyb2xsWCwgc2Nyb2xsWSwgc2Nyb2xsV2lkdGgsIHNjcm9sbEhlaWdodCwgc2Nyb2xs
T2Zmc2V0LndpZHRoKCksIHNjcm9sbE9mZnNldC5oZWlnaHQoKSwgcGl4ZWxzLCB3aWR0aCwgaGVp
Z2h0KTsKKworICAgIGlmIChhYnMoc2Nyb2xsT2Zmc2V0LndpZHRoKCkpID49IHNjcm9sbFdpZHRo
IHx8IGFicyhzY3JvbGxPZmZzZXQuaGVpZ2h0KCkpID49IHNjcm9sbEhlaWdodCkgeworICAgICAg
ICBld2tfdmlld19yZXBhaW50X2FkZChzbWFydERhdGEtPl9wcml2LCBzY3JvbGxYLCBzY3JvbGxZ
LCBzY3JvbGxXaWR0aCwgc2Nyb2xsSGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChzY3JvbGxYIDwgMCkgeworICAgICAgICBzY3JvbGxXaWR0aCArPSBzY3JvbGxYOwor
ICAgICAgICBzY3JvbGxYID0gMDsKKyAgICB9CisgICAgaWYgKHNjcm9sbFkgPCAwKSB7CisgICAg
ICAgIHNjcm9sbEhlaWdodCArPSBzY3JvbGxZOworICAgICAgICBzY3JvbGxZID0gMDsKKyAgICB9
CisKKyAgICBpZiAoc2Nyb2xsWCArIHNjcm9sbFdpZHRoID4gd2lkdGgpCisgICAgICAgIHNjcm9s
bFdpZHRoID0gd2lkdGggLSBzY3JvbGxYOworICAgIGlmIChzY3JvbGxZICsgc2Nyb2xsSGVpZ2h0
ID4gaGVpZ2h0KQorICAgICAgICBzY3JvbGxIZWlnaHQgPSBoZWlnaHQgLSBzY3JvbGxZOworCisg
ICAgaWYgKHNjcm9sbFdpZHRoIDw9IDAgfHwgc2Nyb2xsSGVpZ2h0IDw9IDApCisgICAgICAgIHJl
dHVybjsKKworICAgIGludCBzb3VyY2VYID0gc2Nyb2xsT2Zmc2V0LndpZHRoKCkgPCAwID8gYWJz
KHNjcm9sbE9mZnNldC53aWR0aCgpKSA6IDA7CisgICAgaW50IHNvdXJjZVkgPSBzY3JvbGxPZmZz
ZXQuaGVpZ2h0KCkgPCAwID8gYWJzKHNjcm9sbE9mZnNldC5oZWlnaHQoKSkgOiAwOworICAgIGlu
dCBkZXN0aW5hdGlvblggPSBzY3JvbGxPZmZzZXQud2lkdGgoKSA8IDAgPyAwIDogc2Nyb2xsT2Zm
c2V0LndpZHRoKCk7CisgICAgaW50IGRlc3RpbmF0aW9uWSA9IHNjcm9sbE9mZnNldC5oZWlnaHQo
KSA8IDAgPyAwIDogc2Nyb2xsT2Zmc2V0LmhlaWdodCgpOworICAgIGludCBjb3B5V2lkdGggPSBz
Y3JvbGxXaWR0aCAtIGFicyhzY3JvbGxPZmZzZXQud2lkdGgoKSk7CisgICAgaW50IGNvcHlIZWln
aHQgPSBzY3JvbGxIZWlnaHQgLSBhYnMoc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKTsKKyAgICBpZiAo
c2Nyb2xsT2Zmc2V0LndpZHRoKCkgfHwgc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKSB7CisgICAgICAg
IF9ld2tfdmlld19zY3JlZW5fbW92ZShzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHBpeGVscyksIGRl
c3RpbmF0aW9uWCwgZGVzdGluYXRpb25ZLCBzb3VyY2VYLCBzb3VyY2VZLCBjb3B5V2lkdGgsIGNv
cHlIZWlnaHQsIHdpZHRoKTsKKyAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVf
YWRkKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgZGVzdGluYXRpb25YLCBkZXN0aW5hdGlvblks
IGNvcHlXaWR0aCwgY29weUhlaWdodCk7CisgICAgfQorCisgICAgRWluYV9SZWN0YW5nbGUgdmVy
dGljYWxVcGRhdGU7CisgICAgdmVydGljYWxVcGRhdGUueCA9IGRlc3RpbmF0aW9uWCA/IDAgOiBj
b3B5V2lkdGggLSAxOworICAgIHZlcnRpY2FsVXBkYXRlLnkgPSAwOworICAgIHZlcnRpY2FsVXBk
YXRlLncgPSBhYnMoc2Nyb2xsT2Zmc2V0LndpZHRoKCkpOworICAgIHZlcnRpY2FsVXBkYXRlLmgg
PSBzY3JvbGxIZWlnaHQ7CisgICAgaWYgKHZlcnRpY2FsVXBkYXRlLncgJiYgdmVydGljYWxVcGRh
dGUuaCkKKyAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9hZGQoc21hcnREYXRhLT5fcHJpdiwgdmVy
dGljYWxVcGRhdGUueCwgdmVydGljYWxVcGRhdGUueSwgdmVydGljYWxVcGRhdGUudywgdmVydGlj
YWxVcGRhdGUuaCk7CisKKyAgICBFaW5hX1JlY3RhbmdsZSBob3Jpem9udGFsVXBkYXRlOworICAg
IGhvcml6b250YWxVcGRhdGUueCA9IGRlc3RpbmF0aW9uWDsKKyAgICBob3Jpem9udGFsVXBkYXRl
LnkgPSBkZXN0aW5hdGlvblkgPyAwIDogY29weUhlaWdodCAtIDE7CisgICAgaG9yaXpvbnRhbFVw
ZGF0ZS53ID0gY29weVdpZHRoOworICAgIGhvcml6b250YWxVcGRhdGUuaCA9IGFicyhzY3JvbGxP
ZmZzZXQuaGVpZ2h0KCkpOworICAgIGlmIChob3Jpem9udGFsVXBkYXRlLncgJiYgaG9yaXpvbnRh
bFVwZGF0ZS5oKQorICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzbWFydERhdGEtPl9wcml2
LCBob3Jpem9udGFsVXBkYXRlLngsIGhvcml6b250YWxVcGRhdGUueSwgaG9yaXpvbnRhbFVwZGF0
ZS53LCBob3Jpem9udGFsVXBkYXRlLmgpOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmll
d19zbWFydF9zY3JvbGxzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQor
eworICAgIEV2YXNfQ29vcmQgaW1hZ2VXaWR0aCwgaW1hZ2VIZWlnaHQ7CisgICAgZXZhc19vYmpl
Y3RfaW1hZ2Vfc2l6ZV9nZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCAmaW1hZ2VXaWR0aCwg
JmltYWdlSGVpZ2h0KTsKKworICAgIGNvbnN0IFdURjo6VmVjdG9yPFdlYkNvcmU6OkludFNpemU+
JiBzY3JvbGxPZmZzZXRzID0gZXdrX3ZpZXdfc2Nyb2xsX29mZnNldHNfZ2V0KHNtYXJ0RGF0YS0+
X3ByaXYpOworICAgIGNvbnN0IFdURjo6VmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+JiByZWN0c1Rv
U2Nyb2xsID0gZXdrX3ZpZXdfc2Nyb2xsX3JlY3RzX2dldChzbWFydERhdGEtPl9wcml2KTsKKwor
ICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdFRvU2Nyb2xsKDAsIDAsIGltYWdlV2lkdGgsIGltYWdl
SGVpZ2h0KTsKKyAgICBXZWJDb3JlOjpJbnRTaXplIHNjcm9sbE9mZnNldDsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNjcm9sbE9mZnNldHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcmVj
dFRvU2Nyb2xsLmludGVyc2VjdChyZWN0c1RvU2Nyb2xsW2ldKTsKKyAgICAgICAgc2Nyb2xsT2Zm
c2V0ICs9IHNjcm9sbE9mZnNldHNbaV07CisgICAgfQorCisgICAgaWYgKHNjcm9sbE9mZnNldC5p
c1plcm8oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICB2b2lkKiBwaXhlbHMgPSBldmFz
X29iamVjdF9pbWFnZV9kYXRhX2dldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIDEpOworICAg
IF9ld2tfdmlld19zY3JvbGxfcHJvY2Vzc19zaW5nbGUoc21hcnREYXRhLCBwaXhlbHMsIGltYWdl
V2lkdGgsIGltYWdlSGVpZ2h0LCBzY3JvbGxPZmZzZXQsIHJlY3RUb1Njcm9sbCk7CisKKyAgICBl
dmFzX29iamVjdF9pbWFnZV9kYXRhX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHBpeGVs
cyk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdf
c21hcnRfcmVwYWludHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCit7
CisgICAgaWYgKHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPCAwLjAwMDAx
KSB7CisgICAgICAgIEV2YXNfT2JqZWN0KiBjbGlwID0gZXZhc19vYmplY3RfY2xpcF9nZXQoc21h
cnREYXRhLT5iYWNraW5nX3N0b3JlKTsKKworICAgICAgICAvLyByZXNldCBlZmZlY3RzIG9mIHpv
b21fd2Vha19zZXQoKQorICAgICAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3NldChzbWFydERh
dGEtPmJhY2tpbmdfc3RvcmUsIDAsIDAsIHNtYXJ0RGF0YS0+dmlldy53LCBzbWFydERhdGEtPnZp
ZXcuaCk7CisgICAgICAgIGV2YXNfb2JqZWN0X21vdmUoY2xpcCwgc21hcnREYXRhLT52aWV3Lngs
IHNtYXJ0RGF0YS0+dmlldy55KTsKKworICAgICAgICBFdmFzX0Nvb3JkIHdpZHRoID0gc21hcnRE
YXRhLT52aWV3Lnc7CisgICAgICAgIEV2YXNfQ29vcmQgaGVpZ2h0ID0gc21hcnREYXRhLT52aWV3
Lmg7CisKKyAgICAgICAgRXZhc19Db29yZCBjZW50ZXJXaWR0aCwgY2VudGVySGVpZ2h0OworICAg
ICAgICBld2tfZnJhbWVfY29udGVudHNfc2l6ZV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAm
Y2VudGVyV2lkdGgsICZjZW50ZXJIZWlnaHQpOworICAgICAgICBpZiAod2lkdGggPiBjZW50ZXJX
aWR0aCkKKyAgICAgICAgICAgIHdpZHRoID0gY2VudGVyV2lkdGg7CisKKyAgICAgICAgaWYgKGhl
aWdodCA+IGNlbnRlckhlaWdodCkKKyAgICAgICAgICAgIGhlaWdodCA9IGNlbnRlckhlaWdodDsK
KworICAgICAgICBldmFzX29iamVjdF9yZXNpemUoY2xpcCwgd2lkdGgsIGhlaWdodCk7CisgICAg
fQorCisgICAgRXZhc19Db29yZCBpbWFnZVdpZHRoLCBpbWFnZUhlaWdodDsKKyAgICBldmFzX29i
amVjdF9pbWFnZV9zaXplX2dldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsICZpbWFnZVdpZHRo
LCAmaW1hZ2VIZWlnaHQpOworCisgICAgRWluYV9UaWxlciogdGlsZXIgPSBlaW5hX3RpbGVyX25l
dyhpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCk7CisgICAgaWYgKCF0aWxlcikgeworICAgICAgICBF
UlIoImNvdWxkIG5vdCBjcmVhdGUgdGlsZXIgJWR4JWQiLCBpbWFnZVdpZHRoLCBpbWFnZUhlaWdo
dCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBld2tfdmlld19sYXlvdXRf
aWZfbmVlZGVkX3JlY3Vyc2l2ZShzbWFydERhdGEtPl9wcml2KTsKKworICAgIHNpemVfdCBjb3Vu
dDsKKyAgICBjb25zdCBFaW5hX1JlY3RhbmdsZSogcGFpbnRSZXF1ZXN0ID0gZXdrX3ZpZXdfcmVw
YWludHNfcG9wKHNtYXJ0RGF0YS0+X3ByaXYsICZjb3VudCk7CisgICAgY29uc3QgRWluYV9SZWN0
YW5nbGUqIHBhaW50UmVxdWVzdEVuZCA9IHBhaW50UmVxdWVzdCArIGNvdW50OworICAgIGZvciAo
OyBwYWludFJlcXVlc3QgPCBwYWludFJlcXVlc3RFbmQ7IHBhaW50UmVxdWVzdCsrKQorICAgICAg
ICBlaW5hX3RpbGVyX3JlY3RfYWRkKHRpbGVyLCBwYWludFJlcXVlc3QpOworCisgICAgRWluYV9J
dGVyYXRvciogaXRlcmF0b3IgPSBlaW5hX3RpbGVyX2l0ZXJhdG9yX25ldyh0aWxlcik7CisgICAg
aWYgKCFpdGVyYXRvcikgeworICAgICAgICBFUlIoImNvdWxkIG5vdCBnZXQgaXRlcmF0b3IgZm9y
IHRpbGVyIik7CisgICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0aWxlcik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICBXZWJD
b3JlOjpGcmFtZSogbWFpbkZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKHNtYXJ0RGF0YS0+
bWFpbl9mcmFtZSk7CisgICAgaWYgKG1haW5GcmFtZSAmJiBtYWluRnJhbWUtPnRpbGVkQmFja2lu
Z1N0b3JlKCkpCisgICAgICAgIG1haW5GcmFtZS0+dGlsZWRCYWNraW5nU3RvcmUoKS0+Y292ZXJX
aXRoVGlsZXNJZk5lZWRlZCgpOworI2VuZGlmCisKKyAgICBFd2tfUGFpbnRfQ29udGV4dCogY29u
dGV4dCA9IGV3a19wYWludF9jb250ZXh0X2Zyb21faW1hZ2VfbmV3KHNtYXJ0RGF0YS0+YmFja2lu
Z19zdG9yZSk7CisgICAgZXdrX3BhaW50X2NvbnRleHRfc2F2ZShjb250ZXh0KTsKKworICAgIEVp
bmFfUmVjdGFuZ2xlKiByZWN0OworICAgIEVJTkFfSVRFUkFUT1JfRk9SRUFDSChpdGVyYXRvciwg
cmVjdCkgeworICAgICAgICBld2tfdmlld19wYWludChzbWFydERhdGEtPl9wcml2LCBjb250ZXh0
LCByZWN0KTsKKyAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKHNtYXJ0
RGF0YS0+YmFja2luZ19zdG9yZSwgcmVjdC0+eCwgcmVjdC0+eSwgcmVjdC0+dywgcmVjdC0+aCk7
CisgICAgfQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdl
ID0gRVdLUHJpdmF0ZTo6Y29yZVBhZ2Uoc21hcnREYXRhLT5zZWxmKTsKKyAgICBpZiAocGFnZSkg
eworICAgICAgICBXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKiBjb250cm9sbGVyID0gcGFn
ZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpOworICAgICAgICBpZiAoY29udHJvbGxlci0+aGlnaGxp
Z2h0ZWROb2RlKCkpCisgICAgICAgICAgICBjb250cm9sbGVyLT5kcmF3SGlnaGxpZ2h0KCpjb250
ZXh0LT5ncmFwaGljQ29udGV4dCk7CisgICAgfQorI2VuZGlmCisKKyAgICBld2tfcGFpbnRfY29u
dGV4dF9yZXN0b3JlKGNvbnRleHQpOworICAgIGV3a19wYWludF9jb250ZXh0X2ZyZWUoY29udGV4
dCk7CisKKyAgICBlaW5hX3RpbGVyX2ZyZWUodGlsZXIpOworICAgIGVpbmFfaXRlcmF0b3JfZnJl
ZShpdGVyYXRvcik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIHZvaWQgX2V3a192
aWV3X3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCogZXdrVmlldykKIHsKICAgICBFV0tfVklF
V19TRF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsKQEAgLTExODcsNiArMTQwMSw0NyBAQCBzdGF0
aWMgZmxvYXQgX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfY3VycmVudChFd2tfVmlld19Qcml2YXRl
X0RhdGEqIHByaXYpCiAgICAgICAgICAgICArIHByaXYtPmFuaW1hdGVkWm9vbS56b29tLnN0YXJ0
KTsKIH0KIAorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfem9vbV93ZWFrX3NldChF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY2Vu
dGVyWCwgRXZhc19Db29yZCBjZW50ZXJZKQoreworICAgIC8vIFRPRE86IHJldmlldworICAgIGZs
b2F0IHNjYWxlID0gem9vbSAvIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0Owor
ICAgIEV2YXNfQ29vcmQgdyA9IHNtYXJ0RGF0YS0+dmlldy53ICogc2NhbGU7CisgICAgRXZhc19D
b29yZCBoID0gc21hcnREYXRhLT52aWV3LmggKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIGR4LCBk
eSwgY3csIGNoOworICAgIEV2YXNfT2JqZWN0KiBjbGlwID0gZXZhc19vYmplY3RfY2xpcF9nZXQo
c21hcnREYXRhLT5iYWNraW5nX3N0b3JlKTsKKworICAgIGV3a19mcmFtZV9jb250ZW50c19zaXpl
X2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZjdywgJmNoKTsKKyAgICBpZiAoc21hcnREYXRh
LT52aWV3LncgPiAwICYmIHNtYXJ0RGF0YS0+dmlldy5oID4gMCkgeworICAgICAgICBkeCA9ICh3
ICogKHNtYXJ0RGF0YS0+dmlldy53IC0gY2VudGVyWCkpIC8gc21hcnREYXRhLT52aWV3Lnc7Cisg
ICAgICAgIGR5ID0gKGggKiAoc21hcnREYXRhLT52aWV3LmggLSBjZW50ZXJZKSkgLyBzbWFydERh
dGEtPnZpZXcuaDsKKyAgICB9IGVsc2UgeworICAgICAgICBkeCA9IDA7CisgICAgICAgIGR5ID0g
MDsKKyAgICB9CisKKyAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3NldChzbWFydERhdGEtPmJh
Y2tpbmdfc3RvcmUsIGNlbnRlclggKyBkeCwgY2VudGVyWSArIGR5LCB3LCBoKTsKKworICAgIGlm
IChzbWFydERhdGEtPnZpZXcudyA+IDAgJiYgc21hcnREYXRhLT52aWV3LmggPiAwKSB7CisgICAg
ICAgIGR4ID0gKChzbWFydERhdGEtPnZpZXcudyAtIHcpICogY2VudGVyWCkgLyBzbWFydERhdGEt
PnZpZXcudzsKKyAgICAgICAgZHkgPSAoKHNtYXJ0RGF0YS0+dmlldy5oIC0gaCkgKiBjZW50ZXJZ
KSAvIHNtYXJ0RGF0YS0+dmlldy5oOworICAgIH0gZWxzZSB7CisgICAgICAgIGR4ID0gMDsKKyAg
ICAgICAgZHkgPSAwOworICAgIH0KKyAgICBldmFzX29iamVjdF9tb3ZlKGNsaXAsIHNtYXJ0RGF0
YS0+dmlldy54ICsgZHgsIHNtYXJ0RGF0YS0+dmlldy55ICsgZHkpOworCisgICAgaWYgKGN3IDwg
c21hcnREYXRhLT52aWV3LncpCisgICAgICAgIHcgPSBjdyAqIHNjYWxlOworICAgIGlmIChjaCA8
IHNtYXJ0RGF0YS0+dmlldy5oKQorICAgICAgICBoID0gY2ggKiBzY2FsZTsKKyAgICBldmFzX29i
amVjdF9yZXNpemUoY2xpcCwgdywgaCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2
b2lkIF9ld2tfdmlld19zbWFydF96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChFd2tfVmlld19T
bWFydF9EYXRhKiBzbWFydERhdGEsIEVpbmFfQm9vbCBzbW9vdGhfc2NhbGUpCit7CisgICAgZXZh
c19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUs
IHNtb290aF9zY2FsZSk7Cit9CiBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld196b29tX2FuaW1h
dG9yX2NiKHZvaWQqIGRhdGEpCiB7CiAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRh
ID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwpAQCAtMTI4OCw3ICsx
NTQzLDExIEBAIEVpbmFfQm9vbCBld2tfdmlld19iYXNlX3NtYXJ0X3NldChFd2tfVmlld19TbWFy
dF9DbGFzcyogYXBpKQogICAgIGFwaS0+c2MuY2FsbGJhY2tzID0gX2V3a192aWV3X2NhbGxiYWNr
X25hbWVzOwogCiAgICAgYXBpLT5jb250ZW50c19yZXNpemUgPSBfZXdrX3ZpZXdfc21hcnRfY29u
dGVudHNfcmVzaXplOworICAgIGFwaS0+c2Nyb2xsc19wcm9jZXNzID0gX2V3a192aWV3X3NtYXJ0
X3Njcm9sbHNfcHJvY2VzczsKKyAgICBhcGktPnJlcGFpbnRzX3Byb2Nlc3MgPSBfZXdrX3ZpZXdf
c21hcnRfcmVwYWludHNfcHJvY2VzczsKICAgICBhcGktPnpvb21fc2V0ID0gX2V3a192aWV3X3Nt
YXJ0X3pvb21fc2V0OworICAgIGFwaS0+em9vbV93ZWFrX3NldCA9IF9ld2tfdmlld19zbWFydF96
b29tX3dlYWtfc2V0OworICAgIGFwaS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQgPSBfZXdr
X3ZpZXdfc21hcnRfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQ7CiAgICAgYXBpLT5mbHVzaCA9
IF9ld2tfdmlld19zbWFydF9mbHVzaDsKICAgICBhcGktPnByZV9yZW5kZXJfcmVnaW9uID0gX2V3
a192aWV3X3NtYXJ0X3ByZV9yZW5kZXJfcmVnaW9uOwogICAgIGFwaS0+cHJlX3JlbmRlcl9yZWxh
dGl2ZV9yYWRpdXMgPSBfZXdrX3ZpZXdfc21hcnRfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXM7
CkBAIC0xMzE2LDYgKzE1NzUsMjkgQEAgRWluYV9Cb29sIGV3a192aWV3X2Jhc2Vfc21hcnRfc2V0
KEV3a19WaWV3X1NtYXJ0X0NsYXNzKiBhcGkpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0VpbmFf
Qm9vbCBld2tfdmlld19zaW5nbGVfc21hcnRfc2V0KEV3a19WaWV3X1NtYXJ0X0NsYXNzKiBhcGkp
Cit7CisgICAgcmV0dXJuIGV3a192aWV3X2Jhc2Vfc21hcnRfc2V0KGFwaSk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgRXZhc19TbWFydCogX2V3a192aWV3X3NpbmdsZV9zbWFydF9jbGFzc19uZXcodm9p
ZCkKK3sKKyAgICBzdGF0aWMgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgYXBpID0gRVdLX1ZJRVdfU01B
UlRfQ0xBU1NfSU5JVF9OQU1FX1ZFUlNJT04oZXdrVmlld1NpbmdsZU5hbWUpOworICAgIHN0YXRp
YyBFdmFzX1NtYXJ0KiBzbWFydCA9IDA7CisKKyAgICBpZiAoRUlOQV9VTkxJS0VMWSghc21hcnQp
KSB7CisgICAgICAgIGV3a192aWV3X2Jhc2Vfc21hcnRfc2V0KCZhcGkpOworICAgICAgICBzbWFy
dCA9IGV2YXNfc21hcnRfY2xhc3NfbmV3KCZhcGkuc2MpOworICAgIH0KKworICAgIHJldHVybiBz
bWFydDsKK30KKworRXZhc19PYmplY3QqIGV3a192aWV3X3NpbmdsZV9hZGQoRXZhcyogY2FudmFz
KQoreworICAgIHJldHVybiBldmFzX29iamVjdF9zbWFydF9hZGQoY2FudmFzLCBfZXdrX3ZpZXdf
c2luZ2xlX3NtYXJ0X2NsYXNzX25ldygpKTsKK30KKwogdm9pZCBld2tfdmlld19maXhlZF9sYXlv
dXRfc2l6ZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNf
Q29vcmQgaGVpZ2h0KQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c21hcnREYXRhKTsKQEAgLTE0MjQsNyArMTcwNiw2IEBAIHZvaWQgZXdrX3ZpZXdfYmdfY29sb3Jf
c2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgcmVkLCBpbnQgZ3JlZW4sIGludCBibHVlLCBp
CiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+YmdfY29sb3Jfc2V0KTsKIAog
ICAgIGlmIChhbHBoYSA8IDApIHsKICAgICAgICAgV0FSTigiQWxwaGEgbGVzcyB0aGFuIHplcm8g
KCVkKS4iLCBhbHBoYSk7CkBAIC0xNDUzLDcgKzE3MzQsNyBAQCB2b2lkIGV3a192aWV3X2JnX2Nv
bG9yX3NldChFdmFzX09iamVjdCogZXdrVmlldywgaW50IHJlZCwgaW50IGdyZWVuLCBpbnQgYmx1
ZSwgaQogICAgIHNtYXJ0RGF0YS0+YmdfY29sb3IuYiA9IGJsdWU7CiAgICAgc21hcnREYXRhLT5i
Z19jb2xvci5hID0gYWxwaGE7CiAKLSAgICBzbWFydERhdGEtPmFwaS0+YmdfY29sb3Jfc2V0KHNt
YXJ0RGF0YSwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAgIGV2YXNfb2JqZWN0X2ltYWdl
X2FscGhhX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIGFscGhhIDwgMjU1KTsKIAogICAg
IFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNtYXJ0RGF0YS0+X3ByaXYtPm1haW5GcmFtZS0+
dmlldygpOwogICAgIGlmICh2aWV3KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX3ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oCmluZGV4IDlj
OTA4ODY3YTY4Y2ZkNjBlNWUzNzIyOTVjNWM3NzAwMDdjYWY1ODIuLjRkNzc3ZjhmMzI0YzVmZWNh
NmExMTdmZTUwMWM2YWMzNjg4MGM1NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfdmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oCkBAIC0x
NTMsMTUgKzE1MywxMiBAQCBzdHJ1Y3QgX0V3a19WaWV3X1NtYXJ0X0NsYXNzIHsKIAogICAgIEV2
YXNfT2JqZWN0ICooKndpbmRvd19jcmVhdGUpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBFaW5h
X0Jvb2wgamF2YXNjcmlwdCwgY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAqd2luZG93X2ZlYXR1
cmVzKTsgLyoqPCBjcmVhdGVzIGEgbmV3IHdpbmRvdywgcmVxdWVzdGVkIGJ5IHdlYmtpdCAqLwog
ICAgIHZvaWQgKCp3aW5kb3dfY2xvc2UpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKTsgLyoqPCBj
bG9zZXMgYSB3aW5kb3cgKi8KLSAgICAvLyBob29rcyB0byBhbGxvdyBkaWZmZXJlbnQgYmFja2lu
ZyBzdG9yZXMKLSAgICBFdmFzX09iamVjdCAqKCpiYWNraW5nX3N0b3JlX2FkZCkoRXdrX1ZpZXdf
U21hcnRfRGF0YSAqc2QpOyAvKio8IG11c3QgYmUgZGVmaW5lZCAqLwogICAgIEVpbmFfQm9vbCAo
KnNjcm9sbHNfcHJvY2VzcykoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpOyAvKio8IG11c3QgYmUg
ZGVmaW5lZCAqLwogICAgIEVpbmFfQm9vbCAoKnJlcGFpbnRzX3Byb2Nlc3MpKEV3a19WaWV3X1Nt
YXJ0X0RhdGEgKnNkKTsgLyoqPCBtdXN0IGJlIGRlZmluZWQgKi8KICAgICBFaW5hX0Jvb2wgKCpj
b250ZW50c19yZXNpemUpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBpbnQgdywgaW50IGgpOwog
ICAgIEVpbmFfQm9vbCAoKnpvb21fc2V0KShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgZmxvYXQg
em9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSk7CiAgICAgRWluYV9Cb29sICgqem9v
bV93ZWFrX3NldCkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIGZsb2F0IHpvb20sIEV2YXNfQ29v
cmQgY3gsIEV2YXNfQ29vcmQgY3kpOwogICAgIHZvaWQgKCp6b29tX3dlYWtfc21vb3RoX3NjYWxl
X3NldCkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIEVpbmFfQm9vbCBzbW9vdGhfc2NhbGUpOwot
ICAgIHZvaWQgKCpiZ19jb2xvcl9zZXQpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCB1bnNpZ25l
ZCBjaGFyIHJlZCwgdW5zaWduZWQgY2hhciBncmVlbiwgdW5zaWduZWQgY2hhciBibHVlLCB1bnNp
Z25lZCBjaGFyIGFscGhhKTsKICAgICB2b2lkICgqZmx1c2gpKEV3a19WaWV3X1NtYXJ0X0RhdGEg
KnNkKTsKICAgICBFaW5hX0Jvb2wgKCpwcmVfcmVuZGVyX3JlZ2lvbikoRXdrX1ZpZXdfU21hcnRf
RGF0YSAqc2QsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNf
Q29vcmQgaCwgZmxvYXQgem9vbSk7CiAgICAgRWluYV9Cb29sICgqcHJlX3JlbmRlcl9yZWxhdGl2
ZV9yYWRpdXMpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCB1bnNpZ25lZCBpbnQgbiwgZmxvYXQg
em9vbSk7CkBAIC0yMDMsNyArMjAwLDcgQEAgc3RydWN0IF9Fd2tfVmlld19TbWFydF9DbGFzcyB7
CiAgKiBUaGUgdmVyc2lvbiB5b3UgaGF2ZSB0byBwdXQgaW50byB0aGUgdmVyc2lvbiBmaWVsZAog
ICogaW4gdGhlIEBhIEV3a19WaWV3X1NtYXJ0X0NsYXNzIHN0cnVjdHVyZS4KICAqLwotI2RlZmlu
ZSBFV0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9OIDdVTAorI2RlZmluZSBFV0tfVklFV19TTUFS
VF9DTEFTU19WRVJTSU9OIDhVTAogCiAvKioKICAqIEluaXRpYWxpemVzIGEgd2hvbGUgQGEgRXdr
X1ZpZXdfU21hcnRfQ2xhc3Mgc3RydWN0dXJlLgpAQCAtMjE1LDcgKzIxMiw3IEBAIHN0cnVjdCBf
RXdrX1ZpZXdfU21hcnRfQ2xhc3MgewogICogQHNlZSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklU
X1ZFUlNJT04KICAqIEBzZWUgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9OQU1FX1ZFUlNJT04K
ICAqLwotI2RlZmluZSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUKHNtYXJ0X2NsYXNzX2luaXQp
IHtzbWFydF9jbGFzc19pbml0LCBFV0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9OLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfQorI2RlZmlu
ZSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUKHNtYXJ0X2NsYXNzX2luaXQpIHtzbWFydF9jbGFz
c19pbml0LCBFV0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9OLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfQogCiAvKioKICAqIEluaXRpYWxpemVzIHRv
IHplcm8gYSB3aG9sZSBAYSBFd2tfVmlld19TbWFydF9DbGFzcyBzdHJ1Y3R1cmUuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfc2luZ2xlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuY3BwCmluZGV4IDBjNDUxNzYxMDQ4ZDc3Mjhm
MDNkMTc1Yzk0MTMzMjg0MjRjMDBiZDMuLjJkOTI1OTFiYmEyNzBjMDcxNzZlODcxZjVlOWY1Y2Y4
ZDk4NGI3MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld19zaW5n
bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuY3BwCkBA
IC02MSwzMDcgKzYxLDcgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NpbmdsZV9zbWFydF9hZGQo
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgICAgICAgIChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUs
IEVWQVNfQ0FMTEJBQ0tfREVMLCBfZXdrX3ZpZXdfc2luZ2xlX29uX2RlbCwgY2xpcCk7CiB9CiAK
LXN0YXRpYyBFdmFzX09iamVjdCogX2V3a192aWV3X3NpbmdsZV9zbWFydF9iYWNraW5nX3N0b3Jl
X2FkZChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCi17Ci0gICAgRXZhc19PYmplY3Qq
IGJzID0gZXZhc19vYmplY3RfaW1hZ2VfYWRkKHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoYnMsIDApOwotICAgIGNvbnN0IEVjb3JlX0V2
YXMqIGVjb3JlRXZhcyA9IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoc21hcnREYXRhLT5iYXNl
LmV2YXMpOwotICAgIGNvbnN0IGNoYXIqIGVuZ2luZSA9IGVjb3JlX2V2YXNfZW5naW5lX25hbWVf
Z2V0KGVjb3JlRXZhcyk7Ci0gICAgaWYgKCFzdHJuY21wKGVuZ2luZSwgIm9wZW5nbF94MTEiLCBz
dHJsZW4oIm9wZW5nbF94MTEiKSkpCi0gICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2NvbnRlbnRf
aGludF9zZXQoYnMsIEVWQVNfSU1BR0VfQ09OVEVOVF9ISU5UX0RZTkFNSUMpOwotCi0gICAgZXZh
c19vYmplY3RfaW1hZ2VfYWxwaGFfc2V0KGJzLCBmYWxzZSk7Ci0gICAgZXZhc19vYmplY3RfaW1h
Z2Vfc21vb3RoX3NjYWxlX3NldChicywgc21hcnREYXRhLT56b29tX3dlYWtfc21vb3RoX3NjYWxl
KTsKLQotICAgIHJldHVybiBiczsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X3NpbmdsZV9z
bWFydF9yZXNpemUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNf
Q29vcmQgaGVpZ2h0KQotewotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0
YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihldmFzX29iamVjdF9zbWFydF9kYXRhX2dl
dChld2tWaWV3KSk7Ci0gICAgX3BhcmVudF9zYy5zYy5yZXNpemUoZXdrVmlldywgd2lkdGgsIGhl
aWdodCk7Ci0KLSAgICBpZiAoIXNtYXJ0RGF0YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
dGhlc2Ugc2hvdWxkIGJlIHF1ZXVlZCBhbmQgcHJvY2Vzc2VkIGluIGNhbGN1bGF0ZSBhcyB3ZWxs
IQotICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfc2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9y
ZSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgaWYgKHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29t
LmN1cnJlbnQgPCAwLjAwMDAxKSB7Ci0gICAgICAgIEV2YXNfT2JqZWN0KiBjbGlwID0gZXZhc19v
YmplY3RfY2xpcF9nZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlKTsKLSAgICAgICAgRXZhc19D
b29yZCB4LCB5LCBjdywgY2g7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KHNt
YXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgMCwgMCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGV2
YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsICZ4LCAmeSwg
MCwgMCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X21vdmUoY2xpcCwgeCwgeSk7Ci0gICAgICAgIGV3
a19mcmFtZV9jb250ZW50c19zaXplX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZjdywgJmNo
KTsKLSAgICAgICAgaWYgKHdpZHRoID4gY3cpCi0gICAgICAgICAgICB3aWR0aCA9IGN3OwotICAg
ICAgICBpZiAoaGVpZ2h0ID4gY2gpCi0gICAgICAgICAgICBoZWlnaHQgPSBjaDsKLSAgICAgICAg
ZXZhc19vYmplY3RfcmVzaXplKGNsaXAsIHdpZHRoLCBoZWlnaHQpOwotICAgIH0KLX0KLQotc3Rh
dGljIGlubGluZSB2b2lkIF9ld2tfdmlld19zY3JlZW5fbW92ZSh1aW50MzJfdCogaW1hZ2UsIHNp
emVfdCBkZXN0aW5hdGlvblgsIHNpemVfdCBkZXN0aW5hdGlvblksIHNpemVfdCBzb3VyY2VYLCBz
aXplX3Qgc291cmNlWSwgc2l6ZV90IGNvcHlXaWR0aCwgc2l6ZV90IGNvcHlIZWlnaHQsIHNpemVf
dCBpbWFnZVdpZHRoKQotewotICAgIHVpbnQzMl90KiBzb3VyY2VCZWdpbiA9IGltYWdlICsgKGlt
YWdlV2lkdGggKiBzb3VyY2VZKSArIHNvdXJjZVg7Ci0gICAgdWludDMyX3QqIGRlc3RpbmF0aW9u
QmVnaW4gPSBpbWFnZSArIChpbWFnZVdpZHRoICogZGVzdGluYXRpb25ZKSArIGRlc3RpbmF0aW9u
WDsKLQotICAgIHNpemVfdCBjb3B5TGVuZ3RoID0gY29weVdpZHRoICogNDsKLSAgICBjb25zdCBp
bnQgbW92ZUxpbmVVcERvd24gPSBzb3VyY2VZID49IGRlc3RpbmF0aW9uWSA/IDEgOiAtMTsKLSAg
ICBpbnQgc3RhcnRIZWlnaHQgPSBzb3VyY2VZID49IGRlc3RpbmF0aW9uWSA/IDAgOiBjb3B5SGVp
Z2h0IC0gMTsKLQotICAgIHVpbnQzMl90KiBzb3VyY2UsICogZGVzdGluYXRpb247Ci0gICAgaWYg
KChkZXN0aW5hdGlvblggPiBzb3VyY2VYICYmIGRlc3RpbmF0aW9uWCA8IHNvdXJjZVggKyBjb3B5
V2lkdGgpCi0gICAgICAgIHx8IChkZXN0aW5hdGlvblggPCBzb3VyY2VYICYmIGRlc3RpbmF0aW9u
WCArIGNvcHlXaWR0aCA+IHNvdXJjZVgpKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY29weUhlaWdodDsgaSsrKSB7Ci0gICAgICAgICAgICBzb3VyY2UgPSBzb3VyY2VCZWdpbiAr
IChpbWFnZVdpZHRoICogc3RhcnRIZWlnaHQpOwotICAgICAgICAgICAgZGVzdGluYXRpb24gPSBk
ZXN0aW5hdGlvbkJlZ2luICsgKGltYWdlV2lkdGggKiBzdGFydEhlaWdodCk7Ci0gICAgICAgICAg
ICBzdGFydEhlaWdodCA9IHN0YXJ0SGVpZ2h0ICsgbW92ZUxpbmVVcERvd247Ci0gICAgICAgICAg
ICBtZW1tb3ZlKGRlc3RpbmF0aW9uLCBzb3VyY2UsIGNvcHlMZW5ndGgpOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3B5SGVpZ2h0OyBp
KyspIHsKLSAgICAgICAgICAgIHNvdXJjZSA9IHNvdXJjZUJlZ2luICsgKGltYWdlV2lkdGggKiBz
dGFydEhlaWdodCk7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uQmVnaW4g
KyAoaW1hZ2VXaWR0aCAqIHN0YXJ0SGVpZ2h0KTsKLSAgICAgICAgICAgIHN0YXJ0SGVpZ2h0ID0g
c3RhcnRIZWlnaHQgKyBtb3ZlTGluZVVwRG93bjsKLSAgICAgICAgICAgIG1lbWNweShkZXN0aW5h
dGlvbiwgc291cmNlLCBjb3B5TGVuZ3RoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotc3RhdGlj
IGlubGluZSB2b2lkIF9ld2tfdmlld19zaW5nbGVfc2Nyb2xsX3Byb2Nlc3Nfc2luZ2xlKEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgdm9pZCogcGl4ZWxzLCBFdmFzX0Nvb3JkIHdpZHRo
LCBFdmFzX0Nvb3JkIGhlaWdodCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0VG9TY3JvbGwpCi17Ci0gICAgaW50IHNjcm9s
bFggPSByZWN0VG9TY3JvbGwueCgpOwotICAgIGludCBzY3JvbGxZID0gcmVjdFRvU2Nyb2xsLnko
KTsKLSAgICBpbnQgc2Nyb2xsV2lkdGggPSByZWN0VG9TY3JvbGwud2lkdGgoKTsKLSAgICBpbnQg
c2Nyb2xsSGVpZ2h0ID0gcmVjdFRvU2Nyb2xsLmhlaWdodCgpOwotCi0gICAgREJHKCIlZCwlZCAr
ICVkLCVkICUrMDNkLCUrMDNkLCBzdG9yZTogJXAgJWR4JWQiLAotICAgICAgICBzY3JvbGxYLCBz
Y3JvbGxZLCBzY3JvbGxXaWR0aCwgc2Nyb2xsSGVpZ2h0LCBzY3JvbGxPZmZzZXQud2lkdGgoKSwg
c2Nyb2xsT2Zmc2V0LmhlaWdodCgpLCBwaXhlbHMsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgaWYg
KGFicyhzY3JvbGxPZmZzZXQud2lkdGgoKSkgPj0gc2Nyb2xsV2lkdGggfHwgYWJzKHNjcm9sbE9m
ZnNldC5oZWlnaHQoKSkgPj0gc2Nyb2xsSGVpZ2h0KSB7Ci0gICAgICAgIGV3a192aWV3X3JlcGFp
bnRfYWRkKHNtYXJ0RGF0YS0+X3ByaXYsIHNjcm9sbFgsIHNjcm9sbFksIHNjcm9sbFdpZHRoLCBz
Y3JvbGxIZWlnaHQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHNjcm9sbFgg
PCAwKSB7Ci0gICAgICAgIHNjcm9sbFdpZHRoICs9IHNjcm9sbFg7Ci0gICAgICAgIHNjcm9sbFgg
PSAwOwotICAgIH0KLSAgICBpZiAoc2Nyb2xsWSA8IDApIHsKLSAgICAgICAgc2Nyb2xsSGVpZ2h0
ICs9IHNjcm9sbFk7Ci0gICAgICAgIHNjcm9sbFkgPSAwOwotICAgIH0KLQotICAgIGlmIChzY3Jv
bGxYICsgc2Nyb2xsV2lkdGggPiB3aWR0aCkKLSAgICAgICAgc2Nyb2xsV2lkdGggPSB3aWR0aCAt
IHNjcm9sbFg7Ci0gICAgaWYgKHNjcm9sbFkgKyBzY3JvbGxIZWlnaHQgPiBoZWlnaHQpCi0gICAg
ICAgIHNjcm9sbEhlaWdodCA9IGhlaWdodCAtIHNjcm9sbFk7Ci0KLSAgICBpZiAoc2Nyb2xsV2lk
dGggPD0gMCB8fCBzY3JvbGxIZWlnaHQgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50
IHNvdXJjZVggPSBzY3JvbGxPZmZzZXQud2lkdGgoKSA8IDAgPyBhYnMoc2Nyb2xsT2Zmc2V0Lndp
ZHRoKCkpIDogMDsKLSAgICBpbnQgc291cmNlWSA9IHNjcm9sbE9mZnNldC5oZWlnaHQoKSA8IDAg
PyBhYnMoc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKSA6IDA7Ci0gICAgaW50IGRlc3RpbmF0aW9uWCA9
IHNjcm9sbE9mZnNldC53aWR0aCgpIDwgMCA/IDAgOiBzY3JvbGxPZmZzZXQud2lkdGgoKTsKLSAg
ICBpbnQgZGVzdGluYXRpb25ZID0gc2Nyb2xsT2Zmc2V0LmhlaWdodCgpIDwgMCA/IDAgOiBzY3Jv
bGxPZmZzZXQuaGVpZ2h0KCk7Ci0gICAgaW50IGNvcHlXaWR0aCA9IHNjcm9sbFdpZHRoIC0gYWJz
KHNjcm9sbE9mZnNldC53aWR0aCgpKTsKLSAgICBpbnQgY29weUhlaWdodCA9IHNjcm9sbEhlaWdo
dCAtIGFicyhzY3JvbGxPZmZzZXQuaGVpZ2h0KCkpOwotICAgIGlmIChzY3JvbGxPZmZzZXQud2lk
dGgoKSB8fCBzY3JvbGxPZmZzZXQuaGVpZ2h0KCkpIHsKLSAgICAgICAgX2V3a192aWV3X3NjcmVl
bl9tb3ZlKHN0YXRpY19jYXN0PHVpbnQzMl90Kj4ocGl4ZWxzKSwgZGVzdGluYXRpb25YLCBkZXN0
aW5hdGlvblksIHNvdXJjZVgsIHNvdXJjZVksIGNvcHlXaWR0aCwgY29weUhlaWdodCwgd2lkdGgp
OwotICAgICAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQoc21hcnREYXRhLT5i
YWNraW5nX3N0b3JlLCBkZXN0aW5hdGlvblgsIGRlc3RpbmF0aW9uWSwgY29weVdpZHRoLCBjb3B5
SGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBFaW5hX1JlY3RhbmdsZSB2ZXJ0aWNhbFVwZGF0ZTsKLSAg
ICB2ZXJ0aWNhbFVwZGF0ZS54ID0gZGVzdGluYXRpb25YID8gMCA6IGNvcHlXaWR0aCAtIDE7Ci0g
ICAgdmVydGljYWxVcGRhdGUueSA9IDA7Ci0gICAgdmVydGljYWxVcGRhdGUudyA9IGFicyhzY3Jv
bGxPZmZzZXQud2lkdGgoKSk7Ci0gICAgdmVydGljYWxVcGRhdGUuaCA9IHNjcm9sbEhlaWdodDsK
LSAgICBpZiAodmVydGljYWxVcGRhdGUudyAmJiB2ZXJ0aWNhbFVwZGF0ZS5oKQotICAgICAgICBl
d2tfdmlld19yZXBhaW50X2FkZChzbWFydERhdGEtPl9wcml2LCB2ZXJ0aWNhbFVwZGF0ZS54LCB2
ZXJ0aWNhbFVwZGF0ZS55LCB2ZXJ0aWNhbFVwZGF0ZS53LCB2ZXJ0aWNhbFVwZGF0ZS5oKTsKLQot
ICAgIEVpbmFfUmVjdGFuZ2xlIGhvcml6b250YWxVcGRhdGU7Ci0gICAgaG9yaXpvbnRhbFVwZGF0
ZS54ID0gZGVzdGluYXRpb25YOwotICAgIGhvcml6b250YWxVcGRhdGUueSA9IGRlc3RpbmF0aW9u
WSA/IDAgOiBjb3B5SGVpZ2h0IC0gMTsKLSAgICBob3Jpem9udGFsVXBkYXRlLncgPSBjb3B5V2lk
dGg7Ci0gICAgaG9yaXpvbnRhbFVwZGF0ZS5oID0gYWJzKHNjcm9sbE9mZnNldC5oZWlnaHQoKSk7
Ci0gICAgaWYgKGhvcml6b250YWxVcGRhdGUudyAmJiBob3Jpem9udGFsVXBkYXRlLmgpCi0gICAg
ICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNtYXJ0RGF0YS0+X3ByaXYsIGhvcml6b250YWxVcGRh
dGUueCwgaG9yaXpvbnRhbFVwZGF0ZS55LCBob3Jpem9udGFsVXBkYXRlLncsIGhvcml6b250YWxV
cGRhdGUuaCk7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NpbmdsZV9zbWFydF9z
Y3JvbGxzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQotewotICAgIEV2
YXNfQ29vcmQgaW1hZ2VXaWR0aCwgaW1hZ2VIZWlnaHQ7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2Vf
c2l6ZV9nZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCAmaW1hZ2VXaWR0aCwgJmltYWdlSGVp
Z2h0KTsKLQotICAgIGNvbnN0IFdURjo6VmVjdG9yPFdlYkNvcmU6OkludFNpemU+JiBzY3JvbGxP
ZmZzZXRzID0gZXdrX3ZpZXdfc2Nyb2xsX29mZnNldHNfZ2V0KHNtYXJ0RGF0YS0+X3ByaXYpOwot
ICAgIGNvbnN0IFdURjo6VmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+JiByZWN0c1RvU2Nyb2xsID0g
ZXdrX3ZpZXdfc2Nyb2xsX3JlY3RzX2dldChzbWFydERhdGEtPl9wcml2KTsKLQotICAgIFdlYkNv
cmU6OkludFJlY3QgcmVjdFRvU2Nyb2xsKDAsIDAsIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KTsK
LSAgICBXZWJDb3JlOjpJbnRTaXplIHNjcm9sbE9mZnNldDsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNjcm9sbE9mZnNldHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmVjdFRvU2Nyb2xs
LmludGVyc2VjdChyZWN0c1RvU2Nyb2xsW2ldKTsKLSAgICAgICAgc2Nyb2xsT2Zmc2V0ICs9IHNj
cm9sbE9mZnNldHNbaV07Ci0gICAgfQotCi0gICAgaWYgKHNjcm9sbE9mZnNldC5pc1plcm8oKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICB2b2lkKiBwaXhlbHMgPSBldmFzX29iamVjdF9p
bWFnZV9kYXRhX2dldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIDEpOwotICAgIF9ld2tfdmll
d19zaW5nbGVfc2Nyb2xsX3Byb2Nlc3Nfc2luZ2xlKHNtYXJ0RGF0YSwgcGl4ZWxzLCBpbWFnZVdp
ZHRoLCBpbWFnZUhlaWdodCwgc2Nyb2xsT2Zmc2V0LCByZWN0VG9TY3JvbGwpOwotCi0gICAgZXZh
c19vYmplY3RfaW1hZ2VfZGF0YV9zZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBwaXhlbHMp
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3Np
bmdsZV9zbWFydF9yZXBhaW50c19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0
YSkKLXsKLSAgICBpZiAoc21hcnREYXRhLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCA8IDAu
MDAwMDEpIHsKLSAgICAgICAgRXZhc19PYmplY3QqIGNsaXAgPSBldmFzX29iamVjdF9jbGlwX2dl
dChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUpOwogCi0gICAgICAgIC8vIHJlc2V0IGVmZmVjdHMg
b2Ygem9vbV93ZWFrX3NldCgpCi0gICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KHNt
YXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgMCwgMCwgc21hcnREYXRhLT52aWV3LncsIHNtYXJ0RGF0
YS0+dmlldy5oKTsKLSAgICAgICAgZXZhc19vYmplY3RfbW92ZShjbGlwLCBzbWFydERhdGEtPnZp
ZXcueCwgc21hcnREYXRhLT52aWV3LnkpOwotCi0gICAgICAgIEV2YXNfQ29vcmQgd2lkdGggPSBz
bWFydERhdGEtPnZpZXcudzsKLSAgICAgICAgRXZhc19Db29yZCBoZWlnaHQgPSBzbWFydERhdGEt
PnZpZXcuaDsKLQotICAgICAgICBFdmFzX0Nvb3JkIGNlbnRlcldpZHRoLCBjZW50ZXJIZWlnaHQ7
Ci0gICAgICAgIGV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChzbWFydERhdGEtPm1haW5fZnJh
bWUsICZjZW50ZXJXaWR0aCwgJmNlbnRlckhlaWdodCk7Ci0gICAgICAgIGlmICh3aWR0aCA+IGNl
bnRlcldpZHRoKQotICAgICAgICAgICAgd2lkdGggPSBjZW50ZXJXaWR0aDsKLQotICAgICAgICBp
ZiAoaGVpZ2h0ID4gY2VudGVySGVpZ2h0KQotICAgICAgICAgICAgaGVpZ2h0ID0gY2VudGVySGVp
Z2h0OwotCi0gICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShjbGlwLCB3aWR0aCwgaGVpZ2h0KTsK
LSAgICB9Ci0KLSAgICBFdmFzX0Nvb3JkIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0OwotICAgIGV2
YXNfb2JqZWN0X2ltYWdlX3NpemVfZ2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgJmltYWdl
V2lkdGgsICZpbWFnZUhlaWdodCk7Ci0KLSAgICBFaW5hX1RpbGVyKiB0aWxlciA9IGVpbmFfdGls
ZXJfbmV3KGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KTsKLSAgICBpZiAoIXRpbGVyKSB7Ci0gICAg
ICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSB0aWxlciAlZHglZCIsIGltYWdlV2lkdGgsIGltYWdl
SGVpZ2h0KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGV3a192aWV3X2xh
eW91dF9pZl9uZWVkZWRfcmVjdXJzaXZlKHNtYXJ0RGF0YS0+X3ByaXYpOwotCi0gICAgc2l6ZV90
IGNvdW50OwotICAgIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBwYWludFJlcXVlc3QgPSBld2tfdmll
d19yZXBhaW50c19wb3Aoc21hcnREYXRhLT5fcHJpdiwgJmNvdW50KTsKLSAgICBjb25zdCBFaW5h
X1JlY3RhbmdsZSogcGFpbnRSZXF1ZXN0RW5kID0gcGFpbnRSZXF1ZXN0ICsgY291bnQ7Ci0gICAg
Zm9yICg7IHBhaW50UmVxdWVzdCA8IHBhaW50UmVxdWVzdEVuZDsgcGFpbnRSZXF1ZXN0KyspCi0g
ICAgICAgIGVpbmFfdGlsZXJfcmVjdF9hZGQodGlsZXIsIHBhaW50UmVxdWVzdCk7Ci0KLSAgICBF
aW5hX0l0ZXJhdG9yKiBpdGVyYXRvciA9IGVpbmFfdGlsZXJfaXRlcmF0b3JfbmV3KHRpbGVyKTsK
LSAgICBpZiAoIWl0ZXJhdG9yKSB7Ci0gICAgICAgIEVSUigiY291bGQgbm90IGdldCBpdGVyYXRv
ciBmb3IgdGlsZXIiKTsKLSAgICAgICAgZWluYV90aWxlcl9mcmVlKHRpbGVyKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAg
IFdlYkNvcmU6OkZyYW1lKiBtYWluRnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoc21hcnRE
YXRhLT5tYWluX2ZyYW1lKTsKLSAgICBpZiAobWFpbkZyYW1lICYmIG1haW5GcmFtZS0+dGlsZWRC
YWNraW5nU3RvcmUoKSkKLSAgICAgICAgbWFpbkZyYW1lLT50aWxlZEJhY2tpbmdTdG9yZSgpLT5j
b3ZlcldpdGhUaWxlc0lmTmVlZGVkKCk7Ci0jZW5kaWYKLQotICAgIEV3a19QYWludF9Db250ZXh0
KiBjb250ZXh0ID0gZXdrX3BhaW50X2NvbnRleHRfZnJvbV9pbWFnZV9uZXcoc21hcnREYXRhLT5i
YWNraW5nX3N0b3JlKTsKLSAgICBld2tfcGFpbnRfY29udGV4dF9zYXZlKGNvbnRleHQpOwotCi0g
ICAgRWluYV9SZWN0YW5nbGUqIHJlY3Q7Ci0gICAgRUlOQV9JVEVSQVRPUl9GT1JFQUNIKGl0ZXJh
dG9yLCByZWN0KSB7Ci0gICAgICAgIGV3a192aWV3X3BhaW50KHNtYXJ0RGF0YS0+X3ByaXYsIGNv
bnRleHQsIHJlY3QpOwotICAgICAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQo
c21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCByZWN0LT54LCByZWN0LT55LCByZWN0LT53LCByZWN0
LT5oKTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIFdlYkNvcmU6OlBhZ2Uq
IHBhZ2UgPSBFV0tQcml2YXRlOjpjb3JlUGFnZShzbWFydERhdGEtPnNlbGYpOwotICAgIGlmIChw
YWdlKSB7Ci0gICAgICAgIFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCk7Ci0gICAgICAgIGlmIChjb250cm9sbGVyLT5o
aWdobGlnaHRlZE5vZGUoKSkKLSAgICAgICAgICAgIGNvbnRyb2xsZXItPmRyYXdIaWdobGlnaHQo
KmNvbnRleHQtPmdyYXBoaWNDb250ZXh0KTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGV3a19wYWlu
dF9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Ci0gICAgZXdrX3BhaW50X2NvbnRleHRfZnJlZShj
b250ZXh0KTsKLQotICAgIGVpbmFfdGlsZXJfZnJlZSh0aWxlcik7Ci0gICAgZWluYV9pdGVyYXRv
cl9mcmVlKGl0ZXJhdG9yKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgRWluYV9C
b29sIF9ld2tfdmlld19zaW5nbGVfc21hcnRfem9vbV93ZWFrX3NldChFd2tfVmlld19TbWFydF9E
YXRhKiBzbWFydERhdGEsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY2VudGVyWCwgRXZhc19Db29y
ZCBjZW50ZXJZKQotewotICAgIC8vIFRPRE86IHJldmlldwotICAgIGZsb2F0IHNjYWxlID0gem9v
bSAvIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0OwotICAgIEV2YXNfQ29vcmQg
dyA9IHNtYXJ0RGF0YS0+dmlldy53ICogc2NhbGU7Ci0gICAgRXZhc19Db29yZCBoID0gc21hcnRE
YXRhLT52aWV3LmggKiBzY2FsZTsKLSAgICBFdmFzX0Nvb3JkIGR4LCBkeSwgY3csIGNoOwotICAg
IEV2YXNfT2JqZWN0KiBjbGlwID0gZXZhc19vYmplY3RfY2xpcF9nZXQoc21hcnREYXRhLT5iYWNr
aW5nX3N0b3JlKTsKLQotICAgIGV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChzbWFydERhdGEt
Pm1haW5fZnJhbWUsICZjdywgJmNoKTsKLSAgICBpZiAoc21hcnREYXRhLT52aWV3LncgPiAwICYm
IHNtYXJ0RGF0YS0+dmlldy5oID4gMCkgewotICAgICAgICBkeCA9ICh3ICogKHNtYXJ0RGF0YS0+
dmlldy53IC0gY2VudGVyWCkpIC8gc21hcnREYXRhLT52aWV3Lnc7Ci0gICAgICAgIGR5ID0gKGgg
KiAoc21hcnREYXRhLT52aWV3LmggLSBjZW50ZXJZKSkgLyBzbWFydERhdGEtPnZpZXcuaDsKLSAg
ICB9IGVsc2UgewotICAgICAgICBkeCA9IDA7Ci0gICAgICAgIGR5ID0gMDsKLSAgICB9Ci0KLSAg
ICBldmFzX29iamVjdF9pbWFnZV9maWxsX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIGNl
bnRlclggKyBkeCwgY2VudGVyWSArIGR5LCB3LCBoKTsKLQotICAgIGlmIChzbWFydERhdGEtPnZp
ZXcudyA+IDAgJiYgc21hcnREYXRhLT52aWV3LmggPiAwKSB7Ci0gICAgICAgIGR4ID0gKChzbWFy
dERhdGEtPnZpZXcudyAtIHcpICogY2VudGVyWCkgLyBzbWFydERhdGEtPnZpZXcudzsKLSAgICAg
ICAgZHkgPSAoKHNtYXJ0RGF0YS0+dmlldy5oIC0gaCkgKiBjZW50ZXJZKSAvIHNtYXJ0RGF0YS0+
dmlldy5oOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGR4ID0gMDsKLSAgICAgICAgZHkgPSAwOwot
ICAgIH0KLSAgICBldmFzX29iamVjdF9tb3ZlKGNsaXAsIHNtYXJ0RGF0YS0+dmlldy54ICsgZHgs
IHNtYXJ0RGF0YS0+dmlldy55ICsgZHkpOwotCi0gICAgaWYgKGN3IDwgc21hcnREYXRhLT52aWV3
LncpCi0gICAgICAgIHcgPSBjdyAqIHNjYWxlOwotICAgIGlmIChjaCA8IHNtYXJ0RGF0YS0+dmll
dy5oKQotICAgICAgICBoID0gY2ggKiBzY2FsZTsKLSAgICBldmFzX29iamVjdF9yZXNpemUoY2xp
cCwgdywgaCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19z
aW5nbGVfc21hcnRfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXdrX1ZpZXdfU21hcnRfRGF0
YSogc21hcnREYXRhLCBFaW5hX0Jvb2wgc21vb3RoX3NjYWxlKQotewotICAgIGV2YXNfb2JqZWN0
X2ltYWdlX3Ntb290aF9zY2FsZV9zZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBzbW9vdGhf
c2NhbGUpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2JnX2NvbG9y
X3NldChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIHVuc2lnbmVkIGNoYXIgLypyZWQq
LywgdW5zaWduZWQgY2hhciAvKmdyZWVuKi8sIHVuc2lnbmVkIGNoYXIgLypibHVlKi8sIHVuc2ln
bmVkIGNoYXIgYWxwaGEpCi17Ci0gICAgZXZhc19vYmplY3RfaW1hZ2VfYWxwaGFfc2V0KHNtYXJ0
RGF0YS0+YmFja2luZ19zdG9yZSwgYWxwaGEgPCAyNTUpOwotfQotCi1FaW5hX0Jvb2wgZXdrX3Zp
ZXdfc2luZ2xlX3NtYXJ0X3NldChFd2tfVmlld19TbWFydF9DbGFzcyogYXBpKQotewotICAgIGlm
ICghZXdrX3ZpZXdfYmFzZV9zbWFydF9zZXQoYXBpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKEVJTkFfVU5MSUtFTFkoIV9wYXJlbnRfc2Muc2MuYWRkKSkKLSAgICAgICAgZXdr
X3ZpZXdfYmFzZV9zbWFydF9zZXQoJl9wYXJlbnRfc2MpOwotCi0gICAgYXBpLT5zYy5hZGQgPSBf
ZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2FkZDsKLSAgICBhcGktPnNjLnJlc2l6ZSA9IF9ld2tfdmll
d19zaW5nbGVfc21hcnRfcmVzaXplOwotCi0gICAgYXBpLT5iYWNraW5nX3N0b3JlX2FkZCA9IF9l
d2tfdmlld19zaW5nbGVfc21hcnRfYmFja2luZ19zdG9yZV9hZGQ7Ci0gICAgYXBpLT5zY3JvbGxz
X3Byb2Nlc3MgPSBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3Njcm9sbHNfcHJvY2VzczsKLSAgICBh
cGktPnJlcGFpbnRzX3Byb2Nlc3MgPSBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3JlcGFpbnRzX3By
b2Nlc3M7Ci0gICAgYXBpLT56b29tX3dlYWtfc2V0ID0gX2V3a192aWV3X3NpbmdsZV9zbWFydF96
b29tX3dlYWtfc2V0OwotICAgIGFwaS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQgPSBfZXdr
X3ZpZXdfc2luZ2xlX3NtYXJ0X3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0OwotICAgIGFwaS0+
YmdfY29sb3Jfc2V0ID0gX2V3a192aWV3X3NpbmdsZV9zbWFydF9iZ19jb2xvcl9zZXQ7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KIAogc3RhdGljIGlubGluZSBFdmFzX1NtYXJ0KiBfZXdrX3ZpZXdf
c2luZ2xlX3NtYXJ0X2NsYXNzX25ldyh2b2lkKQogewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220409</attachid>
            <date>2014-01-05 17:16:05 -0800</date>
            <delta_ts>2014-01-05 17:21:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126508-20140106101603.patch</filename>
            <type>text/plain</type>
            <size>35822</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxMzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU2ZWI4YjNjNGZlOGRjMDkx
NDE0Yjk1YTJjNWE5MzM5YTFhMDgzMWEuLmEwNjY4OTZjZmNhZDAxMmFjOGI3YzZiNTZlMWNmNzZm
NDk2NmJjYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTQtMDEtMDUgIFJ5dWFuIENo
b2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdIE1lcmdlIGV3a192
aWV3X3NpbmdsZSBpbnRvIGV3a192aWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMjY1MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOiBSZW1vdmVkIGV3a192aWV3X3Np
bmdsZS5jcHAuCisKIDIwMTQtMDEtMDQgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtHVEtdIFtDTWFrZV0gSW1wcm92ZSB0aGUgd2F5IHdlIGxvY2F0
ZSBnb2JqZWN0LWludHJvc3BlY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCA5OGM3ZTExYWM3MTA0
ZTJmMGM1NDBiMmZiNzE3YTAzOGEzZTAyOTQxLi5iNjNjZGU5ZDAyYTFiNDZlNjBmOTU5NjJiN2Mw
ZWUyNjRjMTdhMzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTQtMDEt
MDUgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxd
IE1lcmdlIGV3a192aWV3X3NpbmdsZSBpbnRvIGV3a192aWV3CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjY1MDgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaW5jZSBld2tfdmlld190aWxlZCBpcyByZW1v
dmVkIGF0IHIxNjExMzQsIHdlIGRvbid0IG5lZWQgdG8ga2VlcAorICAgICAgICBld2tfdmlld19z
aW5nbGUgb3V0IG9mIGV3a192aWV3LmNwcC4KKworICAgICAgICAqIGV3ay9ld2tfdmlldy5jcHA6
CisgICAgICAgIChfZXdrX3ZpZXdfc21hcnRfYWRkKToKKyAgICAgICAgKF9ld2tfdmlld19zbWFy
dF9yZXNpemUpOgorICAgICAgICAoX2V3a192aWV3X3NjcmVlbl9tb3ZlKTogTW92ZWQgZnJvbSBl
d2tfdmlld19zaW5nbGUuY3BwCisgICAgICAgIChfZXdrX3ZpZXdfc2Nyb2xsX3Byb2Nlc3Nfc2lu
Z2xlKTogRGl0dG8uCisgICAgICAgIChfZXdrX3ZpZXdfc21hcnRfc2Nyb2xsc19wcm9jZXNzKTog
RGl0dG8uCisgICAgICAgIChfZXdrX3ZpZXdfc21hcnRfcmVwYWludHNfcHJvY2Vzcyk6IERpdHRv
LgorICAgICAgICAoX2V3a192aWV3X3NtYXJ0X3pvb21fd2Vha19zZXQpOiBEaXR0by4KKyAgICAg
ICAgKF9ld2tfdmlld19zbWFydF96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldCk6IERpdHRvLgor
ICAgICAgICAoZXdrX3ZpZXdfYmFzZV9zbWFydF9zZXQpOiBNZXJnZWQgc21hcnQgbWV0aG9kIG9m
IGV3a192aWV3X3NpbmdsZS4KKyAgICAgICAgKGV3a192aWV3X3NpbmdsZV9zbWFydF9zZXQpOgor
ICAgICAgICAoX2V3a192aWV3X3NpbmdsZV9zbWFydF9jbGFzc19uZXcpOgorICAgICAgICAoZXdr
X3ZpZXdfc2luZ2xlX2FkZCk6CisgICAgICAgIChld2tfdmlld19iZ19jb2xvcl9zZXQpOgorICAg
ICAgICAqIGV3ay9ld2tfdmlldy5oOgorICAgICAgICBSZW1vdmVkIGJhY2tpbmdzdG9yZV9hZGQg
YW5kIGJnX2NvbG9yX3NldCB3aGljaCB3ZXJlIGZvciBld2tfdmlld190aWxlZC4KKyAgICAgICAg
KiBld2svZXdrX3ZpZXdfc2luZ2xlLmNwcDogUmVtb3ZlZC4KKwogMjAxNC0wMS0wMiAgR2F2aW4g
QmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgTWVyZ2UgZGlk
TW92ZU9uc2NyZWVuIC8gcGFnZSB2aXNpYmlsaXR5IHRvIGlzVmlzaWJsZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1F
ZmwuY21ha2UKaW5kZXggMTYwZDNlMzRiMWNmNDllOWY5YTZjYTQ5MzU2YmY0NjkwOGU3NTBjNC4u
MjE3Y2U1ZWFlY2FmNmRhNjEzYzFhMGZkZTY2MzM3OWNmNTdhOTliMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
RWZsLmNtYWtlCkBAIC0xNDIsNyArMTQyLDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMK
ICAgICBlZmwvZXdrL2V3a19zZXR0aW5ncy5jcHAKICAgICBlZmwvZXdrL2V3a190b3VjaF9ldmVu
dC5jcHAKICAgICBlZmwvZXdrL2V3a192aWV3LmNwcAotICAgIGVmbC9ld2svZXdrX3ZpZXdfc2lu
Z2xlLmNwcAogICAgIGVmbC9ld2svZXdrX3dlYl9kYXRhYmFzZS5jcHAKICAgICBlZmwvZXdrL2V3
a193aW5kb3dfZmVhdHVyZXMuY3BwCiApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAppbmRl
eCA1NTYyZjUwNGM4NzFjYjc3Mzc3NTcyOGMzOTgxMmJjNWYzYTkzOTM5Li44MDA1MDMwMDg2MGJh
Mzg4ZTFlNTk2NDZkMDNiZDFlM2NlOWJlMzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX3ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5j
cHAKQEAgLTkwNiw3ICs5MDYsNiBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfYWRkKEV2
YXNfT2JqZWN0KiBld2tWaWV3KQogICAgIGNvbnN0IEV2YXNfU21hcnQqIHNtYXJ0ID0gZXZhc19v
YmplY3Rfc21hcnRfc21hcnRfZ2V0KGV3a1ZpZXcpOwogICAgIGNvbnN0IEV2YXNfU21hcnRfQ2xh
c3MqIHNtYXJ0Q2xhc3MgPSBldmFzX3NtYXJ0X2NsYXNzX2dldChzbWFydCk7CiAgICAgY29uc3Qg
RXdrX1ZpZXdfU21hcnRfQ2xhc3MqIGFwaSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRXdrX1Zp
ZXdfU21hcnRfQ2xhc3MqPihzbWFydENsYXNzKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihhcGktPmJhY2tpbmdfc3RvcmVfYWRkKTsKICAgICBFV0tfVklFV19TRF9HRVQoZXdrVmll
dywgc21hcnREYXRhKTsKIAogICAgIGlmICghc21hcnREYXRhKSB7CkBAIC05MzQsMTUgKzkzMywy
MiBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBld2tWaWV3
KQogCiAgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc21hcnREYXRhLCBwcml2KTsKIAotICAgIHNtYXJ0
RGF0YS0+YmFja2luZ19zdG9yZSA9IGFwaS0+YmFja2luZ19zdG9yZV9hZGQoc21hcnREYXRhKTsK
LSAgICBpZiAoIXNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSkgeworICAgIHNtYXJ0RGF0YS0+YmFj
a2luZ19zdG9yZSA9IGV2YXNfb2JqZWN0X2ltYWdlX2FkZChzbWFydERhdGEtPmJhc2UuZXZhcyk7
CisgICAgaWYgKEVJTkFfVU5MSUtFTFkoIXNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSkpIHsKICAg
ICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGJhY2tpbmcgc3RvcmUgb2JqZWN0LiIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCisgICAgY29uc3QgRWNvcmVfRXZhcyogZWNvcmVFdmFzID0g
ZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChzbWFydERhdGEtPmJhc2UuZXZhcyk7CisgICAgY29u
c3QgY2hhciogZW5naW5lID0gZWNvcmVfZXZhc19lbmdpbmVfbmFtZV9nZXQoZWNvcmVFdmFzKTsK
KyAgICBpZiAoIXN0cm5jbXAoZW5naW5lLCAib3BlbmdsX3gxMSIsIHN0cmxlbigib3BlbmdsX3gx
MSIpKSkKKyAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfY29udGVudF9oaW50X3NldChzbWFydERh
dGEtPmJhY2tpbmdfc3RvcmUsIEVWQVNfSU1BR0VfQ09OVEVOVF9ISU5UX0RZTkFNSUMpOworCisg
ICAgZXZhc19vYmplY3RfaW1hZ2VfYWxwaGFfc2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwg
ZmFsc2UpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9zY2FsZV9zZXQoc21hcnREYXRh
LT5iYWNraW5nX3N0b3JlLCBzbWFydERhdGEtPnpvb21fd2Vha19zbW9vdGhfc2NhbGUpOworICAg
IGV2YXNfb2JqZWN0X3Bhc3NfZXZlbnRzX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHRy
dWUpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc21hcnREYXRhLT5iYWNraW5n
X3N0b3JlLCBld2tWaWV3KTsKICAgICBldmFzX29iamVjdF9zaG93KHNtYXJ0RGF0YS0+YmFja2lu
Z19zdG9yZSk7Ci0gICAgZXZhc19vYmplY3RfcGFzc19ldmVudHNfc2V0KHNtYXJ0RGF0YS0+YmFj
a2luZ19zdG9yZSwgdHJ1ZSk7CiAKICAgICBzbWFydERhdGEtPmV2ZW50c19yZWN0ID0gZXZhc19v
YmplY3RfcmVjdGFuZ2xlX2FkZChzbWFydERhdGEtPmJhc2UuZXZhcyk7CiAgICAgZXZhc19vYmpl
Y3RfY29sb3Jfc2V0KHNtYXJ0RGF0YS0+ZXZlbnRzX3JlY3QsIDAsIDAsIDAsIDApOwpAQCAtOTk4
LDkgKzEwMDQsMjQgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3Jlc2l6ZShFdmFzX09i
amVjdCogZXdrVmlldywgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3IKIAogICAgIC8vIHRoZXNlIHNo
b3VsZCBiZSBxdWV1ZWQgYW5kIHByb2Nlc3NlZCBpbiBjYWxjdWxhdGUgYXMgd2VsbCEKICAgICBl
dmFzX29iamVjdF9yZXNpemUoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCB3LCBoKTsKKyAgICBl
dmFzX29iamVjdF9pbWFnZV9zaXplX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHcsIGgp
OwogCiAgICAgc21hcnREYXRhLT5jaGFuZ2VkLnNpemUgPSB0cnVlOwogICAgIF9ld2tfdmlld19z
bWFydF9jaGFuZ2VkKHNtYXJ0RGF0YSk7CisKKyAgICBpZiAoc21hcnREYXRhLT5hbmltYXRlZF96
b29tLnpvb20uY3VycmVudCA8IDAuMDAwMDEpIHsKKyAgICAgICAgRXZhc19PYmplY3QqIGNsaXAg
PSBldmFzX29iamVjdF9jbGlwX2dldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUpOworICAgICAg
ICBFdmFzX0Nvb3JkIHgsIHksIGN3LCBjaDsKKyAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZmls
bF9zZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCAwLCAwLCB3LCBoKTsKKyAgICAgICAgZXZh
c19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgJngsICZ5LCAw
LCAwKTsKKyAgICAgICAgZXZhc19vYmplY3RfbW92ZShjbGlwLCB4LCB5KTsKKyAgICAgICAgZXdr
X2ZyYW1lX2NvbnRlbnRzX3NpemVfZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgJmN3LCAmY2gp
OworICAgICAgICBpZiAodyA+IGN3KQorICAgICAgICAgICAgdyA9IGN3OworICAgICAgICBpZiAo
aCA+IGNoKQorICAgICAgICAgICAgaCA9IGNoOworICAgICAgICBldmFzX29iamVjdF9yZXNpemUo
Y2xpcCwgdywgaCk7CisgICAgfQogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfbW92
ZShFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCAvKngqLywgRXZhc19Db29yZCAvKnkq
LykKQEAgLTEwMTAsNiArMTAzMSwxOTkgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X21v
dmUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQgLyp4Ki8sIEV2YXNfQ28KICAgICBf
ZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzbWFydERhdGEpOwogfQogCitzdGF0aWMgaW5saW5lIHZv
aWQgX2V3a192aWV3X3NjcmVlbl9tb3ZlKHVpbnQzMl90KiBpbWFnZSwgc2l6ZV90IGRlc3RpbmF0
aW9uWCwgc2l6ZV90IGRlc3RpbmF0aW9uWSwgc2l6ZV90IHNvdXJjZVgsIHNpemVfdCBzb3VyY2VZ
LCBzaXplX3QgY29weVdpZHRoLCBzaXplX3QgY29weUhlaWdodCwgc2l6ZV90IGltYWdlV2lkdGgp
Cit7CisgICAgdWludDMyX3QqIHNvdXJjZUJlZ2luID0gaW1hZ2UgKyAoaW1hZ2VXaWR0aCAqIHNv
dXJjZVkpICsgc291cmNlWDsKKyAgICB1aW50MzJfdCogZGVzdGluYXRpb25CZWdpbiA9IGltYWdl
ICsgKGltYWdlV2lkdGggKiBkZXN0aW5hdGlvblkpICsgZGVzdGluYXRpb25YOworCisgICAgc2l6
ZV90IGNvcHlMZW5ndGggPSBjb3B5V2lkdGggKiA0OworICAgIGNvbnN0IGludCBtb3ZlTGluZVVw
RG93biA9IHNvdXJjZVkgPj0gZGVzdGluYXRpb25ZID8gMSA6IC0xOworICAgIGludCBzdGFydEhl
aWdodCA9IHNvdXJjZVkgPj0gZGVzdGluYXRpb25ZID8gMCA6IGNvcHlIZWlnaHQgLSAxOworCisg
ICAgdWludDMyX3QqIHNvdXJjZSwgKiBkZXN0aW5hdGlvbjsKKyAgICBpZiAoKGRlc3RpbmF0aW9u
WCA+IHNvdXJjZVggJiYgZGVzdGluYXRpb25YIDwgc291cmNlWCArIGNvcHlXaWR0aCkKKyAgICAg
ICAgfHwgKGRlc3RpbmF0aW9uWCA8IHNvdXJjZVggJiYgZGVzdGluYXRpb25YICsgY29weVdpZHRo
ID4gc291cmNlWCkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3B5SGVpZ2h0
OyBpKyspIHsKKyAgICAgICAgICAgIHNvdXJjZSA9IHNvdXJjZUJlZ2luICsgKGltYWdlV2lkdGgg
KiBzdGFydEhlaWdodCk7CisgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uQmVn
aW4gKyAoaW1hZ2VXaWR0aCAqIHN0YXJ0SGVpZ2h0KTsKKyAgICAgICAgICAgIHN0YXJ0SGVpZ2h0
ID0gc3RhcnRIZWlnaHQgKyBtb3ZlTGluZVVwRG93bjsKKyAgICAgICAgICAgIG1lbW1vdmUoZGVz
dGluYXRpb24sIHNvdXJjZSwgY29weUxlbmd0aCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvcHlIZWlnaHQ7IGkrKykgeworICAgICAg
ICAgICAgc291cmNlID0gc291cmNlQmVnaW4gKyAoaW1hZ2VXaWR0aCAqIHN0YXJ0SGVpZ2h0KTsK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gZGVzdGluYXRpb25CZWdpbiArIChpbWFnZVdpZHRo
ICogc3RhcnRIZWlnaHQpOworICAgICAgICAgICAgc3RhcnRIZWlnaHQgPSBzdGFydEhlaWdodCAr
IG1vdmVMaW5lVXBEb3duOworICAgICAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2Us
IGNvcHlMZW5ndGgpOworICAgICAgICB9CisgICAgfQorfQorc3RhdGljIGlubGluZSB2b2lkIF9l
d2tfdmlld19zY3JvbGxfcHJvY2Vzc19zaW5nbGUoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnRE
YXRhLCB2b2lkKiBwaXhlbHMsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0LCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHJlY3RUb1Njcm9sbCkKK3sKKyAgICBpbnQgc2Nyb2xsWCA9IHJlY3RUb1Njcm9sbC54KCk7
CisgICAgaW50IHNjcm9sbFkgPSByZWN0VG9TY3JvbGwueSgpOworICAgIGludCBzY3JvbGxXaWR0
aCA9IHJlY3RUb1Njcm9sbC53aWR0aCgpOworICAgIGludCBzY3JvbGxIZWlnaHQgPSByZWN0VG9T
Y3JvbGwuaGVpZ2h0KCk7CisKKyAgICBEQkcoIiVkLCVkICsgJWQsJWQgJSswM2QsJSswM2QsIHN0
b3JlOiAlcCAlZHglZCIsCisgICAgICAgIHNjcm9sbFgsIHNjcm9sbFksIHNjcm9sbFdpZHRoLCBz
Y3JvbGxIZWlnaHQsIHNjcm9sbE9mZnNldC53aWR0aCgpLCBzY3JvbGxPZmZzZXQuaGVpZ2h0KCks
IHBpeGVscywgd2lkdGgsIGhlaWdodCk7CisKKyAgICBpZiAoYWJzKHNjcm9sbE9mZnNldC53aWR0
aCgpKSA+PSBzY3JvbGxXaWR0aCB8fCBhYnMoc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKSA+PSBzY3Jv
bGxIZWlnaHQpIHsKKyAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9hZGQoc21hcnREYXRhLT5fcHJp
diwgc2Nyb2xsWCwgc2Nyb2xsWSwgc2Nyb2xsV2lkdGgsIHNjcm9sbEhlaWdodCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc2Nyb2xsWCA8IDApIHsKKyAgICAgICAgc2Nyb2xs
V2lkdGggKz0gc2Nyb2xsWDsKKyAgICAgICAgc2Nyb2xsWCA9IDA7CisgICAgfQorICAgIGlmIChz
Y3JvbGxZIDwgMCkgeworICAgICAgICBzY3JvbGxIZWlnaHQgKz0gc2Nyb2xsWTsKKyAgICAgICAg
c2Nyb2xsWSA9IDA7CisgICAgfQorCisgICAgaWYgKHNjcm9sbFggKyBzY3JvbGxXaWR0aCA+IHdp
ZHRoKQorICAgICAgICBzY3JvbGxXaWR0aCA9IHdpZHRoIC0gc2Nyb2xsWDsKKyAgICBpZiAoc2Ny
b2xsWSArIHNjcm9sbEhlaWdodCA+IGhlaWdodCkKKyAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gaGVp
Z2h0IC0gc2Nyb2xsWTsKKworICAgIGlmIChzY3JvbGxXaWR0aCA8PSAwIHx8IHNjcm9sbEhlaWdo
dCA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgc291cmNlWCA9IHNjcm9sbE9mZnNl
dC53aWR0aCgpIDwgMCA/IGFicyhzY3JvbGxPZmZzZXQud2lkdGgoKSkgOiAwOworICAgIGludCBz
b3VyY2VZID0gc2Nyb2xsT2Zmc2V0LmhlaWdodCgpIDwgMCA/IGFicyhzY3JvbGxPZmZzZXQuaGVp
Z2h0KCkpIDogMDsKKyAgICBpbnQgZGVzdGluYXRpb25YID0gc2Nyb2xsT2Zmc2V0LndpZHRoKCkg
PCAwID8gMCA6IHNjcm9sbE9mZnNldC53aWR0aCgpOworICAgIGludCBkZXN0aW5hdGlvblkgPSBz
Y3JvbGxPZmZzZXQuaGVpZ2h0KCkgPCAwID8gMCA6IHNjcm9sbE9mZnNldC5oZWlnaHQoKTsKKyAg
ICBpbnQgY29weVdpZHRoID0gc2Nyb2xsV2lkdGggLSBhYnMoc2Nyb2xsT2Zmc2V0LndpZHRoKCkp
OworICAgIGludCBjb3B5SGVpZ2h0ID0gc2Nyb2xsSGVpZ2h0IC0gYWJzKHNjcm9sbE9mZnNldC5o
ZWlnaHQoKSk7CisgICAgaWYgKHNjcm9sbE9mZnNldC53aWR0aCgpIHx8IHNjcm9sbE9mZnNldC5o
ZWlnaHQoKSkgeworICAgICAgICBfZXdrX3ZpZXdfc2NyZWVuX21vdmUoc3RhdGljX2Nhc3Q8dWlu
dDMyX3QqPihwaXhlbHMpLCBkZXN0aW5hdGlvblgsIGRlc3RpbmF0aW9uWSwgc291cmNlWCwgc291
cmNlWSwgY29weVdpZHRoLCBjb3B5SGVpZ2h0LCB3aWR0aCk7CisgICAgICAgIGV2YXNfb2JqZWN0
X2ltYWdlX2RhdGFfdXBkYXRlX2FkZChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIGRlc3RpbmF0
aW9uWCwgZGVzdGluYXRpb25ZLCBjb3B5V2lkdGgsIGNvcHlIZWlnaHQpOworICAgIH0KKworICAg
IEVpbmFfUmVjdGFuZ2xlIHZlcnRpY2FsVXBkYXRlOworICAgIHZlcnRpY2FsVXBkYXRlLnggPSBk
ZXN0aW5hdGlvblggPyAwIDogY29weVdpZHRoIC0gMTsKKyAgICB2ZXJ0aWNhbFVwZGF0ZS55ID0g
MDsKKyAgICB2ZXJ0aWNhbFVwZGF0ZS53ID0gYWJzKHNjcm9sbE9mZnNldC53aWR0aCgpKTsKKyAg
ICB2ZXJ0aWNhbFVwZGF0ZS5oID0gc2Nyb2xsSGVpZ2h0OworICAgIGlmICh2ZXJ0aWNhbFVwZGF0
ZS53ICYmIHZlcnRpY2FsVXBkYXRlLmgpCisgICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNt
YXJ0RGF0YS0+X3ByaXYsIHZlcnRpY2FsVXBkYXRlLngsIHZlcnRpY2FsVXBkYXRlLnksIHZlcnRp
Y2FsVXBkYXRlLncsIHZlcnRpY2FsVXBkYXRlLmgpOworCisgICAgRWluYV9SZWN0YW5nbGUgaG9y
aXpvbnRhbFVwZGF0ZTsKKyAgICBob3Jpem9udGFsVXBkYXRlLnggPSBkZXN0aW5hdGlvblg7Cisg
ICAgaG9yaXpvbnRhbFVwZGF0ZS55ID0gZGVzdGluYXRpb25ZID8gMCA6IGNvcHlIZWlnaHQgLSAx
OworICAgIGhvcml6b250YWxVcGRhdGUudyA9IGNvcHlXaWR0aDsKKyAgICBob3Jpem9udGFsVXBk
YXRlLmggPSBhYnMoc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKTsKKyAgICBpZiAoaG9yaXpvbnRhbFVw
ZGF0ZS53ICYmIGhvcml6b250YWxVcGRhdGUuaCkKKyAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9h
ZGQoc21hcnREYXRhLT5fcHJpdiwgaG9yaXpvbnRhbFVwZGF0ZS54LCBob3Jpem9udGFsVXBkYXRl
LnksIGhvcml6b250YWxVcGRhdGUudywgaG9yaXpvbnRhbFVwZGF0ZS5oKTsKK30KKworc3RhdGlj
IEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfc2Nyb2xsc19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNtYXJ0RGF0YSkKK3sKKyAgICBFdmFzX0Nvb3JkIGltYWdlV2lkdGgsIGltYWdlSGVp
Z2h0OworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfZ2V0KHNtYXJ0RGF0YS0+YmFja2luZ19z
dG9yZSwgJmltYWdlV2lkdGgsICZpbWFnZUhlaWdodCk7CisKKyAgICBjb25zdCBXVEY6OlZlY3Rv
cjxXZWJDb3JlOjpJbnRTaXplPiYgc2Nyb2xsT2Zmc2V0cyA9IGV3a192aWV3X3Njcm9sbF9vZmZz
ZXRzX2dldChzbWFydERhdGEtPl9wcml2KTsKKyAgICBjb25zdCBXVEY6OlZlY3RvcjxXZWJDb3Jl
OjpJbnRSZWN0PiYgcmVjdHNUb1Njcm9sbCA9IGV3a192aWV3X3Njcm9sbF9yZWN0c19nZXQoc21h
cnREYXRhLT5fcHJpdik7CisKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3RUb1Njcm9sbCgwLCAw
LCBpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCk7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBzY3JvbGxP
ZmZzZXQ7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzY3JvbGxPZmZzZXRzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIHJlY3RUb1Njcm9sbC5pbnRlcnNlY3QocmVjdHNUb1Njcm9sbFtpXSk7
CisgICAgICAgIHNjcm9sbE9mZnNldCArPSBzY3JvbGxPZmZzZXRzW2ldOworICAgIH0KKworICAg
IGlmIChzY3JvbGxPZmZzZXQuaXNaZXJvKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
dm9pZCogcGl4ZWxzID0gZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9nZXQoc21hcnREYXRhLT5iYWNr
aW5nX3N0b3JlLCAxKTsKKyAgICBfZXdrX3ZpZXdfc2Nyb2xsX3Byb2Nlc3Nfc2luZ2xlKHNtYXJ0
RGF0YSwgcGl4ZWxzLCBpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCwgc2Nyb2xsT2Zmc2V0LCByZWN0
VG9TY3JvbGwpOworCisgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9zZXQoc21hcnREYXRhLT5i
YWNraW5nX3N0b3JlLCBwaXhlbHMpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBF
aW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRf
RGF0YSogc21hcnREYXRhKQoreworICAgIGlmIChzbWFydERhdGEtPmFuaW1hdGVkX3pvb20uem9v
bS5jdXJyZW50IDwgMC4wMDAwMSkgeworICAgICAgICBFdmFzX09iamVjdCogY2xpcCA9IGV2YXNf
b2JqZWN0X2NsaXBfZ2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSk7CisKKyAgICAgICAgLy8g
cmVzZXQgZWZmZWN0cyBvZiB6b29tX3dlYWtfc2V0KCkKKyAgICAgICAgZXZhc19vYmplY3RfaW1h
Z2VfZmlsbF9zZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCAwLCAwLCBzbWFydERhdGEtPnZp
ZXcudywgc21hcnREYXRhLT52aWV3LmgpOworICAgICAgICBldmFzX29iamVjdF9tb3ZlKGNsaXAs
IHNtYXJ0RGF0YS0+dmlldy54LCBzbWFydERhdGEtPnZpZXcueSk7CisKKyAgICAgICAgRXZhc19D
b29yZCB3aWR0aCA9IHNtYXJ0RGF0YS0+dmlldy53OworICAgICAgICBFdmFzX0Nvb3JkIGhlaWdo
dCA9IHNtYXJ0RGF0YS0+dmlldy5oOworCisgICAgICAgIEV2YXNfQ29vcmQgY2VudGVyV2lkdGgs
IGNlbnRlckhlaWdodDsKKyAgICAgICAgZXdrX2ZyYW1lX2NvbnRlbnRzX3NpemVfZ2V0KHNtYXJ0
RGF0YS0+bWFpbl9mcmFtZSwgJmNlbnRlcldpZHRoLCAmY2VudGVySGVpZ2h0KTsKKyAgICAgICAg
aWYgKHdpZHRoID4gY2VudGVyV2lkdGgpCisgICAgICAgICAgICB3aWR0aCA9IGNlbnRlcldpZHRo
OworCisgICAgICAgIGlmIChoZWlnaHQgPiBjZW50ZXJIZWlnaHQpCisgICAgICAgICAgICBoZWln
aHQgPSBjZW50ZXJIZWlnaHQ7CisKKyAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKGNsaXAsIHdp
ZHRoLCBoZWlnaHQpOworICAgIH0KKworICAgIEV2YXNfQ29vcmQgaW1hZ2VXaWR0aCwgaW1hZ2VI
ZWlnaHQ7CisgICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9nZXQoc21hcnREYXRhLT5iYWNraW5n
X3N0b3JlLCAmaW1hZ2VXaWR0aCwgJmltYWdlSGVpZ2h0KTsKKworICAgIEVpbmFfVGlsZXIqIHRp
bGVyID0gZWluYV90aWxlcl9uZXcoaW1hZ2VXaWR0aCwgaW1hZ2VIZWlnaHQpOworICAgIGlmICgh
dGlsZXIpIHsKKyAgICAgICAgRVJSKCJjb3VsZCBub3QgY3JlYXRlIHRpbGVyICVkeCVkIiwgaW1h
Z2VXaWR0aCwgaW1hZ2VIZWlnaHQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgZXdrX3ZpZXdfbGF5b3V0X2lmX25lZWRlZF9yZWN1cnNpdmUoc21hcnREYXRhLT5fcHJpdik7
CisKKyAgICBzaXplX3QgY291bnQ7CisgICAgY29uc3QgRWluYV9SZWN0YW5nbGUqIHBhaW50UmVx
dWVzdCA9IGV3a192aWV3X3JlcGFpbnRzX3BvcChzbWFydERhdGEtPl9wcml2LCAmY291bnQpOwor
ICAgIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBwYWludFJlcXVlc3RFbmQgPSBwYWludFJlcXVlc3Qg
KyBjb3VudDsKKyAgICBmb3IgKDsgcGFpbnRSZXF1ZXN0IDwgcGFpbnRSZXF1ZXN0RW5kOyBwYWlu
dFJlcXVlc3QrKykKKyAgICAgICAgZWluYV90aWxlcl9yZWN0X2FkZCh0aWxlciwgcGFpbnRSZXF1
ZXN0KTsKKworICAgIEVpbmFfSXRlcmF0b3IqIGl0ZXJhdG9yID0gZWluYV90aWxlcl9pdGVyYXRv
cl9uZXcodGlsZXIpOworICAgIGlmICghaXRlcmF0b3IpIHsKKyAgICAgICAgRVJSKCJjb3VsZCBu
b3QgZ2V0IGl0ZXJhdG9yIGZvciB0aWxlciIpOworICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodGls
ZXIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisjaWYgVVNFKFRJTEVEX0JBQ0tJ
TkdfU1RPUkUpCisgICAgV2ViQ29yZTo6RnJhbWUqIG1haW5GcmFtZSA9IEVXS1ByaXZhdGU6OmNv
cmVGcmFtZShzbWFydERhdGEtPm1haW5fZnJhbWUpOworICAgIGlmIChtYWluRnJhbWUgJiYgbWFp
bkZyYW1lLT50aWxlZEJhY2tpbmdTdG9yZSgpKQorICAgICAgICBtYWluRnJhbWUtPnRpbGVkQmFj
a2luZ1N0b3JlKCktPmNvdmVyV2l0aFRpbGVzSWZOZWVkZWQoKTsKKyNlbmRpZgorCisgICAgRXdr
X1BhaW50X0NvbnRleHQqIGNvbnRleHQgPSBld2tfcGFpbnRfY29udGV4dF9mcm9tX2ltYWdlX25l
dyhzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUpOworICAgIGV3a19wYWludF9jb250ZXh0X3NhdmUo
Y29udGV4dCk7CisKKyAgICBFaW5hX1JlY3RhbmdsZSogcmVjdDsKKyAgICBFSU5BX0lURVJBVE9S
X0ZPUkVBQ0goaXRlcmF0b3IsIHJlY3QpIHsKKyAgICAgICAgZXdrX3ZpZXdfcGFpbnQoc21hcnRE
YXRhLT5fcHJpdiwgY29udGV4dCwgcmVjdCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2Rh
dGFfdXBkYXRlX2FkZChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHJlY3QtPngsIHJlY3QtPnks
IHJlY3QtPncsIHJlY3QtPmgpOworICAgIH0KKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAg
V2ViQ29yZTo6UGFnZSogcGFnZSA9IEVXS1ByaXZhdGU6OmNvcmVQYWdlKHNtYXJ0RGF0YS0+c2Vs
Zik7CisgICAgaWYgKHBhZ2UpIHsKKyAgICAgICAgV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
ciogY29udHJvbGxlciA9IHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKKyAgICAgICAgaWYg
KGNvbnRyb2xsZXItPmhpZ2hsaWdodGVkTm9kZSgpKQorICAgICAgICAgICAgY29udHJvbGxlci0+
ZHJhd0hpZ2hsaWdodCgqY29udGV4dC0+Z3JhcGhpY0NvbnRleHQpOworICAgIH0KKyNlbmRpZgor
CisgICAgZXdrX3BhaW50X2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKKyAgICBld2tfcGFpbnRf
Y29udGV4dF9mcmVlKGNvbnRleHQpOworCisgICAgZWluYV90aWxlcl9mcmVlKHRpbGVyKTsKKyAg
ICBlaW5hX2l0ZXJhdG9yX2ZyZWUoaXRlcmF0b3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
IHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CkBAIC0xMTg3
LDYgKzE0MDEsNDcgQEAgc3RhdGljIGZsb2F0IF9ld2tfdmlld196b29tX2FuaW1hdGVkX2N1cnJl
bnQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2KQogICAgICAgICAgICAgKyBwcml2LT5hbmlt
YXRlZFpvb20uem9vbS5zdGFydCk7CiB9CiAKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3Nt
YXJ0X3pvb21fd2Vha19zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBmbG9hdCB6
b29tLCBFdmFzX0Nvb3JkIGNlbnRlclgsIEV2YXNfQ29vcmQgY2VudGVyWSkKK3sKKyAgICAvLyBU
T0RPOiByZXZpZXcKKyAgICBmbG9hdCBzY2FsZSA9IHpvb20gLyBzbWFydERhdGEtPmFuaW1hdGVk
X3pvb20uem9vbS5zdGFydDsKKyAgICBFdmFzX0Nvb3JkIHcgPSBzbWFydERhdGEtPnZpZXcudyAq
IHNjYWxlOworICAgIEV2YXNfQ29vcmQgaCA9IHNtYXJ0RGF0YS0+dmlldy5oICogc2NhbGU7Cisg
ICAgRXZhc19Db29yZCBkeCwgZHksIGN3LCBjaDsKKyAgICBFdmFzX09iamVjdCogY2xpcCA9IGV2
YXNfb2JqZWN0X2NsaXBfZ2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSk7CisKKyAgICBld2tf
ZnJhbWVfY29udGVudHNfc2l6ZV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmY3csICZjaCk7
CisgICAgaWYgKHNtYXJ0RGF0YS0+dmlldy53ID4gMCAmJiBzbWFydERhdGEtPnZpZXcuaCA+IDAp
IHsKKyAgICAgICAgZHggPSAodyAqIChzbWFydERhdGEtPnZpZXcudyAtIGNlbnRlclgpKSAvIHNt
YXJ0RGF0YS0+dmlldy53OworICAgICAgICBkeSA9IChoICogKHNtYXJ0RGF0YS0+dmlldy5oIC0g
Y2VudGVyWSkpIC8gc21hcnREYXRhLT52aWV3Lmg7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZHgg
PSAwOworICAgICAgICBkeSA9IDA7CisgICAgfQorCisgICAgZXZhc19vYmplY3RfaW1hZ2VfZmls
bF9zZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBjZW50ZXJYICsgZHgsIGNlbnRlclkgKyBk
eSwgdywgaCk7CisKKyAgICBpZiAoc21hcnREYXRhLT52aWV3LncgPiAwICYmIHNtYXJ0RGF0YS0+
dmlldy5oID4gMCkgeworICAgICAgICBkeCA9ICgoc21hcnREYXRhLT52aWV3LncgLSB3KSAqIGNl
bnRlclgpIC8gc21hcnREYXRhLT52aWV3Lnc7CisgICAgICAgIGR5ID0gKChzbWFydERhdGEtPnZp
ZXcuaCAtIGgpICogY2VudGVyWSkgLyBzbWFydERhdGEtPnZpZXcuaDsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBkeCA9IDA7CisgICAgICAgIGR5ID0gMDsKKyAgICB9CisgICAgZXZhc19vYmplY3Rf
bW92ZShjbGlwLCBzbWFydERhdGEtPnZpZXcueCArIGR4LCBzbWFydERhdGEtPnZpZXcueSArIGR5
KTsKKworICAgIGlmIChjdyA8IHNtYXJ0RGF0YS0+dmlldy53KQorICAgICAgICB3ID0gY3cgKiBz
Y2FsZTsKKyAgICBpZiAoY2ggPCBzbWFydERhdGEtPnZpZXcuaCkKKyAgICAgICAgaCA9IGNoICog
c2NhbGU7CisgICAgZXZhc19vYmplY3RfcmVzaXplKGNsaXAsIHcsIGgpOworICAgIHJldHVybiB0
cnVlOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfem9vbV93ZWFrX3Ntb290aF9z
Y2FsZV9zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBFaW5hX0Jvb2wgc21vb3Ro
X3NjYWxlKQoreworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9zY2FsZV9zZXQoc21hcnRE
YXRhLT5iYWNraW5nX3N0b3JlLCBzbW9vdGhfc2NhbGUpOworfQogc3RhdGljIEVpbmFfQm9vbCBf
ZXdrX3ZpZXdfem9vbV9hbmltYXRvcl9jYih2b2lkKiBkYXRhKQogewogICAgIEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihk
YXRhKTsKQEAgLTEyODgsNyArMTU0MywxMSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfYmFzZV9zbWFy
dF9zZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MqIGFwaSkKICAgICBhcGktPnNjLmNhbGxiYWNrcyA9
IF9ld2tfdmlld19jYWxsYmFja19uYW1lczsKIAogICAgIGFwaS0+Y29udGVudHNfcmVzaXplID0g
X2V3a192aWV3X3NtYXJ0X2NvbnRlbnRzX3Jlc2l6ZTsKKyAgICBhcGktPnNjcm9sbHNfcHJvY2Vz
cyA9IF9ld2tfdmlld19zbWFydF9zY3JvbGxzX3Byb2Nlc3M7CisgICAgYXBpLT5yZXBhaW50c19w
cm9jZXNzID0gX2V3a192aWV3X3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3M7CiAgICAgYXBpLT56b29t
X3NldCA9IF9ld2tfdmlld19zbWFydF96b29tX3NldDsKKyAgICBhcGktPnpvb21fd2Vha19zZXQg
PSBfZXdrX3ZpZXdfc21hcnRfem9vbV93ZWFrX3NldDsKKyAgICBhcGktPnpvb21fd2Vha19zbW9v
dGhfc2NhbGVfc2V0ID0gX2V3a192aWV3X3NtYXJ0X3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0
OwogICAgIGFwaS0+Zmx1c2ggPSBfZXdrX3ZpZXdfc21hcnRfZmx1c2g7CiAgICAgYXBpLT5wcmVf
cmVuZGVyX3JlZ2lvbiA9IF9ld2tfdmlld19zbWFydF9wcmVfcmVuZGVyX3JlZ2lvbjsKICAgICBh
cGktPnByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzID0gX2V3a192aWV3X3NtYXJ0X3ByZV9yZW5k
ZXJfcmVsYXRpdmVfcmFkaXVzOwpAQCAtMTMxNiw2ICsxNTc1LDI5IEBAIEVpbmFfQm9vbCBld2tf
dmlld19iYXNlX3NtYXJ0X3NldChFd2tfVmlld19TbWFydF9DbGFzcyogYXBpKQogICAgIHJldHVy
biB0cnVlOwogfQogCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3NldChFd2tfVmll
d19TbWFydF9DbGFzcyogYXBpKQoreworICAgIHJldHVybiBld2tfdmlld19iYXNlX3NtYXJ0X3Nl
dChhcGkpOworfQorCitzdGF0aWMgaW5saW5lIEV2YXNfU21hcnQqIF9ld2tfdmlld19zaW5nbGVf
c21hcnRfY2xhc3NfbmV3KHZvaWQpCit7CisgICAgc3RhdGljIEV3a19WaWV3X1NtYXJ0X0NsYXNz
IGFwaSA9IEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9OKGV3a1ZpZXdTaW5n
bGVOYW1lKTsKKyAgICBzdGF0aWMgRXZhc19TbWFydCogc21hcnQgPSAwOworCisgICAgaWYgKEVJ
TkFfVU5MSUtFTFkoIXNtYXJ0KSkgeworICAgICAgICBld2tfdmlld19iYXNlX3NtYXJ0X3NldCgm
YXBpKTsKKyAgICAgICAgc21hcnQgPSBldmFzX3NtYXJ0X2NsYXNzX25ldygmYXBpLnNjKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gc21hcnQ7Cit9CisKK0V2YXNfT2JqZWN0KiBld2tfdmlld19zaW5n
bGVfYWRkKEV2YXMqIGNhbnZhcykKK3sKKyAgICByZXR1cm4gZXZhc19vYmplY3Rfc21hcnRfYWRk
KGNhbnZhcywgX2V3a192aWV3X3NpbmdsZV9zbWFydF9jbGFzc19uZXcoKSk7Cit9CisKIHZvaWQg
ZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFz
X0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKICAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CkBAIC0xNDI0LDcgKzE3MDYsNiBAQCB2b2lk
IGV3a192aWV3X2JnX2NvbG9yX3NldChFdmFzX09iamVjdCogZXdrVmlldywgaW50IHJlZCwgaW50
IGdyZWVuLCBpbnQgYmx1ZSwgaQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERh
dGEtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkt
PmJnX2NvbG9yX3NldCk7CiAKICAgICBpZiAoYWxwaGEgPCAwKSB7CiAgICAgICAgIFdBUk4oIkFs
cGhhIGxlc3MgdGhhbiB6ZXJvICglZCkuIiwgYWxwaGEpOwpAQCAtMTQ1Myw3ICsxNzM0LDcgQEAg
dm9pZCBld2tfdmlld19iZ19jb2xvcl9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCByZWQs
IGludCBncmVlbiwgaW50IGJsdWUsIGkKICAgICBzbWFydERhdGEtPmJnX2NvbG9yLmIgPSBibHVl
OwogICAgIHNtYXJ0RGF0YS0+YmdfY29sb3IuYSA9IGFscGhhOwogCi0gICAgc21hcnREYXRhLT5h
cGktPmJnX2NvbG9yX3NldChzbWFydERhdGEsIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAg
ICBldmFzX29iamVjdF9pbWFnZV9hbHBoYV9zZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBh
bHBoYSA8IDI1NSk7CiAKICAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzbWFydERhdGEt
Pl9wcml2LT5tYWluRnJhbWUtPnZpZXcoKTsKICAgICBpZiAodmlldykgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3ZpZXcuaAppbmRleCA5YzkwODg2N2E2OGNmZDYwZTVlMzcyMjk1YzVjNzcwMDA3Y2FmNTgy
Li40ZDc3N2Y4ZjMyNGM1ZmVjYTZhMTE3ZmU1MDFjNmFjMzY4ODBjNTQ0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX3ZpZXcuaApAQCAtMTUzLDE1ICsxNTMsMTIgQEAgc3RydWN0IF9Fd2tfVmlld19TbWFy
dF9DbGFzcyB7CiAKICAgICBFdmFzX09iamVjdCAqKCp3aW5kb3dfY3JlYXRlKShFd2tfVmlld19T
bWFydF9EYXRhICpzZCwgRWluYV9Cb29sIGphdmFzY3JpcHQsIGNvbnN0IEV3a19XaW5kb3dfRmVh
dHVyZXMgKndpbmRvd19mZWF0dXJlcyk7IC8qKjwgY3JlYXRlcyBhIG5ldyB3aW5kb3csIHJlcXVl
c3RlZCBieSB3ZWJraXQgKi8KICAgICB2b2lkICgqd2luZG93X2Nsb3NlKShFd2tfVmlld19TbWFy
dF9EYXRhICpzZCk7IC8qKjwgY2xvc2VzIGEgd2luZG93ICovCi0gICAgLy8gaG9va3MgdG8gYWxs
b3cgZGlmZmVyZW50IGJhY2tpbmcgc3RvcmVzCi0gICAgRXZhc19PYmplY3QgKigqYmFja2luZ19z
dG9yZV9hZGQpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKTsgLyoqPCBtdXN0IGJlIGRlZmluZWQg
Ki8KICAgICBFaW5hX0Jvb2wgKCpzY3JvbGxzX3Byb2Nlc3MpKEV3a19WaWV3X1NtYXJ0X0RhdGEg
KnNkKTsgLyoqPCBtdXN0IGJlIGRlZmluZWQgKi8KICAgICBFaW5hX0Jvb2wgKCpyZXBhaW50c19w
cm9jZXNzKShFd2tfVmlld19TbWFydF9EYXRhICpzZCk7IC8qKjwgbXVzdCBiZSBkZWZpbmVkICov
CiAgICAgRWluYV9Cb29sICgqY29udGVudHNfcmVzaXplKShFd2tfVmlld19TbWFydF9EYXRhICpz
ZCwgaW50IHcsIGludCBoKTsKICAgICBFaW5hX0Jvb2wgKCp6b29tX3NldCkoRXdrX1ZpZXdfU21h
cnRfRGF0YSAqc2QsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3kpOwog
ICAgIEVpbmFfQm9vbCAoKnpvb21fd2Vha19zZXQpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBm
bG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KTsKICAgICB2b2lkICgqem9v
bV93ZWFrX3Ntb290aF9zY2FsZV9zZXQpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBFaW5hX0Jv
b2wgc21vb3RoX3NjYWxlKTsKLSAgICB2b2lkICgqYmdfY29sb3Jfc2V0KShFd2tfVmlld19TbWFy
dF9EYXRhICpzZCwgdW5zaWduZWQgY2hhciByZWQsIHVuc2lnbmVkIGNoYXIgZ3JlZW4sIHVuc2ln
bmVkIGNoYXIgYmx1ZSwgdW5zaWduZWQgY2hhciBhbHBoYSk7CiAgICAgdm9pZCAoKmZsdXNoKShF
d2tfVmlld19TbWFydF9EYXRhICpzZCk7CiAgICAgRWluYV9Cb29sICgqcHJlX3JlbmRlcl9yZWdp
b24pKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwg
RXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20pOwogICAgIEVpbmFfQm9vbCAo
KnByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgdW5z
aWduZWQgaW50IG4sIGZsb2F0IHpvb20pOwpAQCAtMjAzLDcgKzIwMCw3IEBAIHN0cnVjdCBfRXdr
X1ZpZXdfU21hcnRfQ2xhc3MgewogICogVGhlIHZlcnNpb24geW91IGhhdmUgdG8gcHV0IGludG8g
dGhlIHZlcnNpb24gZmllbGQKICAqIGluIHRoZSBAYSBFd2tfVmlld19TbWFydF9DbGFzcyBzdHJ1
Y3R1cmUuCiAgKi8KLSNkZWZpbmUgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfVkVSU0lPTiA3VUwKKyNk
ZWZpbmUgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfVkVSU0lPTiA4VUwKIAogLyoqCiAgKiBJbml0aWFs
aXplcyBhIHdob2xlIEBhIEV3a19WaWV3X1NtYXJ0X0NsYXNzIHN0cnVjdHVyZS4KQEAgLTIxNSw3
ICsyMTIsNyBAQCBzdHJ1Y3QgX0V3a19WaWV3X1NtYXJ0X0NsYXNzIHsKICAqIEBzZWUgRVdLX1ZJ
RVdfU01BUlRfQ0xBU1NfSU5JVF9WRVJTSU9OCiAgKiBAc2VlIEVXS19WSUVXX1NNQVJUX0NMQVNT
X0lOSVRfTkFNRV9WRVJTSU9OCiAgKi8KLSNkZWZpbmUgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5J
VChzbWFydF9jbGFzc19pbml0KSB7c21hcnRfY2xhc3NfaW5pdCwgRVdLX1ZJRVdfU01BUlRfQ0xB
U1NfVkVSU0lPTiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMH0KKyNkZWZpbmUgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVChzbWFydF9jbGFz
c19pbml0KSB7c21hcnRfY2xhc3NfaW5pdCwgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfVkVSU0lPTiwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0KIAogLyoq
CiAgKiBJbml0aWFsaXplcyB0byB6ZXJvIGEgd2hvbGUgQGEgRXdrX1ZpZXdfU21hcnRfQ2xhc3Mg
c3RydWN0dXJlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3X3Np
bmdsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfc2luZ2xlLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM0NTE3NjEwNDhkNzcyOGYwM2QxNzVjOTQxMzMy
ODQyNGMwMGJkMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfc2luZ2xlLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDM4MiArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZV
U0lPTiBlbWJlZGRlZCBzeXN0ZW1zCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3Vu
ZyBFbGVjdHJvbmljcwotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
Ci0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJld2tfdmll
dy5oIgotCi0jaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJld2tfZnJh
bWVfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImV3a19wcml2YXRlLmgiCi0jaW5jbHVkZSAiZXdrX3Zp
ZXdfcHJpdmF0ZS5oIgotCi0jaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgotI2luY2x1ZGUgPEV2YXMu
aD4KLSNpbmNsdWRlIDxlaW5hX3NhZmV0eV9jaGVja3MuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4K
LQotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5o
IgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNlbmRpZgotCi1zdGF0aWMgRXdrX1ZpZXdfU21hcnRfQ2xh
c3MgX3BhcmVudF9zYyA9IEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfTlVMTDsKLQotc3RhdGlj
IHZvaWQgX2V3a192aWV3X3NpbmdsZV9vbl9kZWwodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2Jq
ZWN0Kiwgdm9pZCopCi17Ci0gICAgRXZhc19PYmplY3QqIGNsaXAgPSAoRXZhc19PYmplY3QqKWRh
dGE7Ci0gICAgZXZhc19vYmplY3RfZGVsKGNsaXApOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3Zp
ZXdfc2luZ2xlX3NtYXJ0X2FkZChFdmFzX09iamVjdCogZXdrVmlldykKLXsKLSAgICBFd2tfVmll
d19TbWFydF9EYXRhKiBzbWFydERhdGE7Ci0KLSAgICBfcGFyZW50X3NjLnNjLmFkZChld2tWaWV3
KTsKLQotICAgIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihl
dmFzX29iamVjdF9zbWFydF9kYXRhX2dldChld2tWaWV3KSk7Ci0gICAgaWYgKCFzbWFydERhdGEp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEV2YXNfT2JqZWN0KiBjbGlwID0gZXZhc19vYmplY3Rf
cmVjdGFuZ2xlX2FkZChzbWFydERhdGEtPmJhc2UuZXZhcyk7Ci0gICAgZXZhc19vYmplY3Rfc2hv
dyhjbGlwKTsKLQotICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZAotICAgICAgICAo
c21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBFVkFTX0NBTExCQUNLX0RFTCwgX2V3a192aWV3X3Np
bmdsZV9vbl9kZWwsIGNsaXApOwotfQotCi1zdGF0aWMgRXZhc19PYmplY3QqIF9ld2tfdmlld19z
aW5nbGVfc21hcnRfYmFja2luZ19zdG9yZV9hZGQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnRE
YXRhKQotewotICAgIEV2YXNfT2JqZWN0KiBicyA9IGV2YXNfb2JqZWN0X2ltYWdlX2FkZChzbWFy
dERhdGEtPmJhc2UuZXZhcyk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGJz
LCAwKTsKLSAgICBjb25zdCBFY29yZV9FdmFzKiBlY29yZUV2YXMgPSBlY29yZV9ldmFzX2Vjb3Jl
X2V2YXNfZ2V0KHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsKLSAgICBjb25zdCBjaGFyKiBlbmdpbmUg
PSBlY29yZV9ldmFzX2VuZ2luZV9uYW1lX2dldChlY29yZUV2YXMpOwotICAgIGlmICghc3RybmNt
cChlbmdpbmUsICJvcGVuZ2xfeDExIiwgc3RybGVuKCJvcGVuZ2xfeDExIikpKQotICAgICAgICBl
dmFzX29iamVjdF9pbWFnZV9jb250ZW50X2hpbnRfc2V0KGJzLCBFVkFTX0lNQUdFX0NPTlRFTlRf
SElOVF9EWU5BTUlDKTsKLQotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2FscGhhX3NldChicywgZmFs
c2UpOwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9zY2FsZV9zZXQoYnMsIHNtYXJ0RGF0
YS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZSk7Ci0KLSAgICByZXR1cm4gYnM7Ci19Ci0KLXN0YXRp
YyB2b2lkIF9ld2tfdmlld19zaW5nbGVfc21hcnRfcmVzaXplKEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKLXsKLSAgICBFd2tfVmlld19T
bWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4o
ZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQoZXdrVmlldykpOwotICAgIF9wYXJlbnRfc2Muc2Mu
cmVzaXplKGV3a1ZpZXcsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgaWYgKCFzbWFydERhdGEpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIHRoZXNlIHNob3VsZCBiZSBxdWV1ZWQgYW5kIHByb2Nl
c3NlZCBpbiBjYWxjdWxhdGUgYXMgd2VsbCEKLSAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX3Nl
dChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHdpZHRoLCBoZWlnaHQpOwotICAgIGlmIChzbWFy
dERhdGEtPmFuaW1hdGVkX3pvb20uem9vbS5jdXJyZW50IDwgMC4wMDAwMSkgewotICAgICAgICBF
dmFzX09iamVjdCogY2xpcCA9IGV2YXNfb2JqZWN0X2NsaXBfZ2V0KHNtYXJ0RGF0YS0+YmFja2lu
Z19zdG9yZSk7Ci0gICAgICAgIEV2YXNfQ29vcmQgeCwgeSwgY3csIGNoOwotICAgICAgICBldmFz
X29iamVjdF9pbWFnZV9maWxsX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIDAsIDAsIHdp
ZHRoLCBoZWlnaHQpOwotICAgICAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoc21hcnREYXRh
LT5iYWNraW5nX3N0b3JlLCAmeCwgJnksIDAsIDApOwotICAgICAgICBldmFzX29iamVjdF9tb3Zl
KGNsaXAsIHgsIHkpOwotICAgICAgICBld2tfZnJhbWVfY29udGVudHNfc2l6ZV9nZXQoc21hcnRE
YXRhLT5tYWluX2ZyYW1lLCAmY3csICZjaCk7Ci0gICAgICAgIGlmICh3aWR0aCA+IGN3KQotICAg
ICAgICAgICAgd2lkdGggPSBjdzsKLSAgICAgICAgaWYgKGhlaWdodCA+IGNoKQotICAgICAgICAg
ICAgaGVpZ2h0ID0gY2g7Ci0gICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShjbGlwLCB3aWR0aCwg
aGVpZ2h0KTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfc2NyZWVu
X21vdmUodWludDMyX3QqIGltYWdlLCBzaXplX3QgZGVzdGluYXRpb25YLCBzaXplX3QgZGVzdGlu
YXRpb25ZLCBzaXplX3Qgc291cmNlWCwgc2l6ZV90IHNvdXJjZVksIHNpemVfdCBjb3B5V2lkdGgs
IHNpemVfdCBjb3B5SGVpZ2h0LCBzaXplX3QgaW1hZ2VXaWR0aCkKLXsKLSAgICB1aW50MzJfdCog
c291cmNlQmVnaW4gPSBpbWFnZSArIChpbWFnZVdpZHRoICogc291cmNlWSkgKyBzb3VyY2VYOwot
ICAgIHVpbnQzMl90KiBkZXN0aW5hdGlvbkJlZ2luID0gaW1hZ2UgKyAoaW1hZ2VXaWR0aCAqIGRl
c3RpbmF0aW9uWSkgKyBkZXN0aW5hdGlvblg7Ci0KLSAgICBzaXplX3QgY29weUxlbmd0aCA9IGNv
cHlXaWR0aCAqIDQ7Ci0gICAgY29uc3QgaW50IG1vdmVMaW5lVXBEb3duID0gc291cmNlWSA+PSBk
ZXN0aW5hdGlvblkgPyAxIDogLTE7Ci0gICAgaW50IHN0YXJ0SGVpZ2h0ID0gc291cmNlWSA+PSBk
ZXN0aW5hdGlvblkgPyAwIDogY29weUhlaWdodCAtIDE7Ci0KLSAgICB1aW50MzJfdCogc291cmNl
LCAqIGRlc3RpbmF0aW9uOwotICAgIGlmICgoZGVzdGluYXRpb25YID4gc291cmNlWCAmJiBkZXN0
aW5hdGlvblggPCBzb3VyY2VYICsgY29weVdpZHRoKQotICAgICAgICB8fCAoZGVzdGluYXRpb25Y
IDwgc291cmNlWCAmJiBkZXN0aW5hdGlvblggKyBjb3B5V2lkdGggPiBzb3VyY2VYKSkgewotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvcHlIZWlnaHQ7IGkrKykgewotICAgICAgICAg
ICAgc291cmNlID0gc291cmNlQmVnaW4gKyAoaW1hZ2VXaWR0aCAqIHN0YXJ0SGVpZ2h0KTsKLSAg
ICAgICAgICAgIGRlc3RpbmF0aW9uID0gZGVzdGluYXRpb25CZWdpbiArIChpbWFnZVdpZHRoICog
c3RhcnRIZWlnaHQpOwotICAgICAgICAgICAgc3RhcnRIZWlnaHQgPSBzdGFydEhlaWdodCArIG1v
dmVMaW5lVXBEb3duOwotICAgICAgICAgICAgbWVtbW92ZShkZXN0aW5hdGlvbiwgc291cmNlLCBj
b3B5TGVuZ3RoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY29weUhlaWdodDsgaSsrKSB7Ci0gICAgICAgICAgICBzb3VyY2UgPSBzb3Vy
Y2VCZWdpbiArIChpbWFnZVdpZHRoICogc3RhcnRIZWlnaHQpOwotICAgICAgICAgICAgZGVzdGlu
YXRpb24gPSBkZXN0aW5hdGlvbkJlZ2luICsgKGltYWdlV2lkdGggKiBzdGFydEhlaWdodCk7Ci0g
ICAgICAgICAgICBzdGFydEhlaWdodCA9IHN0YXJ0SGVpZ2h0ICsgbW92ZUxpbmVVcERvd247Ci0g
ICAgICAgICAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNvdXJjZSwgY29weUxlbmd0aCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfc2luZ2xlX3Nj
cm9sbF9wcm9jZXNzX3NpbmdsZShFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIHZvaWQq
IHBpeGVscywgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQsIGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIHNjcm9sbE9mZnNldCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdFRv
U2Nyb2xsKQotewotICAgIGludCBzY3JvbGxYID0gcmVjdFRvU2Nyb2xsLngoKTsKLSAgICBpbnQg
c2Nyb2xsWSA9IHJlY3RUb1Njcm9sbC55KCk7Ci0gICAgaW50IHNjcm9sbFdpZHRoID0gcmVjdFRv
U2Nyb2xsLndpZHRoKCk7Ci0gICAgaW50IHNjcm9sbEhlaWdodCA9IHJlY3RUb1Njcm9sbC5oZWln
aHQoKTsKLQotICAgIERCRygiJWQsJWQgKyAlZCwlZCAlKzAzZCwlKzAzZCwgc3RvcmU6ICVwICVk
eCVkIiwKLSAgICAgICAgc2Nyb2xsWCwgc2Nyb2xsWSwgc2Nyb2xsV2lkdGgsIHNjcm9sbEhlaWdo
dCwgc2Nyb2xsT2Zmc2V0LndpZHRoKCksIHNjcm9sbE9mZnNldC5oZWlnaHQoKSwgcGl4ZWxzLCB3
aWR0aCwgaGVpZ2h0KTsKLQotICAgIGlmIChhYnMoc2Nyb2xsT2Zmc2V0LndpZHRoKCkpID49IHNj
cm9sbFdpZHRoIHx8IGFicyhzY3JvbGxPZmZzZXQuaGVpZ2h0KCkpID49IHNjcm9sbEhlaWdodCkg
ewotICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzbWFydERhdGEtPl9wcml2LCBzY3JvbGxY
LCBzY3JvbGxZLCBzY3JvbGxXaWR0aCwgc2Nyb2xsSGVpZ2h0KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChzY3JvbGxYIDwgMCkgewotICAgICAgICBzY3JvbGxXaWR0aCArPSBz
Y3JvbGxYOwotICAgICAgICBzY3JvbGxYID0gMDsKLSAgICB9Ci0gICAgaWYgKHNjcm9sbFkgPCAw
KSB7Ci0gICAgICAgIHNjcm9sbEhlaWdodCArPSBzY3JvbGxZOwotICAgICAgICBzY3JvbGxZID0g
MDsKLSAgICB9Ci0KLSAgICBpZiAoc2Nyb2xsWCArIHNjcm9sbFdpZHRoID4gd2lkdGgpCi0gICAg
ICAgIHNjcm9sbFdpZHRoID0gd2lkdGggLSBzY3JvbGxYOwotICAgIGlmIChzY3JvbGxZICsgc2Ny
b2xsSGVpZ2h0ID4gaGVpZ2h0KQotICAgICAgICBzY3JvbGxIZWlnaHQgPSBoZWlnaHQgLSBzY3Jv
bGxZOwotCi0gICAgaWYgKHNjcm9sbFdpZHRoIDw9IDAgfHwgc2Nyb2xsSGVpZ2h0IDw9IDApCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGludCBzb3VyY2VYID0gc2Nyb2xsT2Zmc2V0LndpZHRoKCkg
PCAwID8gYWJzKHNjcm9sbE9mZnNldC53aWR0aCgpKSA6IDA7Ci0gICAgaW50IHNvdXJjZVkgPSBz
Y3JvbGxPZmZzZXQuaGVpZ2h0KCkgPCAwID8gYWJzKHNjcm9sbE9mZnNldC5oZWlnaHQoKSkgOiAw
OwotICAgIGludCBkZXN0aW5hdGlvblggPSBzY3JvbGxPZmZzZXQud2lkdGgoKSA8IDAgPyAwIDog
c2Nyb2xsT2Zmc2V0LndpZHRoKCk7Ci0gICAgaW50IGRlc3RpbmF0aW9uWSA9IHNjcm9sbE9mZnNl
dC5oZWlnaHQoKSA8IDAgPyAwIDogc2Nyb2xsT2Zmc2V0LmhlaWdodCgpOwotICAgIGludCBjb3B5
V2lkdGggPSBzY3JvbGxXaWR0aCAtIGFicyhzY3JvbGxPZmZzZXQud2lkdGgoKSk7Ci0gICAgaW50
IGNvcHlIZWlnaHQgPSBzY3JvbGxIZWlnaHQgLSBhYnMoc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKTsK
LSAgICBpZiAoc2Nyb2xsT2Zmc2V0LndpZHRoKCkgfHwgc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKSB7
Ci0gICAgICAgIF9ld2tfdmlld19zY3JlZW5fbW92ZShzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHBp
eGVscyksIGRlc3RpbmF0aW9uWCwgZGVzdGluYXRpb25ZLCBzb3VyY2VYLCBzb3VyY2VZLCBjb3B5
V2lkdGgsIGNvcHlIZWlnaHQsIHdpZHRoKTsKLSAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0
YV91cGRhdGVfYWRkKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgZGVzdGluYXRpb25YLCBkZXN0
aW5hdGlvblksIGNvcHlXaWR0aCwgY29weUhlaWdodCk7Ci0gICAgfQotCi0gICAgRWluYV9SZWN0
YW5nbGUgdmVydGljYWxVcGRhdGU7Ci0gICAgdmVydGljYWxVcGRhdGUueCA9IGRlc3RpbmF0aW9u
WCA/IDAgOiBjb3B5V2lkdGggLSAxOwotICAgIHZlcnRpY2FsVXBkYXRlLnkgPSAwOwotICAgIHZl
cnRpY2FsVXBkYXRlLncgPSBhYnMoc2Nyb2xsT2Zmc2V0LndpZHRoKCkpOwotICAgIHZlcnRpY2Fs
VXBkYXRlLmggPSBzY3JvbGxIZWlnaHQ7Ci0gICAgaWYgKHZlcnRpY2FsVXBkYXRlLncgJiYgdmVy
dGljYWxVcGRhdGUuaCkKLSAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9hZGQoc21hcnREYXRhLT5f
cHJpdiwgdmVydGljYWxVcGRhdGUueCwgdmVydGljYWxVcGRhdGUueSwgdmVydGljYWxVcGRhdGUu
dywgdmVydGljYWxVcGRhdGUuaCk7Ci0KLSAgICBFaW5hX1JlY3RhbmdsZSBob3Jpem9udGFsVXBk
YXRlOwotICAgIGhvcml6b250YWxVcGRhdGUueCA9IGRlc3RpbmF0aW9uWDsKLSAgICBob3Jpem9u
dGFsVXBkYXRlLnkgPSBkZXN0aW5hdGlvblkgPyAwIDogY29weUhlaWdodCAtIDE7Ci0gICAgaG9y
aXpvbnRhbFVwZGF0ZS53ID0gY29weVdpZHRoOwotICAgIGhvcml6b250YWxVcGRhdGUuaCA9IGFi
cyhzY3JvbGxPZmZzZXQuaGVpZ2h0KCkpOwotICAgIGlmIChob3Jpem9udGFsVXBkYXRlLncgJiYg
aG9yaXpvbnRhbFVwZGF0ZS5oKQotICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzbWFydERh
dGEtPl9wcml2LCBob3Jpem9udGFsVXBkYXRlLngsIGhvcml6b250YWxVcGRhdGUueSwgaG9yaXpv
bnRhbFVwZGF0ZS53LCBob3Jpem9udGFsVXBkYXRlLmgpOwotfQotCi1zdGF0aWMgRWluYV9Cb29s
IF9ld2tfdmlld19zaW5nbGVfc21hcnRfc2Nyb2xsc19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHNtYXJ0RGF0YSkKLXsKLSAgICBFdmFzX0Nvb3JkIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0
OwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfZ2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9y
ZSwgJmltYWdlV2lkdGgsICZpbWFnZUhlaWdodCk7Ci0KLSAgICBjb25zdCBXVEY6OlZlY3RvcjxX
ZWJDb3JlOjpJbnRTaXplPiYgc2Nyb2xsT2Zmc2V0cyA9IGV3a192aWV3X3Njcm9sbF9vZmZzZXRz
X2dldChzbWFydERhdGEtPl9wcml2KTsKLSAgICBjb25zdCBXVEY6OlZlY3RvcjxXZWJDb3JlOjpJ
bnRSZWN0PiYgcmVjdHNUb1Njcm9sbCA9IGV3a192aWV3X3Njcm9sbF9yZWN0c19nZXQoc21hcnRE
YXRhLT5fcHJpdik7Ci0KLSAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3RUb1Njcm9sbCgwLCAwLCBp
bWFnZVdpZHRoLCBpbWFnZUhlaWdodCk7Ci0gICAgV2ViQ29yZTo6SW50U2l6ZSBzY3JvbGxPZmZz
ZXQ7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzY3JvbGxPZmZzZXRzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIHJlY3RUb1Njcm9sbC5pbnRlcnNlY3QocmVjdHNUb1Njcm9sbFtpXSk7Ci0g
ICAgICAgIHNjcm9sbE9mZnNldCArPSBzY3JvbGxPZmZzZXRzW2ldOwotICAgIH0KLQotICAgIGlm
IChzY3JvbGxPZmZzZXQuaXNaZXJvKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgdm9p
ZCogcGl4ZWxzID0gZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9nZXQoc21hcnREYXRhLT5iYWNraW5n
X3N0b3JlLCAxKTsKLSAgICBfZXdrX3ZpZXdfc2luZ2xlX3Njcm9sbF9wcm9jZXNzX3NpbmdsZShz
bWFydERhdGEsIHBpeGVscywgaW1hZ2VXaWR0aCwgaW1hZ2VIZWlnaHQsIHNjcm9sbE9mZnNldCwg
cmVjdFRvU2Nyb2xsKTsKLQotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfc2V0KHNtYXJ0RGF0
YS0+YmFja2luZ19zdG9yZSwgcGl4ZWxzKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0
aWMgRWluYV9Cb29sIF9ld2tfdmlld19zaW5nbGVfc21hcnRfcmVwYWludHNfcHJvY2VzcyhFd2tf
Vmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCi17Ci0gICAgaWYgKHNtYXJ0RGF0YS0+YW5pbWF0
ZWRfem9vbS56b29tLmN1cnJlbnQgPCAwLjAwMDAxKSB7Ci0gICAgICAgIEV2YXNfT2JqZWN0KiBj
bGlwID0gZXZhc19vYmplY3RfY2xpcF9nZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlKTsKLQot
ICAgICAgICAvLyByZXNldCBlZmZlY3RzIG9mIHpvb21fd2Vha19zZXQoKQotICAgICAgICBldmFz
X29iamVjdF9pbWFnZV9maWxsX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIDAsIDAsIHNt
YXJ0RGF0YS0+dmlldy53LCBzbWFydERhdGEtPnZpZXcuaCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0
X21vdmUoY2xpcCwgc21hcnREYXRhLT52aWV3LngsIHNtYXJ0RGF0YS0+dmlldy55KTsKLQotICAg
ICAgICBFdmFzX0Nvb3JkIHdpZHRoID0gc21hcnREYXRhLT52aWV3Lnc7Ci0gICAgICAgIEV2YXNf
Q29vcmQgaGVpZ2h0ID0gc21hcnREYXRhLT52aWV3Lmg7Ci0KLSAgICAgICAgRXZhc19Db29yZCBj
ZW50ZXJXaWR0aCwgY2VudGVySGVpZ2h0OwotICAgICAgICBld2tfZnJhbWVfY29udGVudHNfc2l6
ZV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmY2VudGVyV2lkdGgsICZjZW50ZXJIZWlnaHQp
OwotICAgICAgICBpZiAod2lkdGggPiBjZW50ZXJXaWR0aCkKLSAgICAgICAgICAgIHdpZHRoID0g
Y2VudGVyV2lkdGg7Ci0KLSAgICAgICAgaWYgKGhlaWdodCA+IGNlbnRlckhlaWdodCkKLSAgICAg
ICAgICAgIGhlaWdodCA9IGNlbnRlckhlaWdodDsKLQotICAgICAgICBldmFzX29iamVjdF9yZXNp
emUoY2xpcCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgfQotCi0gICAgRXZhc19Db29yZCBpbWFnZVdp
ZHRoLCBpbWFnZUhlaWdodDsKLSAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX2dldChzbWFydERh
dGEtPmJhY2tpbmdfc3RvcmUsICZpbWFnZVdpZHRoLCAmaW1hZ2VIZWlnaHQpOwotCi0gICAgRWlu
YV9UaWxlciogdGlsZXIgPSBlaW5hX3RpbGVyX25ldyhpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCk7
Ci0gICAgaWYgKCF0aWxlcikgewotICAgICAgICBFUlIoImNvdWxkIG5vdCBjcmVhdGUgdGlsZXIg
JWR4JWQiLCBpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBld2tfdmlld19sYXlvdXRfaWZfbmVlZGVkX3JlY3Vyc2l2ZShzbWFydERh
dGEtPl9wcml2KTsKLQotICAgIHNpemVfdCBjb3VudDsKLSAgICBjb25zdCBFaW5hX1JlY3Rhbmds
ZSogcGFpbnRSZXF1ZXN0ID0gZXdrX3ZpZXdfcmVwYWludHNfcG9wKHNtYXJ0RGF0YS0+X3ByaXYs
ICZjb3VudCk7Ci0gICAgY29uc3QgRWluYV9SZWN0YW5nbGUqIHBhaW50UmVxdWVzdEVuZCA9IHBh
aW50UmVxdWVzdCArIGNvdW50OwotICAgIGZvciAoOyBwYWludFJlcXVlc3QgPCBwYWludFJlcXVl
c3RFbmQ7IHBhaW50UmVxdWVzdCsrKQotICAgICAgICBlaW5hX3RpbGVyX3JlY3RfYWRkKHRpbGVy
LCBwYWludFJlcXVlc3QpOwotCi0gICAgRWluYV9JdGVyYXRvciogaXRlcmF0b3IgPSBlaW5hX3Rp
bGVyX2l0ZXJhdG9yX25ldyh0aWxlcik7Ci0gICAgaWYgKCFpdGVyYXRvcikgewotICAgICAgICBF
UlIoImNvdWxkIG5vdCBnZXQgaXRlcmF0b3IgZm9yIHRpbGVyIik7Ci0gICAgICAgIGVpbmFfdGls
ZXJfZnJlZSh0aWxlcik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSNpZiBVU0Uo
VElMRURfQkFDS0lOR19TVE9SRSkKLSAgICBXZWJDb3JlOjpGcmFtZSogbWFpbkZyYW1lID0gRVdL
UHJpdmF0ZTo6Y29yZUZyYW1lKHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7Ci0gICAgaWYgKG1haW5G
cmFtZSAmJiBtYWluRnJhbWUtPnRpbGVkQmFja2luZ1N0b3JlKCkpCi0gICAgICAgIG1haW5GcmFt
ZS0+dGlsZWRCYWNraW5nU3RvcmUoKS0+Y292ZXJXaXRoVGlsZXNJZk5lZWRlZCgpOwotI2VuZGlm
Ci0KLSAgICBFd2tfUGFpbnRfQ29udGV4dCogY29udGV4dCA9IGV3a19wYWludF9jb250ZXh0X2Zy
b21faW1hZ2VfbmV3KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSk7Ci0gICAgZXdrX3BhaW50X2Nv
bnRleHRfc2F2ZShjb250ZXh0KTsKLQotICAgIEVpbmFfUmVjdGFuZ2xlKiByZWN0OwotICAgIEVJ
TkFfSVRFUkFUT1JfRk9SRUFDSChpdGVyYXRvciwgcmVjdCkgewotICAgICAgICBld2tfdmlld19w
YWludChzbWFydERhdGEtPl9wcml2LCBjb250ZXh0LCByZWN0KTsKLSAgICAgICAgZXZhc19vYmpl
Y3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgcmVjdC0+
eCwgcmVjdC0+eSwgcmVjdC0+dywgcmVjdC0+aCk7Ci0gICAgfQotCi0jaWYgRU5BQkxFKElOU1BF
Q1RPUikKLSAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gRVdLUHJpdmF0ZTo6Y29yZVBhZ2Uoc21h
cnREYXRhLT5zZWxmKTsKLSAgICBpZiAocGFnZSkgewotICAgICAgICBXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyKiBjb250cm9sbGVyID0gcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpOwot
ICAgICAgICBpZiAoY29udHJvbGxlci0+aGlnaGxpZ2h0ZWROb2RlKCkpCi0gICAgICAgICAgICBj
b250cm9sbGVyLT5kcmF3SGlnaGxpZ2h0KCpjb250ZXh0LT5ncmFwaGljQ29udGV4dCk7Ci0gICAg
fQotI2VuZGlmCi0KLSAgICBld2tfcGFpbnRfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwotICAg
IGV3a19wYWludF9jb250ZXh0X2ZyZWUoY29udGV4dCk7Ci0KLSAgICBlaW5hX3RpbGVyX2ZyZWUo
dGlsZXIpOwotICAgIGVpbmFfaXRlcmF0b3JfZnJlZShpdGVyYXRvcik7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3pvb21f
d2Vha19zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBmbG9hdCB6b29tLCBFdmFz
X0Nvb3JkIGNlbnRlclgsIEV2YXNfQ29vcmQgY2VudGVyWSkKLXsKLSAgICAvLyBUT0RPOiByZXZp
ZXcKLSAgICBmbG9hdCBzY2FsZSA9IHpvb20gLyBzbWFydERhdGEtPmFuaW1hdGVkX3pvb20uem9v
bS5zdGFydDsKLSAgICBFdmFzX0Nvb3JkIHcgPSBzbWFydERhdGEtPnZpZXcudyAqIHNjYWxlOwot
ICAgIEV2YXNfQ29vcmQgaCA9IHNtYXJ0RGF0YS0+dmlldy5oICogc2NhbGU7Ci0gICAgRXZhc19D
b29yZCBkeCwgZHksIGN3LCBjaDsKLSAgICBFdmFzX09iamVjdCogY2xpcCA9IGV2YXNfb2JqZWN0
X2NsaXBfZ2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSk7Ci0KLSAgICBld2tfZnJhbWVfY29u
dGVudHNfc2l6ZV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmY3csICZjaCk7Ci0gICAgaWYg
KHNtYXJ0RGF0YS0+dmlldy53ID4gMCAmJiBzbWFydERhdGEtPnZpZXcuaCA+IDApIHsKLSAgICAg
ICAgZHggPSAodyAqIChzbWFydERhdGEtPnZpZXcudyAtIGNlbnRlclgpKSAvIHNtYXJ0RGF0YS0+
dmlldy53OwotICAgICAgICBkeSA9IChoICogKHNtYXJ0RGF0YS0+dmlldy5oIC0gY2VudGVyWSkp
IC8gc21hcnREYXRhLT52aWV3Lmg7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZHggPSAwOwotICAg
ICAgICBkeSA9IDA7Ci0gICAgfQotCi0gICAgZXZhc19vYmplY3RfaW1hZ2VfZmlsbF9zZXQoc21h
cnREYXRhLT5iYWNraW5nX3N0b3JlLCBjZW50ZXJYICsgZHgsIGNlbnRlclkgKyBkeSwgdywgaCk7
Ci0KLSAgICBpZiAoc21hcnREYXRhLT52aWV3LncgPiAwICYmIHNtYXJ0RGF0YS0+dmlldy5oID4g
MCkgewotICAgICAgICBkeCA9ICgoc21hcnREYXRhLT52aWV3LncgLSB3KSAqIGNlbnRlclgpIC8g
c21hcnREYXRhLT52aWV3Lnc7Ci0gICAgICAgIGR5ID0gKChzbWFydERhdGEtPnZpZXcuaCAtIGgp
ICogY2VudGVyWSkgLyBzbWFydERhdGEtPnZpZXcuaDsKLSAgICB9IGVsc2UgewotICAgICAgICBk
eCA9IDA7Ci0gICAgICAgIGR5ID0gMDsKLSAgICB9Ci0gICAgZXZhc19vYmplY3RfbW92ZShjbGlw
LCBzbWFydERhdGEtPnZpZXcueCArIGR4LCBzbWFydERhdGEtPnZpZXcueSArIGR5KTsKLQotICAg
IGlmIChjdyA8IHNtYXJ0RGF0YS0+dmlldy53KQotICAgICAgICB3ID0gY3cgKiBzY2FsZTsKLSAg
ICBpZiAoY2ggPCBzbWFydERhdGEtPnZpZXcuaCkKLSAgICAgICAgaCA9IGNoICogc2NhbGU7Ci0g
ICAgZXZhc19vYmplY3RfcmVzaXplKGNsaXAsIHcsIGgpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3pvb21fd2Vha19zbW9vdGhfc2Nh
bGVfc2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgRWluYV9Cb29sIHNtb290aF9z
Y2FsZSkKLXsKLSAgICBldmFzX29iamVjdF9pbWFnZV9zbW9vdGhfc2NhbGVfc2V0KHNtYXJ0RGF0
YS0+YmFja2luZ19zdG9yZSwgc21vb3RoX3NjYWxlKTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192
aWV3X3NpbmdsZV9zbWFydF9iZ19jb2xvcl9zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnRE
YXRhLCB1bnNpZ25lZCBjaGFyIC8qcmVkKi8sIHVuc2lnbmVkIGNoYXIgLypncmVlbiovLCB1bnNp
Z25lZCBjaGFyIC8qYmx1ZSovLCB1bnNpZ25lZCBjaGFyIGFscGhhKQotewotICAgIGV2YXNfb2Jq
ZWN0X2ltYWdlX2FscGhhX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIGFscGhhIDwgMjU1
KTsKLX0KLQotRWluYV9Cb29sIGV3a192aWV3X3NpbmdsZV9zbWFydF9zZXQoRXdrX1ZpZXdfU21h
cnRfQ2xhc3MqIGFwaSkKLXsKLSAgICBpZiAoIWV3a192aWV3X2Jhc2Vfc21hcnRfc2V0KGFwaSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChFSU5BX1VOTElLRUxZKCFfcGFyZW50
X3NjLnNjLmFkZCkpCi0gICAgICAgIGV3a192aWV3X2Jhc2Vfc21hcnRfc2V0KCZfcGFyZW50X3Nj
KTsKLQotICAgIGFwaS0+c2MuYWRkID0gX2V3a192aWV3X3NpbmdsZV9zbWFydF9hZGQ7Ci0gICAg
YXBpLT5zYy5yZXNpemUgPSBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3Jlc2l6ZTsKLQotICAgIGFw
aS0+YmFja2luZ19zdG9yZV9hZGQgPSBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2JhY2tpbmdfc3Rv
cmVfYWRkOwotICAgIGFwaS0+c2Nyb2xsc19wcm9jZXNzID0gX2V3a192aWV3X3NpbmdsZV9zbWFy
dF9zY3JvbGxzX3Byb2Nlc3M7Ci0gICAgYXBpLT5yZXBhaW50c19wcm9jZXNzID0gX2V3a192aWV3
X3NpbmdsZV9zbWFydF9yZXBhaW50c19wcm9jZXNzOwotICAgIGFwaS0+em9vbV93ZWFrX3NldCA9
IF9ld2tfdmlld19zaW5nbGVfc21hcnRfem9vbV93ZWFrX3NldDsKLSAgICBhcGktPnpvb21fd2Vh
a19zbW9vdGhfc2NhbGVfc2V0ID0gX2V3a192aWV3X3NpbmdsZV9zbWFydF96b29tX3dlYWtfc21v
b3RoX3NjYWxlX3NldDsKLSAgICBhcGktPmJnX2NvbG9yX3NldCA9IF9ld2tfdmlld19zaW5nbGVf
c21hcnRfYmdfY29sb3Jfc2V0OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgRXZhc19TbWFydCogX2V3a192aWV3X3NpbmdsZV9zbWFydF9jbGFzc19uZXcodm9pZCkKLXsK
LSAgICBzdGF0aWMgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgYXBpID0gRVdLX1ZJRVdfU01BUlRfQ0xB
U1NfSU5JVF9OQU1FX1ZFUlNJT04oZXdrVmlld1NpbmdsZU5hbWUpOwotICAgIHN0YXRpYyBFdmFz
X1NtYXJ0KiBzbWFydCA9IDA7Ci0KLSAgICBpZiAoRUlOQV9VTkxJS0VMWSghc21hcnQpKSB7Ci0g
ICAgICAgIGV3a192aWV3X3NpbmdsZV9zbWFydF9zZXQoJmFwaSk7Ci0gICAgICAgIHNtYXJ0ID0g
ZXZhc19zbWFydF9jbGFzc19uZXcoJmFwaS5zYyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHNtYXJ0
OwotfQotCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfc2luZ2xlX2FkZChFdmFzKiBjYW52YXMpCi17
Ci0gICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChjYW52YXMsIF9ld2tfdmlld19zaW5n
bGVfc21hcnRfY2xhc3NfbmV3KCkpOwotfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220410</attachid>
            <date>2014-01-05 17:21:48 -0800</date>
            <delta_ts>2014-01-08 01:12:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126508-20140106102146.patch</filename>
            <type>text/plain</type>
            <size>35623</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxMzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU2ZWI4YjNjNGZlOGRjMDkx
NDE0Yjk1YTJjNWE5MzM5YTFhMDgzMWEuLmEwNjY4OTZjZmNhZDAxMmFjOGI3YzZiNTZlMWNmNzZm
NDk2NmJjYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTQtMDEtMDUgIFJ5dWFuIENo
b2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdIE1lcmdlIGV3a192
aWV3X3NpbmdsZSBpbnRvIGV3a192aWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMjY1MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOiBSZW1vdmVkIGV3a192aWV3X3Np
bmdsZS5jcHAuCisKIDIwMTQtMDEtMDQgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtHVEtdIFtDTWFrZV0gSW1wcm92ZSB0aGUgd2F5IHdlIGxvY2F0
ZSBnb2JqZWN0LWludHJvc3BlY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCA5OGM3ZTExYWM3MTA0
ZTJmMGM1NDBiMmZiNzE3YTAzOGEzZTAyOTQxLi5lMDhkZjAyYzdkZmY3NmFkZjc4MTFmNmRkZGE3
M2NlYTU0M2I5M2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTQtMDEt
MDUgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxd
IE1lcmdlIGV3a192aWV3X3NpbmdsZSBpbnRvIGV3a192aWV3CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjY1MDgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaW5jZSBld2tfdmlld190aWxlZCBpcyByZW1v
dmVkIGF0IHIxNjExMzQsIHdlIGRvbid0IG5lZWQgdG8ga2VlcAorICAgICAgICBld2tfdmlld19z
aW5nbGUgb3V0IG9mIGV3a192aWV3LmNwcC4KKworICAgICAgICAqIGV3ay9ld2tfdmlldy5jcHA6
CisgICAgICAgIChfZXdrX3ZpZXdfc21hcnRfYWRkKToKKyAgICAgICAgKF9ld2tfdmlld19zbWFy
dF9yZXNpemUpOgorICAgICAgICAoX2V3a192aWV3X3NjcmVlbl9tb3ZlKTogTW92ZWQgZnJvbSBl
d2tfdmlld19zaW5nbGUuY3BwCisgICAgICAgIChfZXdrX3ZpZXdfc2Nyb2xsX3Byb2Nlc3MpOiBE
aXR0by4KKyAgICAgICAgKF9ld2tfdmlld19zbWFydF9zY3JvbGxzX3Byb2Nlc3MpOiBEaXR0by4K
KyAgICAgICAgKF9ld2tfdmlld19zbWFydF9yZXBhaW50c19wcm9jZXNzKTogRGl0dG8uCisgICAg
ICAgIChfZXdrX3ZpZXdfc21hcnRfem9vbV93ZWFrX3NldCk6IERpdHRvLgorICAgICAgICAoX2V3
a192aWV3X3NtYXJ0X3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KTogRGl0dG8uCisgICAgICAg
IChld2tfdmlld19iYXNlX3NtYXJ0X3NldCk6IE1lcmdlZCBzbWFydCBtZXRob2Qgb2YgZXdrX3Zp
ZXdfc2luZ2xlLgorICAgICAgICAoZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3NldCk6CisgICAgICAg
IChfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2NsYXNzX25ldyk6CisgICAgICAgIChld2tfdmlld19z
aW5nbGVfYWRkKToKKyAgICAgICAgKGV3a192aWV3X2JnX2NvbG9yX3NldCk6CisgICAgICAgICog
ZXdrL2V3a192aWV3Lmg6CisgICAgICAgIFJlbW92ZWQgYmFja2luZ3N0b3JlX2FkZCBhbmQgYmdf
Y29sb3Jfc2V0IHdoaWNoIHdlcmUgZm9yIGV3a192aWV3X3RpbGVkLgorICAgICAgICAqIGV3ay9l
d2tfdmlld19zaW5nbGUuY3BwOiBSZW1vdmVkLgorCiAyMDE0LTAxLTAyICBHYXZpbiBCYXJyYWNs
b3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBNZXJnZSBkaWRNb3ZlT25z
Y3JlZW4gLyBwYWdlIHZpc2liaWxpdHkgdG8gaXNWaXNpYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFr
ZQppbmRleCAxNjBkM2UzNGIxY2Y0OWU5ZjlhNmNhNDkzNTZiZjQ2OTA4ZTc1MGM0Li4yMTdjZTVl
YWVjYWY2ZGE2MTNjMWEwZmRlNjYzMzc5Y2Y1N2E5OWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21h
a2UKQEAgLTE0Miw3ICsxNDIsNiBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwogICAgIGVm
bC9ld2svZXdrX3NldHRpbmdzLmNwcAogICAgIGVmbC9ld2svZXdrX3RvdWNoX2V2ZW50LmNwcAog
ICAgIGVmbC9ld2svZXdrX3ZpZXcuY3BwCi0gICAgZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuY3Bw
CiAgICAgZWZsL2V3ay9ld2tfd2ViX2RhdGFiYXNlLmNwcAogICAgIGVmbC9ld2svZXdrX3dpbmRv
d19mZWF0dXJlcy5jcHAKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
dmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCmluZGV4IDU1NjJm
NTA0Yzg3MWNiNzczNzc1NzI4YzM5ODEyYmM1ZjNhOTM5MzkuLmY4NzUyNWIzYzc4OTM4ZWRlYTRm
YzM5ZWJjNGI4M2FhNDBhNTVjODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcApAQCAt
OTA2LDcgKzkwNiw2IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9hZGQoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCiAgICAgY29uc3QgRXZhc19TbWFydCogc21hcnQgPSBldmFzX29iamVjdF9z
bWFydF9zbWFydF9nZXQoZXdrVmlldyk7CiAgICAgY29uc3QgRXZhc19TbWFydF9DbGFzcyogc21h
cnRDbGFzcyA9IGV2YXNfc21hcnRfY2xhc3NfZ2V0KHNtYXJ0KTsKICAgICBjb25zdCBFd2tfVmll
d19TbWFydF9DbGFzcyogYXBpID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBFd2tfVmlld19TbWFy
dF9DbGFzcyo+KHNtYXJ0Q2xhc3MpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGFw
aS0+YmFja2luZ19zdG9yZV9hZGQpOwogICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFy
dERhdGEpOwogCiAgICAgaWYgKCFzbWFydERhdGEpIHsKQEAgLTkzNCwxNSArOTMzLDIyIEBAIHN0
YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9hZGQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAKICAg
ICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHByaXYpOwogCi0gICAgc21hcnREYXRhLT5i
YWNraW5nX3N0b3JlID0gYXBpLT5iYWNraW5nX3N0b3JlX2FkZChzbWFydERhdGEpOwotICAgIGlm
ICghc21hcnREYXRhLT5iYWNraW5nX3N0b3JlKSB7CisgICAgc21hcnREYXRhLT5iYWNraW5nX3N0
b3JlID0gZXZhc19vYmplY3RfaW1hZ2VfYWRkKHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsKKyAgICBp
ZiAoRUlOQV9VTkxJS0VMWSghc21hcnREYXRhLT5iYWNraW5nX3N0b3JlKSkgewogICAgICAgICBF
UlIoIkNvdWxkIG5vdCBjcmVhdGUgYmFja2luZyBzdG9yZSBvYmplY3QuIik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKKyAgICBjb25zdCBFY29yZV9FdmFzKiBlY29yZUV2YXMgPSBlY29yZV9l
dmFzX2Vjb3JlX2V2YXNfZ2V0KHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsKKyAgICBjb25zdCBjaGFy
KiBlbmdpbmUgPSBlY29yZV9ldmFzX2VuZ2luZV9uYW1lX2dldChlY29yZUV2YXMpOworICAgIGlm
ICghc3RybmNtcChlbmdpbmUsICJvcGVuZ2xfeDExIiwgc3RybGVuKCJvcGVuZ2xfeDExIikpKQor
ICAgICAgICBldmFzX29iamVjdF9pbWFnZV9jb250ZW50X2hpbnRfc2V0KHNtYXJ0RGF0YS0+YmFj
a2luZ19zdG9yZSwgRVZBU19JTUFHRV9DT05URU5UX0hJTlRfRFlOQU1JQyk7CisKKyAgICBldmFz
X29iamVjdF9pbWFnZV9hbHBoYV9zZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBmYWxzZSk7
CisgICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChzbWFydERhdGEtPmJhY2tp
bmdfc3RvcmUsIHNtYXJ0RGF0YS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZSk7CisgICAgZXZhc19v
YmplY3RfcGFzc19ldmVudHNfc2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgdHJ1ZSk7CiAg
ICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUs
IGV3a1ZpZXcpOwogICAgIGV2YXNfb2JqZWN0X3Nob3coc21hcnREYXRhLT5iYWNraW5nX3N0b3Jl
KTsKLSAgICBldmFzX29iamVjdF9wYXNzX2V2ZW50c19zZXQoc21hcnREYXRhLT5iYWNraW5nX3N0
b3JlLCB0cnVlKTsKIAogICAgIHNtYXJ0RGF0YS0+ZXZlbnRzX3JlY3QgPSBldmFzX29iamVjdF9y
ZWN0YW5nbGVfYWRkKHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsKICAgICBldmFzX29iamVjdF9jb2xv
cl9zZXQoc21hcnREYXRhLT5ldmVudHNfcmVjdCwgMCwgMCwgMCwgMCk7CkBAIC05OTgsOSArMTAw
NCwyNCBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfcmVzaXplKEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcgogCiAgICAgLy8gdGhlc2Ugc2hvdWxkIGJl
IHF1ZXVlZCBhbmQgcHJvY2Vzc2VkIGluIGNhbGN1bGF0ZSBhcyB3ZWxsIQogICAgIGV2YXNfb2Jq
ZWN0X3Jlc2l6ZShzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHcsIGgpOworICAgIGV2YXNfb2Jq
ZWN0X2ltYWdlX3NpemVfc2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgdywgaCk7CiAKICAg
ICBzbWFydERhdGEtPmNoYW5nZWQuc2l6ZSA9IHRydWU7CiAgICAgX2V3a192aWV3X3NtYXJ0X2No
YW5nZWQoc21hcnREYXRhKTsKKworICAgIGlmIChzbWFydERhdGEtPmFuaW1hdGVkX3pvb20uem9v
bS5jdXJyZW50IDwgMC4wMDAwMSkgeworICAgICAgICBFdmFzX09iamVjdCogY2xpcCA9IGV2YXNf
b2JqZWN0X2NsaXBfZ2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSk7CisgICAgICAgIEV2YXNf
Q29vcmQgeCwgeSwgY3csIGNoOworICAgICAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3NldChz
bWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIDAsIDAsIHcsIGgpOworICAgICAgICBldmFzX29iamVj
dF9nZW9tZXRyeV9nZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCAmeCwgJnksIDAsIDApOwor
ICAgICAgICBldmFzX29iamVjdF9tb3ZlKGNsaXAsIHgsIHkpOworICAgICAgICBld2tfZnJhbWVf
Y29udGVudHNfc2l6ZV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmY3csICZjaCk7CisgICAg
ICAgIGlmICh3ID4gY3cpCisgICAgICAgICAgICB3ID0gY3c7CisgICAgICAgIGlmIChoID4gY2gp
CisgICAgICAgICAgICBoID0gY2g7CisgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShjbGlwLCB3
LCBoKTsKKyAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9tb3ZlKEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIC8qeCovLCBFdmFzX0Nvb3JkIC8qeSovKQpAQCAt
MTAxMCw2ICsxMDMxLDE5NyBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfbW92ZShFdmFz
X09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCAvKngqLywgRXZhc19DbwogICAgIF9ld2tfdmll
d19zbWFydF9jaGFuZ2VkKHNtYXJ0RGF0YSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdr
X3ZpZXdfc2NyZWVuX21vdmUodWludDMyX3QqIGltYWdlLCBzaXplX3QgZGVzdGluYXRpb25YLCBz
aXplX3QgZGVzdGluYXRpb25ZLCBzaXplX3Qgc291cmNlWCwgc2l6ZV90IHNvdXJjZVksIHNpemVf
dCBjb3B5V2lkdGgsIHNpemVfdCBjb3B5SGVpZ2h0LCBzaXplX3QgaW1hZ2VXaWR0aCkKK3sKKyAg
ICB1aW50MzJfdCogc291cmNlQmVnaW4gPSBpbWFnZSArIChpbWFnZVdpZHRoICogc291cmNlWSkg
KyBzb3VyY2VYOworICAgIHVpbnQzMl90KiBkZXN0aW5hdGlvbkJlZ2luID0gaW1hZ2UgKyAoaW1h
Z2VXaWR0aCAqIGRlc3RpbmF0aW9uWSkgKyBkZXN0aW5hdGlvblg7CisKKyAgICBzaXplX3QgY29w
eUxlbmd0aCA9IGNvcHlXaWR0aCAqIDQ7CisgICAgY29uc3QgaW50IG1vdmVMaW5lVXBEb3duID0g
c291cmNlWSA+PSBkZXN0aW5hdGlvblkgPyAxIDogLTE7CisgICAgaW50IHN0YXJ0SGVpZ2h0ID0g
c291cmNlWSA+PSBkZXN0aW5hdGlvblkgPyAwIDogY29weUhlaWdodCAtIDE7CisKKyAgICB1aW50
MzJfdCogc291cmNlLCAqIGRlc3RpbmF0aW9uOworICAgIGlmICgoZGVzdGluYXRpb25YID4gc291
cmNlWCAmJiBkZXN0aW5hdGlvblggPCBzb3VyY2VYICsgY29weVdpZHRoKQorICAgICAgICB8fCAo
ZGVzdGluYXRpb25YIDwgc291cmNlWCAmJiBkZXN0aW5hdGlvblggKyBjb3B5V2lkdGggPiBzb3Vy
Y2VYKSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvcHlIZWlnaHQ7IGkrKykg
eworICAgICAgICAgICAgc291cmNlID0gc291cmNlQmVnaW4gKyAoaW1hZ2VXaWR0aCAqIHN0YXJ0
SGVpZ2h0KTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gZGVzdGluYXRpb25CZWdpbiArIChp
bWFnZVdpZHRoICogc3RhcnRIZWlnaHQpOworICAgICAgICAgICAgc3RhcnRIZWlnaHQgPSBzdGFy
dEhlaWdodCArIG1vdmVMaW5lVXBEb3duOworICAgICAgICAgICAgbWVtbW92ZShkZXN0aW5hdGlv
biwgc291cmNlLCBjb3B5TGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29weUhlaWdodDsgaSsrKSB7CisgICAgICAgICAgICBz
b3VyY2UgPSBzb3VyY2VCZWdpbiArIChpbWFnZVdpZHRoICogc3RhcnRIZWlnaHQpOworICAgICAg
ICAgICAgZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbkJlZ2luICsgKGltYWdlV2lkdGggKiBzdGFy
dEhlaWdodCk7CisgICAgICAgICAgICBzdGFydEhlaWdodCA9IHN0YXJ0SGVpZ2h0ICsgbW92ZUxp
bmVVcERvd247CisgICAgICAgICAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNvdXJjZSwgY29weUxl
bmd0aCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3Zp
ZXdfc2Nyb2xsX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCB2b2lkKiBw
aXhlbHMsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0LCBjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBzY3JvbGxPZmZzZXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3RUb1Nj
cm9sbCkKK3sKKyAgICBpbnQgc2Nyb2xsWCA9IHJlY3RUb1Njcm9sbC54KCk7CisgICAgaW50IHNj
cm9sbFkgPSByZWN0VG9TY3JvbGwueSgpOworICAgIGludCBzY3JvbGxXaWR0aCA9IHJlY3RUb1Nj
cm9sbC53aWR0aCgpOworICAgIGludCBzY3JvbGxIZWlnaHQgPSByZWN0VG9TY3JvbGwuaGVpZ2h0
KCk7CisKKyAgICBpZiAoYWJzKHNjcm9sbE9mZnNldC53aWR0aCgpKSA+PSBzY3JvbGxXaWR0aCB8
fCBhYnMoc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKSA+PSBzY3JvbGxIZWlnaHQpIHsKKyAgICAgICAg
ZXdrX3ZpZXdfcmVwYWludF9hZGQoc21hcnREYXRhLT5fcHJpdiwgc2Nyb2xsWCwgc2Nyb2xsWSwg
c2Nyb2xsV2lkdGgsIHNjcm9sbEhlaWdodCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoc2Nyb2xsWCA8IDApIHsKKyAgICAgICAgc2Nyb2xsV2lkdGggKz0gc2Nyb2xsWDsKKyAg
ICAgICAgc2Nyb2xsWCA9IDA7CisgICAgfQorICAgIGlmIChzY3JvbGxZIDwgMCkgeworICAgICAg
ICBzY3JvbGxIZWlnaHQgKz0gc2Nyb2xsWTsKKyAgICAgICAgc2Nyb2xsWSA9IDA7CisgICAgfQor
CisgICAgaWYgKHNjcm9sbFggKyBzY3JvbGxXaWR0aCA+IHdpZHRoKQorICAgICAgICBzY3JvbGxX
aWR0aCA9IHdpZHRoIC0gc2Nyb2xsWDsKKyAgICBpZiAoc2Nyb2xsWSArIHNjcm9sbEhlaWdodCA+
IGhlaWdodCkKKyAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gaGVpZ2h0IC0gc2Nyb2xsWTsKKworICAg
IGlmIChzY3JvbGxXaWR0aCA8PSAwIHx8IHNjcm9sbEhlaWdodCA8PSAwKQorICAgICAgICByZXR1
cm47CisKKyAgICBpbnQgc291cmNlWCA9IHNjcm9sbE9mZnNldC53aWR0aCgpIDwgMCA/IGFicyhz
Y3JvbGxPZmZzZXQud2lkdGgoKSkgOiAwOworICAgIGludCBzb3VyY2VZID0gc2Nyb2xsT2Zmc2V0
LmhlaWdodCgpIDwgMCA/IGFicyhzY3JvbGxPZmZzZXQuaGVpZ2h0KCkpIDogMDsKKyAgICBpbnQg
ZGVzdGluYXRpb25YID0gc2Nyb2xsT2Zmc2V0LndpZHRoKCkgPCAwID8gMCA6IHNjcm9sbE9mZnNl
dC53aWR0aCgpOworICAgIGludCBkZXN0aW5hdGlvblkgPSBzY3JvbGxPZmZzZXQuaGVpZ2h0KCkg
PCAwID8gMCA6IHNjcm9sbE9mZnNldC5oZWlnaHQoKTsKKyAgICBpbnQgY29weVdpZHRoID0gc2Ny
b2xsV2lkdGggLSBhYnMoc2Nyb2xsT2Zmc2V0LndpZHRoKCkpOworICAgIGludCBjb3B5SGVpZ2h0
ID0gc2Nyb2xsSGVpZ2h0IC0gYWJzKHNjcm9sbE9mZnNldC5oZWlnaHQoKSk7CisgICAgaWYgKHNj
cm9sbE9mZnNldC53aWR0aCgpIHx8IHNjcm9sbE9mZnNldC5oZWlnaHQoKSkgeworICAgICAgICBf
ZXdrX3ZpZXdfc2NyZWVuX21vdmUoc3RhdGljX2Nhc3Q8dWludDMyX3QqPihwaXhlbHMpLCBkZXN0
aW5hdGlvblgsIGRlc3RpbmF0aW9uWSwgc291cmNlWCwgc291cmNlWSwgY29weVdpZHRoLCBjb3B5
SGVpZ2h0LCB3aWR0aCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2Fk
ZChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIGRlc3RpbmF0aW9uWCwgZGVzdGluYXRpb25ZLCBj
b3B5V2lkdGgsIGNvcHlIZWlnaHQpOworICAgIH0KKworICAgIEVpbmFfUmVjdGFuZ2xlIHZlcnRp
Y2FsVXBkYXRlOworICAgIHZlcnRpY2FsVXBkYXRlLnggPSBkZXN0aW5hdGlvblggPyAwIDogY29w
eVdpZHRoIC0gMTsKKyAgICB2ZXJ0aWNhbFVwZGF0ZS55ID0gMDsKKyAgICB2ZXJ0aWNhbFVwZGF0
ZS53ID0gYWJzKHNjcm9sbE9mZnNldC53aWR0aCgpKTsKKyAgICB2ZXJ0aWNhbFVwZGF0ZS5oID0g
c2Nyb2xsSGVpZ2h0OworICAgIGlmICh2ZXJ0aWNhbFVwZGF0ZS53ICYmIHZlcnRpY2FsVXBkYXRl
LmgpCisgICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNtYXJ0RGF0YS0+X3ByaXYsIHZlcnRp
Y2FsVXBkYXRlLngsIHZlcnRpY2FsVXBkYXRlLnksIHZlcnRpY2FsVXBkYXRlLncsIHZlcnRpY2Fs
VXBkYXRlLmgpOworCisgICAgRWluYV9SZWN0YW5nbGUgaG9yaXpvbnRhbFVwZGF0ZTsKKyAgICBo
b3Jpem9udGFsVXBkYXRlLnggPSBkZXN0aW5hdGlvblg7CisgICAgaG9yaXpvbnRhbFVwZGF0ZS55
ID0gZGVzdGluYXRpb25ZID8gMCA6IGNvcHlIZWlnaHQgLSAxOworICAgIGhvcml6b250YWxVcGRh
dGUudyA9IGNvcHlXaWR0aDsKKyAgICBob3Jpem9udGFsVXBkYXRlLmggPSBhYnMoc2Nyb2xsT2Zm
c2V0LmhlaWdodCgpKTsKKyAgICBpZiAoaG9yaXpvbnRhbFVwZGF0ZS53ICYmIGhvcml6b250YWxV
cGRhdGUuaCkKKyAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9hZGQoc21hcnREYXRhLT5fcHJpdiwg
aG9yaXpvbnRhbFVwZGF0ZS54LCBob3Jpem9udGFsVXBkYXRlLnksIGhvcml6b250YWxVcGRhdGUu
dywgaG9yaXpvbnRhbFVwZGF0ZS5oKTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdf
c21hcnRfc2Nyb2xsc19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKK3sK
KyAgICBFdmFzX0Nvb3JkIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0OworICAgIGV2YXNfb2JqZWN0
X2ltYWdlX3NpemVfZ2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgJmltYWdlV2lkdGgsICZp
bWFnZUhlaWdodCk7CisKKyAgICBjb25zdCBXVEY6OlZlY3RvcjxXZWJDb3JlOjpJbnRTaXplPiYg
c2Nyb2xsT2Zmc2V0cyA9IGV3a192aWV3X3Njcm9sbF9vZmZzZXRzX2dldChzbWFydERhdGEtPl9w
cml2KTsKKyAgICBjb25zdCBXVEY6OlZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYgcmVjdHNUb1Nj
cm9sbCA9IGV3a192aWV3X3Njcm9sbF9yZWN0c19nZXQoc21hcnREYXRhLT5fcHJpdik7CisKKyAg
ICBXZWJDb3JlOjpJbnRSZWN0IHJlY3RUb1Njcm9sbCgwLCAwLCBpbWFnZVdpZHRoLCBpbWFnZUhl
aWdodCk7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBzY3JvbGxPZmZzZXQ7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzY3JvbGxPZmZzZXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHJlY3RU
b1Njcm9sbC5pbnRlcnNlY3QocmVjdHNUb1Njcm9sbFtpXSk7CisgICAgICAgIHNjcm9sbE9mZnNl
dCArPSBzY3JvbGxPZmZzZXRzW2ldOworICAgIH0KKworICAgIGlmIChzY3JvbGxPZmZzZXQuaXNa
ZXJvKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgdm9pZCogcGl4ZWxzID0gZXZhc19v
YmplY3RfaW1hZ2VfZGF0YV9nZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCAxKTsKKyAgICBf
ZXdrX3ZpZXdfc2Nyb2xsX3Byb2Nlc3Moc21hcnREYXRhLCBwaXhlbHMsIGltYWdlV2lkdGgsIGlt
YWdlSGVpZ2h0LCBzY3JvbGxPZmZzZXQsIHJlY3RUb1Njcm9sbCk7CisKKyAgICBldmFzX29iamVj
dF9pbWFnZV9kYXRhX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHBpeGVscyk7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfcmVw
YWludHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCit7CisgICAgaWYg
KHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPCAwLjAwMDAxKSB7CisgICAg
ICAgIEV2YXNfT2JqZWN0KiBjbGlwID0gZXZhc19vYmplY3RfY2xpcF9nZXQoc21hcnREYXRhLT5i
YWNraW5nX3N0b3JlKTsKKworICAgICAgICAvLyByZXNldCBlZmZlY3RzIG9mIHpvb21fd2Vha19z
ZXQoKQorICAgICAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3NldChzbWFydERhdGEtPmJhY2tp
bmdfc3RvcmUsIDAsIDAsIHNtYXJ0RGF0YS0+dmlldy53LCBzbWFydERhdGEtPnZpZXcuaCk7Cisg
ICAgICAgIGV2YXNfb2JqZWN0X21vdmUoY2xpcCwgc21hcnREYXRhLT52aWV3LngsIHNtYXJ0RGF0
YS0+dmlldy55KTsKKworICAgICAgICBFdmFzX0Nvb3JkIHdpZHRoID0gc21hcnREYXRhLT52aWV3
Lnc7CisgICAgICAgIEV2YXNfQ29vcmQgaGVpZ2h0ID0gc21hcnREYXRhLT52aWV3Lmg7CisKKyAg
ICAgICAgRXZhc19Db29yZCBjZW50ZXJXaWR0aCwgY2VudGVySGVpZ2h0OworICAgICAgICBld2tf
ZnJhbWVfY29udGVudHNfc2l6ZV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmY2VudGVyV2lk
dGgsICZjZW50ZXJIZWlnaHQpOworICAgICAgICBpZiAod2lkdGggPiBjZW50ZXJXaWR0aCkKKyAg
ICAgICAgICAgIHdpZHRoID0gY2VudGVyV2lkdGg7CisKKyAgICAgICAgaWYgKGhlaWdodCA+IGNl
bnRlckhlaWdodCkKKyAgICAgICAgICAgIGhlaWdodCA9IGNlbnRlckhlaWdodDsKKworICAgICAg
ICBldmFzX29iamVjdF9yZXNpemUoY2xpcCwgd2lkdGgsIGhlaWdodCk7CisgICAgfQorCisgICAg
RXZhc19Db29yZCBpbWFnZVdpZHRoLCBpbWFnZUhlaWdodDsKKyAgICBldmFzX29iamVjdF9pbWFn
ZV9zaXplX2dldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsICZpbWFnZVdpZHRoLCAmaW1hZ2VI
ZWlnaHQpOworCisgICAgRWluYV9UaWxlciogdGlsZXIgPSBlaW5hX3RpbGVyX25ldyhpbWFnZVdp
ZHRoLCBpbWFnZUhlaWdodCk7CisgICAgaWYgKCF0aWxlcikgeworICAgICAgICBFUlIoImNvdWxk
IG5vdCBjcmVhdGUgdGlsZXIgJWR4JWQiLCBpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBld2tfdmlld19sYXlvdXRfaWZfbmVlZGVk
X3JlY3Vyc2l2ZShzbWFydERhdGEtPl9wcml2KTsKKworICAgIHNpemVfdCBjb3VudDsKKyAgICBj
b25zdCBFaW5hX1JlY3RhbmdsZSogcGFpbnRSZXF1ZXN0ID0gZXdrX3ZpZXdfcmVwYWludHNfcG9w
KHNtYXJ0RGF0YS0+X3ByaXYsICZjb3VudCk7CisgICAgY29uc3QgRWluYV9SZWN0YW5nbGUqIHBh
aW50UmVxdWVzdEVuZCA9IHBhaW50UmVxdWVzdCArIGNvdW50OworICAgIGZvciAoOyBwYWludFJl
cXVlc3QgPCBwYWludFJlcXVlc3RFbmQ7IHBhaW50UmVxdWVzdCsrKQorICAgICAgICBlaW5hX3Rp
bGVyX3JlY3RfYWRkKHRpbGVyLCBwYWludFJlcXVlc3QpOworCisgICAgRWluYV9JdGVyYXRvciog
aXRlcmF0b3IgPSBlaW5hX3RpbGVyX2l0ZXJhdG9yX25ldyh0aWxlcik7CisgICAgaWYgKCFpdGVy
YXRvcikgeworICAgICAgICBFUlIoImNvdWxkIG5vdCBnZXQgaXRlcmF0b3IgZm9yIHRpbGVyIik7
CisgICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0aWxlcik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICBXZWJDb3JlOjpGcmFt
ZSogbWFpbkZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKHNtYXJ0RGF0YS0+bWFpbl9mcmFt
ZSk7CisgICAgaWYgKG1haW5GcmFtZSAmJiBtYWluRnJhbWUtPnRpbGVkQmFja2luZ1N0b3JlKCkp
CisgICAgICAgIG1haW5GcmFtZS0+dGlsZWRCYWNraW5nU3RvcmUoKS0+Y292ZXJXaXRoVGlsZXNJ
Zk5lZWRlZCgpOworI2VuZGlmCisKKyAgICBFd2tfUGFpbnRfQ29udGV4dCogY29udGV4dCA9IGV3
a19wYWludF9jb250ZXh0X2Zyb21faW1hZ2VfbmV3KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSk7
CisgICAgZXdrX3BhaW50X2NvbnRleHRfc2F2ZShjb250ZXh0KTsKKworICAgIEVpbmFfUmVjdGFu
Z2xlKiByZWN0OworICAgIEVJTkFfSVRFUkFUT1JfRk9SRUFDSChpdGVyYXRvciwgcmVjdCkgewor
ICAgICAgICBld2tfdmlld19wYWludChzbWFydERhdGEtPl9wcml2LCBjb250ZXh0LCByZWN0KTsK
KyAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKHNtYXJ0RGF0YS0+YmFj
a2luZ19zdG9yZSwgcmVjdC0+eCwgcmVjdC0+eSwgcmVjdC0+dywgcmVjdC0+aCk7CisgICAgfQor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gRVdLUHJp
dmF0ZTo6Y29yZVBhZ2Uoc21hcnREYXRhLT5zZWxmKTsKKyAgICBpZiAocGFnZSkgeworICAgICAg
ICBXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKiBjb250cm9sbGVyID0gcGFnZS0+aW5zcGVj
dG9yQ29udHJvbGxlcigpOworICAgICAgICBpZiAoY29udHJvbGxlci0+aGlnaGxpZ2h0ZWROb2Rl
KCkpCisgICAgICAgICAgICBjb250cm9sbGVyLT5kcmF3SGlnaGxpZ2h0KCpjb250ZXh0LT5ncmFw
aGljQ29udGV4dCk7CisgICAgfQorI2VuZGlmCisKKyAgICBld2tfcGFpbnRfY29udGV4dF9yZXN0
b3JlKGNvbnRleHQpOworICAgIGV3a19wYWludF9jb250ZXh0X2ZyZWUoY29udGV4dCk7CisKKyAg
ICBlaW5hX3RpbGVyX2ZyZWUodGlsZXIpOworICAgIGVpbmFfaXRlcmF0b3JfZnJlZShpdGVyYXRv
cik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0
X2NhbGN1bGF0ZShFdmFzX09iamVjdCogZXdrVmlldykKIHsKICAgICBFV0tfVklFV19TRF9HRVQo
ZXdrVmlldywgc21hcnREYXRhKTsKQEAgLTExODcsNiArMTM5OSw0NyBAQCBzdGF0aWMgZmxvYXQg
X2V3a192aWV3X3pvb21fYW5pbWF0ZWRfY3VycmVudChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHBy
aXYpCiAgICAgICAgICAgICArIHByaXYtPmFuaW1hdGVkWm9vbS56b29tLnN0YXJ0KTsKIH0KIAor
c3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfem9vbV93ZWFrX3NldChFd2tfVmlld19T
bWFydF9EYXRhKiBzbWFydERhdGEsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY2VudGVyWCwgRXZh
c19Db29yZCBjZW50ZXJZKQoreworICAgIC8vIFRPRE86IHJldmlldworICAgIGZsb2F0IHNjYWxl
ID0gem9vbSAvIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0OworICAgIEV2YXNf
Q29vcmQgdyA9IHNtYXJ0RGF0YS0+dmlldy53ICogc2NhbGU7CisgICAgRXZhc19Db29yZCBoID0g
c21hcnREYXRhLT52aWV3LmggKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIGR4LCBkeSwgY3csIGNo
OworICAgIEV2YXNfT2JqZWN0KiBjbGlwID0gZXZhc19vYmplY3RfY2xpcF9nZXQoc21hcnREYXRh
LT5iYWNraW5nX3N0b3JlKTsKKworICAgIGV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChzbWFy
dERhdGEtPm1haW5fZnJhbWUsICZjdywgJmNoKTsKKyAgICBpZiAoc21hcnREYXRhLT52aWV3Lncg
PiAwICYmIHNtYXJ0RGF0YS0+dmlldy5oID4gMCkgeworICAgICAgICBkeCA9ICh3ICogKHNtYXJ0
RGF0YS0+dmlldy53IC0gY2VudGVyWCkpIC8gc21hcnREYXRhLT52aWV3Lnc7CisgICAgICAgIGR5
ID0gKGggKiAoc21hcnREYXRhLT52aWV3LmggLSBjZW50ZXJZKSkgLyBzbWFydERhdGEtPnZpZXcu
aDsKKyAgICB9IGVsc2UgeworICAgICAgICBkeCA9IDA7CisgICAgICAgIGR5ID0gMDsKKyAgICB9
CisKKyAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3Rv
cmUsIGNlbnRlclggKyBkeCwgY2VudGVyWSArIGR5LCB3LCBoKTsKKworICAgIGlmIChzbWFydERh
dGEtPnZpZXcudyA+IDAgJiYgc21hcnREYXRhLT52aWV3LmggPiAwKSB7CisgICAgICAgIGR4ID0g
KChzbWFydERhdGEtPnZpZXcudyAtIHcpICogY2VudGVyWCkgLyBzbWFydERhdGEtPnZpZXcudzsK
KyAgICAgICAgZHkgPSAoKHNtYXJ0RGF0YS0+dmlldy5oIC0gaCkgKiBjZW50ZXJZKSAvIHNtYXJ0
RGF0YS0+dmlldy5oOworICAgIH0gZWxzZSB7CisgICAgICAgIGR4ID0gMDsKKyAgICAgICAgZHkg
PSAwOworICAgIH0KKyAgICBldmFzX29iamVjdF9tb3ZlKGNsaXAsIHNtYXJ0RGF0YS0+dmlldy54
ICsgZHgsIHNtYXJ0RGF0YS0+dmlldy55ICsgZHkpOworCisgICAgaWYgKGN3IDwgc21hcnREYXRh
LT52aWV3LncpCisgICAgICAgIHcgPSBjdyAqIHNjYWxlOworICAgIGlmIChjaCA8IHNtYXJ0RGF0
YS0+dmlldy5oKQorICAgICAgICBoID0gY2ggKiBzY2FsZTsKKyAgICBldmFzX29iamVjdF9yZXNp
emUoY2xpcCwgdywgaCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tf
dmlld19zbWFydF96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChFd2tfVmlld19TbWFydF9EYXRh
KiBzbWFydERhdGEsIEVpbmFfQm9vbCBzbW9vdGhfc2NhbGUpCit7CisgICAgZXZhc19vYmplY3Rf
aW1hZ2Vfc21vb3RoX3NjYWxlX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHNtb290aF9z
Y2FsZSk7Cit9CiBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld196b29tX2FuaW1hdG9yX2NiKHZv
aWQqIGRhdGEpCiB7CiAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGlj
X2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwpAQCAtMTI4OCw3ICsxNTQxLDExIEBA
IEVpbmFfQm9vbCBld2tfdmlld19iYXNlX3NtYXJ0X3NldChFd2tfVmlld19TbWFydF9DbGFzcyog
YXBpKQogICAgIGFwaS0+c2MuY2FsbGJhY2tzID0gX2V3a192aWV3X2NhbGxiYWNrX25hbWVzOwog
CiAgICAgYXBpLT5jb250ZW50c19yZXNpemUgPSBfZXdrX3ZpZXdfc21hcnRfY29udGVudHNfcmVz
aXplOworICAgIGFwaS0+c2Nyb2xsc19wcm9jZXNzID0gX2V3a192aWV3X3NtYXJ0X3Njcm9sbHNf
cHJvY2VzczsKKyAgICBhcGktPnJlcGFpbnRzX3Byb2Nlc3MgPSBfZXdrX3ZpZXdfc21hcnRfcmVw
YWludHNfcHJvY2VzczsKICAgICBhcGktPnpvb21fc2V0ID0gX2V3a192aWV3X3NtYXJ0X3pvb21f
c2V0OworICAgIGFwaS0+em9vbV93ZWFrX3NldCA9IF9ld2tfdmlld19zbWFydF96b29tX3dlYWtf
c2V0OworICAgIGFwaS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQgPSBfZXdrX3ZpZXdfc21h
cnRfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQ7CiAgICAgYXBpLT5mbHVzaCA9IF9ld2tfdmll
d19zbWFydF9mbHVzaDsKICAgICBhcGktPnByZV9yZW5kZXJfcmVnaW9uID0gX2V3a192aWV3X3Nt
YXJ0X3ByZV9yZW5kZXJfcmVnaW9uOwogICAgIGFwaS0+cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRp
dXMgPSBfZXdrX3ZpZXdfc21hcnRfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXM7CkBAIC0xMzE2
LDYgKzE1NzMsMjkgQEAgRWluYV9Cb29sIGV3a192aWV3X2Jhc2Vfc21hcnRfc2V0KEV3a19WaWV3
X1NtYXJ0X0NsYXNzKiBhcGkpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0VpbmFfQm9vbCBld2tf
dmlld19zaW5nbGVfc21hcnRfc2V0KEV3a19WaWV3X1NtYXJ0X0NsYXNzKiBhcGkpCit7CisgICAg
cmV0dXJuIGV3a192aWV3X2Jhc2Vfc21hcnRfc2V0KGFwaSk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
RXZhc19TbWFydCogX2V3a192aWV3X3NpbmdsZV9zbWFydF9jbGFzc19uZXcodm9pZCkKK3sKKyAg
ICBzdGF0aWMgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgYXBpID0gRVdLX1ZJRVdfU01BUlRfQ0xBU1Nf
SU5JVF9OQU1FX1ZFUlNJT04oZXdrVmlld1NpbmdsZU5hbWUpOworICAgIHN0YXRpYyBFdmFzX1Nt
YXJ0KiBzbWFydCA9IDA7CisKKyAgICBpZiAoRUlOQV9VTkxJS0VMWSghc21hcnQpKSB7CisgICAg
ICAgIGV3a192aWV3X2Jhc2Vfc21hcnRfc2V0KCZhcGkpOworICAgICAgICBzbWFydCA9IGV2YXNf
c21hcnRfY2xhc3NfbmV3KCZhcGkuc2MpOworICAgIH0KKworICAgIHJldHVybiBzbWFydDsKK30K
KworRXZhc19PYmplY3QqIGV3a192aWV3X3NpbmdsZV9hZGQoRXZhcyogY2FudmFzKQoreworICAg
IHJldHVybiBldmFzX29iamVjdF9zbWFydF9hZGQoY2FudmFzLCBfZXdrX3ZpZXdfc2luZ2xlX3Nt
YXJ0X2NsYXNzX25ldygpKTsKK30KKwogdm9pZCBld2tfdmlld19maXhlZF9sYXlvdXRfc2l6ZV9z
ZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVp
Z2h0KQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
KTsKQEAgLTE0MjQsNyArMTcwNCw2IEBAIHZvaWQgZXdrX3ZpZXdfYmdfY29sb3Jfc2V0KEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBpbnQgcmVkLCBpbnQgZ3JlZW4sIGludCBibHVlLCBpCiB7CiAgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+YmdfY29sb3Jfc2V0KTsKIAogICAgIGlmIChh
bHBoYSA8IDApIHsKICAgICAgICAgV0FSTigiQWxwaGEgbGVzcyB0aGFuIHplcm8gKCVkKS4iLCBh
bHBoYSk7CkBAIC0xNDUzLDcgKzE3MzIsNyBAQCB2b2lkIGV3a192aWV3X2JnX2NvbG9yX3NldChF
dmFzX09iamVjdCogZXdrVmlldywgaW50IHJlZCwgaW50IGdyZWVuLCBpbnQgYmx1ZSwgaQogICAg
IHNtYXJ0RGF0YS0+YmdfY29sb3IuYiA9IGJsdWU7CiAgICAgc21hcnREYXRhLT5iZ19jb2xvci5h
ID0gYWxwaGE7CiAKLSAgICBzbWFydERhdGEtPmFwaS0+YmdfY29sb3Jfc2V0KHNtYXJ0RGF0YSwg
cmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX2FscGhhX3Nl
dChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIGFscGhhIDwgMjU1KTsKIAogICAgIFdlYkNvcmU6
OkZyYW1lVmlldyogdmlldyA9IHNtYXJ0RGF0YS0+X3ByaXYtPm1haW5GcmFtZS0+dmlldygpOwog
ICAgIGlmICh2aWV3KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3Zp
ZXcuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oCmluZGV4IDljOTA4ODY3YTY4
Y2ZkNjBlNWUzNzIyOTVjNWM3NzAwMDdjYWY1ODIuLjRkNzc3ZjhmMzI0YzVmZWNhNmExMTdmZTUw
MWM2YWMzNjg4MGM1NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmll
dy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oCkBAIC0xNTMsMTUgKzE1
MywxMiBAQCBzdHJ1Y3QgX0V3a19WaWV3X1NtYXJ0X0NsYXNzIHsKIAogICAgIEV2YXNfT2JqZWN0
ICooKndpbmRvd19jcmVhdGUpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBFaW5hX0Jvb2wgamF2
YXNjcmlwdCwgY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAqd2luZG93X2ZlYXR1cmVzKTsgLyoq
PCBjcmVhdGVzIGEgbmV3IHdpbmRvdywgcmVxdWVzdGVkIGJ5IHdlYmtpdCAqLwogICAgIHZvaWQg
KCp3aW5kb3dfY2xvc2UpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKTsgLyoqPCBjbG9zZXMgYSB3
aW5kb3cgKi8KLSAgICAvLyBob29rcyB0byBhbGxvdyBkaWZmZXJlbnQgYmFja2luZyBzdG9yZXMK
LSAgICBFdmFzX09iamVjdCAqKCpiYWNraW5nX3N0b3JlX2FkZCkoRXdrX1ZpZXdfU21hcnRfRGF0
YSAqc2QpOyAvKio8IG11c3QgYmUgZGVmaW5lZCAqLwogICAgIEVpbmFfQm9vbCAoKnNjcm9sbHNf
cHJvY2VzcykoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpOyAvKio8IG11c3QgYmUgZGVmaW5lZCAq
LwogICAgIEVpbmFfQm9vbCAoKnJlcGFpbnRzX3Byb2Nlc3MpKEV3a19WaWV3X1NtYXJ0X0RhdGEg
KnNkKTsgLyoqPCBtdXN0IGJlIGRlZmluZWQgKi8KICAgICBFaW5hX0Jvb2wgKCpjb250ZW50c19y
ZXNpemUpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBpbnQgdywgaW50IGgpOwogICAgIEVpbmFf
Qm9vbCAoKnpvb21fc2V0KShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgZmxvYXQgem9vbSwgRXZh
c19Db29yZCBjeCwgRXZhc19Db29yZCBjeSk7CiAgICAgRWluYV9Cb29sICgqem9vbV93ZWFrX3Nl
dCkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2
YXNfQ29vcmQgY3kpOwogICAgIHZvaWQgKCp6b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldCkoRXdr
X1ZpZXdfU21hcnRfRGF0YSAqc2QsIEVpbmFfQm9vbCBzbW9vdGhfc2NhbGUpOwotICAgIHZvaWQg
KCpiZ19jb2xvcl9zZXQpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCB1bnNpZ25lZCBjaGFyIHJl
ZCwgdW5zaWduZWQgY2hhciBncmVlbiwgdW5zaWduZWQgY2hhciBibHVlLCB1bnNpZ25lZCBjaGFy
IGFscGhhKTsKICAgICB2b2lkICgqZmx1c2gpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKTsKICAg
ICBFaW5hX0Jvb2wgKCpwcmVfcmVuZGVyX3JlZ2lvbikoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2Qs
IEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwg
ZmxvYXQgem9vbSk7CiAgICAgRWluYV9Cb29sICgqcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMp
KEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCB1bnNpZ25lZCBpbnQgbiwgZmxvYXQgem9vbSk7CkBA
IC0yMDMsNyArMjAwLDcgQEAgc3RydWN0IF9Fd2tfVmlld19TbWFydF9DbGFzcyB7CiAgKiBUaGUg
dmVyc2lvbiB5b3UgaGF2ZSB0byBwdXQgaW50byB0aGUgdmVyc2lvbiBmaWVsZAogICogaW4gdGhl
IEBhIEV3a19WaWV3X1NtYXJ0X0NsYXNzIHN0cnVjdHVyZS4KICAqLwotI2RlZmluZSBFV0tfVklF
V19TTUFSVF9DTEFTU19WRVJTSU9OIDdVTAorI2RlZmluZSBFV0tfVklFV19TTUFSVF9DTEFTU19W
RVJTSU9OIDhVTAogCiAvKioKICAqIEluaXRpYWxpemVzIGEgd2hvbGUgQGEgRXdrX1ZpZXdfU21h
cnRfQ2xhc3Mgc3RydWN0dXJlLgpAQCAtMjE1LDcgKzIxMiw3IEBAIHN0cnVjdCBfRXdrX1ZpZXdf
U21hcnRfQ2xhc3MgewogICogQHNlZSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUX1ZFUlNJT04K
ICAqIEBzZWUgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9OQU1FX1ZFUlNJT04KICAqLwotI2Rl
ZmluZSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUKHNtYXJ0X2NsYXNzX2luaXQpIHtzbWFydF9j
bGFzc19pbml0LCBFV0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9OLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfQorI2RlZmluZSBFV0tfVklF
V19TTUFSVF9DTEFTU19JTklUKHNtYXJ0X2NsYXNzX2luaXQpIHtzbWFydF9jbGFzc19pbml0LCBF
V0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9OLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwfQogCiAvKioKICAqIEluaXRpYWxpemVzIHRvIHplcm8gYSB3
aG9sZSBAYSBFd2tfVmlld19TbWFydF9DbGFzcyBzdHJ1Y3R1cmUuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfc2luZ2xlLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfdmlld19zaW5nbGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
YzQ1MTc2MTA0OGQ3NzI4ZjAzZDE3NWM5NDEzMzI4NDI0YzAwYmQzLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
dmlld19zaW5nbGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzgyICswLDAgQEAKLS8qCi0gICAg
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKLSAgICBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCi0KLSAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgImV3a192aWV3LmgiCi0KLSNpbmNsdWRlICJUaWxlZEJhY2tp
bmdTdG9yZS5oIgotI2luY2x1ZGUgImV3a19mcmFtZV9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZXdr
X3ByaXZhdGUuaCIKLSNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCi0KLSNpbmNsdWRlIDxF
Y29yZV9FdmFzLmg+Ci0jaW5jbHVkZSA8RXZhcy5oPgotI2luY2x1ZGUgPGVpbmFfc2FmZXR5X2No
ZWNrcy5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSNp
bmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2VuZGlm
Ci0KLXN0YXRpYyBFd2tfVmlld19TbWFydF9DbGFzcyBfcGFyZW50X3NjID0gRVdLX1ZJRVdfU01B
UlRfQ0xBU1NfSU5JVF9OVUxMOwotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2luZ2xlX29uX2Rl
bCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKikKLXsKLSAgICBFdmFzX09i
amVjdCogY2xpcCA9IChFdmFzX09iamVjdCopZGF0YTsKLSAgICBldmFzX29iamVjdF9kZWwoY2xp
cCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zaW5nbGVfc21hcnRfYWRkKEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KQotewotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YTsKLQot
ICAgIF9wYXJlbnRfc2Muc2MuYWRkKGV3a1ZpZXcpOwotCi0gICAgc21hcnREYXRhID0gc3RhdGlj
X2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KGV3
a1ZpZXcpKTsKLSAgICBpZiAoIXNtYXJ0RGF0YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRXZh
c19PYmplY3QqIGNsaXAgPSBldmFzX29iamVjdF9yZWN0YW5nbGVfYWRkKHNtYXJ0RGF0YS0+YmFz
ZS5ldmFzKTsKLSAgICBldmFzX29iamVjdF9zaG93KGNsaXApOwotCi0gICAgZXZhc19vYmplY3Rf
ZXZlbnRfY2FsbGJhY2tfYWRkCi0gICAgICAgIChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIEVW
QVNfQ0FMTEJBQ0tfREVMLCBfZXdrX3ZpZXdfc2luZ2xlX29uX2RlbCwgY2xpcCk7Ci19Ci0KLXN0
YXRpYyBFdmFzX09iamVjdCogX2V3a192aWV3X3NpbmdsZV9zbWFydF9iYWNraW5nX3N0b3JlX2Fk
ZChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCi17Ci0gICAgRXZhc19PYmplY3QqIGJz
ID0gZXZhc19vYmplY3RfaW1hZ2VfYWRkKHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoYnMsIDApOwotICAgIGNvbnN0IEVjb3JlX0V2YXMq
IGVjb3JlRXZhcyA9IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoc21hcnREYXRhLT5iYXNlLmV2
YXMpOwotICAgIGNvbnN0IGNoYXIqIGVuZ2luZSA9IGVjb3JlX2V2YXNfZW5naW5lX25hbWVfZ2V0
KGVjb3JlRXZhcyk7Ci0gICAgaWYgKCFzdHJuY21wKGVuZ2luZSwgIm9wZW5nbF94MTEiLCBzdHJs
ZW4oIm9wZW5nbF94MTEiKSkpCi0gICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2NvbnRlbnRfaGlu
dF9zZXQoYnMsIEVWQVNfSU1BR0VfQ09OVEVOVF9ISU5UX0RZTkFNSUMpOwotCi0gICAgZXZhc19v
YmplY3RfaW1hZ2VfYWxwaGFfc2V0KGJzLCBmYWxzZSk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2Vf
c21vb3RoX3NjYWxlX3NldChicywgc21hcnREYXRhLT56b29tX3dlYWtfc21vb3RoX3NjYWxlKTsK
LQotICAgIHJldHVybiBiczsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X3NpbmdsZV9zbWFy
dF9yZXNpemUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29v
cmQgaGVpZ2h0KQotewotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRp
Y19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChl
d2tWaWV3KSk7Ci0gICAgX3BhcmVudF9zYy5zYy5yZXNpemUoZXdrVmlldywgd2lkdGgsIGhlaWdo
dCk7Ci0KLSAgICBpZiAoIXNtYXJ0RGF0YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gdGhl
c2Ugc2hvdWxkIGJlIHF1ZXVlZCBhbmQgcHJvY2Vzc2VkIGluIGNhbGN1bGF0ZSBhcyB3ZWxsIQot
ICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfc2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwg
d2lkdGgsIGhlaWdodCk7Ci0gICAgaWYgKHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmN1
cnJlbnQgPCAwLjAwMDAxKSB7Ci0gICAgICAgIEV2YXNfT2JqZWN0KiBjbGlwID0gZXZhc19vYmpl
Y3RfY2xpcF9nZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlKTsKLSAgICAgICAgRXZhc19Db29y
ZCB4LCB5LCBjdywgY2g7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KHNtYXJ0
RGF0YS0+YmFja2luZ19zdG9yZSwgMCwgMCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGV2YXNf
b2JqZWN0X2dlb21ldHJ5X2dldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsICZ4LCAmeSwgMCwg
MCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X21vdmUoY2xpcCwgeCwgeSk7Ci0gICAgICAgIGV3a19m
cmFtZV9jb250ZW50c19zaXplX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZjdywgJmNoKTsK
LSAgICAgICAgaWYgKHdpZHRoID4gY3cpCi0gICAgICAgICAgICB3aWR0aCA9IGN3OwotICAgICAg
ICBpZiAoaGVpZ2h0ID4gY2gpCi0gICAgICAgICAgICBoZWlnaHQgPSBjaDsKLSAgICAgICAgZXZh
c19vYmplY3RfcmVzaXplKGNsaXAsIHdpZHRoLCBoZWlnaHQpOwotICAgIH0KLX0KLQotc3RhdGlj
IGlubGluZSB2b2lkIF9ld2tfdmlld19zY3JlZW5fbW92ZSh1aW50MzJfdCogaW1hZ2UsIHNpemVf
dCBkZXN0aW5hdGlvblgsIHNpemVfdCBkZXN0aW5hdGlvblksIHNpemVfdCBzb3VyY2VYLCBzaXpl
X3Qgc291cmNlWSwgc2l6ZV90IGNvcHlXaWR0aCwgc2l6ZV90IGNvcHlIZWlnaHQsIHNpemVfdCBp
bWFnZVdpZHRoKQotewotICAgIHVpbnQzMl90KiBzb3VyY2VCZWdpbiA9IGltYWdlICsgKGltYWdl
V2lkdGggKiBzb3VyY2VZKSArIHNvdXJjZVg7Ci0gICAgdWludDMyX3QqIGRlc3RpbmF0aW9uQmVn
aW4gPSBpbWFnZSArIChpbWFnZVdpZHRoICogZGVzdGluYXRpb25ZKSArIGRlc3RpbmF0aW9uWDsK
LQotICAgIHNpemVfdCBjb3B5TGVuZ3RoID0gY29weVdpZHRoICogNDsKLSAgICBjb25zdCBpbnQg
bW92ZUxpbmVVcERvd24gPSBzb3VyY2VZID49IGRlc3RpbmF0aW9uWSA/IDEgOiAtMTsKLSAgICBp
bnQgc3RhcnRIZWlnaHQgPSBzb3VyY2VZID49IGRlc3RpbmF0aW9uWSA/IDAgOiBjb3B5SGVpZ2h0
IC0gMTsKLQotICAgIHVpbnQzMl90KiBzb3VyY2UsICogZGVzdGluYXRpb247Ci0gICAgaWYgKChk
ZXN0aW5hdGlvblggPiBzb3VyY2VYICYmIGRlc3RpbmF0aW9uWCA8IHNvdXJjZVggKyBjb3B5V2lk
dGgpCi0gICAgICAgIHx8IChkZXN0aW5hdGlvblggPCBzb3VyY2VYICYmIGRlc3RpbmF0aW9uWCAr
IGNvcHlXaWR0aCA+IHNvdXJjZVgpKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y29weUhlaWdodDsgaSsrKSB7Ci0gICAgICAgICAgICBzb3VyY2UgPSBzb3VyY2VCZWdpbiArIChp
bWFnZVdpZHRoICogc3RhcnRIZWlnaHQpOwotICAgICAgICAgICAgZGVzdGluYXRpb24gPSBkZXN0
aW5hdGlvbkJlZ2luICsgKGltYWdlV2lkdGggKiBzdGFydEhlaWdodCk7Ci0gICAgICAgICAgICBz
dGFydEhlaWdodCA9IHN0YXJ0SGVpZ2h0ICsgbW92ZUxpbmVVcERvd247Ci0gICAgICAgICAgICBt
ZW1tb3ZlKGRlc3RpbmF0aW9uLCBzb3VyY2UsIGNvcHlMZW5ndGgpOwotICAgICAgICB9Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3B5SGVpZ2h0OyBpKysp
IHsKLSAgICAgICAgICAgIHNvdXJjZSA9IHNvdXJjZUJlZ2luICsgKGltYWdlV2lkdGggKiBzdGFy
dEhlaWdodCk7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uQmVnaW4gKyAo
aW1hZ2VXaWR0aCAqIHN0YXJ0SGVpZ2h0KTsKLSAgICAgICAgICAgIHN0YXJ0SGVpZ2h0ID0gc3Rh
cnRIZWlnaHQgKyBtb3ZlTGluZVVwRG93bjsKLSAgICAgICAgICAgIG1lbWNweShkZXN0aW5hdGlv
biwgc291cmNlLCBjb3B5TGVuZ3RoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotc3RhdGljIGlu
bGluZSB2b2lkIF9ld2tfdmlld19zaW5nbGVfc2Nyb2xsX3Byb2Nlc3Nfc2luZ2xlKEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgdm9pZCogcGl4ZWxzLCBFdmFzX0Nvb3JkIHdpZHRoLCBF
dmFzX0Nvb3JkIGhlaWdodCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0LCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0VG9TY3JvbGwpCi17Ci0gICAgaW50IHNjcm9sbFgg
PSByZWN0VG9TY3JvbGwueCgpOwotICAgIGludCBzY3JvbGxZID0gcmVjdFRvU2Nyb2xsLnkoKTsK
LSAgICBpbnQgc2Nyb2xsV2lkdGggPSByZWN0VG9TY3JvbGwud2lkdGgoKTsKLSAgICBpbnQgc2Ny
b2xsSGVpZ2h0ID0gcmVjdFRvU2Nyb2xsLmhlaWdodCgpOwotCi0gICAgREJHKCIlZCwlZCArICVk
LCVkICUrMDNkLCUrMDNkLCBzdG9yZTogJXAgJWR4JWQiLAotICAgICAgICBzY3JvbGxYLCBzY3Jv
bGxZLCBzY3JvbGxXaWR0aCwgc2Nyb2xsSGVpZ2h0LCBzY3JvbGxPZmZzZXQud2lkdGgoKSwgc2Ny
b2xsT2Zmc2V0LmhlaWdodCgpLCBwaXhlbHMsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgaWYgKGFi
cyhzY3JvbGxPZmZzZXQud2lkdGgoKSkgPj0gc2Nyb2xsV2lkdGggfHwgYWJzKHNjcm9sbE9mZnNl
dC5oZWlnaHQoKSkgPj0gc2Nyb2xsSGVpZ2h0KSB7Ci0gICAgICAgIGV3a192aWV3X3JlcGFpbnRf
YWRkKHNtYXJ0RGF0YS0+X3ByaXYsIHNjcm9sbFgsIHNjcm9sbFksIHNjcm9sbFdpZHRoLCBzY3Jv
bGxIZWlnaHQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHNjcm9sbFggPCAw
KSB7Ci0gICAgICAgIHNjcm9sbFdpZHRoICs9IHNjcm9sbFg7Ci0gICAgICAgIHNjcm9sbFggPSAw
OwotICAgIH0KLSAgICBpZiAoc2Nyb2xsWSA8IDApIHsKLSAgICAgICAgc2Nyb2xsSGVpZ2h0ICs9
IHNjcm9sbFk7Ci0gICAgICAgIHNjcm9sbFkgPSAwOwotICAgIH0KLQotICAgIGlmIChzY3JvbGxY
ICsgc2Nyb2xsV2lkdGggPiB3aWR0aCkKLSAgICAgICAgc2Nyb2xsV2lkdGggPSB3aWR0aCAtIHNj
cm9sbFg7Ci0gICAgaWYgKHNjcm9sbFkgKyBzY3JvbGxIZWlnaHQgPiBoZWlnaHQpCi0gICAgICAg
IHNjcm9sbEhlaWdodCA9IGhlaWdodCAtIHNjcm9sbFk7Ci0KLSAgICBpZiAoc2Nyb2xsV2lkdGgg
PD0gMCB8fCBzY3JvbGxIZWlnaHQgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IHNv
dXJjZVggPSBzY3JvbGxPZmZzZXQud2lkdGgoKSA8IDAgPyBhYnMoc2Nyb2xsT2Zmc2V0LndpZHRo
KCkpIDogMDsKLSAgICBpbnQgc291cmNlWSA9IHNjcm9sbE9mZnNldC5oZWlnaHQoKSA8IDAgPyBh
YnMoc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKSA6IDA7Ci0gICAgaW50IGRlc3RpbmF0aW9uWCA9IHNj
cm9sbE9mZnNldC53aWR0aCgpIDwgMCA/IDAgOiBzY3JvbGxPZmZzZXQud2lkdGgoKTsKLSAgICBp
bnQgZGVzdGluYXRpb25ZID0gc2Nyb2xsT2Zmc2V0LmhlaWdodCgpIDwgMCA/IDAgOiBzY3JvbGxP
ZmZzZXQuaGVpZ2h0KCk7Ci0gICAgaW50IGNvcHlXaWR0aCA9IHNjcm9sbFdpZHRoIC0gYWJzKHNj
cm9sbE9mZnNldC53aWR0aCgpKTsKLSAgICBpbnQgY29weUhlaWdodCA9IHNjcm9sbEhlaWdodCAt
IGFicyhzY3JvbGxPZmZzZXQuaGVpZ2h0KCkpOwotICAgIGlmIChzY3JvbGxPZmZzZXQud2lkdGgo
KSB8fCBzY3JvbGxPZmZzZXQuaGVpZ2h0KCkpIHsKLSAgICAgICAgX2V3a192aWV3X3NjcmVlbl9t
b3ZlKHN0YXRpY19jYXN0PHVpbnQzMl90Kj4ocGl4ZWxzKSwgZGVzdGluYXRpb25YLCBkZXN0aW5h
dGlvblksIHNvdXJjZVgsIHNvdXJjZVksIGNvcHlXaWR0aCwgY29weUhlaWdodCwgd2lkdGgpOwot
ICAgICAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQoc21hcnREYXRhLT5iYWNr
aW5nX3N0b3JlLCBkZXN0aW5hdGlvblgsIGRlc3RpbmF0aW9uWSwgY29weVdpZHRoLCBjb3B5SGVp
Z2h0KTsKLSAgICB9Ci0KLSAgICBFaW5hX1JlY3RhbmdsZSB2ZXJ0aWNhbFVwZGF0ZTsKLSAgICB2
ZXJ0aWNhbFVwZGF0ZS54ID0gZGVzdGluYXRpb25YID8gMCA6IGNvcHlXaWR0aCAtIDE7Ci0gICAg
dmVydGljYWxVcGRhdGUueSA9IDA7Ci0gICAgdmVydGljYWxVcGRhdGUudyA9IGFicyhzY3JvbGxP
ZmZzZXQud2lkdGgoKSk7Ci0gICAgdmVydGljYWxVcGRhdGUuaCA9IHNjcm9sbEhlaWdodDsKLSAg
ICBpZiAodmVydGljYWxVcGRhdGUudyAmJiB2ZXJ0aWNhbFVwZGF0ZS5oKQotICAgICAgICBld2tf
dmlld19yZXBhaW50X2FkZChzbWFydERhdGEtPl9wcml2LCB2ZXJ0aWNhbFVwZGF0ZS54LCB2ZXJ0
aWNhbFVwZGF0ZS55LCB2ZXJ0aWNhbFVwZGF0ZS53LCB2ZXJ0aWNhbFVwZGF0ZS5oKTsKLQotICAg
IEVpbmFfUmVjdGFuZ2xlIGhvcml6b250YWxVcGRhdGU7Ci0gICAgaG9yaXpvbnRhbFVwZGF0ZS54
ID0gZGVzdGluYXRpb25YOwotICAgIGhvcml6b250YWxVcGRhdGUueSA9IGRlc3RpbmF0aW9uWSA/
IDAgOiBjb3B5SGVpZ2h0IC0gMTsKLSAgICBob3Jpem9udGFsVXBkYXRlLncgPSBjb3B5V2lkdGg7
Ci0gICAgaG9yaXpvbnRhbFVwZGF0ZS5oID0gYWJzKHNjcm9sbE9mZnNldC5oZWlnaHQoKSk7Ci0g
ICAgaWYgKGhvcml6b250YWxVcGRhdGUudyAmJiBob3Jpem9udGFsVXBkYXRlLmgpCi0gICAgICAg
IGV3a192aWV3X3JlcGFpbnRfYWRkKHNtYXJ0RGF0YS0+X3ByaXYsIGhvcml6b250YWxVcGRhdGUu
eCwgaG9yaXpvbnRhbFVwZGF0ZS55LCBob3Jpem9udGFsVXBkYXRlLncsIGhvcml6b250YWxVcGRh
dGUuaCk7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NpbmdsZV9zbWFydF9zY3Jv
bGxzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQotewotICAgIEV2YXNf
Q29vcmQgaW1hZ2VXaWR0aCwgaW1hZ2VIZWlnaHQ7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6
ZV9nZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCAmaW1hZ2VXaWR0aCwgJmltYWdlSGVpZ2h0
KTsKLQotICAgIGNvbnN0IFdURjo6VmVjdG9yPFdlYkNvcmU6OkludFNpemU+JiBzY3JvbGxPZmZz
ZXRzID0gZXdrX3ZpZXdfc2Nyb2xsX29mZnNldHNfZ2V0KHNtYXJ0RGF0YS0+X3ByaXYpOwotICAg
IGNvbnN0IFdURjo6VmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+JiByZWN0c1RvU2Nyb2xsID0gZXdr
X3ZpZXdfc2Nyb2xsX3JlY3RzX2dldChzbWFydERhdGEtPl9wcml2KTsKLQotICAgIFdlYkNvcmU6
OkludFJlY3QgcmVjdFRvU2Nyb2xsKDAsIDAsIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KTsKLSAg
ICBXZWJDb3JlOjpJbnRTaXplIHNjcm9sbE9mZnNldDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNjcm9sbE9mZnNldHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmVjdFRvU2Nyb2xsLmlu
dGVyc2VjdChyZWN0c1RvU2Nyb2xsW2ldKTsKLSAgICAgICAgc2Nyb2xsT2Zmc2V0ICs9IHNjcm9s
bE9mZnNldHNbaV07Ci0gICAgfQotCi0gICAgaWYgKHNjcm9sbE9mZnNldC5pc1plcm8oKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICB2b2lkKiBwaXhlbHMgPSBldmFzX29iamVjdF9pbWFn
ZV9kYXRhX2dldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIDEpOwotICAgIF9ld2tfdmlld19z
aW5nbGVfc2Nyb2xsX3Byb2Nlc3Nfc2luZ2xlKHNtYXJ0RGF0YSwgcGl4ZWxzLCBpbWFnZVdpZHRo
LCBpbWFnZUhlaWdodCwgc2Nyb2xsT2Zmc2V0LCByZWN0VG9TY3JvbGwpOwotCi0gICAgZXZhc19v
YmplY3RfaW1hZ2VfZGF0YV9zZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBwaXhlbHMpOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3Npbmds
ZV9zbWFydF9yZXBhaW50c19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkK
LXsKLSAgICBpZiAoc21hcnREYXRhLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCA8IDAuMDAw
MDEpIHsKLSAgICAgICAgRXZhc19PYmplY3QqIGNsaXAgPSBldmFzX29iamVjdF9jbGlwX2dldChz
bWFydERhdGEtPmJhY2tpbmdfc3RvcmUpOwotCi0gICAgICAgIC8vIHJlc2V0IGVmZmVjdHMgb2Yg
em9vbV93ZWFrX3NldCgpCi0gICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KHNtYXJ0
RGF0YS0+YmFja2luZ19zdG9yZSwgMCwgMCwgc21hcnREYXRhLT52aWV3LncsIHNtYXJ0RGF0YS0+
dmlldy5oKTsKLSAgICAgICAgZXZhc19vYmplY3RfbW92ZShjbGlwLCBzbWFydERhdGEtPnZpZXcu
eCwgc21hcnREYXRhLT52aWV3LnkpOwotCi0gICAgICAgIEV2YXNfQ29vcmQgd2lkdGggPSBzbWFy
dERhdGEtPnZpZXcudzsKLSAgICAgICAgRXZhc19Db29yZCBoZWlnaHQgPSBzbWFydERhdGEtPnZp
ZXcuaDsKLQotICAgICAgICBFdmFzX0Nvb3JkIGNlbnRlcldpZHRoLCBjZW50ZXJIZWlnaHQ7Ci0g
ICAgICAgIGV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUs
ICZjZW50ZXJXaWR0aCwgJmNlbnRlckhlaWdodCk7Ci0gICAgICAgIGlmICh3aWR0aCA+IGNlbnRl
cldpZHRoKQotICAgICAgICAgICAgd2lkdGggPSBjZW50ZXJXaWR0aDsKLQotICAgICAgICBpZiAo
aGVpZ2h0ID4gY2VudGVySGVpZ2h0KQotICAgICAgICAgICAgaGVpZ2h0ID0gY2VudGVySGVpZ2h0
OwotCi0gICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShjbGlwLCB3aWR0aCwgaGVpZ2h0KTsKLSAg
ICB9Ci0KLSAgICBFdmFzX0Nvb3JkIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0OwotICAgIGV2YXNf
b2JqZWN0X2ltYWdlX3NpemVfZ2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgJmltYWdlV2lk
dGgsICZpbWFnZUhlaWdodCk7Ci0KLSAgICBFaW5hX1RpbGVyKiB0aWxlciA9IGVpbmFfdGlsZXJf
bmV3KGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KTsKLSAgICBpZiAoIXRpbGVyKSB7Ci0gICAgICAg
IEVSUigiY291bGQgbm90IGNyZWF0ZSB0aWxlciAlZHglZCIsIGltYWdlV2lkdGgsIGltYWdlSGVp
Z2h0KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGV3a192aWV3X2xheW91
dF9pZl9uZWVkZWRfcmVjdXJzaXZlKHNtYXJ0RGF0YS0+X3ByaXYpOwotCi0gICAgc2l6ZV90IGNv
dW50OwotICAgIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBwYWludFJlcXVlc3QgPSBld2tfdmlld19y
ZXBhaW50c19wb3Aoc21hcnREYXRhLT5fcHJpdiwgJmNvdW50KTsKLSAgICBjb25zdCBFaW5hX1Jl
Y3RhbmdsZSogcGFpbnRSZXF1ZXN0RW5kID0gcGFpbnRSZXF1ZXN0ICsgY291bnQ7Ci0gICAgZm9y
ICg7IHBhaW50UmVxdWVzdCA8IHBhaW50UmVxdWVzdEVuZDsgcGFpbnRSZXF1ZXN0KyspCi0gICAg
ICAgIGVpbmFfdGlsZXJfcmVjdF9hZGQodGlsZXIsIHBhaW50UmVxdWVzdCk7Ci0KLSAgICBFaW5h
X0l0ZXJhdG9yKiBpdGVyYXRvciA9IGVpbmFfdGlsZXJfaXRlcmF0b3JfbmV3KHRpbGVyKTsKLSAg
ICBpZiAoIWl0ZXJhdG9yKSB7Ci0gICAgICAgIEVSUigiY291bGQgbm90IGdldCBpdGVyYXRvciBm
b3IgdGlsZXIiKTsKLSAgICAgICAgZWluYV90aWxlcl9mcmVlKHRpbGVyKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIFdl
YkNvcmU6OkZyYW1lKiBtYWluRnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoc21hcnREYXRh
LT5tYWluX2ZyYW1lKTsKLSAgICBpZiAobWFpbkZyYW1lICYmIG1haW5GcmFtZS0+dGlsZWRCYWNr
aW5nU3RvcmUoKSkKLSAgICAgICAgbWFpbkZyYW1lLT50aWxlZEJhY2tpbmdTdG9yZSgpLT5jb3Zl
cldpdGhUaWxlc0lmTmVlZGVkKCk7Ci0jZW5kaWYKLQotICAgIEV3a19QYWludF9Db250ZXh0KiBj
b250ZXh0ID0gZXdrX3BhaW50X2NvbnRleHRfZnJvbV9pbWFnZV9uZXcoc21hcnREYXRhLT5iYWNr
aW5nX3N0b3JlKTsKLSAgICBld2tfcGFpbnRfY29udGV4dF9zYXZlKGNvbnRleHQpOwotCi0gICAg
RWluYV9SZWN0YW5nbGUqIHJlY3Q7Ci0gICAgRUlOQV9JVEVSQVRPUl9GT1JFQUNIKGl0ZXJhdG9y
LCByZWN0KSB7Ci0gICAgICAgIGV3a192aWV3X3BhaW50KHNtYXJ0RGF0YS0+X3ByaXYsIGNvbnRl
eHQsIHJlY3QpOwotICAgICAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQoc21h
cnREYXRhLT5iYWNraW5nX3N0b3JlLCByZWN0LT54LCByZWN0LT55LCByZWN0LT53LCByZWN0LT5o
KTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIFdlYkNvcmU6OlBhZ2UqIHBh
Z2UgPSBFV0tQcml2YXRlOjpjb3JlUGFnZShzbWFydERhdGEtPnNlbGYpOwotICAgIGlmIChwYWdl
KSB7Ci0gICAgICAgIFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBw
YWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCk7Ci0gICAgICAgIGlmIChjb250cm9sbGVyLT5oaWdo
bGlnaHRlZE5vZGUoKSkKLSAgICAgICAgICAgIGNvbnRyb2xsZXItPmRyYXdIaWdobGlnaHQoKmNv
bnRleHQtPmdyYXBoaWNDb250ZXh0KTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGV3a19wYWludF9j
b250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Ci0gICAgZXdrX3BhaW50X2NvbnRleHRfZnJlZShjb250
ZXh0KTsKLQotICAgIGVpbmFfdGlsZXJfZnJlZSh0aWxlcik7Ci0gICAgZWluYV9pdGVyYXRvcl9m
cmVlKGl0ZXJhdG9yKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgRWluYV9Cb29s
IF9ld2tfdmlld19zaW5nbGVfc21hcnRfem9vbV93ZWFrX3NldChFd2tfVmlld19TbWFydF9EYXRh
KiBzbWFydERhdGEsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY2VudGVyWCwgRXZhc19Db29yZCBj
ZW50ZXJZKQotewotICAgIC8vIFRPRE86IHJldmlldwotICAgIGZsb2F0IHNjYWxlID0gem9vbSAv
IHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0OwotICAgIEV2YXNfQ29vcmQgdyA9
IHNtYXJ0RGF0YS0+dmlldy53ICogc2NhbGU7Ci0gICAgRXZhc19Db29yZCBoID0gc21hcnREYXRh
LT52aWV3LmggKiBzY2FsZTsKLSAgICBFdmFzX0Nvb3JkIGR4LCBkeSwgY3csIGNoOwotICAgIEV2
YXNfT2JqZWN0KiBjbGlwID0gZXZhc19vYmplY3RfY2xpcF9nZXQoc21hcnREYXRhLT5iYWNraW5n
X3N0b3JlKTsKLQotICAgIGV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChzbWFydERhdGEtPm1h
aW5fZnJhbWUsICZjdywgJmNoKTsKLSAgICBpZiAoc21hcnREYXRhLT52aWV3LncgPiAwICYmIHNt
YXJ0RGF0YS0+dmlldy5oID4gMCkgewotICAgICAgICBkeCA9ICh3ICogKHNtYXJ0RGF0YS0+dmll
dy53IC0gY2VudGVyWCkpIC8gc21hcnREYXRhLT52aWV3Lnc7Ci0gICAgICAgIGR5ID0gKGggKiAo
c21hcnREYXRhLT52aWV3LmggLSBjZW50ZXJZKSkgLyBzbWFydERhdGEtPnZpZXcuaDsKLSAgICB9
IGVsc2UgewotICAgICAgICBkeCA9IDA7Ci0gICAgICAgIGR5ID0gMDsKLSAgICB9Ci0KLSAgICBl
dmFzX29iamVjdF9pbWFnZV9maWxsX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIGNlbnRl
clggKyBkeCwgY2VudGVyWSArIGR5LCB3LCBoKTsKLQotICAgIGlmIChzbWFydERhdGEtPnZpZXcu
dyA+IDAgJiYgc21hcnREYXRhLT52aWV3LmggPiAwKSB7Ci0gICAgICAgIGR4ID0gKChzbWFydERh
dGEtPnZpZXcudyAtIHcpICogY2VudGVyWCkgLyBzbWFydERhdGEtPnZpZXcudzsKLSAgICAgICAg
ZHkgPSAoKHNtYXJ0RGF0YS0+dmlldy5oIC0gaCkgKiBjZW50ZXJZKSAvIHNtYXJ0RGF0YS0+dmll
dy5oOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGR4ID0gMDsKLSAgICAgICAgZHkgPSAwOwotICAg
IH0KLSAgICBldmFzX29iamVjdF9tb3ZlKGNsaXAsIHNtYXJ0RGF0YS0+dmlldy54ICsgZHgsIHNt
YXJ0RGF0YS0+dmlldy55ICsgZHkpOwotCi0gICAgaWYgKGN3IDwgc21hcnREYXRhLT52aWV3Lncp
Ci0gICAgICAgIHcgPSBjdyAqIHNjYWxlOwotICAgIGlmIChjaCA8IHNtYXJ0RGF0YS0+dmlldy5o
KQotICAgICAgICBoID0gY2ggKiBzY2FsZTsKLSAgICBldmFzX29iamVjdF9yZXNpemUoY2xpcCwg
dywgaCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zaW5n
bGVfc21hcnRfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSog
c21hcnREYXRhLCBFaW5hX0Jvb2wgc21vb3RoX3NjYWxlKQotewotICAgIGV2YXNfb2JqZWN0X2lt
YWdlX3Ntb290aF9zY2FsZV9zZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBzbW9vdGhfc2Nh
bGUpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2JnX2NvbG9yX3Nl
dChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIHVuc2lnbmVkIGNoYXIgLypyZWQqLywg
dW5zaWduZWQgY2hhciAvKmdyZWVuKi8sIHVuc2lnbmVkIGNoYXIgLypibHVlKi8sIHVuc2lnbmVk
IGNoYXIgYWxwaGEpCi17Ci0gICAgZXZhc19vYmplY3RfaW1hZ2VfYWxwaGFfc2V0KHNtYXJ0RGF0
YS0+YmFja2luZ19zdG9yZSwgYWxwaGEgPCAyNTUpOwotfQotCi1FaW5hX0Jvb2wgZXdrX3ZpZXdf
c2luZ2xlX3NtYXJ0X3NldChFd2tfVmlld19TbWFydF9DbGFzcyogYXBpKQotewotICAgIGlmICgh
ZXdrX3ZpZXdfYmFzZV9zbWFydF9zZXQoYXBpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKEVJTkFfVU5MSUtFTFkoIV9wYXJlbnRfc2Muc2MuYWRkKSkKLSAgICAgICAgZXdrX3Zp
ZXdfYmFzZV9zbWFydF9zZXQoJl9wYXJlbnRfc2MpOwotCi0gICAgYXBpLT5zYy5hZGQgPSBfZXdr
X3ZpZXdfc2luZ2xlX3NtYXJ0X2FkZDsKLSAgICBhcGktPnNjLnJlc2l6ZSA9IF9ld2tfdmlld19z
aW5nbGVfc21hcnRfcmVzaXplOwotCi0gICAgYXBpLT5iYWNraW5nX3N0b3JlX2FkZCA9IF9ld2tf
dmlld19zaW5nbGVfc21hcnRfYmFja2luZ19zdG9yZV9hZGQ7Ci0gICAgYXBpLT5zY3JvbGxzX3By
b2Nlc3MgPSBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3Njcm9sbHNfcHJvY2VzczsKLSAgICBhcGkt
PnJlcGFpbnRzX3Byb2Nlc3MgPSBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3JlcGFpbnRzX3Byb2Nl
c3M7Ci0gICAgYXBpLT56b29tX3dlYWtfc2V0ID0gX2V3a192aWV3X3NpbmdsZV9zbWFydF96b29t
X3dlYWtfc2V0OwotICAgIGFwaS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQgPSBfZXdrX3Zp
ZXdfc2luZ2xlX3NtYXJ0X3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0OwotICAgIGFwaS0+Ymdf
Y29sb3Jfc2V0ID0gX2V3a192aWV3X3NpbmdsZV9zbWFydF9iZ19jb2xvcl9zZXQ7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGlubGluZSBFdmFzX1NtYXJ0KiBfZXdrX3ZpZXdfc2lu
Z2xlX3NtYXJ0X2NsYXNzX25ldyh2b2lkKQotewotICAgIHN0YXRpYyBFd2tfVmlld19TbWFydF9D
bGFzcyBhcGkgPSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVSU0lPTihld2tWaWV3
U2luZ2xlTmFtZSk7Ci0gICAgc3RhdGljIEV2YXNfU21hcnQqIHNtYXJ0ID0gMDsKLQotICAgIGlm
IChFSU5BX1VOTElLRUxZKCFzbWFydCkpIHsKLSAgICAgICAgZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0
X3NldCgmYXBpKTsKLSAgICAgICAgc21hcnQgPSBldmFzX3NtYXJ0X2NsYXNzX25ldygmYXBpLnNj
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc21hcnQ7Ci19Ci0KLUV2YXNfT2JqZWN0KiBld2tfdmll
d19zaW5nbGVfYWRkKEV2YXMqIGNhbnZhcykKLXsKLSAgICByZXR1cm4gZXZhc19vYmplY3Rfc21h
cnRfYWRkKGNhbnZhcywgX2V3a192aWV3X3NpbmdsZV9zbWFydF9jbGFzc19uZXcoKSk7Ci19Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220595</attachid>
            <date>2014-01-07 22:06:44 -0800</date>
            <delta_ts>2014-01-08 01:08:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126508-20140108150643.patch</filename>
            <type>text/plain</type>
            <size>39592</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxNDgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDhmYjBmYzg0OGYxYTlmYzdm
OWI4ODQzZDE5OGExZjZjNDZiOGI5YmQuLmY2MmVlMGVjZGY5NzJiZjNhYWE1NTIxNTQyNmM5YWI0
Yjc2YmFlNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTQtMDEtMDcgIFJ5dWFuIENo
b2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdIE1lcmdlIGV3a192
aWV3X3NpbmdsZSBpbnRvIGV3a192aWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMjY1MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOiBSZW1vdmVkIGV3a192aWV3X3Np
bmdsZS5jcHAuCisKIDIwMTQtMDEtMDYgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFNtYWxsIGJ1aWxkIGZpeCBmb3IgdGhlIEdUSysgQ01ha2UgcG9y
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9lZmwvQ2hhbmdlTG9nCmluZGV4IGEyNDQ2MWU3ZWNlZjhiODFlOWFlY2Y3MzU3MzVhYmU1MTM2
OTk2OTguLmJiNTJjNDdmOTY0NDQ4MjY0OGEzZGUzNjk0Yzk0ZGU4YjgwZWQ3YjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAxNC0wMS0wNyAgUnl1YW4gQ2hvaSAgPHJ5dWFu
LmNob2lAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF0gTWVyZ2UgZXdrX3ZpZXdfc2luZ2xl
IGludG8gZXdrX3ZpZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyNjUwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFNpbmNlIGV3a192aWV3X3RpbGVkIGlzIHJlbW92ZWQgYXQgcjE2MTEzNCwgd2UgZG9u
J3QgbmVlZCB0byBrZWVwCisgICAgICAgIGV3a192aWV3X3NpbmdsZSBvdXQgb2YgZXdrX3ZpZXcu
Y3BwLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbW92ZXMgdGhlIGxvZ2ljIG9mIGV3a192aWV3X3Np
bmdsZSB0byBld2tfdmlldyBhbmQgcmVmYWN0b3JzIGl0LgorICAgICAgICBJbiBhZGRpdGlvbiwg
cmVwbGFjZXMgMC4wMDAwMSB0byBlcGlzaWxvbi4KKworICAgICAgICAqIGV3ay9ld2tfdmlldy5j
cHA6CisgICAgICAgIChfZXdrX3ZpZXdfc21hcnRfYWRkKToKKyAgICAgICAgKF9ld2tfdmlld19z
bWFydF9yZXNpemUpOiBNZXJnZWQgd2l0aCB0aGUgbG9naWMgb2YgZXdrX3ZpZXdfc2luZ2xlLgor
ICAgICAgICAoX2V3a192aWV3X3NjcmVlbl9tb3ZlKTogTW92ZWQgZnJvbSBld2tfdmlld19zaW5n
bGUuY3BwLgorICAgICAgICAoX2V3a192aWV3X3Njcm9sbF9wcm9jZXNzKTogRGl0dG8uCisgICAg
ICAgIChfZXdrX3ZpZXdfc21hcnRfc2Nyb2xsc19wcm9jZXNzKTogRGl0dG8uCisgICAgICAgIChf
ZXdrX3ZpZXdfc21hcnRfcmVwYWludHNfcHJvY2Vzcyk6IERpdHRvLgorICAgICAgICAoX2V3a192
aWV3X3NtYXJ0X2NhbGN1bGF0ZSk6IFJlbW92ZWQgdW5uZWNlc3NhcnkgY2hlY2sgcm91dGluZSBm
b3Igc2Nyb2xsc19wcm9jZXNzLgorICAgICAgICAoX2V3a192aWV3X3NtYXJ0X3pvb21fd2Vha19z
ZXQpOgorICAgICAgICAoX2V3a192aWV3X3NtYXJ0X3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0
KToKKyAgICAgICAgKGV3a192aWV3X2Jhc2Vfc21hcnRfc2V0KTogTWVyZ2VkIHNtYXJ0IG1ldGhv
ZCBvZiBld2tfdmlld19zaW5nbGUuCisgICAgICAgIChld2tfdmlld19zaW5nbGVfc21hcnRfc2V0
KToKKyAgICAgICAgKF9ld2tfdmlld19zaW5nbGVfc21hcnRfY2xhc3NfbmV3KToKKyAgICAgICAg
KGV3a192aWV3X3NpbmdsZV9hZGQpOgorICAgICAgICAoZXdrX3ZpZXdfYmdfY29sb3Jfc2V0KToK
KyAgICAgICAgKGV3a192aWV3X3ByZV9yZW5kZXJfcmVnaW9uKToKKyAgICAgICAgKGV3a192aWV3
X3Njcm9sbHNfcHJvY2Vzcyk6CisgICAgICAgICogZXdrL2V3a192aWV3Lmg6CisgICAgICAgICog
ZXdrL2V3a192aWV3X3ByaXZhdGUuaDogUmVtb3ZlZCB1bm5jZXNzYXJ5IGZ1bmN0aW9ucy4KKyAg
ICAgICAgKiBld2svZXdrX3ZpZXdfc2luZ2xlLmNwcDogUmVtb3ZlZC4KKwogMjAxNC0wMS0wNSAg
Smlud29vIFNvbmcgIDxqaW53b283LnNvbmdAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF0g
Rml4IGZhaWxpbmcgV2ViS2l0MSBBUEkgdGVzdCBvZiBld2tfdmlld19zZXR0aW5nX3RpbGVkX2Jh
Y2tpbmdfc3RvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2Ug
Yi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDE2MGQzZTM0YjFjZjQ5ZTlm
OWE2Y2E0OTM1NmJmNDY5MDhlNzUwYzQuLjIxN2NlNWVhZWNhZjZkYTYxM2MxYTBmZGU2NjMzNzlj
ZjU3YTk5YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UKKysr
IGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMTQyLDcgKzE0Miw2IEBAIGxp
c3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAgICAgZWZsL2V3ay9ld2tfc2V0dGluZ3MuY3BwCiAg
ICAgZWZsL2V3ay9ld2tfdG91Y2hfZXZlbnQuY3BwCiAgICAgZWZsL2V3ay9ld2tfdmlldy5jcHAK
LSAgICBlZmwvZXdrL2V3a192aWV3X3NpbmdsZS5jcHAKICAgICBlZmwvZXdrL2V3a193ZWJfZGF0
YWJhc2UuY3BwCiAgICAgZWZsL2V3ay9ld2tfd2luZG93X2ZlYXR1cmVzLmNwcAogKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfdmlldy5jcHAKaW5kZXggNTU2MmY1MDRjODcxY2I3NzM3NzU3MjhjMzk4MTJi
YzVmM2E5MzkzOS4uNmM2MWEyMDU4YjZiYTYzYzM4NjM5OWQzMzE5Njk2YWI0MDEyYWU5NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCkBAIC05MDYsNyArOTA2LDYgQEAgc3RhdGljIHZv
aWQgX2V3a192aWV3X3NtYXJ0X2FkZChFdmFzX09iamVjdCogZXdrVmlldykKICAgICBjb25zdCBF
dmFzX1NtYXJ0KiBzbWFydCA9IGV2YXNfb2JqZWN0X3NtYXJ0X3NtYXJ0X2dldChld2tWaWV3KTsK
ICAgICBjb25zdCBFdmFzX1NtYXJ0X0NsYXNzKiBzbWFydENsYXNzID0gZXZhc19zbWFydF9jbGFz
c19nZXQoc21hcnQpOwogICAgIGNvbnN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzKiBhcGkgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzKj4oc21hcnRDbGFzcyk7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oYXBpLT5iYWNraW5nX3N0b3JlX2FkZCk7CiAg
ICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CiAKICAgICBpZiAoIXNtYXJ0
RGF0YSkgewpAQCAtOTM0LDE1ICs5MzMsMjIgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0
X2FkZChFdmFzX09iamVjdCogZXdrVmlldykKIAogICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0
RGF0YSwgcHJpdik7CiAKLSAgICBzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUgPSBhcGktPmJhY2tp
bmdfc3RvcmVfYWRkKHNtYXJ0RGF0YSk7Ci0gICAgaWYgKCFzbWFydERhdGEtPmJhY2tpbmdfc3Rv
cmUpIHsKKyAgICBzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUgPSBldmFzX29iamVjdF9pbWFnZV9h
ZGQoc21hcnREYXRhLT5iYXNlLmV2YXMpOworICAgIGlmIChFSU5BX1VOTElLRUxZKCFzbWFydERh
dGEtPmJhY2tpbmdfc3RvcmUpKSB7CiAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBiYWNr
aW5nIHN0b3JlIG9iamVjdC4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGNvbnN0
IEVjb3JlX0V2YXMqIGVjb3JlRXZhcyA9IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoc21hcnRE
YXRhLT5iYXNlLmV2YXMpOworICAgIGNvbnN0IGNoYXIqIGVuZ2luZSA9IGVjb3JlX2V2YXNfZW5n
aW5lX25hbWVfZ2V0KGVjb3JlRXZhcyk7CisgICAgaWYgKCFzdHJuY21wKGVuZ2luZSwgIm9wZW5n
bF94MTEiLCBzdHJsZW4oIm9wZW5nbF94MTEiKSkpCisgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdl
X2NvbnRlbnRfaGludF9zZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBFVkFTX0lNQUdFX0NP
TlRFTlRfSElOVF9EWU5BTUlDKTsKKworICAgIGV2YXNfb2JqZWN0X2ltYWdlX2FscGhhX3NldChz
bWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIGZhbHNlKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9z
bW9vdGhfc2NhbGVfc2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgc21hcnREYXRhLT56b29t
X3dlYWtfc21vb3RoX3NjYWxlKTsKKyAgICBldmFzX29iamVjdF9wYXNzX2V2ZW50c19zZXQoc21h
cnREYXRhLT5iYWNraW5nX3N0b3JlLCB0cnVlKTsKICAgICBldmFzX29iamVjdF9zbWFydF9tZW1i
ZXJfYWRkKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgZXdrVmlldyk7CiAgICAgZXZhc19vYmpl
Y3Rfc2hvdyhzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUpOwotICAgIGV2YXNfb2JqZWN0X3Bhc3Nf
ZXZlbnRzX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHRydWUpOwogCiAgICAgc21hcnRE
YXRhLT5ldmVudHNfcmVjdCA9IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9hZGQoc21hcnREYXRhLT5i
YXNlLmV2YXMpOwogICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChzbWFydERhdGEtPmV2ZW50c19y
ZWN0LCAwLCAwLCAwLCAwKTsKQEAgLTk5OCw5ICsxMDA0LDI0IEBAIHN0YXRpYyB2b2lkIF9ld2tf
dmlld19zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQgdywgRXZh
c19Db29yCiAKICAgICAvLyB0aGVzZSBzaG91bGQgYmUgcXVldWVkIGFuZCBwcm9jZXNzZWQgaW4g
Y2FsY3VsYXRlIGFzIHdlbGwhCiAgICAgZXZhc19vYmplY3RfcmVzaXplKHNtYXJ0RGF0YS0+YmFj
a2luZ19zdG9yZSwgdywgaCk7CisgICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9zZXQoc21hcnRE
YXRhLT5iYWNraW5nX3N0b3JlLCB3LCBoKTsKIAogICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5zaXpl
ID0gdHJ1ZTsKICAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzbWFydERhdGEpOworCisgICAg
aWYgKHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPCBzdGQ6Om51bWVyaWNf
bGltaXRzPGZsb2F0Pjo6ZXBzaWxvbigpKSB7CisgICAgICAgIEV2YXNfT2JqZWN0KiBjbGlwID0g
ZXZhc19vYmplY3RfY2xpcF9nZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlKTsKKyAgICAgICAg
RXZhc19Db29yZCB4LCB5LCBjb250ZW50V2lkdGgsIGNvbnRlbnRIZWlnaHQ7CisgICAgICAgIGV2
YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgMCwgMCwg
dywgaCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzbWFydERhdGEtPmJhY2tp
bmdfc3RvcmUsICZ4LCAmeSwgMCwgMCk7CisgICAgICAgIGV2YXNfb2JqZWN0X21vdmUoY2xpcCwg
eCwgeSk7CisgICAgICAgIGV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChzbWFydERhdGEtPm1h
aW5fZnJhbWUsICZjb250ZW50V2lkdGgsICZjb250ZW50SGVpZ2h0KTsKKyAgICAgICAgaWYgKHcg
PiBjb250ZW50V2lkdGgpCisgICAgICAgICAgICB3ID0gY29udGVudFdpZHRoOworICAgICAgICBp
ZiAoaCA+IGNvbnRlbnRIZWlnaHQpCisgICAgICAgICAgICBoID0gY29udGVudEhlaWdodDsKKyAg
ICAgICAgZXZhc19vYmplY3RfcmVzaXplKGNsaXAsIHcsIGgpOworICAgIH0KIH0KIAogc3RhdGlj
IHZvaWQgX2V3a192aWV3X3NtYXJ0X21vdmUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29v
cmQgLyp4Ki8sIEV2YXNfQ29vcmQgLyp5Ki8pCkBAIC0xMDEwLDEyICsxMDMxLDIxMiBAQCBzdGF0
aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfbW92ZShFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19D
b29yZCAvKngqLywgRXZhc19DbwogICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNtYXJ0RGF0
YSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfc2NyZWVuX21vdmUodWludDMy
X3QqIGltYWdlLCBzaXplX3QgZGVzdGluYXRpb25YLCBzaXplX3QgZGVzdGluYXRpb25ZLCBzaXpl
X3Qgc291cmNlWCwgc2l6ZV90IHNvdXJjZVksIHNpemVfdCBjb3B5V2lkdGgsIHNpemVfdCBjb3B5
SGVpZ2h0LCBzaXplX3QgaW1hZ2VXaWR0aCkKK3sKKyAgICB1aW50MzJfdCogc291cmNlQmVnaW4g
PSBpbWFnZSArIChpbWFnZVdpZHRoICogc291cmNlWSkgKyBzb3VyY2VYOworICAgIHVpbnQzMl90
KiBkZXN0aW5hdGlvbkJlZ2luID0gaW1hZ2UgKyAoaW1hZ2VXaWR0aCAqIGRlc3RpbmF0aW9uWSkg
KyBkZXN0aW5hdGlvblg7CisKKyAgICBzaXplX3QgY29weUxlbmd0aCA9IGNvcHlXaWR0aCAqIDQ7
CisKKyAgICBpbnQgbW92ZUxpbmVVcERvd247CisgICAgaW50IHN0YXJ0SGVpZ2h0OworCisgICAg
aWYgKHNvdXJjZVkgPj0gZGVzdGluYXRpb25ZKSB7CisgICAgICAgIHN0YXJ0SGVpZ2h0ID0gMDsK
KyAgICAgICAgbW92ZUxpbmVVcERvd24gPSAxOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXJ0
SGVpZ2h0ID0gY29weUhlaWdodCAtIDE7CisgICAgICAgIG1vdmVMaW5lVXBEb3duID0gLTE7Cisg
ICAgfQorCisgICAgdWludDMyX3QqIHNvdXJjZSwgKiBkZXN0aW5hdGlvbjsKKyAgICBpZiAoKGRl
c3RpbmF0aW9uWCA+IHNvdXJjZVggJiYgZGVzdGluYXRpb25YIDwgc291cmNlWCArIGNvcHlXaWR0
aCkKKyAgICAgICAgfHwgKGRlc3RpbmF0aW9uWCA8IHNvdXJjZVggJiYgZGVzdGluYXRpb25YICsg
Y29weVdpZHRoID4gc291cmNlWCkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
b3B5SGVpZ2h0OyArK2ksIHN0YXJ0SGVpZ2h0ICs9IG1vdmVMaW5lVXBEb3duKSB7CisgICAgICAg
ICAgICBzb3VyY2UgPSBzb3VyY2VCZWdpbiArIChpbWFnZVdpZHRoICogc3RhcnRIZWlnaHQpOwor
ICAgICAgICAgICAgZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbkJlZ2luICsgKGltYWdlV2lkdGgg
KiBzdGFydEhlaWdodCk7CisgICAgICAgICAgICBtZW1tb3ZlKGRlc3RpbmF0aW9uLCBzb3VyY2Us
IGNvcHlMZW5ndGgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb3B5SGVpZ2h0OyArK2ksIHN0YXJ0SGVpZ2h0ICs9IG1vdmVMaW5lVXBE
b3duKSB7CisgICAgICAgICAgICBzb3VyY2UgPSBzb3VyY2VCZWdpbiArIChpbWFnZVdpZHRoICog
c3RhcnRIZWlnaHQpOworICAgICAgICAgICAgZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbkJlZ2lu
ICsgKGltYWdlV2lkdGggKiBzdGFydEhlaWdodCk7CisgICAgICAgICAgICBtZW1jcHkoZGVzdGlu
YXRpb24sIHNvdXJjZSwgY29weUxlbmd0aCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRp
YyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfc2Nyb2xsX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0
YSogc21hcnREYXRhLCB2b2lkKiBwaXhlbHMsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQg
aGVpZ2h0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHJlY3RUb1Njcm9sbCkKK3sKKyAgICBpbnQgc2Nyb2xsWCA9IHJlY3RUb1Nj
cm9sbC54KCk7CisgICAgaW50IHNjcm9sbFkgPSByZWN0VG9TY3JvbGwueSgpOworICAgIGludCBz
Y3JvbGxXaWR0aCA9IHJlY3RUb1Njcm9sbC53aWR0aCgpOworICAgIGludCBzY3JvbGxIZWlnaHQg
PSByZWN0VG9TY3JvbGwuaGVpZ2h0KCk7CisKKyAgICBpZiAoYWJzKHNjcm9sbE9mZnNldC53aWR0
aCgpKSA+PSBzY3JvbGxXaWR0aCB8fCBhYnMoc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKSA+PSBzY3Jv
bGxIZWlnaHQpIHsKKyAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9hZGQoc21hcnREYXRhLT5fcHJp
diwgc2Nyb2xsWCwgc2Nyb2xsWSwgc2Nyb2xsV2lkdGgsIHNjcm9sbEhlaWdodCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc2Nyb2xsWCA8IDApIHsKKyAgICAgICAgc2Nyb2xs
V2lkdGggKz0gc2Nyb2xsWDsKKyAgICAgICAgc2Nyb2xsWCA9IDA7CisgICAgfQorICAgIGlmIChz
Y3JvbGxZIDwgMCkgeworICAgICAgICBzY3JvbGxIZWlnaHQgKz0gc2Nyb2xsWTsKKyAgICAgICAg
c2Nyb2xsWSA9IDA7CisgICAgfQorCisgICAgaWYgKHNjcm9sbFggKyBzY3JvbGxXaWR0aCA+IHdp
ZHRoKQorICAgICAgICBzY3JvbGxXaWR0aCA9IHdpZHRoIC0gc2Nyb2xsWDsKKyAgICBpZiAoc2Ny
b2xsWSArIHNjcm9sbEhlaWdodCA+IGhlaWdodCkKKyAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gaGVp
Z2h0IC0gc2Nyb2xsWTsKKworICAgIGlmIChzY3JvbGxXaWR0aCA8PSAwIHx8IHNjcm9sbEhlaWdo
dCA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgc291cmNlWCA9IHNjcm9sbE9mZnNl
dC53aWR0aCgpIDwgMCA/IGFicyhzY3JvbGxPZmZzZXQud2lkdGgoKSkgOiAwOworICAgIGludCBz
b3VyY2VZID0gc2Nyb2xsT2Zmc2V0LmhlaWdodCgpIDwgMCA/IGFicyhzY3JvbGxPZmZzZXQuaGVp
Z2h0KCkpIDogMDsKKyAgICBpbnQgZGVzdGluYXRpb25YID0gc2Nyb2xsT2Zmc2V0LndpZHRoKCkg
PCAwID8gMCA6IHNjcm9sbE9mZnNldC53aWR0aCgpOworICAgIGludCBkZXN0aW5hdGlvblkgPSBz
Y3JvbGxPZmZzZXQuaGVpZ2h0KCkgPCAwID8gMCA6IHNjcm9sbE9mZnNldC5oZWlnaHQoKTsKKyAg
ICBpbnQgY29weVdpZHRoID0gc2Nyb2xsV2lkdGggLSBhYnMoc2Nyb2xsT2Zmc2V0LndpZHRoKCkp
OworICAgIGludCBjb3B5SGVpZ2h0ID0gc2Nyb2xsSGVpZ2h0IC0gYWJzKHNjcm9sbE9mZnNldC5o
ZWlnaHQoKSk7CisgICAgaWYgKHNjcm9sbE9mZnNldC53aWR0aCgpIHx8IHNjcm9sbE9mZnNldC5o
ZWlnaHQoKSkgeworICAgICAgICBfZXdrX3ZpZXdfc2NyZWVuX21vdmUoc3RhdGljX2Nhc3Q8dWlu
dDMyX3QqPihwaXhlbHMpLCBkZXN0aW5hdGlvblgsIGRlc3RpbmF0aW9uWSwgc291cmNlWCwgc291
cmNlWSwgY29weVdpZHRoLCBjb3B5SGVpZ2h0LCB3aWR0aCk7CisgICAgICAgIGV2YXNfb2JqZWN0
X2ltYWdlX2RhdGFfdXBkYXRlX2FkZChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIGRlc3RpbmF0
aW9uWCwgZGVzdGluYXRpb25ZLCBjb3B5V2lkdGgsIGNvcHlIZWlnaHQpOworICAgIH0KKworICAg
IEVpbmFfUmVjdGFuZ2xlIHZlcnRpY2FsVXBkYXRlOworICAgIHZlcnRpY2FsVXBkYXRlLnggPSBk
ZXN0aW5hdGlvblggPyAwIDogY29weVdpZHRoIC0gMTsKKyAgICB2ZXJ0aWNhbFVwZGF0ZS55ID0g
MDsKKyAgICB2ZXJ0aWNhbFVwZGF0ZS53ID0gYWJzKHNjcm9sbE9mZnNldC53aWR0aCgpKTsKKyAg
ICB2ZXJ0aWNhbFVwZGF0ZS5oID0gc2Nyb2xsSGVpZ2h0OworICAgIGlmICh2ZXJ0aWNhbFVwZGF0
ZS53ICYmIHZlcnRpY2FsVXBkYXRlLmgpCisgICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNt
YXJ0RGF0YS0+X3ByaXYsIHZlcnRpY2FsVXBkYXRlLngsIHZlcnRpY2FsVXBkYXRlLnksIHZlcnRp
Y2FsVXBkYXRlLncsIHZlcnRpY2FsVXBkYXRlLmgpOworCisgICAgRWluYV9SZWN0YW5nbGUgaG9y
aXpvbnRhbFVwZGF0ZTsKKyAgICBob3Jpem9udGFsVXBkYXRlLnggPSBkZXN0aW5hdGlvblg7Cisg
ICAgaG9yaXpvbnRhbFVwZGF0ZS55ID0gZGVzdGluYXRpb25ZID8gMCA6IGNvcHlIZWlnaHQgLSAx
OworICAgIGhvcml6b250YWxVcGRhdGUudyA9IGNvcHlXaWR0aDsKKyAgICBob3Jpem9udGFsVXBk
YXRlLmggPSBhYnMoc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKTsKKyAgICBpZiAoaG9yaXpvbnRhbFVw
ZGF0ZS53ICYmIGhvcml6b250YWxVcGRhdGUuaCkKKyAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9h
ZGQoc21hcnREYXRhLT5fcHJpdiwgaG9yaXpvbnRhbFVwZGF0ZS54LCBob3Jpem9udGFsVXBkYXRl
LnksIGhvcml6b250YWxVcGRhdGUudywgaG9yaXpvbnRhbFVwZGF0ZS5oKTsKK30KKworc3RhdGlj
IHZvaWQgX2V3a192aWV3X3NtYXJ0X3Njcm9sbHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRh
KiBzbWFydERhdGEpCit7CisgICAgRXZhc19Db29yZCBpbWFnZVdpZHRoLCBpbWFnZUhlaWdodDsK
KyAgICBjb25zdCBXVEY6OlZlY3RvcjxXZWJDb3JlOjpJbnRTaXplPiYgc2Nyb2xsT2Zmc2V0cyA9
IHNtYXJ0RGF0YS0+X3ByaXYtPm1fc2Nyb2xsT2Zmc2V0czsKKyAgICBjb25zdCBXVEY6OlZlY3Rv
cjxXZWJDb3JlOjpJbnRSZWN0PiYgcmVjdHNUb1Njcm9sbCA9IHNtYXJ0RGF0YS0+X3ByaXYtPm1f
cmVjdHNUb1Njcm9sbDsKKworICAgIGlmICghc2Nyb2xsT2Zmc2V0cy5zaXplKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfZ2V0KHNtYXJ0RGF0YS0+YmFj
a2luZ19zdG9yZSwgJmltYWdlV2lkdGgsICZpbWFnZUhlaWdodCk7CisKKyAgICBXZWJDb3JlOjpJ
bnRSZWN0IHJlY3RUb1Njcm9sbCgwLCAwLCBpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCk7CisgICAg
V2ViQ29yZTo6SW50U2l6ZSBzY3JvbGxPZmZzZXQ7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzY3JvbGxPZmZzZXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHJlY3RUb1Njcm9sbC5pbnRl
cnNlY3QocmVjdHNUb1Njcm9sbFtpXSk7CisgICAgICAgIHNjcm9sbE9mZnNldCArPSBzY3JvbGxP
ZmZzZXRzW2ldOworICAgIH0KKworICAgIGlmIChzY3JvbGxPZmZzZXQuaXNaZXJvKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIHZvaWQqIHBpeGVscyA9IGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFf
Z2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgMSk7CisgICAgX2V3a192aWV3X3Njcm9sbF9w
cm9jZXNzKHNtYXJ0RGF0YSwgcGl4ZWxzLCBpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCwgc2Nyb2xs
T2Zmc2V0LCByZWN0VG9TY3JvbGwpOworCisgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9zZXQo
c21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBwaXhlbHMpOworCisgICAgcmV0dXJuOworfQorCitz
dGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9yZXBhaW50c19wcm9jZXNzKEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKK3sKKyAgICBpZiAoc21hcnREYXRhLT5hbmltYXRlZF96
b29tLnpvb20uY3VycmVudCA8IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjplcHNpbG9uKCkp
IHsKKyAgICAgICAgRXZhc19PYmplY3QqIGNsaXAgPSBldmFzX29iamVjdF9jbGlwX2dldChzbWFy
dERhdGEtPmJhY2tpbmdfc3RvcmUpOworCisgICAgICAgIC8vIHJlc2V0IGVmZmVjdHMgb2Ygem9v
bV93ZWFrX3NldCgpCisgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KHNtYXJ0RGF0
YS0+YmFja2luZ19zdG9yZSwgMCwgMCwgc21hcnREYXRhLT52aWV3LncsIHNtYXJ0RGF0YS0+dmll
dy5oKTsKKyAgICAgICAgZXZhc19vYmplY3RfbW92ZShjbGlwLCBzbWFydERhdGEtPnZpZXcueCwg
c21hcnREYXRhLT52aWV3LnkpOworCisgICAgICAgIEV2YXNfQ29vcmQgd2lkdGggPSBzbWFydERh
dGEtPnZpZXcudzsKKyAgICAgICAgRXZhc19Db29yZCBoZWlnaHQgPSBzbWFydERhdGEtPnZpZXcu
aDsKKworICAgICAgICBFdmFzX0Nvb3JkIGNlbnRlcldpZHRoLCBjZW50ZXJIZWlnaHQ7CisgICAg
ICAgIGV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZj
ZW50ZXJXaWR0aCwgJmNlbnRlckhlaWdodCk7CisgICAgICAgIGlmICh3aWR0aCA+IGNlbnRlcldp
ZHRoKQorICAgICAgICAgICAgd2lkdGggPSBjZW50ZXJXaWR0aDsKKworICAgICAgICBpZiAoaGVp
Z2h0ID4gY2VudGVySGVpZ2h0KQorICAgICAgICAgICAgaGVpZ2h0ID0gY2VudGVySGVpZ2h0Owor
CisgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShjbGlwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9
CisKKyAgICBFdmFzX0Nvb3JkIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0OworICAgIGV2YXNfb2Jq
ZWN0X2ltYWdlX3NpemVfZ2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgJmltYWdlV2lkdGgs
ICZpbWFnZUhlaWdodCk7CisKKyAgICBFaW5hX1RpbGVyKiB0aWxlciA9IGVpbmFfdGlsZXJfbmV3
KGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KTsKKyAgICBpZiAoIXRpbGVyKSB7CisgICAgICAgIEVS
UigiY291bGQgbm90IGNyZWF0ZSB0aWxlciAlZHglZCIsIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGV3a192aWV3X2xheW91dF9p
Zl9uZWVkZWRfcmVjdXJzaXZlKHNtYXJ0RGF0YS0+X3ByaXYpOworCisgICAgc2l6ZV90IGNvdW50
OworICAgIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBwYWludFJlcXVlc3QgPSBld2tfdmlld19yZXBh
aW50c19wb3Aoc21hcnREYXRhLT5fcHJpdiwgJmNvdW50KTsKKyAgICBjb25zdCBFaW5hX1JlY3Rh
bmdsZSogcGFpbnRSZXF1ZXN0RW5kID0gcGFpbnRSZXF1ZXN0ICsgY291bnQ7CisgICAgZm9yICg7
IHBhaW50UmVxdWVzdCA8IHBhaW50UmVxdWVzdEVuZDsgcGFpbnRSZXF1ZXN0KyspCisgICAgICAg
IGVpbmFfdGlsZXJfcmVjdF9hZGQodGlsZXIsIHBhaW50UmVxdWVzdCk7CisKKyAgICBFaW5hX0l0
ZXJhdG9yKiBpdGVyYXRvciA9IGVpbmFfdGlsZXJfaXRlcmF0b3JfbmV3KHRpbGVyKTsKKyAgICBp
ZiAoIWl0ZXJhdG9yKSB7CisgICAgICAgIEVSUigiY291bGQgbm90IGdldCBpdGVyYXRvciBmb3Ig
dGlsZXIiKTsKKyAgICAgICAgZWluYV90aWxlcl9mcmVlKHRpbGVyKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIFdlYkNv
cmU6OkZyYW1lKiBtYWluRnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoc21hcnREYXRhLT5t
YWluX2ZyYW1lKTsKKyAgICBpZiAobWFpbkZyYW1lICYmIG1haW5GcmFtZS0+dGlsZWRCYWNraW5n
U3RvcmUoKSkKKyAgICAgICAgbWFpbkZyYW1lLT50aWxlZEJhY2tpbmdTdG9yZSgpLT5jb3Zlcldp
dGhUaWxlc0lmTmVlZGVkKCk7CisjZW5kaWYKKworICAgIEV3a19QYWludF9Db250ZXh0KiBjb250
ZXh0ID0gZXdrX3BhaW50X2NvbnRleHRfZnJvbV9pbWFnZV9uZXcoc21hcnREYXRhLT5iYWNraW5n
X3N0b3JlKTsKKyAgICBld2tfcGFpbnRfY29udGV4dF9zYXZlKGNvbnRleHQpOworCisgICAgRWlu
YV9SZWN0YW5nbGUqIHJlY3Q7CisgICAgRUlOQV9JVEVSQVRPUl9GT1JFQUNIKGl0ZXJhdG9yLCBy
ZWN0KSB7CisgICAgICAgIGV3a192aWV3X3BhaW50KHNtYXJ0RGF0YS0+X3ByaXYsIGNvbnRleHQs
IHJlY3QpOworICAgICAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQoc21hcnRE
YXRhLT5iYWNraW5nX3N0b3JlLCByZWN0LT54LCByZWN0LT55LCByZWN0LT53LCByZWN0LT5oKTsK
KyAgICB9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2Ug
PSBFV0tQcml2YXRlOjpjb3JlUGFnZShzbWFydERhdGEtPnNlbGYpOworICAgIGlmIChwYWdlKSB7
CisgICAgICAgIFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBwYWdl
LT5pbnNwZWN0b3JDb250cm9sbGVyKCk7CisgICAgICAgIGlmIChjb250cm9sbGVyLT5oaWdobGln
aHRlZE5vZGUoKSkKKyAgICAgICAgICAgIGNvbnRyb2xsZXItPmRyYXdIaWdobGlnaHQoKmNvbnRl
eHQtPmdyYXBoaWNDb250ZXh0KTsKKyAgICB9CisjZW5kaWYKKworICAgIGV3a19wYWludF9jb250
ZXh0X3Jlc3RvcmUoY29udGV4dCk7CisgICAgZXdrX3BhaW50X2NvbnRleHRfZnJlZShjb250ZXh0
KTsKKworICAgIGVpbmFfdGlsZXJfZnJlZSh0aWxlcik7CisgICAgZWluYV9pdGVyYXRvcl9mcmVl
KGl0ZXJhdG9yKTsKKworICAgIHJldHVybiB0cnVlOworfQorCiBzdGF0aWMgdm9pZCBfZXdrX3Zp
ZXdfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewogICAgIEVXS19WSUVX
X1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0
RGF0YSwgcHJpdik7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5h
cGktPmNvbnRlbnRzX3Jlc2l6ZSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21h
cnREYXRhLT5hcGktPnNjcm9sbHNfcHJvY2Vzcyk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oc21hcnREYXRhLT5hcGktPnJlcGFpbnRzX3Byb2Nlc3MpOwogICAgIEV2YXNfQ29vcmQg
eCwgeSwgd2lkdGgsIGhlaWdodDsKIApAQCAtMTA1OSw4ICsxMjgwLDcgQEAgc3RhdGljIHZvaWQg
X2V3a192aWV3X3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCogZXdrVmlldykKICAgICB9CiAg
ICAgc21hcnREYXRhLT5jaGFuZ2VkLnBvc2l0aW9uID0gZmFsc2U7CiAKLSAgICBpZiAoIXNtYXJ0
RGF0YS0+YXBpLT5zY3JvbGxzX3Byb2Nlc3Moc21hcnREYXRhKSkKLSAgICAgICAgRVJSKCJmYWls
ZWQgdG8gcHJvY2VzcyBzY3JvbGxzLiIpOworICAgIHNtYXJ0RGF0YS0+YXBpLT5zY3JvbGxzX3By
b2Nlc3Moc21hcnREYXRhKTsKICAgICBfZXdrX3ZpZXdfc2Nyb2xsc19mbHVzaChwcml2KTsKIAog
ICAgIGlmICghc21hcnREYXRhLT5hcGktPnJlcGFpbnRzX3Byb2Nlc3Moc21hcnREYXRhKSkKQEAg
LTExODcsNiArMTQwNyw0OCBAQCBzdGF0aWMgZmxvYXQgX2V3a192aWV3X3pvb21fYW5pbWF0ZWRf
Y3VycmVudChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYpCiAgICAgICAgICAgICArIHByaXYt
PmFuaW1hdGVkWm9vbS56b29tLnN0YXJ0KTsKIH0KIAorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Zp
ZXdfc21hcnRfem9vbV93ZWFrX3NldChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGZs
b2F0IHpvb20sIEV2YXNfQ29vcmQgY2VudGVyWCwgRXZhc19Db29yZCBjZW50ZXJZKQoreworICAg
IGZsb2F0IHNjYWxlID0gem9vbSAvIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0
OworICAgIEV2YXNfQ29vcmQgdyA9IHNtYXJ0RGF0YS0+dmlldy53ICogc2NhbGU7CisgICAgRXZh
c19Db29yZCBoID0gc21hcnREYXRhLT52aWV3LmggKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIGR4
LCBkeSwgY29udGVudFdpZHRoLCBjb250ZW50SGVpZ2h0OworICAgIEV2YXNfT2JqZWN0KiBjbGlw
ID0gZXZhc19vYmplY3RfY2xpcF9nZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlKTsKKworICAg
IGV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZjb250
ZW50V2lkdGgsICZjb250ZW50SGVpZ2h0KTsKKyAgICBpZiAoc21hcnREYXRhLT52aWV3LncgPiAw
ICYmIHNtYXJ0RGF0YS0+dmlldy5oID4gMCkgeworICAgICAgICBkeCA9ICh3ICogKHNtYXJ0RGF0
YS0+dmlldy53IC0gY2VudGVyWCkpIC8gc21hcnREYXRhLT52aWV3Lnc7CisgICAgICAgIGR5ID0g
KGggKiAoc21hcnREYXRhLT52aWV3LmggLSBjZW50ZXJZKSkgLyBzbWFydERhdGEtPnZpZXcuaDsK
KyAgICB9IGVsc2UgeworICAgICAgICBkeCA9IDA7CisgICAgICAgIGR5ID0gMDsKKyAgICB9CisK
KyAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUs
IGNlbnRlclggKyBkeCwgY2VudGVyWSArIGR5LCB3LCBoKTsKKworICAgIGlmIChzbWFydERhdGEt
PnZpZXcudyA+IDAgJiYgc21hcnREYXRhLT52aWV3LmggPiAwKSB7CisgICAgICAgIGR4ID0gKChz
bWFydERhdGEtPnZpZXcudyAtIHcpICogY2VudGVyWCkgLyBzbWFydERhdGEtPnZpZXcudzsKKyAg
ICAgICAgZHkgPSAoKHNtYXJ0RGF0YS0+dmlldy5oIC0gaCkgKiBjZW50ZXJZKSAvIHNtYXJ0RGF0
YS0+dmlldy5oOworICAgIH0gZWxzZSB7CisgICAgICAgIGR4ID0gMDsKKyAgICAgICAgZHkgPSAw
OworICAgIH0KKyAgICBldmFzX29iamVjdF9tb3ZlKGNsaXAsIHNtYXJ0RGF0YS0+dmlldy54ICsg
ZHgsIHNtYXJ0RGF0YS0+dmlldy55ICsgZHkpOworCisgICAgaWYgKGNvbnRlbnRXaWR0aCA8IHNt
YXJ0RGF0YS0+dmlldy53KQorICAgICAgICB3ID0gY29udGVudFdpZHRoICogc2NhbGU7CisgICAg
aWYgKGNvbnRlbnRIZWlnaHQgPCBzbWFydERhdGEtPnZpZXcuaCkKKyAgICAgICAgaCA9IGNvbnRl
bnRIZWlnaHQgKiBzY2FsZTsKKyAgICBldmFzX29iamVjdF9yZXNpemUoY2xpcCwgdywgaCk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3pvb21f
d2Vha19zbW9vdGhfc2NhbGVfc2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgRWlu
YV9Cb29sIHNtb290aF9zY2FsZSkKK3sKKyAgICBldmFzX29iamVjdF9pbWFnZV9zbW9vdGhfc2Nh
bGVfc2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgc21vb3RoX3NjYWxlKTsKK30KKwogc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfem9vbV9hbmltYXRvcl9jYih2b2lkKiBkYXRhKQogewog
ICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3
X1NtYXJ0X0RhdGEqPihkYXRhKTsKQEAgLTEyODgsNyArMTU1MCwxMSBAQCBFaW5hX0Jvb2wgZXdr
X3ZpZXdfYmFzZV9zbWFydF9zZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MqIGFwaSkKICAgICBhcGkt
PnNjLmNhbGxiYWNrcyA9IF9ld2tfdmlld19jYWxsYmFja19uYW1lczsKIAogICAgIGFwaS0+Y29u
dGVudHNfcmVzaXplID0gX2V3a192aWV3X3NtYXJ0X2NvbnRlbnRzX3Jlc2l6ZTsKKyAgICBhcGkt
PnNjcm9sbHNfcHJvY2VzcyA9IF9ld2tfdmlld19zbWFydF9zY3JvbGxzX3Byb2Nlc3M7CisgICAg
YXBpLT5yZXBhaW50c19wcm9jZXNzID0gX2V3a192aWV3X3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3M7
CiAgICAgYXBpLT56b29tX3NldCA9IF9ld2tfdmlld19zbWFydF96b29tX3NldDsKKyAgICBhcGkt
Pnpvb21fd2Vha19zZXQgPSBfZXdrX3ZpZXdfc21hcnRfem9vbV93ZWFrX3NldDsKKyAgICBhcGkt
Pnpvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0ID0gX2V3a192aWV3X3NtYXJ0X3pvb21fd2Vha19z
bW9vdGhfc2NhbGVfc2V0OwogICAgIGFwaS0+Zmx1c2ggPSBfZXdrX3ZpZXdfc21hcnRfZmx1c2g7
CiAgICAgYXBpLT5wcmVfcmVuZGVyX3JlZ2lvbiA9IF9ld2tfdmlld19zbWFydF9wcmVfcmVuZGVy
X3JlZ2lvbjsKICAgICBhcGktPnByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzID0gX2V3a192aWV3
X3NtYXJ0X3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzOwpAQCAtMTMxNiw2ICsxNTgyLDI5IEBA
IEVpbmFfQm9vbCBld2tfdmlld19iYXNlX3NtYXJ0X3NldChFd2tfVmlld19TbWFydF9DbGFzcyog
YXBpKQogICAgIHJldHVybiB0cnVlOwogfQogCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2luZ2xlX3Nt
YXJ0X3NldChFd2tfVmlld19TbWFydF9DbGFzcyogYXBpKQoreworICAgIHJldHVybiBld2tfdmll
d19iYXNlX3NtYXJ0X3NldChhcGkpOworfQorCitzdGF0aWMgaW5saW5lIEV2YXNfU21hcnQqIF9l
d2tfdmlld19zaW5nbGVfc21hcnRfY2xhc3NfbmV3KHZvaWQpCit7CisgICAgc3RhdGljIEV3a19W
aWV3X1NtYXJ0X0NsYXNzIGFwaSA9IEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9WRVJT
SU9OKGV3a1ZpZXdTaW5nbGVOYW1lKTsKKyAgICBzdGF0aWMgRXZhc19TbWFydCogc21hcnQgPSAw
OworCisgICAgaWYgKEVJTkFfVU5MSUtFTFkoIXNtYXJ0KSkgeworICAgICAgICBld2tfdmlld19i
YXNlX3NtYXJ0X3NldCgmYXBpKTsKKyAgICAgICAgc21hcnQgPSBldmFzX3NtYXJ0X2NsYXNzX25l
dygmYXBpLnNjKTsKKyAgICB9CisKKyAgICByZXR1cm4gc21hcnQ7Cit9CisKK0V2YXNfT2JqZWN0
KiBld2tfdmlld19zaW5nbGVfYWRkKEV2YXMqIGNhbnZhcykKK3sKKyAgICByZXR1cm4gZXZhc19v
YmplY3Rfc21hcnRfYWRkKGNhbnZhcywgX2V3a192aWV3X3NpbmdsZV9zbWFydF9jbGFzc19uZXco
KSk7Cit9CisKIHZvaWQgZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfc2V0KEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKICAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CkBAIC0xNDI0LDcg
KzE3MTMsNiBAQCB2b2lkIGV3a192aWV3X2JnX2NvbG9yX3NldChFdmFzX09iamVjdCogZXdrVmll
dywgaW50IHJlZCwgaW50IGdyZWVuLCBpbnQgYmx1ZSwgaQogewogICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihzbWFydERhdGEtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c21hcnREYXRhLT5hcGktPmJnX2NvbG9yX3NldCk7CiAKICAgICBpZiAoYWxwaGEgPCAwKSB7CiAg
ICAgICAgIFdBUk4oIkFscGhhIGxlc3MgdGhhbiB6ZXJvICglZCkuIiwgYWxwaGEpOwpAQCAtMTQ1
Myw3ICsxNzQxLDcgQEAgdm9pZCBld2tfdmlld19iZ19jb2xvcl9zZXQoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIGludCByZWQsIGludCBncmVlbiwgaW50IGJsdWUsIGkKICAgICBzbWFydERhdGEtPmJn
X2NvbG9yLmIgPSBibHVlOwogICAgIHNtYXJ0RGF0YS0+YmdfY29sb3IuYSA9IGFscGhhOwogCi0g
ICAgc21hcnREYXRhLT5hcGktPmJnX2NvbG9yX3NldChzbWFydERhdGEsIHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9hbHBoYV9zZXQoc21hcnREYXRhLT5i
YWNraW5nX3N0b3JlLCBhbHBoYSA8IDI1NSk7CiAKICAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZp
ZXcgPSBzbWFydERhdGEtPl9wcml2LT5tYWluRnJhbWUtPnZpZXcoKTsKICAgICBpZiAodmlldykg
ewpAQCAtMTkyNiw3ICsyMjE0LDYgQEAgRWluYV9Cb29sIGV3a192aWV3X3ByZV9yZW5kZXJfcmVn
aW9uKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ28KICAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgZmFsc2UpOwogICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIGZhbHNlKTsKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGktPnByZV9yZW5kZXJf
cmVnaW9uLCBmYWxzZSk7Ci0gICAgZmxvYXQgY3VycmVudFpvb207CiAgICAgRXZhc19Db29yZCBj
b250ZW50c1dpZHRoLCBjb250ZW50c0hlaWdodDsKIAogICAgIC8qIFdoZW4gZG9pbmcgYW5pbWF0
ZWQgem9vbSBpdCdzIG5vdCBwb3NzaWJsZSB0byBjYWxsIHByZS1yZW5kZXIgc2luY2UgaXQKQEAg
LTE5MzUsMTAgKzIyMjIsMTAgQEAgRWluYV9Cb29sIGV3a192aWV3X3ByZV9yZW5kZXJfcmVnaW9u
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ28KICAgICBpZiAocHJp
di0+YW5pbWF0ZWRab29tLmFuaW1hdG9yKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBj
dXJyZW50Wm9vbSA9IGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFt
ZSk7Ci0KLSAgICBpZiAoY3VycmVudFpvb20gPCAwLjAwMDAxKQorICAgIGZsb2F0IGN1cnJlbnRa
b29tID0gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKKyAg
ICBpZiAoY3VycmVudFpvb20gPCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6ZXBzaWxvbigp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBpZiAoIWV3a19mcmFtZV9jb250ZW50c19z
aXplX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZjb250ZW50c1dpZHRoLCAmY29udGVudHNI
ZWlnaHQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTI3MjYsMTggKzMwMTMsNiBAQCBj
b25zdCBFaW5hX1JlY3RhbmdsZSogZXdrX3ZpZXdfcmVwYWludHNfcG9wKEV3a19WaWV3X1ByaXZh
dGVfRGF0YSogcHJpdiwgc2l6ZV90KgogICAgIHJldHVybiBwcml2LT5yZXBhaW50cy5hcnJheTsK
IH0KIAotY29uc3QgVmVjdG9yPFdlYkNvcmU6OkludFNpemU+JiBld2tfdmlld19zY3JvbGxfb2Zm
c2V0c19nZXQoY29uc3QgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2KQotewotICAgIEFTU0VS
VChwcml2KTsKLSAgICByZXR1cm4gcHJpdi0+bV9zY3JvbGxPZmZzZXRzOwotfQotCi1jb25zdCBW
ZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4mIGV3a192aWV3X3Njcm9sbF9yZWN0c19nZXQoY29uc3Qg
RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2KQotewotICAgIEFTU0VSVChwcml2KTsKLSAgICBy
ZXR1cm4gcHJpdi0+bV9yZWN0c1RvU2Nyb2xsOwotfQotCiAvKioKICAqIEFkZCBhIG5ldyByZXBh
aW50IHJlcXVlc3QgdG8gcXVldWUuCiAgKgpAQCAtMjc4Miw4ICszMDU3LDggQEAgdm9pZCBld2tf
dmlld19zY3JvbGxzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogewog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YSk7CiAgICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7Ci0gICAgaWYgKCFzbWFydERhdGEt
PmFwaS0+c2Nyb2xsc19wcm9jZXNzKHNtYXJ0RGF0YSkpCi0gICAgICAgIEVSUigiZmFpbGVkIHRv
IHByb2Nlc3Mgc2Nyb2xscy4iKTsKKworICAgIHNtYXJ0RGF0YS0+YXBpLT5zY3JvbGxzX3Byb2Nl
c3Moc21hcnREYXRhKTsKICAgICBfZXdrX3ZpZXdfc2Nyb2xsc19mbHVzaChwcml2KTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmggYi9Tb3VyY2UvV2Vi
S2l0L2VmbC9ld2svZXdrX3ZpZXcuaAppbmRleCA5YzkwODg2N2E2OGNmZDYwZTVlMzcyMjk1YzVj
NzcwMDA3Y2FmNTgyLi5mOWNmYmE3YzQ1YzMxNDdmNzdhOThiY2ZhZDE4YTQ0NWEyYjE3YjA1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuaApAQCAtMTUzLDE1ICsxNTMsMTIgQEAgc3RydWN0IF9F
d2tfVmlld19TbWFydF9DbGFzcyB7CiAKICAgICBFdmFzX09iamVjdCAqKCp3aW5kb3dfY3JlYXRl
KShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgRWluYV9Cb29sIGphdmFzY3JpcHQsIGNvbnN0IEV3
a19XaW5kb3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcyk7IC8qKjwgY3JlYXRlcyBhIG5ldyB3
aW5kb3csIHJlcXVlc3RlZCBieSB3ZWJraXQgKi8KICAgICB2b2lkICgqd2luZG93X2Nsb3NlKShF
d2tfVmlld19TbWFydF9EYXRhICpzZCk7IC8qKjwgY2xvc2VzIGEgd2luZG93ICovCi0gICAgLy8g
aG9va3MgdG8gYWxsb3cgZGlmZmVyZW50IGJhY2tpbmcgc3RvcmVzCi0gICAgRXZhc19PYmplY3Qg
KigqYmFja2luZ19zdG9yZV9hZGQpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKTsgLyoqPCBtdXN0
IGJlIGRlZmluZWQgKi8KLSAgICBFaW5hX0Jvb2wgKCpzY3JvbGxzX3Byb2Nlc3MpKEV3a19WaWV3
X1NtYXJ0X0RhdGEgKnNkKTsgLyoqPCBtdXN0IGJlIGRlZmluZWQgKi8KKyAgICB2b2lkICgqc2Ny
b2xsc19wcm9jZXNzKShFd2tfVmlld19TbWFydF9EYXRhICpzZCk7IC8qKjwgbXVzdCBiZSBkZWZp
bmVkICovCiAgICAgRWluYV9Cb29sICgqcmVwYWludHNfcHJvY2VzcykoRXdrX1ZpZXdfU21hcnRf
RGF0YSAqc2QpOyAvKio8IG11c3QgYmUgZGVmaW5lZCAqLwogICAgIEVpbmFfQm9vbCAoKmNvbnRl
bnRzX3Jlc2l6ZSkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIGludCB3LCBpbnQgaCk7CiAgICAg
RWluYV9Cb29sICgqem9vbV9zZXQpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBmbG9hdCB6b29t
LCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KTsKICAgICBFaW5hX0Jvb2wgKCp6b29tX3dl
YWtfc2V0KShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgZmxvYXQgem9vbSwgRXZhc19Db29yZCBj
eCwgRXZhc19Db29yZCBjeSk7CiAgICAgdm9pZCAoKnpvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0
KShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgRWluYV9Cb29sIHNtb290aF9zY2FsZSk7Ci0gICAg
dm9pZCAoKmJnX2NvbG9yX3NldCkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIHVuc2lnbmVkIGNo
YXIgcmVkLCB1bnNpZ25lZCBjaGFyIGdyZWVuLCB1bnNpZ25lZCBjaGFyIGJsdWUsIHVuc2lnbmVk
IGNoYXIgYWxwaGEpOwogICAgIHZvaWQgKCpmbHVzaCkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2Qp
OwogICAgIEVpbmFfQm9vbCAoKnByZV9yZW5kZXJfcmVnaW9uKShFd2tfVmlld19TbWFydF9EYXRh
ICpzZCwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgdywgRXZhc19Db29y
ZCBoLCBmbG9hdCB6b29tKTsKICAgICBFaW5hX0Jvb2wgKCpwcmVfcmVuZGVyX3JlbGF0aXZlX3Jh
ZGl1cykoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIHVuc2lnbmVkIGludCBuLCBmbG9hdCB6b29t
KTsKQEAgLTIwMyw3ICsyMDAsNyBAQCBzdHJ1Y3QgX0V3a19WaWV3X1NtYXJ0X0NsYXNzIHsKICAq
IFRoZSB2ZXJzaW9uIHlvdSBoYXZlIHRvIHB1dCBpbnRvIHRoZSB2ZXJzaW9uIGZpZWxkCiAgKiBp
biB0aGUgQGEgRXdrX1ZpZXdfU21hcnRfQ2xhc3Mgc3RydWN0dXJlLgogICovCi0jZGVmaW5lIEVX
S19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04gN1VMCisjZGVmaW5lIEVXS19WSUVXX1NNQVJUX0NM
QVNTX1ZFUlNJT04gOFVMCiAKIC8qKgogICogSW5pdGlhbGl6ZXMgYSB3aG9sZSBAYSBFd2tfVmll
d19TbWFydF9DbGFzcyBzdHJ1Y3R1cmUuCkBAIC0yMTUsNyArMjEyLDcgQEAgc3RydWN0IF9Fd2tf
Vmlld19TbWFydF9DbGFzcyB7CiAgKiBAc2VlIEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfVkVS
U0lPTgogICogQHNlZSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVSU0lPTgogICov
Ci0jZGVmaW5lIEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVQoc21hcnRfY2xhc3NfaW5pdCkge3Nt
YXJ0X2NsYXNzX2luaXQsIEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04sIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9CisjZGVmaW5lIEVX
S19WSUVXX1NNQVJUX0NMQVNTX0lOSVQoc21hcnRfY2xhc3NfaW5pdCkge3NtYXJ0X2NsYXNzX2lu
aXQsIEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9CiAKIC8qKgogICogSW5pdGlhbGl6ZXMgdG8gemVy
byBhIHdob2xlIEBhIEV3a19WaWV3X1NtYXJ0X0NsYXNzIHN0cnVjdHVyZS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld19wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX3ZpZXdfcHJpdmF0ZS5oCmluZGV4IDJkZGJjMjQ3NGFiZTJiZDExYjhiZjQ3
YWM4MjE4MTJkMWM1NDliOTYuLmE1Yjg4YWQzMGQwMzkzZmNlNDQwYmRiYjRjMzZmYzgwOTlkNmVk
ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld19wcml2YXRlLmgK
KysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3X3ByaXZhdGUuaApAQCAtMTQ4LDgg
KzE0OCw2IEBAIGJvb2wgZXdrX3ZpZXdfbmVlZF90b3VjaF9ldmVudHNfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0Kik7CiAjZW5kaWYKIAogY29uc3QgRWluYV9SZWN0YW5nbGUqIGV3a192aWV3X3JlcGFp
bnRzX3BvcChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIHNpemVfdCogY291bnQpOwotY29u
c3QgVmVjdG9yPFdlYkNvcmU6OkludFNpemU+JiBld2tfdmlld19zY3JvbGxfb2Zmc2V0c19nZXQo
Y29uc3QgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKik7Ci1jb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50
UmVjdD4mIGV3a192aWV3X3Njcm9sbF9yZWN0c19nZXQoY29uc3QgRXdrX1ZpZXdfUHJpdmF0ZV9E
YXRhKik7CiAKIHZvaWQgZXdrX3ZpZXdfcmVwYWludF9hZGQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRh
KiBwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3aWR0aCwgRXZh
c19Db29yZCBoZWlnaHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdr
X3ZpZXdfc2luZ2xlLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld19zaW5nbGUu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzQ1MTc2MTA0OGQ3NzI4ZjAzZDE3
NWM5NDEzMzI4NDI0YzAwYmQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMzgyICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAx
MCBTYW1zdW5nIEVsZWN0cm9uaWNzCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
ImV3a192aWV3LmgiCi0KLSNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUg
ImV3a19mcmFtZV9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZXdrX3ByaXZhdGUuaCIKLSNpbmNsdWRl
ICJld2tfdmlld19wcml2YXRlLmgiCi0KLSNpbmNsdWRlIDxFY29yZV9FdmFzLmg+Ci0jaW5jbHVk
ZSA8RXZhcy5oPgotI2luY2x1ZGUgPGVpbmFfc2FmZXR5X2NoZWNrcy5oPgotI2luY2x1ZGUgPHN0
cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSNpbmNsdWRlICJJbnNwZWN0b3JDb250
cm9sbGVyLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2VuZGlmCi0KLXN0YXRpYyBFd2tfVmlld19T
bWFydF9DbGFzcyBfcGFyZW50X3NjID0gRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9OVUxMOwot
Ci1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2luZ2xlX29uX2RlbCh2b2lkKiBkYXRhLCBFdmFzKiwg
RXZhc19PYmplY3QqLCB2b2lkKikKLXsKLSAgICBFdmFzX09iamVjdCogY2xpcCA9IChFdmFzX09i
amVjdCopZGF0YTsKLSAgICBldmFzX29iamVjdF9kZWwoY2xpcCk7Ci19Ci0KLXN0YXRpYyB2b2lk
IF9ld2tfdmlld19zaW5nbGVfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQotewotICAg
IEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YTsKLQotICAgIF9wYXJlbnRfc2Muc2MuYWRk
KGV3a1ZpZXcpOwotCi0gICAgc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRf
RGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KGV3a1ZpZXcpKTsKLSAgICBpZiAoIXNt
YXJ0RGF0YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRXZhc19PYmplY3QqIGNsaXAgPSBldmFz
X29iamVjdF9yZWN0YW5nbGVfYWRkKHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsKLSAgICBldmFzX29i
amVjdF9zaG93KGNsaXApOwotCi0gICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkCi0g
ICAgICAgIChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIEVWQVNfQ0FMTEJBQ0tfREVMLCBfZXdr
X3ZpZXdfc2luZ2xlX29uX2RlbCwgY2xpcCk7Ci19Ci0KLXN0YXRpYyBFdmFzX09iamVjdCogX2V3
a192aWV3X3NpbmdsZV9zbWFydF9iYWNraW5nX3N0b3JlX2FkZChFd2tfVmlld19TbWFydF9EYXRh
KiBzbWFydERhdGEpCi17Ci0gICAgRXZhc19PYmplY3QqIGJzID0gZXZhc19vYmplY3RfaW1hZ2Vf
YWRkKHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoYnMsIDApOwotICAgIGNvbnN0IEVjb3JlX0V2YXMqIGVjb3JlRXZhcyA9IGVjb3JlX2V2
YXNfZWNvcmVfZXZhc19nZXQoc21hcnREYXRhLT5iYXNlLmV2YXMpOwotICAgIGNvbnN0IGNoYXIq
IGVuZ2luZSA9IGVjb3JlX2V2YXNfZW5naW5lX25hbWVfZ2V0KGVjb3JlRXZhcyk7Ci0gICAgaWYg
KCFzdHJuY21wKGVuZ2luZSwgIm9wZW5nbF94MTEiLCBzdHJsZW4oIm9wZW5nbF94MTEiKSkpCi0g
ICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2NvbnRlbnRfaGludF9zZXQoYnMsIEVWQVNfSU1BR0Vf
Q09OVEVOVF9ISU5UX0RZTkFNSUMpOwotCi0gICAgZXZhc19vYmplY3RfaW1hZ2VfYWxwaGFfc2V0
KGJzLCBmYWxzZSk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChicywg
c21hcnREYXRhLT56b29tX3dlYWtfc21vb3RoX3NjYWxlKTsKLQotICAgIHJldHVybiBiczsKLX0K
LQotc3RhdGljIHZvaWQgX2V3a192aWV3X3NpbmdsZV9zbWFydF9yZXNpemUoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQotewotICAgIEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0
X0RhdGEqPihldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChld2tWaWV3KSk7Ci0gICAgX3BhcmVu
dF9zYy5zYy5yZXNpemUoZXdrVmlldywgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICBpZiAoIXNtYXJ0
RGF0YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gdGhlc2Ugc2hvdWxkIGJlIHF1ZXVlZCBh
bmQgcHJvY2Vzc2VkIGluIGNhbGN1bGF0ZSBhcyB3ZWxsIQotICAgIGV2YXNfb2JqZWN0X2ltYWdl
X3NpemVfc2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgd2lkdGgsIGhlaWdodCk7Ci0gICAg
aWYgKHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPCAwLjAwMDAxKSB7Ci0g
ICAgICAgIEV2YXNfT2JqZWN0KiBjbGlwID0gZXZhc19vYmplY3RfY2xpcF9nZXQoc21hcnREYXRh
LT5iYWNraW5nX3N0b3JlKTsKLSAgICAgICAgRXZhc19Db29yZCB4LCB5LCBjdywgY2g7Ci0gICAg
ICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwg
MCwgMCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChz
bWFydERhdGEtPmJhY2tpbmdfc3RvcmUsICZ4LCAmeSwgMCwgMCk7Ci0gICAgICAgIGV2YXNfb2Jq
ZWN0X21vdmUoY2xpcCwgeCwgeSk7Ci0gICAgICAgIGV3a19mcmFtZV9jb250ZW50c19zaXplX2dl
dChzbWFydERhdGEtPm1haW5fZnJhbWUsICZjdywgJmNoKTsKLSAgICAgICAgaWYgKHdpZHRoID4g
Y3cpCi0gICAgICAgICAgICB3aWR0aCA9IGN3OwotICAgICAgICBpZiAoaGVpZ2h0ID4gY2gpCi0g
ICAgICAgICAgICBoZWlnaHQgPSBjaDsKLSAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKGNsaXAs
IHdpZHRoLCBoZWlnaHQpOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdmll
d19zY3JlZW5fbW92ZSh1aW50MzJfdCogaW1hZ2UsIHNpemVfdCBkZXN0aW5hdGlvblgsIHNpemVf
dCBkZXN0aW5hdGlvblksIHNpemVfdCBzb3VyY2VYLCBzaXplX3Qgc291cmNlWSwgc2l6ZV90IGNv
cHlXaWR0aCwgc2l6ZV90IGNvcHlIZWlnaHQsIHNpemVfdCBpbWFnZVdpZHRoKQotewotICAgIHVp
bnQzMl90KiBzb3VyY2VCZWdpbiA9IGltYWdlICsgKGltYWdlV2lkdGggKiBzb3VyY2VZKSArIHNv
dXJjZVg7Ci0gICAgdWludDMyX3QqIGRlc3RpbmF0aW9uQmVnaW4gPSBpbWFnZSArIChpbWFnZVdp
ZHRoICogZGVzdGluYXRpb25ZKSArIGRlc3RpbmF0aW9uWDsKLQotICAgIHNpemVfdCBjb3B5TGVu
Z3RoID0gY29weVdpZHRoICogNDsKLSAgICBjb25zdCBpbnQgbW92ZUxpbmVVcERvd24gPSBzb3Vy
Y2VZID49IGRlc3RpbmF0aW9uWSA/IDEgOiAtMTsKLSAgICBpbnQgc3RhcnRIZWlnaHQgPSBzb3Vy
Y2VZID49IGRlc3RpbmF0aW9uWSA/IDAgOiBjb3B5SGVpZ2h0IC0gMTsKLQotICAgIHVpbnQzMl90
KiBzb3VyY2UsICogZGVzdGluYXRpb247Ci0gICAgaWYgKChkZXN0aW5hdGlvblggPiBzb3VyY2VY
ICYmIGRlc3RpbmF0aW9uWCA8IHNvdXJjZVggKyBjb3B5V2lkdGgpCi0gICAgICAgIHx8IChkZXN0
aW5hdGlvblggPCBzb3VyY2VYICYmIGRlc3RpbmF0aW9uWCArIGNvcHlXaWR0aCA+IHNvdXJjZVgp
KSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29weUhlaWdodDsgaSsrKSB7Ci0g
ICAgICAgICAgICBzb3VyY2UgPSBzb3VyY2VCZWdpbiArIChpbWFnZVdpZHRoICogc3RhcnRIZWln
aHQpOwotICAgICAgICAgICAgZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbkJlZ2luICsgKGltYWdl
V2lkdGggKiBzdGFydEhlaWdodCk7Ci0gICAgICAgICAgICBzdGFydEhlaWdodCA9IHN0YXJ0SGVp
Z2h0ICsgbW92ZUxpbmVVcERvd247Ci0gICAgICAgICAgICBtZW1tb3ZlKGRlc3RpbmF0aW9uLCBz
b3VyY2UsIGNvcHlMZW5ndGgpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjb3B5SGVpZ2h0OyBpKyspIHsKLSAgICAgICAgICAgIHNvdXJj
ZSA9IHNvdXJjZUJlZ2luICsgKGltYWdlV2lkdGggKiBzdGFydEhlaWdodCk7Ci0gICAgICAgICAg
ICBkZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uQmVnaW4gKyAoaW1hZ2VXaWR0aCAqIHN0YXJ0SGVp
Z2h0KTsKLSAgICAgICAgICAgIHN0YXJ0SGVpZ2h0ID0gc3RhcnRIZWlnaHQgKyBtb3ZlTGluZVVw
RG93bjsKLSAgICAgICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNlLCBjb3B5TGVuZ3Ro
KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdmlld19z
aW5nbGVfc2Nyb2xsX3Byb2Nlc3Nfc2luZ2xlKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0
YSwgdm9pZCogcGl4ZWxzLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCwgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiByZWN0VG9TY3JvbGwpCi17Ci0gICAgaW50IHNjcm9sbFggPSByZWN0VG9TY3JvbGwueCgpOwot
ICAgIGludCBzY3JvbGxZID0gcmVjdFRvU2Nyb2xsLnkoKTsKLSAgICBpbnQgc2Nyb2xsV2lkdGgg
PSByZWN0VG9TY3JvbGwud2lkdGgoKTsKLSAgICBpbnQgc2Nyb2xsSGVpZ2h0ID0gcmVjdFRvU2Ny
b2xsLmhlaWdodCgpOwotCi0gICAgREJHKCIlZCwlZCArICVkLCVkICUrMDNkLCUrMDNkLCBzdG9y
ZTogJXAgJWR4JWQiLAotICAgICAgICBzY3JvbGxYLCBzY3JvbGxZLCBzY3JvbGxXaWR0aCwgc2Ny
b2xsSGVpZ2h0LCBzY3JvbGxPZmZzZXQud2lkdGgoKSwgc2Nyb2xsT2Zmc2V0LmhlaWdodCgpLCBw
aXhlbHMsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgaWYgKGFicyhzY3JvbGxPZmZzZXQud2lkdGgo
KSkgPj0gc2Nyb2xsV2lkdGggfHwgYWJzKHNjcm9sbE9mZnNldC5oZWlnaHQoKSkgPj0gc2Nyb2xs
SGVpZ2h0KSB7Ci0gICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNtYXJ0RGF0YS0+X3ByaXYs
IHNjcm9sbFgsIHNjcm9sbFksIHNjcm9sbFdpZHRoLCBzY3JvbGxIZWlnaHQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHNjcm9sbFggPCAwKSB7Ci0gICAgICAgIHNjcm9sbFdp
ZHRoICs9IHNjcm9sbFg7Ci0gICAgICAgIHNjcm9sbFggPSAwOwotICAgIH0KLSAgICBpZiAoc2Ny
b2xsWSA8IDApIHsKLSAgICAgICAgc2Nyb2xsSGVpZ2h0ICs9IHNjcm9sbFk7Ci0gICAgICAgIHNj
cm9sbFkgPSAwOwotICAgIH0KLQotICAgIGlmIChzY3JvbGxYICsgc2Nyb2xsV2lkdGggPiB3aWR0
aCkKLSAgICAgICAgc2Nyb2xsV2lkdGggPSB3aWR0aCAtIHNjcm9sbFg7Ci0gICAgaWYgKHNjcm9s
bFkgKyBzY3JvbGxIZWlnaHQgPiBoZWlnaHQpCi0gICAgICAgIHNjcm9sbEhlaWdodCA9IGhlaWdo
dCAtIHNjcm9sbFk7Ci0KLSAgICBpZiAoc2Nyb2xsV2lkdGggPD0gMCB8fCBzY3JvbGxIZWlnaHQg
PD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IHNvdXJjZVggPSBzY3JvbGxPZmZzZXQu
d2lkdGgoKSA8IDAgPyBhYnMoc2Nyb2xsT2Zmc2V0LndpZHRoKCkpIDogMDsKLSAgICBpbnQgc291
cmNlWSA9IHNjcm9sbE9mZnNldC5oZWlnaHQoKSA8IDAgPyBhYnMoc2Nyb2xsT2Zmc2V0LmhlaWdo
dCgpKSA6IDA7Ci0gICAgaW50IGRlc3RpbmF0aW9uWCA9IHNjcm9sbE9mZnNldC53aWR0aCgpIDwg
MCA/IDAgOiBzY3JvbGxPZmZzZXQud2lkdGgoKTsKLSAgICBpbnQgZGVzdGluYXRpb25ZID0gc2Ny
b2xsT2Zmc2V0LmhlaWdodCgpIDwgMCA/IDAgOiBzY3JvbGxPZmZzZXQuaGVpZ2h0KCk7Ci0gICAg
aW50IGNvcHlXaWR0aCA9IHNjcm9sbFdpZHRoIC0gYWJzKHNjcm9sbE9mZnNldC53aWR0aCgpKTsK
LSAgICBpbnQgY29weUhlaWdodCA9IHNjcm9sbEhlaWdodCAtIGFicyhzY3JvbGxPZmZzZXQuaGVp
Z2h0KCkpOwotICAgIGlmIChzY3JvbGxPZmZzZXQud2lkdGgoKSB8fCBzY3JvbGxPZmZzZXQuaGVp
Z2h0KCkpIHsKLSAgICAgICAgX2V3a192aWV3X3NjcmVlbl9tb3ZlKHN0YXRpY19jYXN0PHVpbnQz
Ml90Kj4ocGl4ZWxzKSwgZGVzdGluYXRpb25YLCBkZXN0aW5hdGlvblksIHNvdXJjZVgsIHNvdXJj
ZVksIGNvcHlXaWR0aCwgY29weUhlaWdodCwgd2lkdGgpOwotICAgICAgICBldmFzX29iamVjdF9p
bWFnZV9kYXRhX3VwZGF0ZV9hZGQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBkZXN0aW5hdGlv
blgsIGRlc3RpbmF0aW9uWSwgY29weVdpZHRoLCBjb3B5SGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBF
aW5hX1JlY3RhbmdsZSB2ZXJ0aWNhbFVwZGF0ZTsKLSAgICB2ZXJ0aWNhbFVwZGF0ZS54ID0gZGVz
dGluYXRpb25YID8gMCA6IGNvcHlXaWR0aCAtIDE7Ci0gICAgdmVydGljYWxVcGRhdGUueSA9IDA7
Ci0gICAgdmVydGljYWxVcGRhdGUudyA9IGFicyhzY3JvbGxPZmZzZXQud2lkdGgoKSk7Ci0gICAg
dmVydGljYWxVcGRhdGUuaCA9IHNjcm9sbEhlaWdodDsKLSAgICBpZiAodmVydGljYWxVcGRhdGUu
dyAmJiB2ZXJ0aWNhbFVwZGF0ZS5oKQotICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzbWFy
dERhdGEtPl9wcml2LCB2ZXJ0aWNhbFVwZGF0ZS54LCB2ZXJ0aWNhbFVwZGF0ZS55LCB2ZXJ0aWNh
bFVwZGF0ZS53LCB2ZXJ0aWNhbFVwZGF0ZS5oKTsKLQotICAgIEVpbmFfUmVjdGFuZ2xlIGhvcml6
b250YWxVcGRhdGU7Ci0gICAgaG9yaXpvbnRhbFVwZGF0ZS54ID0gZGVzdGluYXRpb25YOwotICAg
IGhvcml6b250YWxVcGRhdGUueSA9IGRlc3RpbmF0aW9uWSA/IDAgOiBjb3B5SGVpZ2h0IC0gMTsK
LSAgICBob3Jpem9udGFsVXBkYXRlLncgPSBjb3B5V2lkdGg7Ci0gICAgaG9yaXpvbnRhbFVwZGF0
ZS5oID0gYWJzKHNjcm9sbE9mZnNldC5oZWlnaHQoKSk7Ci0gICAgaWYgKGhvcml6b250YWxVcGRh
dGUudyAmJiBob3Jpem9udGFsVXBkYXRlLmgpCi0gICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRk
KHNtYXJ0RGF0YS0+X3ByaXYsIGhvcml6b250YWxVcGRhdGUueCwgaG9yaXpvbnRhbFVwZGF0ZS55
LCBob3Jpem9udGFsVXBkYXRlLncsIGhvcml6b250YWxVcGRhdGUuaCk7Ci19Ci0KLXN0YXRpYyBF
aW5hX0Jvb2wgX2V3a192aWV3X3NpbmdsZV9zbWFydF9zY3JvbGxzX3Byb2Nlc3MoRXdrX1ZpZXdf
U21hcnRfRGF0YSogc21hcnREYXRhKQotewotICAgIEV2YXNfQ29vcmQgaW1hZ2VXaWR0aCwgaW1h
Z2VIZWlnaHQ7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9nZXQoc21hcnREYXRhLT5iYWNr
aW5nX3N0b3JlLCAmaW1hZ2VXaWR0aCwgJmltYWdlSGVpZ2h0KTsKLQotICAgIGNvbnN0IFdURjo6
VmVjdG9yPFdlYkNvcmU6OkludFNpemU+JiBzY3JvbGxPZmZzZXRzID0gZXdrX3ZpZXdfc2Nyb2xs
X29mZnNldHNfZ2V0KHNtYXJ0RGF0YS0+X3ByaXYpOwotICAgIGNvbnN0IFdURjo6VmVjdG9yPFdl
YkNvcmU6OkludFJlY3Q+JiByZWN0c1RvU2Nyb2xsID0gZXdrX3ZpZXdfc2Nyb2xsX3JlY3RzX2dl
dChzbWFydERhdGEtPl9wcml2KTsKLQotICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdFRvU2Nyb2xs
KDAsIDAsIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KTsKLSAgICBXZWJDb3JlOjpJbnRTaXplIHNj
cm9sbE9mZnNldDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNjcm9sbE9mZnNldHMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgcmVjdFRvU2Nyb2xsLmludGVyc2VjdChyZWN0c1RvU2Nyb2xs
W2ldKTsKLSAgICAgICAgc2Nyb2xsT2Zmc2V0ICs9IHNjcm9sbE9mZnNldHNbaV07Ci0gICAgfQot
Ci0gICAgaWYgKHNjcm9sbE9mZnNldC5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICB2b2lkKiBwaXhlbHMgPSBldmFzX29iamVjdF9pbWFnZV9kYXRhX2dldChzbWFydERhdGEt
PmJhY2tpbmdfc3RvcmUsIDEpOwotICAgIF9ld2tfdmlld19zaW5nbGVfc2Nyb2xsX3Byb2Nlc3Nf
c2luZ2xlKHNtYXJ0RGF0YSwgcGl4ZWxzLCBpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCwgc2Nyb2xs
T2Zmc2V0LCByZWN0VG9TY3JvbGwpOwotCi0gICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9zZXQo
c21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBwaXhlbHMpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NpbmdsZV9zbWFydF9yZXBhaW50c19wcm9j
ZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKLXsKLSAgICBpZiAoc21hcnREYXRh
LT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCA8IDAuMDAwMDEpIHsKLSAgICAgICAgRXZhc19P
YmplY3QqIGNsaXAgPSBldmFzX29iamVjdF9jbGlwX2dldChzbWFydERhdGEtPmJhY2tpbmdfc3Rv
cmUpOwotCi0gICAgICAgIC8vIHJlc2V0IGVmZmVjdHMgb2Ygem9vbV93ZWFrX3NldCgpCi0gICAg
ICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwg
MCwgMCwgc21hcnREYXRhLT52aWV3LncsIHNtYXJ0RGF0YS0+dmlldy5oKTsKLSAgICAgICAgZXZh
c19vYmplY3RfbW92ZShjbGlwLCBzbWFydERhdGEtPnZpZXcueCwgc21hcnREYXRhLT52aWV3Lnkp
OwotCi0gICAgICAgIEV2YXNfQ29vcmQgd2lkdGggPSBzbWFydERhdGEtPnZpZXcudzsKLSAgICAg
ICAgRXZhc19Db29yZCBoZWlnaHQgPSBzbWFydERhdGEtPnZpZXcuaDsKLQotICAgICAgICBFdmFz
X0Nvb3JkIGNlbnRlcldpZHRoLCBjZW50ZXJIZWlnaHQ7Ci0gICAgICAgIGV3a19mcmFtZV9jb250
ZW50c19zaXplX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZjZW50ZXJXaWR0aCwgJmNlbnRl
ckhlaWdodCk7Ci0gICAgICAgIGlmICh3aWR0aCA+IGNlbnRlcldpZHRoKQotICAgICAgICAgICAg
d2lkdGggPSBjZW50ZXJXaWR0aDsKLQotICAgICAgICBpZiAoaGVpZ2h0ID4gY2VudGVySGVpZ2h0
KQotICAgICAgICAgICAgaGVpZ2h0ID0gY2VudGVySGVpZ2h0OwotCi0gICAgICAgIGV2YXNfb2Jq
ZWN0X3Jlc2l6ZShjbGlwLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBFdmFzX0Nvb3Jk
IGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0OwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfZ2V0
KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgJmltYWdlV2lkdGgsICZpbWFnZUhlaWdodCk7Ci0K
LSAgICBFaW5hX1RpbGVyKiB0aWxlciA9IGVpbmFfdGlsZXJfbmV3KGltYWdlV2lkdGgsIGltYWdl
SGVpZ2h0KTsKLSAgICBpZiAoIXRpbGVyKSB7Ci0gICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0
ZSB0aWxlciAlZHglZCIsIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIGV3a192aWV3X2xheW91dF9pZl9uZWVkZWRfcmVjdXJzaXZl
KHNtYXJ0RGF0YS0+X3ByaXYpOwotCi0gICAgc2l6ZV90IGNvdW50OwotICAgIGNvbnN0IEVpbmFf
UmVjdGFuZ2xlKiBwYWludFJlcXVlc3QgPSBld2tfdmlld19yZXBhaW50c19wb3Aoc21hcnREYXRh
LT5fcHJpdiwgJmNvdW50KTsKLSAgICBjb25zdCBFaW5hX1JlY3RhbmdsZSogcGFpbnRSZXF1ZXN0
RW5kID0gcGFpbnRSZXF1ZXN0ICsgY291bnQ7Ci0gICAgZm9yICg7IHBhaW50UmVxdWVzdCA8IHBh
aW50UmVxdWVzdEVuZDsgcGFpbnRSZXF1ZXN0KyspCi0gICAgICAgIGVpbmFfdGlsZXJfcmVjdF9h
ZGQodGlsZXIsIHBhaW50UmVxdWVzdCk7Ci0KLSAgICBFaW5hX0l0ZXJhdG9yKiBpdGVyYXRvciA9
IGVpbmFfdGlsZXJfaXRlcmF0b3JfbmV3KHRpbGVyKTsKLSAgICBpZiAoIWl0ZXJhdG9yKSB7Ci0g
ICAgICAgIEVSUigiY291bGQgbm90IGdldCBpdGVyYXRvciBmb3IgdGlsZXIiKTsKLSAgICAgICAg
ZWluYV90aWxlcl9mcmVlKHRpbGVyKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
I2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIFdlYkNvcmU6OkZyYW1lKiBtYWluRnJh
bWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKLSAgICBp
ZiAobWFpbkZyYW1lICYmIG1haW5GcmFtZS0+dGlsZWRCYWNraW5nU3RvcmUoKSkKLSAgICAgICAg
bWFpbkZyYW1lLT50aWxlZEJhY2tpbmdTdG9yZSgpLT5jb3ZlcldpdGhUaWxlc0lmTmVlZGVkKCk7
Ci0jZW5kaWYKLQotICAgIEV3a19QYWludF9Db250ZXh0KiBjb250ZXh0ID0gZXdrX3BhaW50X2Nv
bnRleHRfZnJvbV9pbWFnZV9uZXcoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlKTsKLSAgICBld2tf
cGFpbnRfY29udGV4dF9zYXZlKGNvbnRleHQpOwotCi0gICAgRWluYV9SZWN0YW5nbGUqIHJlY3Q7
Ci0gICAgRUlOQV9JVEVSQVRPUl9GT1JFQUNIKGl0ZXJhdG9yLCByZWN0KSB7Ci0gICAgICAgIGV3
a192aWV3X3BhaW50KHNtYXJ0RGF0YS0+X3ByaXYsIGNvbnRleHQsIHJlY3QpOwotICAgICAgICBl
dmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQoc21hcnREYXRhLT5iYWNraW5nX3N0b3Jl
LCByZWN0LT54LCByZWN0LT55LCByZWN0LT53LCByZWN0LT5oKTsKLSAgICB9Ci0KLSNpZiBFTkFC
TEUoSU5TUEVDVE9SKQotICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBFV0tQcml2YXRlOjpjb3Jl
UGFnZShzbWFydERhdGEtPnNlbGYpOwotICAgIGlmIChwYWdlKSB7Ci0gICAgICAgIFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBwYWdlLT5pbnNwZWN0b3JDb250cm9s
bGVyKCk7Ci0gICAgICAgIGlmIChjb250cm9sbGVyLT5oaWdobGlnaHRlZE5vZGUoKSkKLSAgICAg
ICAgICAgIGNvbnRyb2xsZXItPmRyYXdIaWdobGlnaHQoKmNvbnRleHQtPmdyYXBoaWNDb250ZXh0
KTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGV3a19wYWludF9jb250ZXh0X3Jlc3RvcmUoY29udGV4
dCk7Ci0gICAgZXdrX3BhaW50X2NvbnRleHRfZnJlZShjb250ZXh0KTsKLQotICAgIGVpbmFfdGls
ZXJfZnJlZSh0aWxlcik7Ci0gICAgZWluYV9pdGVyYXRvcl9mcmVlKGl0ZXJhdG9yKTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zaW5nbGVfc21h
cnRfem9vbV93ZWFrX3NldChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGZsb2F0IHpv
b20sIEV2YXNfQ29vcmQgY2VudGVyWCwgRXZhc19Db29yZCBjZW50ZXJZKQotewotICAgIC8vIFRP
RE86IHJldmlldwotICAgIGZsb2F0IHNjYWxlID0gem9vbSAvIHNtYXJ0RGF0YS0+YW5pbWF0ZWRf
em9vbS56b29tLnN0YXJ0OwotICAgIEV2YXNfQ29vcmQgdyA9IHNtYXJ0RGF0YS0+dmlldy53ICog
c2NhbGU7Ci0gICAgRXZhc19Db29yZCBoID0gc21hcnREYXRhLT52aWV3LmggKiBzY2FsZTsKLSAg
ICBFdmFzX0Nvb3JkIGR4LCBkeSwgY3csIGNoOwotICAgIEV2YXNfT2JqZWN0KiBjbGlwID0gZXZh
c19vYmplY3RfY2xpcF9nZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlKTsKLQotICAgIGV3a19m
cmFtZV9jb250ZW50c19zaXplX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZjdywgJmNoKTsK
LSAgICBpZiAoc21hcnREYXRhLT52aWV3LncgPiAwICYmIHNtYXJ0RGF0YS0+dmlldy5oID4gMCkg
ewotICAgICAgICBkeCA9ICh3ICogKHNtYXJ0RGF0YS0+dmlldy53IC0gY2VudGVyWCkpIC8gc21h
cnREYXRhLT52aWV3Lnc7Ci0gICAgICAgIGR5ID0gKGggKiAoc21hcnREYXRhLT52aWV3LmggLSBj
ZW50ZXJZKSkgLyBzbWFydERhdGEtPnZpZXcuaDsKLSAgICB9IGVsc2UgewotICAgICAgICBkeCA9
IDA7Ci0gICAgICAgIGR5ID0gMDsKLSAgICB9Ci0KLSAgICBldmFzX29iamVjdF9pbWFnZV9maWxs
X3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIGNlbnRlclggKyBkeCwgY2VudGVyWSArIGR5
LCB3LCBoKTsKLQotICAgIGlmIChzbWFydERhdGEtPnZpZXcudyA+IDAgJiYgc21hcnREYXRhLT52
aWV3LmggPiAwKSB7Ci0gICAgICAgIGR4ID0gKChzbWFydERhdGEtPnZpZXcudyAtIHcpICogY2Vu
dGVyWCkgLyBzbWFydERhdGEtPnZpZXcudzsKLSAgICAgICAgZHkgPSAoKHNtYXJ0RGF0YS0+dmll
dy5oIC0gaCkgKiBjZW50ZXJZKSAvIHNtYXJ0RGF0YS0+dmlldy5oOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGR4ID0gMDsKLSAgICAgICAgZHkgPSAwOwotICAgIH0KLSAgICBldmFzX29iamVjdF9t
b3ZlKGNsaXAsIHNtYXJ0RGF0YS0+dmlldy54ICsgZHgsIHNtYXJ0RGF0YS0+dmlldy55ICsgZHkp
OwotCi0gICAgaWYgKGN3IDwgc21hcnREYXRhLT52aWV3LncpCi0gICAgICAgIHcgPSBjdyAqIHNj
YWxlOwotICAgIGlmIChjaCA8IHNtYXJ0RGF0YS0+dmlldy5oKQotICAgICAgICBoID0gY2ggKiBz
Y2FsZTsKLSAgICBldmFzX29iamVjdF9yZXNpemUoY2xpcCwgdywgaCk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zaW5nbGVfc21hcnRfem9vbV93ZWFrX3Nt
b290aF9zY2FsZV9zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBFaW5hX0Jvb2wg
c21vb3RoX3NjYWxlKQotewotICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9zY2FsZV9zZXQo
c21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBzbW9vdGhfc2NhbGUpOwotfQotCi1zdGF0aWMgdm9p
ZCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2JnX2NvbG9yX3NldChFd2tfVmlld19TbWFydF9EYXRh
KiBzbWFydERhdGEsIHVuc2lnbmVkIGNoYXIgLypyZWQqLywgdW5zaWduZWQgY2hhciAvKmdyZWVu
Ki8sIHVuc2lnbmVkIGNoYXIgLypibHVlKi8sIHVuc2lnbmVkIGNoYXIgYWxwaGEpCi17Ci0gICAg
ZXZhc19vYmplY3RfaW1hZ2VfYWxwaGFfc2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgYWxw
aGEgPCAyNTUpOwotfQotCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3NldChFd2tf
Vmlld19TbWFydF9DbGFzcyogYXBpKQotewotICAgIGlmICghZXdrX3ZpZXdfYmFzZV9zbWFydF9z
ZXQoYXBpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKEVJTkFfVU5MSUtFTFko
IV9wYXJlbnRfc2Muc2MuYWRkKSkKLSAgICAgICAgZXdrX3ZpZXdfYmFzZV9zbWFydF9zZXQoJl9w
YXJlbnRfc2MpOwotCi0gICAgYXBpLT5zYy5hZGQgPSBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2Fk
ZDsKLSAgICBhcGktPnNjLnJlc2l6ZSA9IF9ld2tfdmlld19zaW5nbGVfc21hcnRfcmVzaXplOwot
Ci0gICAgYXBpLT5iYWNraW5nX3N0b3JlX2FkZCA9IF9ld2tfdmlld19zaW5nbGVfc21hcnRfYmFj
a2luZ19zdG9yZV9hZGQ7Ci0gICAgYXBpLT5zY3JvbGxzX3Byb2Nlc3MgPSBfZXdrX3ZpZXdfc2lu
Z2xlX3NtYXJ0X3Njcm9sbHNfcHJvY2VzczsKLSAgICBhcGktPnJlcGFpbnRzX3Byb2Nlc3MgPSBf
ZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3M7Ci0gICAgYXBpLT56b29tX3dl
YWtfc2V0ID0gX2V3a192aWV3X3NpbmdsZV9zbWFydF96b29tX3dlYWtfc2V0OwotICAgIGFwaS0+
em9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQgPSBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3pvb21f
d2Vha19zbW9vdGhfc2NhbGVfc2V0OwotICAgIGFwaS0+YmdfY29sb3Jfc2V0ID0gX2V3a192aWV3
X3NpbmdsZV9zbWFydF9iZ19jb2xvcl9zZXQ7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3Rh
dGljIGlubGluZSBFdmFzX1NtYXJ0KiBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2NsYXNzX25ldyh2
b2lkKQotewotICAgIHN0YXRpYyBFd2tfVmlld19TbWFydF9DbGFzcyBhcGkgPSBFV0tfVklFV19T
TUFSVF9DTEFTU19JTklUX05BTUVfVkVSU0lPTihld2tWaWV3U2luZ2xlTmFtZSk7Ci0gICAgc3Rh
dGljIEV2YXNfU21hcnQqIHNtYXJ0ID0gMDsKLQotICAgIGlmIChFSU5BX1VOTElLRUxZKCFzbWFy
dCkpIHsKLSAgICAgICAgZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3NldCgmYXBpKTsKLSAgICAgICAg
c21hcnQgPSBldmFzX3NtYXJ0X2NsYXNzX25ldygmYXBpLnNjKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gc21hcnQ7Ci19Ci0KLUV2YXNfT2JqZWN0KiBld2tfdmlld19zaW5nbGVfYWRkKEV2YXMqIGNh
bnZhcykKLXsKLSAgICByZXR1cm4gZXZhc19vYmplY3Rfc21hcnRfYWRkKGNhbnZhcywgX2V3a192
aWV3X3NpbmdsZV9zbWFydF9jbGFzc19uZXcoKSk7Ci19Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220607</attachid>
            <date>2014-01-08 01:08:50 -0800</date>
            <delta_ts>2014-01-08 16:56:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126508-20140108180848.patch</filename>
            <type>text/plain</type>
            <size>39529</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxNDkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGM5MDYxNmU3Mjg2YWFlMjZl
ODA5ZTZlZjBjZDhkMTM1NmJmNmYxOWYuLjEyZTE5YjA0MTlkM2NjOTA5OGViY2EwMDJjNjgxYjc0
MzYwYjg1YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTQtMDEtMDggIFJ5dWFuIENo
b2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdIE1lcmdlIGV3a192
aWV3X3NpbmdsZSBpbnRvIGV3a192aWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMjY1MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOiBSZW1vdmVkIGV3a192aWV3X3Np
bmdsZS5jcHAuCisKIDIwMTQtMDEtMDcgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgVGVhY2ggTWVkaWFTZXNzaW9uTWFuYWdlciB0byBtYW5hZ2UgaW50
ZXJydXB0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCmluZGV4IGEyNDQ2MWU3ZWNlZjhiODFlOWFlY2Y3MzU3
MzVhYmU1MTM2OTk2OTguLmFjMzg4NzY3ZjZiMmI1Nzg3ZDdiOWFiZDM5ZGI0YmVmNTYyZjY3MWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2VmbC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAxNC0wMS0wOCAgUnl1YW4gQ2hv
aSAgPHJ5dWFuLmNob2lAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF0gTWVyZ2UgZXdrX3Zp
ZXdfc2luZ2xlIGludG8gZXdrX3ZpZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyNjUwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFNpbmNlIGV3a192aWV3X3RpbGVkIGlzIHJlbW92ZWQgYXQgcjE2MTEz
NCwgd2UgZG9uJ3QgbmVlZCB0byBrZWVwCisgICAgICAgIGV3a192aWV3X3NpbmdsZSBvdXQgb2Yg
ZXdrX3ZpZXcuY3BwLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbW92ZXMgdGhlIGxvZ2ljIG9mIGV3
a192aWV3X3NpbmdsZSB0byBld2tfdmlldyBhbmQgcmVmYWN0b3JzIGl0LgorICAgICAgICBJbiBh
ZGRpdGlvbiwgcmVwbGFjZXMgMC4wMDAwMSB0byBlcGlzaWxvbi4KKworICAgICAgICAqIGV3ay9l
d2tfdmlldy5jcHA6CisgICAgICAgIChfZXdrX3ZpZXdfc21hcnRfYWRkKToKKyAgICAgICAgKF9l
d2tfdmlld19zbWFydF9yZXNpemUpOiBNZXJnZWQgd2l0aCB0aGUgbG9naWMgb2YgZXdrX3ZpZXdf
c2luZ2xlLgorICAgICAgICAoX2V3a192aWV3X3NjcmVlbl9tb3ZlKTogTW92ZWQgZnJvbSBld2tf
dmlld19zaW5nbGUuY3BwLgorICAgICAgICAoX2V3a192aWV3X3Njcm9sbF9wcm9jZXNzKTogRGl0
dG8uCisgICAgICAgIChfZXdrX3ZpZXdfc21hcnRfc2Nyb2xsc19wcm9jZXNzKTogRGl0dG8uCisg
ICAgICAgIChfZXdrX3ZpZXdfc21hcnRfcmVwYWludHNfcHJvY2Vzcyk6IERpdHRvLgorICAgICAg
ICAoX2V3a192aWV3X3NtYXJ0X2NhbGN1bGF0ZSk6IFJlbW92ZWQgdW5uZWNlc3NhcnkgY2hlY2sg
cm91dGluZSBmb3Igc2Nyb2xsc19wcm9jZXNzLgorICAgICAgICAoX2V3a192aWV3X3NtYXJ0X3pv
b21fd2Vha19zZXQpOgorICAgICAgICAoX2V3a192aWV3X3NtYXJ0X3pvb21fd2Vha19zbW9vdGhf
c2NhbGVfc2V0KToKKyAgICAgICAgKGV3a192aWV3X2Jhc2Vfc21hcnRfc2V0KTogTWVyZ2VkIHNt
YXJ0IG1ldGhvZCBvZiBld2tfdmlld19zaW5nbGUuCisgICAgICAgIChld2tfdmlld19zaW5nbGVf
c21hcnRfc2V0KToKKyAgICAgICAgKF9ld2tfdmlld19zaW5nbGVfc21hcnRfY2xhc3NfbmV3KToK
KyAgICAgICAgKGV3a192aWV3X3NpbmdsZV9hZGQpOgorICAgICAgICAoZXdrX3ZpZXdfYmdfY29s
b3Jfc2V0KToKKyAgICAgICAgKGV3a192aWV3X3ByZV9yZW5kZXJfcmVnaW9uKToKKyAgICAgICAg
KGV3a192aWV3X3Njcm9sbHNfcHJvY2Vzcyk6CisgICAgICAgICogZXdrL2V3a192aWV3Lmg6Cisg
ICAgICAgICogZXdrL2V3a192aWV3X3ByaXZhdGUuaDogUmVtb3ZlZCB1bm5jZXNzYXJ5IGZ1bmN0
aW9ucy4KKyAgICAgICAgKiBld2svZXdrX3ZpZXdfc2luZ2xlLmNwcDogUmVtb3ZlZC4KKwogMjAx
NC0wMS0wNSAgSmlud29vIFNvbmcgIDxqaW53b283LnNvbmdAc2Ftc3VuZy5jb20+CiAKICAgICAg
ICAgW0VGTF0gRml4IGZhaWxpbmcgV2ViS2l0MSBBUEkgdGVzdCBvZiBld2tfdmlld19zZXR0aW5n
X3RpbGVkX2JhY2tpbmdfc3RvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1F
ZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDE2MGQzZTM0
YjFjZjQ5ZTlmOWE2Y2E0OTM1NmJmNDY5MDhlNzUwYzQuLjIxN2NlNWVhZWNhZjZkYTYxM2MxYTBm
ZGU2NjMzNzljZjU3YTk5YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwu
Y21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMTQyLDcgKzE0
Miw2IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAgICAgZWZsL2V3ay9ld2tfc2V0dGlu
Z3MuY3BwCiAgICAgZWZsL2V3ay9ld2tfdG91Y2hfZXZlbnQuY3BwCiAgICAgZWZsL2V3ay9ld2tf
dmlldy5jcHAKLSAgICBlZmwvZXdrL2V3a192aWV3X3NpbmdsZS5jcHAKICAgICBlZmwvZXdrL2V3
a193ZWJfZGF0YWJhc2UuY3BwCiAgICAgZWZsL2V3ay9ld2tfd2luZG93X2ZlYXR1cmVzLmNwcAog
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKaW5kZXggNTU2MmY1MDRjODcxY2I3NzM3NzU3
MjhjMzk4MTJiYzVmM2E5MzkzOS4uMDMzOGRkNjJlNTEwODUwNTY3NDUzMmI0N2Y3MDZkMGEwNzgz
ZjhiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCkBAIC05MDYsNyArOTA2LDYgQEAg
c3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2FkZChFdmFzX09iamVjdCogZXdrVmlldykKICAg
ICBjb25zdCBFdmFzX1NtYXJ0KiBzbWFydCA9IGV2YXNfb2JqZWN0X3NtYXJ0X3NtYXJ0X2dldChl
d2tWaWV3KTsKICAgICBjb25zdCBFdmFzX1NtYXJ0X0NsYXNzKiBzbWFydENsYXNzID0gZXZhc19z
bWFydF9jbGFzc19nZXQoc21hcnQpOwogICAgIGNvbnN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzKiBh
cGkgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzKj4oc21hcnRD
bGFzcyk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oYXBpLT5iYWNraW5nX3N0b3Jl
X2FkZCk7CiAgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CiAKICAgICBp
ZiAoIXNtYXJ0RGF0YSkgewpAQCAtOTM0LDE1ICs5MzMsMjIgQEAgc3RhdGljIHZvaWQgX2V3a192
aWV3X3NtYXJ0X2FkZChFdmFzX09iamVjdCogZXdrVmlldykKIAogICAgIEVXS19WSUVXX1BSSVZf
R0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICBzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUgPSBh
cGktPmJhY2tpbmdfc3RvcmVfYWRkKHNtYXJ0RGF0YSk7Ci0gICAgaWYgKCFzbWFydERhdGEtPmJh
Y2tpbmdfc3RvcmUpIHsKKyAgICBzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUgPSBldmFzX29iamVj
dF9pbWFnZV9hZGQoc21hcnREYXRhLT5iYXNlLmV2YXMpOworICAgIGlmIChFSU5BX1VOTElLRUxZ
KCFzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUpKSB7CiAgICAgICAgIEVSUigiQ291bGQgbm90IGNy
ZWF0ZSBiYWNraW5nIHN0b3JlIG9iamVjdC4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAor
ICAgIGNvbnN0IEVjb3JlX0V2YXMqIGVjb3JlRXZhcyA9IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19n
ZXQoc21hcnREYXRhLT5iYXNlLmV2YXMpOworICAgIGNvbnN0IGNoYXIqIGVuZ2luZSA9IGVjb3Jl
X2V2YXNfZW5naW5lX25hbWVfZ2V0KGVjb3JlRXZhcyk7CisgICAgaWYgKCFzdHJuY21wKGVuZ2lu
ZSwgIm9wZW5nbF94MTEiLCBzdHJsZW4oIm9wZW5nbF94MTEiKSkpCisgICAgICAgIGV2YXNfb2Jq
ZWN0X2ltYWdlX2NvbnRlbnRfaGludF9zZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBFVkFT
X0lNQUdFX0NPTlRFTlRfSElOVF9EWU5BTUlDKTsKKworICAgIGV2YXNfb2JqZWN0X2ltYWdlX2Fs
cGhhX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIGZhbHNlKTsKKyAgICBldmFzX29iamVj
dF9pbWFnZV9zbW9vdGhfc2NhbGVfc2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgc21hcnRE
YXRhLT56b29tX3dlYWtfc21vb3RoX3NjYWxlKTsKKyAgICBldmFzX29iamVjdF9wYXNzX2V2ZW50
c19zZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCB0cnVlKTsKICAgICBldmFzX29iamVjdF9z
bWFydF9tZW1iZXJfYWRkKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgZXdrVmlldyk7CiAgICAg
ZXZhc19vYmplY3Rfc2hvdyhzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUpOwotICAgIGV2YXNfb2Jq
ZWN0X3Bhc3NfZXZlbnRzX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHRydWUpOwogCiAg
ICAgc21hcnREYXRhLT5ldmVudHNfcmVjdCA9IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9hZGQoc21h
cnREYXRhLT5iYXNlLmV2YXMpOwogICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChzbWFydERhdGEt
PmV2ZW50c19yZWN0LCAwLCAwLCAwLCAwKTsKQEAgLTk5OCw5ICsxMDA0LDI0IEBAIHN0YXRpYyB2
b2lkIF9ld2tfdmlld19zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29v
cmQgdywgRXZhc19Db29yCiAKICAgICAvLyB0aGVzZSBzaG91bGQgYmUgcXVldWVkIGFuZCBwcm9j
ZXNzZWQgaW4gY2FsY3VsYXRlIGFzIHdlbGwhCiAgICAgZXZhc19vYmplY3RfcmVzaXplKHNtYXJ0
RGF0YS0+YmFja2luZ19zdG9yZSwgdywgaCk7CisgICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9z
ZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCB3LCBoKTsKIAogICAgIHNtYXJ0RGF0YS0+Y2hh
bmdlZC5zaXplID0gdHJ1ZTsKICAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzbWFydERhdGEp
OworCisgICAgaWYgKHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPCBzdGQ6
Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6ZXBzaWxvbigpKSB7CisgICAgICAgIEV2YXNfT2JqZWN0
KiBjbGlwID0gZXZhc19vYmplY3RfY2xpcF9nZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlKTsK
KyAgICAgICAgRXZhc19Db29yZCB4LCB5LCBjb250ZW50V2lkdGgsIGNvbnRlbnRIZWlnaHQ7Cisg
ICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9y
ZSwgMCwgMCwgdywgaCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzbWFydERh
dGEtPmJhY2tpbmdfc3RvcmUsICZ4LCAmeSwgMCwgMCk7CisgICAgICAgIGV2YXNfb2JqZWN0X21v
dmUoY2xpcCwgeCwgeSk7CisgICAgICAgIGV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChzbWFy
dERhdGEtPm1haW5fZnJhbWUsICZjb250ZW50V2lkdGgsICZjb250ZW50SGVpZ2h0KTsKKyAgICAg
ICAgaWYgKHcgPiBjb250ZW50V2lkdGgpCisgICAgICAgICAgICB3ID0gY29udGVudFdpZHRoOwor
ICAgICAgICBpZiAoaCA+IGNvbnRlbnRIZWlnaHQpCisgICAgICAgICAgICBoID0gY29udGVudEhl
aWdodDsKKyAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKGNsaXAsIHcsIGgpOworICAgIH0KIH0K
IAogc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X21vdmUoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IEV2YXNfQ29vcmQgLyp4Ki8sIEV2YXNfQ29vcmQgLyp5Ki8pCkBAIC0xMDEwLDEyICsxMDMxLDIx
MiBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfbW92ZShFdmFzX09iamVjdCogZXdrVmll
dywgRXZhc19Db29yZCAvKngqLywgRXZhc19DbwogICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2Vk
KHNtYXJ0RGF0YSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfc2NyZWVuX21v
dmUodWludDMyX3QqIGltYWdlLCBzaXplX3QgZGVzdGluYXRpb25YLCBzaXplX3QgZGVzdGluYXRp
b25ZLCBzaXplX3Qgc291cmNlWCwgc2l6ZV90IHNvdXJjZVksIHNpemVfdCBjb3B5V2lkdGgsIHNp
emVfdCBjb3B5SGVpZ2h0LCBzaXplX3QgaW1hZ2VXaWR0aCkKK3sKKyAgICB1aW50MzJfdCogc291
cmNlQmVnaW4gPSBpbWFnZSArIChpbWFnZVdpZHRoICogc291cmNlWSkgKyBzb3VyY2VYOworICAg
IHVpbnQzMl90KiBkZXN0aW5hdGlvbkJlZ2luID0gaW1hZ2UgKyAoaW1hZ2VXaWR0aCAqIGRlc3Rp
bmF0aW9uWSkgKyBkZXN0aW5hdGlvblg7CisKKyAgICBzaXplX3QgY29weUxlbmd0aCA9IGNvcHlX
aWR0aCAqIDQ7CisKKyAgICBpbnQgbW92ZUxpbmVVcERvd247CisgICAgaW50IHJvdzsKKworICAg
IGlmIChzb3VyY2VZID49IGRlc3RpbmF0aW9uWSkgeworICAgICAgICByb3cgPSAwOworICAgICAg
ICBtb3ZlTGluZVVwRG93biA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcm93ID0gY29weUhl
aWdodCAtIDE7CisgICAgICAgIG1vdmVMaW5lVXBEb3duID0gLTE7CisgICAgfQorCisgICAgdWlu
dDMyX3QqIHNvdXJjZSwgKiBkZXN0aW5hdGlvbjsKKyAgICBpZiAoKGRlc3RpbmF0aW9uWCA+IHNv
dXJjZVggJiYgZGVzdGluYXRpb25YIDwgc291cmNlWCArIGNvcHlXaWR0aCkKKyAgICAgICAgfHwg
KGRlc3RpbmF0aW9uWCA8IHNvdXJjZVggJiYgZGVzdGluYXRpb25YICsgY29weVdpZHRoID4gc291
cmNlWCkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3B5SGVpZ2h0OyArK2ks
IHJvdyArPSBtb3ZlTGluZVVwRG93bikgeworICAgICAgICAgICAgc291cmNlID0gc291cmNlQmVn
aW4gKyAoaW1hZ2VXaWR0aCAqIHJvdyk7CisgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IGRlc3Rp
bmF0aW9uQmVnaW4gKyAoaW1hZ2VXaWR0aCAqIHJvdyk7CisgICAgICAgICAgICBtZW1tb3ZlKGRl
c3RpbmF0aW9uLCBzb3VyY2UsIGNvcHlMZW5ndGgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3B5SGVpZ2h0OyArK2ksIHJvdyArPSBt
b3ZlTGluZVVwRG93bikgeworICAgICAgICAgICAgc291cmNlID0gc291cmNlQmVnaW4gKyAoaW1h
Z2VXaWR0aCAqIHJvdyk7CisgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uQmVn
aW4gKyAoaW1hZ2VXaWR0aCAqIHJvdyk7CisgICAgICAgICAgICBtZW1jcHkoZGVzdGluYXRpb24s
IHNvdXJjZSwgY29weUxlbmd0aCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBpbmxp
bmUgdm9pZCBfZXdrX3ZpZXdfc2Nyb2xsX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21h
cnREYXRhLCB2b2lkKiBwaXhlbHMsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0
LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHJlY3RUb1Njcm9sbCkKK3sKKyAgICBpbnQgc2Nyb2xsWCA9IHJlY3RUb1Njcm9sbC54
KCk7CisgICAgaW50IHNjcm9sbFkgPSByZWN0VG9TY3JvbGwueSgpOworICAgIGludCBzY3JvbGxX
aWR0aCA9IHJlY3RUb1Njcm9sbC53aWR0aCgpOworICAgIGludCBzY3JvbGxIZWlnaHQgPSByZWN0
VG9TY3JvbGwuaGVpZ2h0KCk7CisKKyAgICBpZiAoYWJzKHNjcm9sbE9mZnNldC53aWR0aCgpKSA+
PSBzY3JvbGxXaWR0aCB8fCBhYnMoc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKSA+PSBzY3JvbGxIZWln
aHQpIHsKKyAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9hZGQoc21hcnREYXRhLT5fcHJpdiwgc2Ny
b2xsWCwgc2Nyb2xsWSwgc2Nyb2xsV2lkdGgsIHNjcm9sbEhlaWdodCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoc2Nyb2xsWCA8IDApIHsKKyAgICAgICAgc2Nyb2xsV2lkdGgg
Kz0gc2Nyb2xsWDsKKyAgICAgICAgc2Nyb2xsWCA9IDA7CisgICAgfQorICAgIGlmIChzY3JvbGxZ
IDwgMCkgeworICAgICAgICBzY3JvbGxIZWlnaHQgKz0gc2Nyb2xsWTsKKyAgICAgICAgc2Nyb2xs
WSA9IDA7CisgICAgfQorCisgICAgaWYgKHNjcm9sbFggKyBzY3JvbGxXaWR0aCA+IHdpZHRoKQor
ICAgICAgICBzY3JvbGxXaWR0aCA9IHdpZHRoIC0gc2Nyb2xsWDsKKyAgICBpZiAoc2Nyb2xsWSAr
IHNjcm9sbEhlaWdodCA+IGhlaWdodCkKKyAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gaGVpZ2h0IC0g
c2Nyb2xsWTsKKworICAgIGlmIChzY3JvbGxXaWR0aCA8PSAwIHx8IHNjcm9sbEhlaWdodCA8PSAw
KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgc291cmNlWCA9IHNjcm9sbE9mZnNldC53aWR0
aCgpIDwgMCA/IGFicyhzY3JvbGxPZmZzZXQud2lkdGgoKSkgOiAwOworICAgIGludCBzb3VyY2VZ
ID0gc2Nyb2xsT2Zmc2V0LmhlaWdodCgpIDwgMCA/IGFicyhzY3JvbGxPZmZzZXQuaGVpZ2h0KCkp
IDogMDsKKyAgICBpbnQgZGVzdGluYXRpb25YID0gc2Nyb2xsT2Zmc2V0LndpZHRoKCkgPCAwID8g
MCA6IHNjcm9sbE9mZnNldC53aWR0aCgpOworICAgIGludCBkZXN0aW5hdGlvblkgPSBzY3JvbGxP
ZmZzZXQuaGVpZ2h0KCkgPCAwID8gMCA6IHNjcm9sbE9mZnNldC5oZWlnaHQoKTsKKyAgICBpbnQg
Y29weVdpZHRoID0gc2Nyb2xsV2lkdGggLSBhYnMoc2Nyb2xsT2Zmc2V0LndpZHRoKCkpOworICAg
IGludCBjb3B5SGVpZ2h0ID0gc2Nyb2xsSGVpZ2h0IC0gYWJzKHNjcm9sbE9mZnNldC5oZWlnaHQo
KSk7CisgICAgaWYgKHNjcm9sbE9mZnNldC53aWR0aCgpIHx8IHNjcm9sbE9mZnNldC5oZWlnaHQo
KSkgeworICAgICAgICBfZXdrX3ZpZXdfc2NyZWVuX21vdmUoc3RhdGljX2Nhc3Q8dWludDMyX3Qq
PihwaXhlbHMpLCBkZXN0aW5hdGlvblgsIGRlc3RpbmF0aW9uWSwgc291cmNlWCwgc291cmNlWSwg
Y29weVdpZHRoLCBjb3B5SGVpZ2h0LCB3aWR0aCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdl
X2RhdGFfdXBkYXRlX2FkZChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIGRlc3RpbmF0aW9uWCwg
ZGVzdGluYXRpb25ZLCBjb3B5V2lkdGgsIGNvcHlIZWlnaHQpOworICAgIH0KKworICAgIEVpbmFf
UmVjdGFuZ2xlIHZlcnRpY2FsVXBkYXRlOworICAgIHZlcnRpY2FsVXBkYXRlLnggPSBkZXN0aW5h
dGlvblggPyAwIDogY29weVdpZHRoIC0gMTsKKyAgICB2ZXJ0aWNhbFVwZGF0ZS55ID0gMDsKKyAg
ICB2ZXJ0aWNhbFVwZGF0ZS53ID0gYWJzKHNjcm9sbE9mZnNldC53aWR0aCgpKTsKKyAgICB2ZXJ0
aWNhbFVwZGF0ZS5oID0gc2Nyb2xsSGVpZ2h0OworICAgIGlmICh2ZXJ0aWNhbFVwZGF0ZS53ICYm
IHZlcnRpY2FsVXBkYXRlLmgpCisgICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNtYXJ0RGF0
YS0+X3ByaXYsIHZlcnRpY2FsVXBkYXRlLngsIHZlcnRpY2FsVXBkYXRlLnksIHZlcnRpY2FsVXBk
YXRlLncsIHZlcnRpY2FsVXBkYXRlLmgpOworCisgICAgRWluYV9SZWN0YW5nbGUgaG9yaXpvbnRh
bFVwZGF0ZTsKKyAgICBob3Jpem9udGFsVXBkYXRlLnggPSBkZXN0aW5hdGlvblg7CisgICAgaG9y
aXpvbnRhbFVwZGF0ZS55ID0gZGVzdGluYXRpb25ZID8gMCA6IGNvcHlIZWlnaHQgLSAxOworICAg
IGhvcml6b250YWxVcGRhdGUudyA9IGNvcHlXaWR0aDsKKyAgICBob3Jpem9udGFsVXBkYXRlLmgg
PSBhYnMoc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKTsKKyAgICBpZiAoaG9yaXpvbnRhbFVwZGF0ZS53
ICYmIGhvcml6b250YWxVcGRhdGUuaCkKKyAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9hZGQoc21h
cnREYXRhLT5fcHJpdiwgaG9yaXpvbnRhbFVwZGF0ZS54LCBob3Jpem9udGFsVXBkYXRlLnksIGhv
cml6b250YWxVcGRhdGUudywgaG9yaXpvbnRhbFVwZGF0ZS5oKTsKK30KKworc3RhdGljIHZvaWQg
X2V3a192aWV3X3NtYXJ0X3Njcm9sbHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRhKiBzbWFy
dERhdGEpCit7CisgICAgRXZhc19Db29yZCBpbWFnZVdpZHRoLCBpbWFnZUhlaWdodDsKKyAgICBj
b25zdCBXVEY6OlZlY3RvcjxXZWJDb3JlOjpJbnRTaXplPiYgc2Nyb2xsT2Zmc2V0cyA9IHNtYXJ0
RGF0YS0+X3ByaXYtPm1fc2Nyb2xsT2Zmc2V0czsKKyAgICBjb25zdCBXVEY6OlZlY3RvcjxXZWJD
b3JlOjpJbnRSZWN0PiYgcmVjdHNUb1Njcm9sbCA9IHNtYXJ0RGF0YS0+X3ByaXYtPm1fcmVjdHNU
b1Njcm9sbDsKKworICAgIGlmICghc2Nyb2xsT2Zmc2V0cy5zaXplKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfZ2V0KHNtYXJ0RGF0YS0+YmFja2luZ19z
dG9yZSwgJmltYWdlV2lkdGgsICZpbWFnZUhlaWdodCk7CisKKyAgICBXZWJDb3JlOjpJbnRSZWN0
IHJlY3RUb1Njcm9sbCgwLCAwLCBpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCk7CisgICAgV2ViQ29y
ZTo6SW50U2l6ZSBzY3JvbGxPZmZzZXQ7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzY3Jv
bGxPZmZzZXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHJlY3RUb1Njcm9sbC5pbnRlcnNlY3Qo
cmVjdHNUb1Njcm9sbFtpXSk7CisgICAgICAgIHNjcm9sbE9mZnNldCArPSBzY3JvbGxPZmZzZXRz
W2ldOworICAgIH0KKworICAgIGlmIChzY3JvbGxPZmZzZXQuaXNaZXJvKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIHZvaWQqIHBpeGVscyA9IGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfZ2V0KHNt
YXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgMSk7CisgICAgX2V3a192aWV3X3Njcm9sbF9wcm9jZXNz
KHNtYXJ0RGF0YSwgcGl4ZWxzLCBpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCwgc2Nyb2xsT2Zmc2V0
LCByZWN0VG9TY3JvbGwpOworCisgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9zZXQoc21hcnRE
YXRhLT5iYWNraW5nX3N0b3JlLCBwaXhlbHMpOworCisgICAgcmV0dXJuOworfQorCitzdGF0aWMg
RWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9yZXBhaW50c19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNtYXJ0RGF0YSkKK3sKKyAgICBpZiAoc21hcnREYXRhLT5hbmltYXRlZF96b29tLnpv
b20uY3VycmVudCA8IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjplcHNpbG9uKCkpIHsKKyAg
ICAgICAgRXZhc19PYmplY3QqIGNsaXAgPSBldmFzX29iamVjdF9jbGlwX2dldChzbWFydERhdGEt
PmJhY2tpbmdfc3RvcmUpOworCisgICAgICAgIC8vIHJlc2V0IGVmZmVjdHMgb2Ygem9vbV93ZWFr
X3NldCgpCisgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KHNtYXJ0RGF0YS0+YmFj
a2luZ19zdG9yZSwgMCwgMCwgc21hcnREYXRhLT52aWV3LncsIHNtYXJ0RGF0YS0+dmlldy5oKTsK
KyAgICAgICAgZXZhc19vYmplY3RfbW92ZShjbGlwLCBzbWFydERhdGEtPnZpZXcueCwgc21hcnRE
YXRhLT52aWV3LnkpOworCisgICAgICAgIEV2YXNfQ29vcmQgd2lkdGggPSBzbWFydERhdGEtPnZp
ZXcudzsKKyAgICAgICAgRXZhc19Db29yZCBoZWlnaHQgPSBzbWFydERhdGEtPnZpZXcuaDsKKwor
ICAgICAgICBFdmFzX0Nvb3JkIGNlbnRlcldpZHRoLCBjZW50ZXJIZWlnaHQ7CisgICAgICAgIGV3
a19mcmFtZV9jb250ZW50c19zaXplX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZjZW50ZXJX
aWR0aCwgJmNlbnRlckhlaWdodCk7CisgICAgICAgIGlmICh3aWR0aCA+IGNlbnRlcldpZHRoKQor
ICAgICAgICAgICAgd2lkdGggPSBjZW50ZXJXaWR0aDsKKworICAgICAgICBpZiAoaGVpZ2h0ID4g
Y2VudGVySGVpZ2h0KQorICAgICAgICAgICAgaGVpZ2h0ID0gY2VudGVySGVpZ2h0OworCisgICAg
ICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShjbGlwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9CisKKyAg
ICBFdmFzX0Nvb3JkIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0OworICAgIGV2YXNfb2JqZWN0X2lt
YWdlX3NpemVfZ2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgJmltYWdlV2lkdGgsICZpbWFn
ZUhlaWdodCk7CisKKyAgICBFaW5hX1RpbGVyKiB0aWxlciA9IGVpbmFfdGlsZXJfbmV3KGltYWdl
V2lkdGgsIGltYWdlSGVpZ2h0KTsKKyAgICBpZiAoIXRpbGVyKSB7CisgICAgICAgIEVSUigiY291
bGQgbm90IGNyZWF0ZSB0aWxlciAlZHglZCIsIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGV3a192aWV3X2xheW91dF9pZl9uZWVk
ZWRfcmVjdXJzaXZlKHNtYXJ0RGF0YS0+X3ByaXYpOworCisgICAgc2l6ZV90IGNvdW50OworICAg
IGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBwYWludFJlcXVlc3QgPSBld2tfdmlld19yZXBhaW50c19w
b3Aoc21hcnREYXRhLT5fcHJpdiwgJmNvdW50KTsKKyAgICBjb25zdCBFaW5hX1JlY3RhbmdsZSog
cGFpbnRSZXF1ZXN0RW5kID0gcGFpbnRSZXF1ZXN0ICsgY291bnQ7CisgICAgZm9yICg7IHBhaW50
UmVxdWVzdCA8IHBhaW50UmVxdWVzdEVuZDsgcGFpbnRSZXF1ZXN0KyspCisgICAgICAgIGVpbmFf
dGlsZXJfcmVjdF9hZGQodGlsZXIsIHBhaW50UmVxdWVzdCk7CisKKyAgICBFaW5hX0l0ZXJhdG9y
KiBpdGVyYXRvciA9IGVpbmFfdGlsZXJfaXRlcmF0b3JfbmV3KHRpbGVyKTsKKyAgICBpZiAoIWl0
ZXJhdG9yKSB7CisgICAgICAgIEVSUigiY291bGQgbm90IGdldCBpdGVyYXRvciBmb3IgdGlsZXIi
KTsKKyAgICAgICAgZWluYV90aWxlcl9mcmVlKHRpbGVyKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIFdlYkNvcmU6OkZy
YW1lKiBtYWluRnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoc21hcnREYXRhLT5tYWluX2Zy
YW1lKTsKKyAgICBpZiAobWFpbkZyYW1lICYmIG1haW5GcmFtZS0+dGlsZWRCYWNraW5nU3RvcmUo
KSkKKyAgICAgICAgbWFpbkZyYW1lLT50aWxlZEJhY2tpbmdTdG9yZSgpLT5jb3ZlcldpdGhUaWxl
c0lmTmVlZGVkKCk7CisjZW5kaWYKKworICAgIEV3a19QYWludF9Db250ZXh0KiBjb250ZXh0ID0g
ZXdrX3BhaW50X2NvbnRleHRfZnJvbV9pbWFnZV9uZXcoc21hcnREYXRhLT5iYWNraW5nX3N0b3Jl
KTsKKyAgICBld2tfcGFpbnRfY29udGV4dF9zYXZlKGNvbnRleHQpOworCisgICAgRWluYV9SZWN0
YW5nbGUqIHJlY3Q7CisgICAgRUlOQV9JVEVSQVRPUl9GT1JFQUNIKGl0ZXJhdG9yLCByZWN0KSB7
CisgICAgICAgIGV3a192aWV3X3BhaW50KHNtYXJ0RGF0YS0+X3ByaXYsIGNvbnRleHQsIHJlY3Qp
OworICAgICAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQoc21hcnREYXRhLT5i
YWNraW5nX3N0b3JlLCByZWN0LT54LCByZWN0LT55LCByZWN0LT53LCByZWN0LT5oKTsKKyAgICB9
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBFV0tQ
cml2YXRlOjpjb3JlUGFnZShzbWFydERhdGEtPnNlbGYpOworICAgIGlmIChwYWdlKSB7CisgICAg
ICAgIFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBwYWdlLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCk7CisgICAgICAgIGlmIChjb250cm9sbGVyLT5oaWdobGlnaHRlZE5v
ZGUoKSkKKyAgICAgICAgICAgIGNvbnRyb2xsZXItPmRyYXdIaWdobGlnaHQoKmNvbnRleHQtPmdy
YXBoaWNDb250ZXh0KTsKKyAgICB9CisjZW5kaWYKKworICAgIGV3a19wYWludF9jb250ZXh0X3Jl
c3RvcmUoY29udGV4dCk7CisgICAgZXdrX3BhaW50X2NvbnRleHRfZnJlZShjb250ZXh0KTsKKwor
ICAgIGVpbmFfdGlsZXJfZnJlZSh0aWxlcik7CisgICAgZWluYV9pdGVyYXRvcl9mcmVlKGl0ZXJh
dG9yKTsKKworICAgIHJldHVybiB0cnVlOworfQorCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21h
cnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewogICAgIEVXS19WSUVXX1NEX0dF
VChld2tWaWV3LCBzbWFydERhdGEpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwg
cHJpdik7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPmNv
bnRlbnRzX3Jlc2l6ZSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRh
LT5hcGktPnNjcm9sbHNfcHJvY2Vzcyk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c21hcnREYXRhLT5hcGktPnJlcGFpbnRzX3Byb2Nlc3MpOwogICAgIEV2YXNfQ29vcmQgeCwgeSwg
d2lkdGgsIGhlaWdodDsKIApAQCAtMTA1OSw4ICsxMjgwLDcgQEAgc3RhdGljIHZvaWQgX2V3a192
aWV3X3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCogZXdrVmlldykKICAgICB9CiAgICAgc21h
cnREYXRhLT5jaGFuZ2VkLnBvc2l0aW9uID0gZmFsc2U7CiAKLSAgICBpZiAoIXNtYXJ0RGF0YS0+
YXBpLT5zY3JvbGxzX3Byb2Nlc3Moc21hcnREYXRhKSkKLSAgICAgICAgRVJSKCJmYWlsZWQgdG8g
cHJvY2VzcyBzY3JvbGxzLiIpOworICAgIHNtYXJ0RGF0YS0+YXBpLT5zY3JvbGxzX3Byb2Nlc3Mo
c21hcnREYXRhKTsKICAgICBfZXdrX3ZpZXdfc2Nyb2xsc19mbHVzaChwcml2KTsKIAogICAgIGlm
ICghc21hcnREYXRhLT5hcGktPnJlcGFpbnRzX3Byb2Nlc3Moc21hcnREYXRhKSkKQEAgLTExODcs
NiArMTQwNyw0OCBAQCBzdGF0aWMgZmxvYXQgX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfY3VycmVu
dChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYpCiAgICAgICAgICAgICArIHByaXYtPmFuaW1h
dGVkWm9vbS56b29tLnN0YXJ0KTsKIH0KIAorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21h
cnRfem9vbV93ZWFrX3NldChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGZsb2F0IHpv
b20sIEV2YXNfQ29vcmQgY2VudGVyWCwgRXZhc19Db29yZCBjZW50ZXJZKQoreworICAgIGZsb2F0
IHNjYWxlID0gem9vbSAvIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0OworICAg
IEV2YXNfQ29vcmQgdyA9IHNtYXJ0RGF0YS0+dmlldy53ICogc2NhbGU7CisgICAgRXZhc19Db29y
ZCBoID0gc21hcnREYXRhLT52aWV3LmggKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIGR4LCBkeSwg
Y29udGVudFdpZHRoLCBjb250ZW50SGVpZ2h0OworICAgIEV2YXNfT2JqZWN0KiBjbGlwID0gZXZh
c19vYmplY3RfY2xpcF9nZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlKTsKKworICAgIGV3a19m
cmFtZV9jb250ZW50c19zaXplX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZjb250ZW50V2lk
dGgsICZjb250ZW50SGVpZ2h0KTsKKyAgICBpZiAoc21hcnREYXRhLT52aWV3LncgPiAwICYmIHNt
YXJ0RGF0YS0+dmlldy5oID4gMCkgeworICAgICAgICBkeCA9ICh3ICogKHNtYXJ0RGF0YS0+dmll
dy53IC0gY2VudGVyWCkpIC8gc21hcnREYXRhLT52aWV3Lnc7CisgICAgICAgIGR5ID0gKGggKiAo
c21hcnREYXRhLT52aWV3LmggLSBjZW50ZXJZKSkgLyBzbWFydERhdGEtPnZpZXcuaDsKKyAgICB9
IGVsc2UgeworICAgICAgICBkeCA9IDA7CisgICAgICAgIGR5ID0gMDsKKyAgICB9CisKKyAgICBl
dmFzX29iamVjdF9pbWFnZV9maWxsX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIGNlbnRl
clggKyBkeCwgY2VudGVyWSArIGR5LCB3LCBoKTsKKworICAgIGlmIChzbWFydERhdGEtPnZpZXcu
dyA+IDAgJiYgc21hcnREYXRhLT52aWV3LmggPiAwKSB7CisgICAgICAgIGR4ID0gKChzbWFydERh
dGEtPnZpZXcudyAtIHcpICogY2VudGVyWCkgLyBzbWFydERhdGEtPnZpZXcudzsKKyAgICAgICAg
ZHkgPSAoKHNtYXJ0RGF0YS0+dmlldy5oIC0gaCkgKiBjZW50ZXJZKSAvIHNtYXJ0RGF0YS0+dmll
dy5oOworICAgIH0gZWxzZSB7CisgICAgICAgIGR4ID0gMDsKKyAgICAgICAgZHkgPSAwOworICAg
IH0KKyAgICBldmFzX29iamVjdF9tb3ZlKGNsaXAsIHNtYXJ0RGF0YS0+dmlldy54ICsgZHgsIHNt
YXJ0RGF0YS0+dmlldy55ICsgZHkpOworCisgICAgaWYgKGNvbnRlbnRXaWR0aCA8IHNtYXJ0RGF0
YS0+dmlldy53KQorICAgICAgICB3ID0gY29udGVudFdpZHRoICogc2NhbGU7CisgICAgaWYgKGNv
bnRlbnRIZWlnaHQgPCBzbWFydERhdGEtPnZpZXcuaCkKKyAgICAgICAgaCA9IGNvbnRlbnRIZWln
aHQgKiBzY2FsZTsKKyAgICBldmFzX29iamVjdF9yZXNpemUoY2xpcCwgdywgaCk7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3pvb21fd2Vha19z
bW9vdGhfc2NhbGVfc2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgRWluYV9Cb29s
IHNtb290aF9zY2FsZSkKK3sKKyAgICBldmFzX29iamVjdF9pbWFnZV9zbW9vdGhfc2NhbGVfc2V0
KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgc21vb3RoX3NjYWxlKTsKK30KKwogc3RhdGljIEVp
bmFfQm9vbCBfZXdrX3ZpZXdfem9vbV9hbmltYXRvcl9jYih2b2lkKiBkYXRhKQogewogICAgIEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0
X0RhdGEqPihkYXRhKTsKQEAgLTEyODgsNyArMTU1MCwxMSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdf
YmFzZV9zbWFydF9zZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MqIGFwaSkKICAgICBhcGktPnNjLmNh
bGxiYWNrcyA9IF9ld2tfdmlld19jYWxsYmFja19uYW1lczsKIAogICAgIGFwaS0+Y29udGVudHNf
cmVzaXplID0gX2V3a192aWV3X3NtYXJ0X2NvbnRlbnRzX3Jlc2l6ZTsKKyAgICBhcGktPnNjcm9s
bHNfcHJvY2VzcyA9IF9ld2tfdmlld19zbWFydF9zY3JvbGxzX3Byb2Nlc3M7CisgICAgYXBpLT5y
ZXBhaW50c19wcm9jZXNzID0gX2V3a192aWV3X3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3M7CiAgICAg
YXBpLT56b29tX3NldCA9IF9ld2tfdmlld19zbWFydF96b29tX3NldDsKKyAgICBhcGktPnpvb21f
d2Vha19zZXQgPSBfZXdrX3ZpZXdfc21hcnRfem9vbV93ZWFrX3NldDsKKyAgICBhcGktPnpvb21f
d2Vha19zbW9vdGhfc2NhbGVfc2V0ID0gX2V3a192aWV3X3NtYXJ0X3pvb21fd2Vha19zbW9vdGhf
c2NhbGVfc2V0OwogICAgIGFwaS0+Zmx1c2ggPSBfZXdrX3ZpZXdfc21hcnRfZmx1c2g7CiAgICAg
YXBpLT5wcmVfcmVuZGVyX3JlZ2lvbiA9IF9ld2tfdmlld19zbWFydF9wcmVfcmVuZGVyX3JlZ2lv
bjsKICAgICBhcGktPnByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzID0gX2V3a192aWV3X3NtYXJ0
X3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzOwpAQCAtMTMxNiw2ICsxNTgyLDI5IEBAIEVpbmFf
Qm9vbCBld2tfdmlld19iYXNlX3NtYXJ0X3NldChFd2tfVmlld19TbWFydF9DbGFzcyogYXBpKQog
ICAgIHJldHVybiB0cnVlOwogfQogCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3Nl
dChFd2tfVmlld19TbWFydF9DbGFzcyogYXBpKQoreworICAgIHJldHVybiBld2tfdmlld19iYXNl
X3NtYXJ0X3NldChhcGkpOworfQorCitzdGF0aWMgaW5saW5lIEV2YXNfU21hcnQqIF9ld2tfdmll
d19zaW5nbGVfc21hcnRfY2xhc3NfbmV3KHZvaWQpCit7CisgICAgc3RhdGljIEV3a19WaWV3X1Nt
YXJ0X0NsYXNzIGFwaSA9IEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9OKGV3
a1ZpZXdTaW5nbGVOYW1lKTsKKyAgICBzdGF0aWMgRXZhc19TbWFydCogc21hcnQgPSAwOworCisg
ICAgaWYgKEVJTkFfVU5MSUtFTFkoIXNtYXJ0KSkgeworICAgICAgICBld2tfdmlld19iYXNlX3Nt
YXJ0X3NldCgmYXBpKTsKKyAgICAgICAgc21hcnQgPSBldmFzX3NtYXJ0X2NsYXNzX25ldygmYXBp
LnNjKTsKKyAgICB9CisKKyAgICByZXR1cm4gc21hcnQ7Cit9CisKK0V2YXNfT2JqZWN0KiBld2tf
dmlld19zaW5nbGVfYWRkKEV2YXMqIGNhbnZhcykKK3sKKyAgICByZXR1cm4gZXZhc19vYmplY3Rf
c21hcnRfYWRkKGNhbnZhcywgX2V3a192aWV3X3NpbmdsZV9zbWFydF9jbGFzc19uZXcoKSk7Cit9
CisKIHZvaWQgZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfc2V0KEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKICAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CkBAIC0xNDI0LDcgKzE3MTMs
NiBAQCB2b2lkIGV3a192aWV3X2JnX2NvbG9yX3NldChFdmFzX09iamVjdCogZXdrVmlldywgaW50
IHJlZCwgaW50IGdyZWVuLCBpbnQgYmx1ZSwgaQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihzbWFydERhdGEtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnRE
YXRhLT5hcGktPmJnX2NvbG9yX3NldCk7CiAKICAgICBpZiAoYWxwaGEgPCAwKSB7CiAgICAgICAg
IFdBUk4oIkFscGhhIGxlc3MgdGhhbiB6ZXJvICglZCkuIiwgYWxwaGEpOwpAQCAtMTQ1Myw3ICsx
NzQxLDcgQEAgdm9pZCBld2tfdmlld19iZ19jb2xvcl9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IGludCByZWQsIGludCBncmVlbiwgaW50IGJsdWUsIGkKICAgICBzbWFydERhdGEtPmJnX2NvbG9y
LmIgPSBibHVlOwogICAgIHNtYXJ0RGF0YS0+YmdfY29sb3IuYSA9IGFscGhhOwogCi0gICAgc21h
cnREYXRhLT5hcGktPmJnX2NvbG9yX3NldChzbWFydERhdGEsIHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9hbHBoYV9zZXQoc21hcnREYXRhLT5iYWNraW5n
X3N0b3JlLCBhbHBoYSA8IDI1NSk7CiAKICAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBz
bWFydERhdGEtPl9wcml2LT5tYWluRnJhbWUtPnZpZXcoKTsKICAgICBpZiAodmlldykgewpAQCAt
MTkyNiw3ICsyMjE0LDYgQEAgRWluYV9Cb29sIGV3a192aWV3X3ByZV9yZW5kZXJfcmVnaW9uKEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ28KICAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgZmFsc2UpOwogICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIGZhbHNlKTsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGktPnByZV9yZW5kZXJfcmVnaW9u
LCBmYWxzZSk7Ci0gICAgZmxvYXQgY3VycmVudFpvb207CiAgICAgRXZhc19Db29yZCBjb250ZW50
c1dpZHRoLCBjb250ZW50c0hlaWdodDsKIAogICAgIC8qIFdoZW4gZG9pbmcgYW5pbWF0ZWQgem9v
bSBpdCdzIG5vdCBwb3NzaWJsZSB0byBjYWxsIHByZS1yZW5kZXIgc2luY2UgaXQKQEAgLTE5MzUs
MTAgKzIyMjIsMTAgQEAgRWluYV9Cb29sIGV3a192aWV3X3ByZV9yZW5kZXJfcmVnaW9uKEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ28KICAgICBpZiAocHJpdi0+YW5p
bWF0ZWRab29tLmFuaW1hdG9yKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjdXJyZW50
Wm9vbSA9IGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7Ci0K
LSAgICBpZiAoY3VycmVudFpvb20gPCAwLjAwMDAxKQorICAgIGZsb2F0IGN1cnJlbnRab29tID0g
ZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKKyAgICBpZiAo
Y3VycmVudFpvb20gPCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6ZXBzaWxvbigpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CisKICAgICBpZiAoIWV3a19mcmFtZV9jb250ZW50c19zaXplX2dl
dChzbWFydERhdGEtPm1haW5fZnJhbWUsICZjb250ZW50c1dpZHRoLCAmY29udGVudHNIZWlnaHQp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTI3MjYsMTggKzMwMTMsNiBAQCBjb25zdCBF
aW5hX1JlY3RhbmdsZSogZXdrX3ZpZXdfcmVwYWludHNfcG9wKEV3a19WaWV3X1ByaXZhdGVfRGF0
YSogcHJpdiwgc2l6ZV90KgogICAgIHJldHVybiBwcml2LT5yZXBhaW50cy5hcnJheTsKIH0KIAot
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkludFNpemU+JiBld2tfdmlld19zY3JvbGxfb2Zmc2V0c19n
ZXQoY29uc3QgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2KQotewotICAgIEFTU0VSVChwcml2
KTsKLSAgICByZXR1cm4gcHJpdi0+bV9zY3JvbGxPZmZzZXRzOwotfQotCi1jb25zdCBWZWN0b3I8
V2ViQ29yZTo6SW50UmVjdD4mIGV3a192aWV3X3Njcm9sbF9yZWN0c19nZXQoY29uc3QgRXdrX1Zp
ZXdfUHJpdmF0ZV9EYXRhKiBwcml2KQotewotICAgIEFTU0VSVChwcml2KTsKLSAgICByZXR1cm4g
cHJpdi0+bV9yZWN0c1RvU2Nyb2xsOwotfQotCiAvKioKICAqIEFkZCBhIG5ldyByZXBhaW50IHJl
cXVlc3QgdG8gcXVldWUuCiAgKgpAQCAtMjc4Miw4ICszMDU3LDggQEAgdm9pZCBld2tfdmlld19z
Y3JvbGxzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogewogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7Ci0gICAgaWYgKCFzbWFydERhdGEtPmFwaS0+
c2Nyb2xsc19wcm9jZXNzKHNtYXJ0RGF0YSkpCi0gICAgICAgIEVSUigiZmFpbGVkIHRvIHByb2Nl
c3Mgc2Nyb2xscy4iKTsKKworICAgIHNtYXJ0RGF0YS0+YXBpLT5zY3JvbGxzX3Byb2Nlc3Moc21h
cnREYXRhKTsKICAgICBfZXdrX3ZpZXdfc2Nyb2xsc19mbHVzaChwcml2KTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmggYi9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX3ZpZXcuaAppbmRleCA5YzkwODg2N2E2OGNmZDYwZTVlMzcyMjk1YzVjNzcwMDA3
Y2FmNTgyLi5mOWNmYmE3YzQ1YzMxNDdmNzdhOThiY2ZhZDE4YTQ0NWEyYjE3YjA1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX3ZpZXcuaApAQCAtMTUzLDE1ICsxNTMsMTIgQEAgc3RydWN0IF9Fd2tfVmll
d19TbWFydF9DbGFzcyB7CiAKICAgICBFdmFzX09iamVjdCAqKCp3aW5kb3dfY3JlYXRlKShFd2tf
Vmlld19TbWFydF9EYXRhICpzZCwgRWluYV9Cb29sIGphdmFzY3JpcHQsIGNvbnN0IEV3a19XaW5k
b3dfRmVhdHVyZXMgKndpbmRvd19mZWF0dXJlcyk7IC8qKjwgY3JlYXRlcyBhIG5ldyB3aW5kb3cs
IHJlcXVlc3RlZCBieSB3ZWJraXQgKi8KICAgICB2b2lkICgqd2luZG93X2Nsb3NlKShFd2tfVmll
d19TbWFydF9EYXRhICpzZCk7IC8qKjwgY2xvc2VzIGEgd2luZG93ICovCi0gICAgLy8gaG9va3Mg
dG8gYWxsb3cgZGlmZmVyZW50IGJhY2tpbmcgc3RvcmVzCi0gICAgRXZhc19PYmplY3QgKigqYmFj
a2luZ19zdG9yZV9hZGQpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKTsgLyoqPCBtdXN0IGJlIGRl
ZmluZWQgKi8KLSAgICBFaW5hX0Jvb2wgKCpzY3JvbGxzX3Byb2Nlc3MpKEV3a19WaWV3X1NtYXJ0
X0RhdGEgKnNkKTsgLyoqPCBtdXN0IGJlIGRlZmluZWQgKi8KKyAgICB2b2lkICgqc2Nyb2xsc19w
cm9jZXNzKShFd2tfVmlld19TbWFydF9EYXRhICpzZCk7IC8qKjwgbXVzdCBiZSBkZWZpbmVkICov
CiAgICAgRWluYV9Cb29sICgqcmVwYWludHNfcHJvY2VzcykoRXdrX1ZpZXdfU21hcnRfRGF0YSAq
c2QpOyAvKio8IG11c3QgYmUgZGVmaW5lZCAqLwogICAgIEVpbmFfQm9vbCAoKmNvbnRlbnRzX3Jl
c2l6ZSkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIGludCB3LCBpbnQgaCk7CiAgICAgRWluYV9C
b29sICgqem9vbV9zZXQpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBmbG9hdCB6b29tLCBFdmFz
X0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KTsKICAgICBFaW5hX0Jvb2wgKCp6b29tX3dlYWtfc2V0
KShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgZmxvYXQgem9vbSwgRXZhc19Db29yZCBjeCwgRXZh
c19Db29yZCBjeSk7CiAgICAgdm9pZCAoKnpvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KShFd2tf
Vmlld19TbWFydF9EYXRhICpzZCwgRWluYV9Cb29sIHNtb290aF9zY2FsZSk7Ci0gICAgdm9pZCAo
KmJnX2NvbG9yX3NldCkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIHVuc2lnbmVkIGNoYXIgcmVk
LCB1bnNpZ25lZCBjaGFyIGdyZWVuLCB1bnNpZ25lZCBjaGFyIGJsdWUsIHVuc2lnbmVkIGNoYXIg
YWxwaGEpOwogICAgIHZvaWQgKCpmbHVzaCkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpOwogICAg
IEVpbmFfQm9vbCAoKnByZV9yZW5kZXJfcmVnaW9uKShFd2tfVmlld19TbWFydF9EYXRhICpzZCwg
RXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoLCBm
bG9hdCB6b29tKTsKICAgICBFaW5hX0Jvb2wgKCpwcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyko
RXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIHVuc2lnbmVkIGludCBuLCBmbG9hdCB6b29tKTsKQEAg
LTIwMyw3ICsyMDAsNyBAQCBzdHJ1Y3QgX0V3a19WaWV3X1NtYXJ0X0NsYXNzIHsKICAqIFRoZSB2
ZXJzaW9uIHlvdSBoYXZlIHRvIHB1dCBpbnRvIHRoZSB2ZXJzaW9uIGZpZWxkCiAgKiBpbiB0aGUg
QGEgRXdrX1ZpZXdfU21hcnRfQ2xhc3Mgc3RydWN0dXJlLgogICovCi0jZGVmaW5lIEVXS19WSUVX
X1NNQVJUX0NMQVNTX1ZFUlNJT04gN1VMCisjZGVmaW5lIEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZF
UlNJT04gOFVMCiAKIC8qKgogICogSW5pdGlhbGl6ZXMgYSB3aG9sZSBAYSBFd2tfVmlld19TbWFy
dF9DbGFzcyBzdHJ1Y3R1cmUuCkBAIC0yMTUsNyArMjEyLDcgQEAgc3RydWN0IF9Fd2tfVmlld19T
bWFydF9DbGFzcyB7CiAgKiBAc2VlIEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfVkVSU0lPTgog
ICogQHNlZSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVSU0lPTgogICovCi0jZGVm
aW5lIEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVQoc21hcnRfY2xhc3NfaW5pdCkge3NtYXJ0X2Ns
YXNzX2luaXQsIEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04sIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9CisjZGVmaW5lIEVXS19WSUVX
X1NNQVJUX0NMQVNTX0lOSVQoc21hcnRfY2xhc3NfaW5pdCkge3NtYXJ0X2NsYXNzX2luaXQsIEVX
S19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDB9CiAKIC8qKgogICogSW5pdGlhbGl6ZXMgdG8gemVybyBhIHdo
b2xlIEBhIEV3a19WaWV3X1NtYXJ0X0NsYXNzIHN0cnVjdHVyZS4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld19wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX3ZpZXdfcHJpdmF0ZS5oCmluZGV4IDJkZGJjMjQ3NGFiZTJiZDExYjhiZjQ3YWM4MjE4
MTJkMWM1NDliOTYuLmE1Yjg4YWQzMGQwMzkzZmNlNDQwYmRiYjRjMzZmYzgwOTlkNmVkODkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld19wcml2YXRlLmgKKysrIGIv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3X3ByaXZhdGUuaApAQCAtMTQ4LDggKzE0OCw2
IEBAIGJvb2wgZXdrX3ZpZXdfbmVlZF90b3VjaF9ldmVudHNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
Kik7CiAjZW5kaWYKIAogY29uc3QgRWluYV9SZWN0YW5nbGUqIGV3a192aWV3X3JlcGFpbnRzX3Bv
cChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIHNpemVfdCogY291bnQpOwotY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkludFNpemU+JiBld2tfdmlld19zY3JvbGxfb2Zmc2V0c19nZXQoY29uc3Qg
RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKik7Ci1jb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4m
IGV3a192aWV3X3Njcm9sbF9yZWN0c19nZXQoY29uc3QgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKik7
CiAKIHZvaWQgZXdrX3ZpZXdfcmVwYWludF9hZGQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2
LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29y
ZCBoZWlnaHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdf
c2luZ2xlLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzQ1MTc2MTA0OGQ3NzI4ZjAzZDE3NWM5NDEz
MzI4NDI0YzAwYmQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMzgyICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJv
RlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1z
dW5nIEVsZWN0cm9uaWNzCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgImV3a192
aWV3LmgiCi0KLSNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgImV3a19m
cmFtZV9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZXdrX3ByaXZhdGUuaCIKLSNpbmNsdWRlICJld2tf
dmlld19wcml2YXRlLmgiCi0KLSNpbmNsdWRlIDxFY29yZV9FdmFzLmg+Ci0jaW5jbHVkZSA8RXZh
cy5oPgotI2luY2x1ZGUgPGVpbmFfc2FmZXR5X2NoZWNrcy5oPgotI2luY2x1ZGUgPHN0cmluZy5o
PgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVy
LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2VuZGlmCi0KLXN0YXRpYyBFd2tfVmlld19TbWFydF9D
bGFzcyBfcGFyZW50X3NjID0gRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9OVUxMOwotCi1zdGF0
aWMgdm9pZCBfZXdrX3ZpZXdfc2luZ2xlX29uX2RlbCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19P
YmplY3QqLCB2b2lkKikKLXsKLSAgICBFdmFzX09iamVjdCogY2xpcCA9IChFdmFzX09iamVjdCop
ZGF0YTsKLSAgICBldmFzX29iamVjdF9kZWwoY2xpcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tf
dmlld19zaW5nbGVfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQotewotICAgIEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YTsKLQotICAgIF9wYXJlbnRfc2Muc2MuYWRkKGV3a1Zp
ZXcpOwotCi0gICAgc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+
KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KGV3a1ZpZXcpKTsKLSAgICBpZiAoIXNtYXJ0RGF0
YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRXZhc19PYmplY3QqIGNsaXAgPSBldmFzX29iamVj
dF9yZWN0YW5nbGVfYWRkKHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsKLSAgICBldmFzX29iamVjdF9z
aG93KGNsaXApOwotCi0gICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkCi0gICAgICAg
IChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIEVWQVNfQ0FMTEJBQ0tfREVMLCBfZXdrX3ZpZXdf
c2luZ2xlX29uX2RlbCwgY2xpcCk7Ci19Ci0KLXN0YXRpYyBFdmFzX09iamVjdCogX2V3a192aWV3
X3NpbmdsZV9zbWFydF9iYWNraW5nX3N0b3JlX2FkZChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFy
dERhdGEpCi17Ci0gICAgRXZhc19PYmplY3QqIGJzID0gZXZhc19vYmplY3RfaW1hZ2VfYWRkKHNt
YXJ0RGF0YS0+YmFzZS5ldmFzKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
YnMsIDApOwotICAgIGNvbnN0IEVjb3JlX0V2YXMqIGVjb3JlRXZhcyA9IGVjb3JlX2V2YXNfZWNv
cmVfZXZhc19nZXQoc21hcnREYXRhLT5iYXNlLmV2YXMpOwotICAgIGNvbnN0IGNoYXIqIGVuZ2lu
ZSA9IGVjb3JlX2V2YXNfZW5naW5lX25hbWVfZ2V0KGVjb3JlRXZhcyk7Ci0gICAgaWYgKCFzdHJu
Y21wKGVuZ2luZSwgIm9wZW5nbF94MTEiLCBzdHJsZW4oIm9wZW5nbF94MTEiKSkpCi0gICAgICAg
IGV2YXNfb2JqZWN0X2ltYWdlX2NvbnRlbnRfaGludF9zZXQoYnMsIEVWQVNfSU1BR0VfQ09OVEVO
VF9ISU5UX0RZTkFNSUMpOwotCi0gICAgZXZhc19vYmplY3RfaW1hZ2VfYWxwaGFfc2V0KGJzLCBm
YWxzZSk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChicywgc21hcnRE
YXRhLT56b29tX3dlYWtfc21vb3RoX3NjYWxlKTsKLQotICAgIHJldHVybiBiczsKLX0KLQotc3Rh
dGljIHZvaWQgX2V3a192aWV3X3NpbmdsZV9zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQotewotICAgIEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEq
PihldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChld2tWaWV3KSk7Ci0gICAgX3BhcmVudF9zYy5z
Yy5yZXNpemUoZXdrVmlldywgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICBpZiAoIXNtYXJ0RGF0YSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gdGhlc2Ugc2hvdWxkIGJlIHF1ZXVlZCBhbmQgcHJv
Y2Vzc2VkIGluIGNhbGN1bGF0ZSBhcyB3ZWxsIQotICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVf
c2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgaWYgKHNt
YXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPCAwLjAwMDAxKSB7Ci0gICAgICAg
IEV2YXNfT2JqZWN0KiBjbGlwID0gZXZhc19vYmplY3RfY2xpcF9nZXQoc21hcnREYXRhLT5iYWNr
aW5nX3N0b3JlKTsKLSAgICAgICAgRXZhc19Db29yZCB4LCB5LCBjdywgY2g7Ci0gICAgICAgIGV2
YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgMCwgMCwg
d2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzbWFydERh
dGEtPmJhY2tpbmdfc3RvcmUsICZ4LCAmeSwgMCwgMCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X21v
dmUoY2xpcCwgeCwgeSk7Ci0gICAgICAgIGV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChzbWFy
dERhdGEtPm1haW5fZnJhbWUsICZjdywgJmNoKTsKLSAgICAgICAgaWYgKHdpZHRoID4gY3cpCi0g
ICAgICAgICAgICB3aWR0aCA9IGN3OwotICAgICAgICBpZiAoaGVpZ2h0ID4gY2gpCi0gICAgICAg
ICAgICBoZWlnaHQgPSBjaDsKLSAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKGNsaXAsIHdpZHRo
LCBoZWlnaHQpOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdmlld19zY3Jl
ZW5fbW92ZSh1aW50MzJfdCogaW1hZ2UsIHNpemVfdCBkZXN0aW5hdGlvblgsIHNpemVfdCBkZXN0
aW5hdGlvblksIHNpemVfdCBzb3VyY2VYLCBzaXplX3Qgc291cmNlWSwgc2l6ZV90IGNvcHlXaWR0
aCwgc2l6ZV90IGNvcHlIZWlnaHQsIHNpemVfdCBpbWFnZVdpZHRoKQotewotICAgIHVpbnQzMl90
KiBzb3VyY2VCZWdpbiA9IGltYWdlICsgKGltYWdlV2lkdGggKiBzb3VyY2VZKSArIHNvdXJjZVg7
Ci0gICAgdWludDMyX3QqIGRlc3RpbmF0aW9uQmVnaW4gPSBpbWFnZSArIChpbWFnZVdpZHRoICog
ZGVzdGluYXRpb25ZKSArIGRlc3RpbmF0aW9uWDsKLQotICAgIHNpemVfdCBjb3B5TGVuZ3RoID0g
Y29weVdpZHRoICogNDsKLSAgICBjb25zdCBpbnQgbW92ZUxpbmVVcERvd24gPSBzb3VyY2VZID49
IGRlc3RpbmF0aW9uWSA/IDEgOiAtMTsKLSAgICBpbnQgc3RhcnRIZWlnaHQgPSBzb3VyY2VZID49
IGRlc3RpbmF0aW9uWSA/IDAgOiBjb3B5SGVpZ2h0IC0gMTsKLQotICAgIHVpbnQzMl90KiBzb3Vy
Y2UsICogZGVzdGluYXRpb247Ci0gICAgaWYgKChkZXN0aW5hdGlvblggPiBzb3VyY2VYICYmIGRl
c3RpbmF0aW9uWCA8IHNvdXJjZVggKyBjb3B5V2lkdGgpCi0gICAgICAgIHx8IChkZXN0aW5hdGlv
blggPCBzb3VyY2VYICYmIGRlc3RpbmF0aW9uWCArIGNvcHlXaWR0aCA+IHNvdXJjZVgpKSB7Ci0g
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29weUhlaWdodDsgaSsrKSB7Ci0gICAgICAg
ICAgICBzb3VyY2UgPSBzb3VyY2VCZWdpbiArIChpbWFnZVdpZHRoICogc3RhcnRIZWlnaHQpOwot
ICAgICAgICAgICAgZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbkJlZ2luICsgKGltYWdlV2lkdGgg
KiBzdGFydEhlaWdodCk7Ci0gICAgICAgICAgICBzdGFydEhlaWdodCA9IHN0YXJ0SGVpZ2h0ICsg
bW92ZUxpbmVVcERvd247Ci0gICAgICAgICAgICBtZW1tb3ZlKGRlc3RpbmF0aW9uLCBzb3VyY2Us
IGNvcHlMZW5ndGgpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb3B5SGVpZ2h0OyBpKyspIHsKLSAgICAgICAgICAgIHNvdXJjZSA9IHNv
dXJjZUJlZ2luICsgKGltYWdlV2lkdGggKiBzdGFydEhlaWdodCk7Ci0gICAgICAgICAgICBkZXN0
aW5hdGlvbiA9IGRlc3RpbmF0aW9uQmVnaW4gKyAoaW1hZ2VXaWR0aCAqIHN0YXJ0SGVpZ2h0KTsK
LSAgICAgICAgICAgIHN0YXJ0SGVpZ2h0ID0gc3RhcnRIZWlnaHQgKyBtb3ZlTGluZVVwRG93bjsK
LSAgICAgICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNlLCBjb3B5TGVuZ3RoKTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdmlld19zaW5nbGVf
c2Nyb2xsX3Byb2Nlc3Nfc2luZ2xlKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgdm9p
ZCogcGl4ZWxzLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0
VG9TY3JvbGwpCi17Ci0gICAgaW50IHNjcm9sbFggPSByZWN0VG9TY3JvbGwueCgpOwotICAgIGlu
dCBzY3JvbGxZID0gcmVjdFRvU2Nyb2xsLnkoKTsKLSAgICBpbnQgc2Nyb2xsV2lkdGggPSByZWN0
VG9TY3JvbGwud2lkdGgoKTsKLSAgICBpbnQgc2Nyb2xsSGVpZ2h0ID0gcmVjdFRvU2Nyb2xsLmhl
aWdodCgpOwotCi0gICAgREJHKCIlZCwlZCArICVkLCVkICUrMDNkLCUrMDNkLCBzdG9yZTogJXAg
JWR4JWQiLAotICAgICAgICBzY3JvbGxYLCBzY3JvbGxZLCBzY3JvbGxXaWR0aCwgc2Nyb2xsSGVp
Z2h0LCBzY3JvbGxPZmZzZXQud2lkdGgoKSwgc2Nyb2xsT2Zmc2V0LmhlaWdodCgpLCBwaXhlbHMs
IHdpZHRoLCBoZWlnaHQpOwotCi0gICAgaWYgKGFicyhzY3JvbGxPZmZzZXQud2lkdGgoKSkgPj0g
c2Nyb2xsV2lkdGggfHwgYWJzKHNjcm9sbE9mZnNldC5oZWlnaHQoKSkgPj0gc2Nyb2xsSGVpZ2h0
KSB7Ci0gICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNtYXJ0RGF0YS0+X3ByaXYsIHNjcm9s
bFgsIHNjcm9sbFksIHNjcm9sbFdpZHRoLCBzY3JvbGxIZWlnaHQpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKHNjcm9sbFggPCAwKSB7Ci0gICAgICAgIHNjcm9sbFdpZHRoICs9
IHNjcm9sbFg7Ci0gICAgICAgIHNjcm9sbFggPSAwOwotICAgIH0KLSAgICBpZiAoc2Nyb2xsWSA8
IDApIHsKLSAgICAgICAgc2Nyb2xsSGVpZ2h0ICs9IHNjcm9sbFk7Ci0gICAgICAgIHNjcm9sbFkg
PSAwOwotICAgIH0KLQotICAgIGlmIChzY3JvbGxYICsgc2Nyb2xsV2lkdGggPiB3aWR0aCkKLSAg
ICAgICAgc2Nyb2xsV2lkdGggPSB3aWR0aCAtIHNjcm9sbFg7Ci0gICAgaWYgKHNjcm9sbFkgKyBz
Y3JvbGxIZWlnaHQgPiBoZWlnaHQpCi0gICAgICAgIHNjcm9sbEhlaWdodCA9IGhlaWdodCAtIHNj
cm9sbFk7Ci0KLSAgICBpZiAoc2Nyb2xsV2lkdGggPD0gMCB8fCBzY3JvbGxIZWlnaHQgPD0gMCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IHNvdXJjZVggPSBzY3JvbGxPZmZzZXQud2lkdGgo
KSA8IDAgPyBhYnMoc2Nyb2xsT2Zmc2V0LndpZHRoKCkpIDogMDsKLSAgICBpbnQgc291cmNlWSA9
IHNjcm9sbE9mZnNldC5oZWlnaHQoKSA8IDAgPyBhYnMoc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKSA6
IDA7Ci0gICAgaW50IGRlc3RpbmF0aW9uWCA9IHNjcm9sbE9mZnNldC53aWR0aCgpIDwgMCA/IDAg
OiBzY3JvbGxPZmZzZXQud2lkdGgoKTsKLSAgICBpbnQgZGVzdGluYXRpb25ZID0gc2Nyb2xsT2Zm
c2V0LmhlaWdodCgpIDwgMCA/IDAgOiBzY3JvbGxPZmZzZXQuaGVpZ2h0KCk7Ci0gICAgaW50IGNv
cHlXaWR0aCA9IHNjcm9sbFdpZHRoIC0gYWJzKHNjcm9sbE9mZnNldC53aWR0aCgpKTsKLSAgICBp
bnQgY29weUhlaWdodCA9IHNjcm9sbEhlaWdodCAtIGFicyhzY3JvbGxPZmZzZXQuaGVpZ2h0KCkp
OwotICAgIGlmIChzY3JvbGxPZmZzZXQud2lkdGgoKSB8fCBzY3JvbGxPZmZzZXQuaGVpZ2h0KCkp
IHsKLSAgICAgICAgX2V3a192aWV3X3NjcmVlbl9tb3ZlKHN0YXRpY19jYXN0PHVpbnQzMl90Kj4o
cGl4ZWxzKSwgZGVzdGluYXRpb25YLCBkZXN0aW5hdGlvblksIHNvdXJjZVgsIHNvdXJjZVksIGNv
cHlXaWR0aCwgY29weUhlaWdodCwgd2lkdGgpOwotICAgICAgICBldmFzX29iamVjdF9pbWFnZV9k
YXRhX3VwZGF0ZV9hZGQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBkZXN0aW5hdGlvblgsIGRl
c3RpbmF0aW9uWSwgY29weVdpZHRoLCBjb3B5SGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBFaW5hX1Jl
Y3RhbmdsZSB2ZXJ0aWNhbFVwZGF0ZTsKLSAgICB2ZXJ0aWNhbFVwZGF0ZS54ID0gZGVzdGluYXRp
b25YID8gMCA6IGNvcHlXaWR0aCAtIDE7Ci0gICAgdmVydGljYWxVcGRhdGUueSA9IDA7Ci0gICAg
dmVydGljYWxVcGRhdGUudyA9IGFicyhzY3JvbGxPZmZzZXQud2lkdGgoKSk7Ci0gICAgdmVydGlj
YWxVcGRhdGUuaCA9IHNjcm9sbEhlaWdodDsKLSAgICBpZiAodmVydGljYWxVcGRhdGUudyAmJiB2
ZXJ0aWNhbFVwZGF0ZS5oKQotICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzbWFydERhdGEt
Pl9wcml2LCB2ZXJ0aWNhbFVwZGF0ZS54LCB2ZXJ0aWNhbFVwZGF0ZS55LCB2ZXJ0aWNhbFVwZGF0
ZS53LCB2ZXJ0aWNhbFVwZGF0ZS5oKTsKLQotICAgIEVpbmFfUmVjdGFuZ2xlIGhvcml6b250YWxV
cGRhdGU7Ci0gICAgaG9yaXpvbnRhbFVwZGF0ZS54ID0gZGVzdGluYXRpb25YOwotICAgIGhvcml6
b250YWxVcGRhdGUueSA9IGRlc3RpbmF0aW9uWSA/IDAgOiBjb3B5SGVpZ2h0IC0gMTsKLSAgICBo
b3Jpem9udGFsVXBkYXRlLncgPSBjb3B5V2lkdGg7Ci0gICAgaG9yaXpvbnRhbFVwZGF0ZS5oID0g
YWJzKHNjcm9sbE9mZnNldC5oZWlnaHQoKSk7Ci0gICAgaWYgKGhvcml6b250YWxVcGRhdGUudyAm
JiBob3Jpem9udGFsVXBkYXRlLmgpCi0gICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNtYXJ0
RGF0YS0+X3ByaXYsIGhvcml6b250YWxVcGRhdGUueCwgaG9yaXpvbnRhbFVwZGF0ZS55LCBob3Jp
em9udGFsVXBkYXRlLncsIGhvcml6b250YWxVcGRhdGUuaCk7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jv
b2wgX2V3a192aWV3X3NpbmdsZV9zbWFydF9zY3JvbGxzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRf
RGF0YSogc21hcnREYXRhKQotewotICAgIEV2YXNfQ29vcmQgaW1hZ2VXaWR0aCwgaW1hZ2VIZWln
aHQ7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9nZXQoc21hcnREYXRhLT5iYWNraW5nX3N0
b3JlLCAmaW1hZ2VXaWR0aCwgJmltYWdlSGVpZ2h0KTsKLQotICAgIGNvbnN0IFdURjo6VmVjdG9y
PFdlYkNvcmU6OkludFNpemU+JiBzY3JvbGxPZmZzZXRzID0gZXdrX3ZpZXdfc2Nyb2xsX29mZnNl
dHNfZ2V0KHNtYXJ0RGF0YS0+X3ByaXYpOwotICAgIGNvbnN0IFdURjo6VmVjdG9yPFdlYkNvcmU6
OkludFJlY3Q+JiByZWN0c1RvU2Nyb2xsID0gZXdrX3ZpZXdfc2Nyb2xsX3JlY3RzX2dldChzbWFy
dERhdGEtPl9wcml2KTsKLQotICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdFRvU2Nyb2xsKDAsIDAs
IGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KTsKLSAgICBXZWJDb3JlOjpJbnRTaXplIHNjcm9sbE9m
ZnNldDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNjcm9sbE9mZnNldHMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgcmVjdFRvU2Nyb2xsLmludGVyc2VjdChyZWN0c1RvU2Nyb2xsW2ldKTsK
LSAgICAgICAgc2Nyb2xsT2Zmc2V0ICs9IHNjcm9sbE9mZnNldHNbaV07Ci0gICAgfQotCi0gICAg
aWYgKHNjcm9sbE9mZnNldC5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICB2
b2lkKiBwaXhlbHMgPSBldmFzX29iamVjdF9pbWFnZV9kYXRhX2dldChzbWFydERhdGEtPmJhY2tp
bmdfc3RvcmUsIDEpOwotICAgIF9ld2tfdmlld19zaW5nbGVfc2Nyb2xsX3Byb2Nlc3Nfc2luZ2xl
KHNtYXJ0RGF0YSwgcGl4ZWxzLCBpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCwgc2Nyb2xsT2Zmc2V0
LCByZWN0VG9TY3JvbGwpOwotCi0gICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9zZXQoc21hcnRE
YXRhLT5iYWNraW5nX3N0b3JlLCBwaXhlbHMpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0
YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NpbmdsZV9zbWFydF9yZXBhaW50c19wcm9jZXNzKEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKLXsKLSAgICBpZiAoc21hcnREYXRhLT5hbmlt
YXRlZF96b29tLnpvb20uY3VycmVudCA8IDAuMDAwMDEpIHsKLSAgICAgICAgRXZhc19PYmplY3Qq
IGNsaXAgPSBldmFzX29iamVjdF9jbGlwX2dldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUpOwot
Ci0gICAgICAgIC8vIHJlc2V0IGVmZmVjdHMgb2Ygem9vbV93ZWFrX3NldCgpCi0gICAgICAgIGV2
YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgMCwgMCwg
c21hcnREYXRhLT52aWV3LncsIHNtYXJ0RGF0YS0+dmlldy5oKTsKLSAgICAgICAgZXZhc19vYmpl
Y3RfbW92ZShjbGlwLCBzbWFydERhdGEtPnZpZXcueCwgc21hcnREYXRhLT52aWV3LnkpOwotCi0g
ICAgICAgIEV2YXNfQ29vcmQgd2lkdGggPSBzbWFydERhdGEtPnZpZXcudzsKLSAgICAgICAgRXZh
c19Db29yZCBoZWlnaHQgPSBzbWFydERhdGEtPnZpZXcuaDsKLQotICAgICAgICBFdmFzX0Nvb3Jk
IGNlbnRlcldpZHRoLCBjZW50ZXJIZWlnaHQ7Ci0gICAgICAgIGV3a19mcmFtZV9jb250ZW50c19z
aXplX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZjZW50ZXJXaWR0aCwgJmNlbnRlckhlaWdo
dCk7Ci0gICAgICAgIGlmICh3aWR0aCA+IGNlbnRlcldpZHRoKQotICAgICAgICAgICAgd2lkdGgg
PSBjZW50ZXJXaWR0aDsKLQotICAgICAgICBpZiAoaGVpZ2h0ID4gY2VudGVySGVpZ2h0KQotICAg
ICAgICAgICAgaGVpZ2h0ID0gY2VudGVySGVpZ2h0OwotCi0gICAgICAgIGV2YXNfb2JqZWN0X3Jl
c2l6ZShjbGlwLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBFdmFzX0Nvb3JkIGltYWdl
V2lkdGgsIGltYWdlSGVpZ2h0OwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfZ2V0KHNtYXJ0
RGF0YS0+YmFja2luZ19zdG9yZSwgJmltYWdlV2lkdGgsICZpbWFnZUhlaWdodCk7Ci0KLSAgICBF
aW5hX1RpbGVyKiB0aWxlciA9IGVpbmFfdGlsZXJfbmV3KGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0
KTsKLSAgICBpZiAoIXRpbGVyKSB7Ci0gICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSB0aWxl
ciAlZHglZCIsIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGV3a192aWV3X2xheW91dF9pZl9uZWVkZWRfcmVjdXJzaXZlKHNtYXJ0
RGF0YS0+X3ByaXYpOwotCi0gICAgc2l6ZV90IGNvdW50OwotICAgIGNvbnN0IEVpbmFfUmVjdGFu
Z2xlKiBwYWludFJlcXVlc3QgPSBld2tfdmlld19yZXBhaW50c19wb3Aoc21hcnREYXRhLT5fcHJp
diwgJmNvdW50KTsKLSAgICBjb25zdCBFaW5hX1JlY3RhbmdsZSogcGFpbnRSZXF1ZXN0RW5kID0g
cGFpbnRSZXF1ZXN0ICsgY291bnQ7Ci0gICAgZm9yICg7IHBhaW50UmVxdWVzdCA8IHBhaW50UmVx
dWVzdEVuZDsgcGFpbnRSZXF1ZXN0KyspCi0gICAgICAgIGVpbmFfdGlsZXJfcmVjdF9hZGQodGls
ZXIsIHBhaW50UmVxdWVzdCk7Ci0KLSAgICBFaW5hX0l0ZXJhdG9yKiBpdGVyYXRvciA9IGVpbmFf
dGlsZXJfaXRlcmF0b3JfbmV3KHRpbGVyKTsKLSAgICBpZiAoIWl0ZXJhdG9yKSB7Ci0gICAgICAg
IEVSUigiY291bGQgbm90IGdldCBpdGVyYXRvciBmb3IgdGlsZXIiKTsKLSAgICAgICAgZWluYV90
aWxlcl9mcmVlKHRpbGVyKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotI2lmIFVT
RShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIFdlYkNvcmU6OkZyYW1lKiBtYWluRnJhbWUgPSBF
V0tQcml2YXRlOjpjb3JlRnJhbWUoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKLSAgICBpZiAobWFp
bkZyYW1lICYmIG1haW5GcmFtZS0+dGlsZWRCYWNraW5nU3RvcmUoKSkKLSAgICAgICAgbWFpbkZy
YW1lLT50aWxlZEJhY2tpbmdTdG9yZSgpLT5jb3ZlcldpdGhUaWxlc0lmTmVlZGVkKCk7Ci0jZW5k
aWYKLQotICAgIEV3a19QYWludF9Db250ZXh0KiBjb250ZXh0ID0gZXdrX3BhaW50X2NvbnRleHRf
ZnJvbV9pbWFnZV9uZXcoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlKTsKLSAgICBld2tfcGFpbnRf
Y29udGV4dF9zYXZlKGNvbnRleHQpOwotCi0gICAgRWluYV9SZWN0YW5nbGUqIHJlY3Q7Ci0gICAg
RUlOQV9JVEVSQVRPUl9GT1JFQUNIKGl0ZXJhdG9yLCByZWN0KSB7Ci0gICAgICAgIGV3a192aWV3
X3BhaW50KHNtYXJ0RGF0YS0+X3ByaXYsIGNvbnRleHQsIHJlY3QpOwotICAgICAgICBldmFzX29i
amVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCByZWN0
LT54LCByZWN0LT55LCByZWN0LT53LCByZWN0LT5oKTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoSU5T
UEVDVE9SKQotICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBFV0tQcml2YXRlOjpjb3JlUGFnZShz
bWFydERhdGEtPnNlbGYpOwotICAgIGlmIChwYWdlKSB7Ci0gICAgICAgIFdlYkNvcmU6Okluc3Bl
Y3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCk7
Ci0gICAgICAgIGlmIChjb250cm9sbGVyLT5oaWdobGlnaHRlZE5vZGUoKSkKLSAgICAgICAgICAg
IGNvbnRyb2xsZXItPmRyYXdIaWdobGlnaHQoKmNvbnRleHQtPmdyYXBoaWNDb250ZXh0KTsKLSAg
ICB9Ci0jZW5kaWYKLQotICAgIGV3a19wYWludF9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Ci0g
ICAgZXdrX3BhaW50X2NvbnRleHRfZnJlZShjb250ZXh0KTsKLQotICAgIGVpbmFfdGlsZXJfZnJl
ZSh0aWxlcik7Ci0gICAgZWluYV9pdGVyYXRvcl9mcmVlKGl0ZXJhdG9yKTsKLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zaW5nbGVfc21hcnRfem9v
bV93ZWFrX3NldChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGZsb2F0IHpvb20sIEV2
YXNfQ29vcmQgY2VudGVyWCwgRXZhc19Db29yZCBjZW50ZXJZKQotewotICAgIC8vIFRPRE86IHJl
dmlldwotICAgIGZsb2F0IHNjYWxlID0gem9vbSAvIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56
b29tLnN0YXJ0OwotICAgIEV2YXNfQ29vcmQgdyA9IHNtYXJ0RGF0YS0+dmlldy53ICogc2NhbGU7
Ci0gICAgRXZhc19Db29yZCBoID0gc21hcnREYXRhLT52aWV3LmggKiBzY2FsZTsKLSAgICBFdmFz
X0Nvb3JkIGR4LCBkeSwgY3csIGNoOwotICAgIEV2YXNfT2JqZWN0KiBjbGlwID0gZXZhc19vYmpl
Y3RfY2xpcF9nZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlKTsKLQotICAgIGV3a19mcmFtZV9j
b250ZW50c19zaXplX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZjdywgJmNoKTsKLSAgICBp
ZiAoc21hcnREYXRhLT52aWV3LncgPiAwICYmIHNtYXJ0RGF0YS0+dmlldy5oID4gMCkgewotICAg
ICAgICBkeCA9ICh3ICogKHNtYXJ0RGF0YS0+dmlldy53IC0gY2VudGVyWCkpIC8gc21hcnREYXRh
LT52aWV3Lnc7Ci0gICAgICAgIGR5ID0gKGggKiAoc21hcnREYXRhLT52aWV3LmggLSBjZW50ZXJZ
KSkgLyBzbWFydERhdGEtPnZpZXcuaDsKLSAgICB9IGVsc2UgewotICAgICAgICBkeCA9IDA7Ci0g
ICAgICAgIGR5ID0gMDsKLSAgICB9Ci0KLSAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3NldChz
bWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIGNlbnRlclggKyBkeCwgY2VudGVyWSArIGR5LCB3LCBo
KTsKLQotICAgIGlmIChzbWFydERhdGEtPnZpZXcudyA+IDAgJiYgc21hcnREYXRhLT52aWV3Lmgg
PiAwKSB7Ci0gICAgICAgIGR4ID0gKChzbWFydERhdGEtPnZpZXcudyAtIHcpICogY2VudGVyWCkg
LyBzbWFydERhdGEtPnZpZXcudzsKLSAgICAgICAgZHkgPSAoKHNtYXJ0RGF0YS0+dmlldy5oIC0g
aCkgKiBjZW50ZXJZKSAvIHNtYXJ0RGF0YS0+dmlldy5oOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGR4ID0gMDsKLSAgICAgICAgZHkgPSAwOwotICAgIH0KLSAgICBldmFzX29iamVjdF9tb3ZlKGNs
aXAsIHNtYXJ0RGF0YS0+dmlldy54ICsgZHgsIHNtYXJ0RGF0YS0+dmlldy55ICsgZHkpOwotCi0g
ICAgaWYgKGN3IDwgc21hcnREYXRhLT52aWV3LncpCi0gICAgICAgIHcgPSBjdyAqIHNjYWxlOwot
ICAgIGlmIChjaCA8IHNtYXJ0RGF0YS0+dmlldy5oKQotICAgICAgICBoID0gY2ggKiBzY2FsZTsK
LSAgICBldmFzX29iamVjdF9yZXNpemUoY2xpcCwgdywgaCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zaW5nbGVfc21hcnRfem9vbV93ZWFrX3Ntb290aF9z
Y2FsZV9zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBFaW5hX0Jvb2wgc21vb3Ro
X3NjYWxlKQotewotICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9zY2FsZV9zZXQoc21hcnRE
YXRhLT5iYWNraW5nX3N0b3JlLCBzbW9vdGhfc2NhbGUpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdr
X3ZpZXdfc2luZ2xlX3NtYXJ0X2JnX2NvbG9yX3NldChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFy
dERhdGEsIHVuc2lnbmVkIGNoYXIgLypyZWQqLywgdW5zaWduZWQgY2hhciAvKmdyZWVuKi8sIHVu
c2lnbmVkIGNoYXIgLypibHVlKi8sIHVuc2lnbmVkIGNoYXIgYWxwaGEpCi17Ci0gICAgZXZhc19v
YmplY3RfaW1hZ2VfYWxwaGFfc2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgYWxwaGEgPCAy
NTUpOwotfQotCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3NldChFd2tfVmlld19T
bWFydF9DbGFzcyogYXBpKQotewotICAgIGlmICghZXdrX3ZpZXdfYmFzZV9zbWFydF9zZXQoYXBp
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKEVJTkFfVU5MSUtFTFkoIV9wYXJl
bnRfc2Muc2MuYWRkKSkKLSAgICAgICAgZXdrX3ZpZXdfYmFzZV9zbWFydF9zZXQoJl9wYXJlbnRf
c2MpOwotCi0gICAgYXBpLT5zYy5hZGQgPSBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2FkZDsKLSAg
ICBhcGktPnNjLnJlc2l6ZSA9IF9ld2tfdmlld19zaW5nbGVfc21hcnRfcmVzaXplOwotCi0gICAg
YXBpLT5iYWNraW5nX3N0b3JlX2FkZCA9IF9ld2tfdmlld19zaW5nbGVfc21hcnRfYmFja2luZ19z
dG9yZV9hZGQ7Ci0gICAgYXBpLT5zY3JvbGxzX3Byb2Nlc3MgPSBfZXdrX3ZpZXdfc2luZ2xlX3Nt
YXJ0X3Njcm9sbHNfcHJvY2VzczsKLSAgICBhcGktPnJlcGFpbnRzX3Byb2Nlc3MgPSBfZXdrX3Zp
ZXdfc2luZ2xlX3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3M7Ci0gICAgYXBpLT56b29tX3dlYWtfc2V0
ID0gX2V3a192aWV3X3NpbmdsZV9zbWFydF96b29tX3dlYWtfc2V0OwotICAgIGFwaS0+em9vbV93
ZWFrX3Ntb290aF9zY2FsZV9zZXQgPSBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3pvb21fd2Vha19z
bW9vdGhfc2NhbGVfc2V0OwotICAgIGFwaS0+YmdfY29sb3Jfc2V0ID0gX2V3a192aWV3X3Npbmds
ZV9zbWFydF9iZ19jb2xvcl9zZXQ7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGlu
bGluZSBFdmFzX1NtYXJ0KiBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2NsYXNzX25ldyh2b2lkKQot
ewotICAgIHN0YXRpYyBFd2tfVmlld19TbWFydF9DbGFzcyBhcGkgPSBFV0tfVklFV19TTUFSVF9D
TEFTU19JTklUX05BTUVfVkVSU0lPTihld2tWaWV3U2luZ2xlTmFtZSk7Ci0gICAgc3RhdGljIEV2
YXNfU21hcnQqIHNtYXJ0ID0gMDsKLQotICAgIGlmIChFSU5BX1VOTElLRUxZKCFzbWFydCkpIHsK
LSAgICAgICAgZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3NldCgmYXBpKTsKLSAgICAgICAgc21hcnQg
PSBldmFzX3NtYXJ0X2NsYXNzX25ldygmYXBpLnNjKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc21h
cnQ7Ci19Ci0KLUV2YXNfT2JqZWN0KiBld2tfdmlld19zaW5nbGVfYWRkKEV2YXMqIGNhbnZhcykK
LXsKLSAgICByZXR1cm4gZXZhc19vYmplY3Rfc21hcnRfYWRkKGNhbnZhcywgX2V3a192aWV3X3Np
bmdsZV9zbWFydF9jbGFzc19uZXcoKSk7Ci19Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>