<?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>66149</bug_id>
          
          <creation_ts>2011-08-12 11:41:29 -0700</creation_ts>
          <short_desc>Switch RenderMenuList, RenderListBox, and RenderFieldSet to new layout units</short_desc>
          <delta_ts>2011-08-12 14:35:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</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>
          
          <blocked>63567</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Levi Weintraub">leviw</reporter>
          <assigned_to name="Levi Weintraub">leviw</assigned_to>
          <cc>eae</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>450527</commentid>
    <comment_count>0</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-08-12 11:41:29 -0700</bug_when>
    <thetext>Ongoing conversion effort...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450577</commentid>
    <comment_count>1</comment_count>
      <attachid>103797</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-08-12 12:42:48 -0700</bug_when>
    <thetext>Created attachment 103797
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450611</commentid>
    <comment_count>2</comment_count>
      <attachid>103797</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-08-12 13:17:09 -0700</bug_when>
    <thetext>Comment on attachment 103797
Patch

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

&gt; Source/WebCore/rendering/RenderListBox.cpp:484
&gt; +    IntPoint currentMousePosition = roundedIntPoint(frame()-&gt;eventHandler()-&gt;currentMousePosition());

Sad times.  That we&apos;re rounding. :(

&gt; Source/WebCore/rendering/RenderListBox.cpp:526
&gt; +    LayoutUnit offsetX = destination.x() - absPos.x();
&gt; +    LayoutUnit offsetY = destination.y() - absPos.y();

Sounds like a size to me. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450637</commentid>
    <comment_count>3</comment_count>
      <attachid>103810</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-08-12 13:49:34 -0700</bug_when>
    <thetext>Created attachment 103810
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450673</commentid>
    <comment_count>4</comment_count>
      <attachid>103810</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-12 14:35:17 -0700</bug_when>
    <thetext>Comment on attachment 103810
Patch for landing

Clearing flags on attachment: 103810

Committed r92998: &lt;http://trac.webkit.org/changeset/92998&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450675</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-12 14:35:21 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103797</attachid>
            <date>2011-08-12 12:42:48 -0700</date>
            <delta_ts>2011-08-12 13:49:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66149-20110812124247.patch</filename>
            <type>text/plain</type>
            <size>24497</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkyOTc2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTEtMDgtMTIgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN3aXRjaCBSZW5kZXJNZW51
TGlzdCwgUmVuZGVyTGlzdEJveCwgYW5kIFJlbmRlckZpZWxkU2V0IHRvIG5ldyBsYXlvdXQgdW5p
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MTQ5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdp
bmcgUmVuZGVyTWVudUxpc3QsIFJlbmRlckxpc3RCb3gsIGFuZCBSZW5kZXJGaWVsZFNldCB0byB0
aGUgTGF5b3V0VW5pdAorICAgICAgICBhYnN0cmFjdGlvbiBmcm9tIGludHMuCisKKyAgICAgICAg
Tm8gdGVzdHMgYXMgbm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmllbGRz
ZXQ6OmxheW91dFNwZWNpYWxFeGNsdWRlZENoaWxkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpudW1WaXNp
YmxlSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6bGlzdEhlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpiYXNlbGluZVBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6Oml0ZW1Cb3VuZGluZ0JveFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6aXRlbU9mZnNldEZvckFsaWdubWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMaXN0Qm94OjpwYW5TY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlz
dEJveDo6c2Nyb2xsVG93YXJkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmF1
dG9zY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2Nyb2xsU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGxQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxPZmZzZXQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6aXRlbUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMaXN0Qm94Ojp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxpc3RCb3g6OnNjcm9sbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxp
c3RCb3g6OnNjcm9sbEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpz
Y3JvbGxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNldFNjcm9sbExl
ZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2Nyb2xsVG9wKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNldFNjcm9sbFRvcCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMaXN0Qm94Ojpjb250cm9sQ2xpcFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGlzdEJveDo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGlzdEJveDo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXdUb1Njcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpjb250ZW50
c1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6Y3VycmVudE1vdXNlUG9z
aXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGxDb3JuZXJSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxpc3RCb3g6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWVudUxpc3Q6OmNvbnRyb2xDbGlwUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51
TGlzdDo6c2hvd1BvcHVwKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaDoK
KwogMjAxMS0wOC0xMiAgRmFkeSBTYW11ZWwgIDxmc2FtdWVsQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZWZhY3RvcmluZyBvZiBQb3B1cE1lbnVDaHJvbWl1bQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCShyZXZpc2lvbiA5Mjk2NikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY4LDcgKzY4LDcgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJGaWVsZHNldDo6bGF5b3V0U3Bl
YwogICAgICAgICAgICAgbGVnZW5kLT5zZXROZWVkc0xheW91dCh0cnVlKTsKICAgICAgICAgbGVn
ZW5kLT5sYXlvdXRJZk5lZWRlZCgpOwogCi0gICAgICAgIGludCBsb2dpY2FsTGVmdDsKKyAgICAg
ICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdDsKICAgICAgICAgaWYgKHN0eWxlKCktPmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSkgewogICAgICAgICAgICAgc3dpdGNoIChsZWdlbmQtPnN0eWxlKCkt
PnRleHRBbGlnbigpKSB7CiAgICAgICAgICAgICBjYXNlIENFTlRFUjoKQEAgLTg5LDcgKzg5LDcg
QEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJGaWVsZHNldDo6bGF5b3V0U3BlYwogICAgICAgICAgICAg
Y2FzZSBDRU5URVI6IHsKICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZXh0
cmEgcGl4ZWwgZ29lcyB0byB0aGUgZW5kIHNpZGUgaW4gUlRMIChzaW5jZSBpdCB3ZW50IHRvIHRo
ZSBlbmQgc2lkZQogICAgICAgICAgICAgICAgIC8vIGluIExUUikuCi0gICAgICAgICAgICAgICAg
aW50IGNlbnRlcmVkV2lkdGggPSBsb2dpY2FsV2lkdGgoKSAtIGxvZ2ljYWxXaWR0aEZvckNoaWxk
KGxlZ2VuZCk7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBjZW50ZXJlZFdpZHRoID0gbG9n
aWNhbFdpZHRoKCkgLSBsb2dpY2FsV2lkdGhGb3JDaGlsZChsZWdlbmQpOwogICAgICAgICAgICAg
ICAgIGxvZ2ljYWxMZWZ0ID0gY2VudGVyZWRXaWR0aCAtIGNlbnRlcmVkV2lkdGggLyAyOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTAxLDkgKzEwMSw5IEBAIFJl
bmRlck9iamVjdCogUmVuZGVyRmllbGRzZXQ6OmxheW91dFNwZWMKIAogICAgICAgICBzZXRMb2dp
Y2FsTGVmdEZvckNoaWxkKGxlZ2VuZCwgbG9naWNhbExlZnQpOwogCi0gICAgICAgIGludCBiID0g
Ym9yZGVyQmVmb3JlKCk7Ci0gICAgICAgIGludCBoID0gbG9naWNhbEhlaWdodEZvckNoaWxkKGxl
Z2VuZCk7Ci0gICAgICAgIHNldExvZ2ljYWxUb3BGb3JDaGlsZChsZWdlbmQsIG1heCgoYiAtIGgp
IC8gMiwgMCkpOworICAgICAgICBMYXlvdXRVbml0IGIgPSBib3JkZXJCZWZvcmUoKTsKKyAgICAg
ICAgTGF5b3V0VW5pdCBoID0gbG9naWNhbEhlaWdodEZvckNoaWxkKGxlZ2VuZCk7CisgICAgICAg
IHNldExvZ2ljYWxUb3BGb3JDaGlsZChsZWdlbmQsIG1heDxMYXlvdXRVbml0PigoYiAtIGgpIC8g
MiwgMCkpOwogICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KG1heChiLCBoKSArIHBhZGRpbmdCZWZv
cmUoKSk7CiAgICAgfQogICAgIHJldHVybiBsZWdlbmQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA5Mjk2NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE3
LDcgKzIxNyw3IEBAIGludCBSZW5kZXJMaXN0Qm94OjpzaXplKCkgY29uc3QKIGludCBSZW5kZXJM
aXN0Qm94OjpudW1WaXNpYmxlSXRlbXMoKSBjb25zdAogewogICAgIC8vIE9ubHkgY291bnQgZnVs
bHkgdmlzaWJsZSByb3dzLiBCdXQgZG9uJ3QgcmV0dXJuIDAgZXZlbiBpZiBvbmx5IHBhcnQgb2Yg
YSByb3cgc2hvd3MuCi0gICAgcmV0dXJuIG1heCgxLCAoY29udGVudEhlaWdodCgpICsgcm93U3Bh
Y2luZykgLyBpdGVtSGVpZ2h0KCkpOworICAgIHJldHVybiBtYXg8aW50PigxLCAoY29udGVudEhl
aWdodCgpICsgcm93U3BhY2luZykgLyBpdGVtSGVpZ2h0KCkpOwogfQogCiBpbnQgUmVuZGVyTGlz
dEJveDo6bnVtSXRlbXMoKSBjb25zdApAQCAtMjI1LDcgKzIyNSw3IEBAIGludCBSZW5kZXJMaXN0
Qm94OjpudW1JdGVtcygpIGNvbnN0CiAgICAgcmV0dXJuIHRvU2VsZWN0RWxlbWVudChzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4obm9kZSgpKSktPmxpc3RJdGVtcygpLnNpemUoKTsKIH0KIAotaW50IFJl
bmRlckxpc3RCb3g6Omxpc3RIZWlnaHQoKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJMaXN0Qm94
OjpsaXN0SGVpZ2h0KCkgY29uc3QKIHsKICAgICByZXR1cm4gaXRlbUhlaWdodCgpICogbnVtSXRl
bXMoKSAtIHJvd1NwYWNpbmc7CiB9CkBAIC0yNDksMTQgKzI0OSwxNCBAQCB2b2lkIFJlbmRlckxp
c3RCb3g6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0CiAgICAgfQogfQogCi1pbnQgUmVuZGVyTGlzdEJv
eDo6YmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlLCBib29sIGZpcnN0
TGluZSwgTGluZURpcmVjdGlvbk1vZGUgbGluZURpcmVjdGlvbiwgTGluZVBvc2l0aW9uTW9kZSBs
aW5lUG9zaXRpb25Nb2RlKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJMaXN0Qm94OjpiYXNlbGlu
ZVBvc2l0aW9uKEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUsIGJvb2wgZmlyc3RMaW5lLCBMaW5l
RGlyZWN0aW9uTW9kZSBsaW5lRGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3NpdGlv
bk1vZGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFJlbmRlckJveDo6YmFzZWxpbmVQb3NpdGlvbihi
YXNlbGluZVR5cGUsIGZpcnN0TGluZSwgbGluZURpcmVjdGlvbiwgbGluZVBvc2l0aW9uTW9kZSkg
LSBiYXNlbGluZUFkanVzdG1lbnQ7CiB9CiAKLUludFJlY3QgUmVuZGVyTGlzdEJveDo6aXRlbUJv
dW5kaW5nQm94UmVjdChjb25zdCBMYXlvdXRQb2ludCYgYWRkaXRpb25hbE9mZnNldCwgaW50IGlu
ZGV4KQorTGF5b3V0UmVjdCBSZW5kZXJMaXN0Qm94OjppdGVtQm91bmRpbmdCb3hSZWN0KGNvbnN0
IExheW91dFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0LCBpbnQgaW5kZXgpCiB7Ci0gICAgcmV0dXJu
IEludFJlY3QoYWRkaXRpb25hbE9mZnNldC54KCkgKyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVm
dCgpLAorICAgIHJldHVybiBMYXlvdXRSZWN0KGFkZGl0aW9uYWxPZmZzZXQueCgpICsgYm9yZGVy
TGVmdCgpICsgcGFkZGluZ0xlZnQoKSwKICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsT2Zm
c2V0LnkoKSArIGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpICsgaXRlbUhlaWdodCgpICogKGlu
ZGV4IC0gbV9pbmRleE9mZnNldCksCiAgICAgICAgICAgICAgICAgICAgY29udGVudFdpZHRoKCks
IGl0ZW1IZWlnaHQoKSk7CiB9CkBAIC0zNDIsMTQgKzM0MiwxNCBAQCB2b2lkIFJlbmRlckxpc3RC
b3g6OnBhaW50U2Nyb2xsYmFyKFBhaW50CiAgICAgfQogfQogCi1zdGF0aWMgSW50U2l6ZSBpdGVt
T2Zmc2V0Rm9yQWxpZ25tZW50KFRleHRSdW4gdGV4dFJ1biwgUmVuZGVyU3R5bGUqIGl0ZW1TdHls
ZSwgRm9udCBpdGVtRm9udCwgSW50UmVjdCBpdGVtQm91ZGluZ0JveCkKK3N0YXRpYyBMYXlvdXRT
aXplIGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQoVGV4dFJ1biB0ZXh0UnVuLCBSZW5kZXJTdHlsZSog
aXRlbVN0eWxlLCBGb250IGl0ZW1Gb250LCBMYXlvdXRSZWN0IGl0ZW1Cb3VkaW5nQm94KQogewog
ICAgIEVUZXh0QWxpZ24gYWN0dWFsQWxpZ25tZW50ID0gaXRlbVN0eWxlLT50ZXh0QWxpZ24oKTsK
ICAgICAvLyBGSVhNRTogRmlyZWZveCBkb2Vzbid0IHJlc3BlY3QgSlVTVElGWS4gU2hvdWxkIHdl
PwogICAgIGlmIChhY3R1YWxBbGlnbm1lbnQgPT0gVEFBVVRPIHx8IGFjdHVhbEFsaWdubWVudCA9
PSBKVVNUSUZZKQogICAgICAgYWN0dWFsQWxpZ25tZW50ID0gaXRlbVN0eWxlLT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgPyBMRUZUIDogUklHSFQ7CiAKLSAgICBJbnRTaXplIG9mZnNldCA9IElu
dFNpemUoMCwgaXRlbUZvbnQuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CisgICAgTGF5b3V0U2l6
ZSBvZmZzZXQgPSBMYXlvdXRTaXplKDAsIGl0ZW1Gb250LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkp
OwogICAgIGlmIChhY3R1YWxBbGlnbm1lbnQgPT0gUklHSFQgfHwgYWN0dWFsQWxpZ25tZW50ID09
IFdFQktJVF9SSUdIVCkgewogICAgICAgICBmbG9hdCB0ZXh0V2lkdGggPSBpdGVtRm9udC53aWR0
aCh0ZXh0UnVuKTsKICAgICAgICAgb2Zmc2V0LnNldFdpZHRoKGl0ZW1Cb3VkaW5nQm94LndpZHRo
KCkgLSB0ZXh0V2lkdGggLSBvcHRpb25zU3BhY2luZ0hvcml6b250YWwpOwpAQCAtNDgxLDcgKzQ4
MSw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFuU2Nyb2xsKGNvbnN0IEludFAKICAgICAvLyBG
SVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KICAgICBG
bG9hdFBvaW50IGFic09mZnNldCA9IGxvY2FsVG9BYnNvbHV0ZSgpOwogCi0gICAgSW50UG9pbnQg
Y3VycmVudE1vdXNlUG9zaXRpb24gPSBmcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+Y3VycmVudE1v
dXNlUG9zaXRpb24oKTsKKyAgICBJbnRQb2ludCBjdXJyZW50TW91c2VQb3NpdGlvbiA9IHJvdW5k
ZWRJbnRQb2ludChmcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+Y3VycmVudE1vdXNlUG9zaXRpb24o
KSk7CiAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgY3VycmVudCBtb3VzZSBwb3NpdGlv
biBpcyBvdXQgb2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUgbW91c2UgaXMgb3V0IG9mIHRoZSB3aW5k
b3csIHRoZSBwb3NpdGlvbiBpcyBpbmNvaGVyZW50CiAgICAgc3RhdGljIEludFBvaW50IHByZXZp
b3VzTW91c2VQb3NpdGlvbjsKICAgICBpZiAoY3VycmVudE1vdXNlUG9zaXRpb24ueSgpIDwgMCkK
QEAgLTQ4OSwxMCArNDg5LDEwIEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFuU2Nyb2xsKGNvbnN0
IEludFAKICAgICBlbHNlCiAgICAgICAgIHByZXZpb3VzTW91c2VQb3NpdGlvbiA9IGN1cnJlbnRN
b3VzZVBvc2l0aW9uOwogCi0gICAgaW50IHlEZWx0YSA9IGN1cnJlbnRNb3VzZVBvc2l0aW9uLnko
KSAtIHBhblN0YXJ0TW91c2VQb3NpdGlvbi55KCk7CisgICAgTGF5b3V0VW5pdCB5RGVsdGEgPSBj
dXJyZW50TW91c2VQb3NpdGlvbi55KCkgLSBwYW5TdGFydE1vdXNlUG9zaXRpb24ueSgpOwogCiAg
ICAgLy8gSWYgdGhlIHBvaW50IGlzIHRvbyBmYXIgZnJvbSB0aGUgY2VudGVyIHdlIGxpbWl0IHRo
ZSBzcGVlZAotICAgIHlEZWx0YSA9IG1heChtaW4oeURlbHRhLCBtYXhTcGVlZCksIC1tYXhTcGVl
ZCk7CisgICAgeURlbHRhID0gbWF4PExheW91dFVuaXQ+KG1pbjxMYXlvdXRVbml0Pih5RGVsdGEs
IG1heFNwZWVkKSwgLW1heFNwZWVkKTsKICAgICAKICAgICBpZiAoYWJzKHlEZWx0YSkgPCBpY29u
UmFkaXVzKSAvLyBhdCB0aGUgY2VudGVyIHdlIGxldCB0aGUgc3BhY2UgZm9yIHRoZSBpY29uCiAg
ICAgICAgIHJldHVybjsKQEAgLTUwNiw5ICs1MDYsOSBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBh
blNjcm9sbChjb25zdCBJbnRQCiAgICAgLy8gTGV0J3MgYXR0ZW51YXRlIHRoZSBzcGVlZAogICAg
IHlEZWx0YSAvPSBzcGVlZFJlZHVjZXI7CiAKLSAgICBJbnRQb2ludCBzY3JvbGxQb2ludCgwLCAw
KTsKKyAgICBMYXlvdXRQb2ludCBzY3JvbGxQb2ludCgwLCAwKTsKICAgICBzY3JvbGxQb2ludC5z
ZXRZKGFic09mZnNldC55KCkgKyB5RGVsdGEpOwotICAgIGludCBuZXdPZmZzZXQgPSBzY3JvbGxU
b3dhcmQoc2Nyb2xsUG9pbnQpOworICAgIExheW91dFVuaXQgbmV3T2Zmc2V0ID0gc2Nyb2xsVG93
YXJkKHNjcm9sbFBvaW50KTsKICAgICBpZiAobmV3T2Zmc2V0IDwgMCkgCiAgICAgICAgIHJldHVy
bjsKIApAQCAtNTE4LDEyICs1MTgsMTIgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYW5TY3JvbGwo
Y29uc3QgSW50UAogICAgIG1faW5BdXRvc2Nyb2xsID0gZmFsc2U7CiB9CiAKLWludCBSZW5kZXJM
aXN0Qm94OjpzY3JvbGxUb3dhcmQoY29uc3QgSW50UG9pbnQmIGRlc3RpbmF0aW9uKQoraW50IFJl
bmRlckxpc3RCb3g6OnNjcm9sbFRvd2FyZChjb25zdCBMYXlvdXRQb2ludCYgZGVzdGluYXRpb24p
CiB7CiAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5z
Zm9ybXMuCiAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGUoKTsKLSAgICBp
bnQgb2Zmc2V0WCA9IGRlc3RpbmF0aW9uLngoKSAtIGFic1Bvcy54KCk7Ci0gICAgaW50IG9mZnNl
dFkgPSBkZXN0aW5hdGlvbi55KCkgLSBhYnNQb3MueSgpOworICAgIExheW91dFVuaXQgb2Zmc2V0
WCA9IGRlc3RpbmF0aW9uLngoKSAtIGFic1Bvcy54KCk7CisgICAgTGF5b3V0VW5pdCBvZmZzZXRZ
ID0gZGVzdGluYXRpb24ueSgpIC0gYWJzUG9zLnkoKTsKIAogICAgIGludCByb3dzID0gbnVtVmlz
aWJsZUl0ZW1zKCk7CiAgICAgaW50IG9mZnNldCA9IG1faW5kZXhPZmZzZXQ7CkBAIC01MzksNyAr
NTM5LDcgQEAgaW50IFJlbmRlckxpc3RCb3g6OnNjcm9sbFRvd2FyZChjb25zdCBJbgogCiB2b2lk
IFJlbmRlckxpc3RCb3g6OmF1dG9zY3JvbGwoKQogewotICAgIEludFBvaW50IHBvcyA9IGZyYW1l
KCktPnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhmcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+Y3Vy
cmVudE1vdXNlUG9zaXRpb24oKSk7CisgICAgTGF5b3V0UG9pbnQgcG9zID0gZnJhbWUoKS0+dmll
dygpLT53aW5kb3dUb0NvbnRlbnRzKGZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5jdXJyZW50TW91
c2VQb3NpdGlvbigpKTsKIAogICAgIGludCBlbmRJbmRleCA9IHNjcm9sbFRvd2FyZChwb3MpOwog
ICAgIGlmIChlbmRJbmRleCA+PSAwKSB7CkBAIC01OTksMTcgKzU5OSwxNyBAQCB2b2lkIFJlbmRl
ckxpc3RCb3g6OnZhbHVlQ2hhbmdlZCh1bnNpZ25lCiAgICAgZWxlbWVudC0+ZGlzcGF0Y2hGb3Jt
Q29udHJvbENoYW5nZUV2ZW50KCk7CiB9CiAKLWludCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxTaXpl
KFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAorTGF5b3V0VW5pdCBSZW5k
ZXJMaXN0Qm94OjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBj
b25zdAogewogICAgIHJldHVybiAoKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKSAm
JiBtX3ZCYXIpID8gKG1fdkJhci0+dG90YWxTaXplKCkgLSBtX3ZCYXItPnZpc2libGVTaXplKCkp
IDogMDsKIH0KIAotaW50IFJlbmRlckxpc3RCb3g6OnNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciop
IGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckxpc3RCb3g6OnNjcm9sbFBvc2l0aW9uKFNjcm9sbGJh
ciopIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW5kZXhPZmZzZXQ7CiB9CiAKLXZvaWQgUmVuZGVy
TGlzdEJveDo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit2b2lkIFJl
bmRlckxpc3RCb3g6OnNldFNjcm9sbE9mZnNldChjb25zdCBMYXlvdXRQb2ludCYgb2Zmc2V0KQog
ewogICAgIHNjcm9sbFRvKG9mZnNldC55KCkpOwogfQpAQCAtNjI0LDQ0ICs2MjQsNDQgQEAgdm9p
ZCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxUbyhpbnQgbmV3T2ZmcwogICAgIG5vZGUoKS0+ZG9jdW1l
bnQoKS0+ZXZlbnRRdWV1ZSgpLT5lbnF1ZXVlT3JEaXNwYXRjaFNjcm9sbEV2ZW50KG5vZGUoKSwg
RXZlbnRRdWV1ZTo6U2Nyb2xsRXZlbnRFbGVtZW50VGFyZ2V0KTsKIH0KIAotaW50IFJlbmRlckxp
c3RCb3g6Oml0ZW1IZWlnaHQoKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJMaXN0Qm94OjppdGVt
SGVpZ2h0KCkgY29uc3QKIHsKICAgICByZXR1cm4gc3R5bGUoKS0+Zm9udE1ldHJpY3MoKS5oZWln
aHQoKSArIHJvd1NwYWNpbmc7CiB9CiAKLWludCBSZW5kZXJMaXN0Qm94Ojp2ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoKCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyTGlzdEJveDo6dmVydGljYWxTY3Jv
bGxiYXJXaWR0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fdkJhciAmJiAhbV92QmFyLT5pc092
ZXJsYXlTY3JvbGxiYXIoKSA/IG1fdkJhci0+d2lkdGgoKSA6IDA7CiB9CiAKIC8vIEZJWE1FOiBX
ZSBpZ25vcmUgcGFkZGluZyBpbiB0aGUgdmVydGljYWwgZGlyZWN0aW9uIGFzIGZhciBhcyB0aGVz
ZSB2YWx1ZXMgYXJlIGNvbmNlcm5lZCwgc2luY2UgdGhhdCdzCiAvLyBob3cgdGhlIGNvbnRyb2wg
Y3VycmVudGx5IHBhaW50cy4KLWludCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxXaWR0aCgpIGNvbnN0
CitMYXlvdXRVbml0IFJlbmRlckxpc3RCb3g6OnNjcm9sbFdpZHRoKCkgY29uc3QKIHsKICAgICAv
LyBUaGVyZSBpcyBubyBob3Jpem9udGFsIHNjcm9sbGluZyBhbGxvd2VkLgogICAgIHJldHVybiBj
bGllbnRXaWR0aCgpOwogfQogCi1pbnQgUmVuZGVyTGlzdEJveDo6c2Nyb2xsSGVpZ2h0KCkgY29u
c3QKK0xheW91dFVuaXQgUmVuZGVyTGlzdEJveDo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbWF4KGNsaWVudEhlaWdodCgpLCBsaXN0SGVpZ2h0KCkpOwogfQogCi1pbnQgUmVu
ZGVyTGlzdEJveDo6c2Nyb2xsTGVmdCgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckxpc3RCb3g6
OnNjcm9sbExlZnQoKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi12b2lkIFJlbmRlckxp
c3RCb3g6OnNldFNjcm9sbExlZnQoaW50KQordm9pZCBSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxM
ZWZ0KExheW91dFVuaXQpCiB7CiB9CiAKLWludCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxUb3AoKSBj
b25zdAorTGF5b3V0VW5pdCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxUb3AoKSBjb25zdAogewogICAg
IHJldHVybiBtX2luZGV4T2Zmc2V0ICogaXRlbUhlaWdodCgpOwogfQogCi12b2lkIFJlbmRlckxp
c3RCb3g6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wKQordm9pZCBSZW5kZXJMaXN0Qm94OjpzZXRT
Y3JvbGxUb3AoTGF5b3V0VW5pdCBuZXdUb3ApCiB7CiAgICAgLy8gRGV0ZXJtaW5lIGFuIGluZGV4
IGFuZCBzY3JvbGwgdG8gaXQuICAgIAogICAgIGludCBpbmRleCA9IG5ld1RvcCAvIGl0ZW1IZWln
aHQoKTsKQEAgLTY5NCw5ICs2OTQsOSBAQCBib29sIFJlbmRlckxpc3RCb3g6Om5vZGVBdFBvaW50
KGNvbnN0IEhpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUludFJlY3QgUmVuZGVyTGlzdEJveDo6
Y29udHJvbENsaXBSZWN0KGNvbnN0IEludFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0KSBjb25zdAor
TGF5b3V0UmVjdCBSZW5kZXJMaXN0Qm94Ojpjb250cm9sQ2xpcFJlY3QoY29uc3QgTGF5b3V0UG9p
bnQmIGFkZGl0aW9uYWxPZmZzZXQpIGNvbnN0CiB7Ci0gICAgSW50UmVjdCBjbGlwUmVjdCA9IGNv
bnRlbnRCb3hSZWN0KCk7CisgICAgTGF5b3V0UmVjdCBjbGlwUmVjdCA9IGNvbnRlbnRCb3hSZWN0
KCk7CiAgICAgY2xpcFJlY3QubW92ZUJ5KGFkZGl0aW9uYWxPZmZzZXQpOwogICAgIHJldHVybiBj
bGlwUmVjdDsKIH0KQEAgLTcwNyw3NCArNzA3LDc0IEBAIGJvb2wgUmVuZGVyTGlzdEJveDo6aXNB
Y3RpdmUoKSBjb25zdAogICAgIHJldHVybiBwYWdlICYmIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigp
LT5pc0FjdGl2ZSgpOwogfQogCi12b2lkIFJlbmRlckxpc3RCb3g6OmludmFsaWRhdGVTY3JvbGxi
YXJSZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBS
ZW5kZXJMaXN0Qm94OjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJh
ciwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkKIHsKLSAgICBJbnRSZWN0IHNjcm9sbFJlY3QgPSBy
ZWN0OworICAgIExheW91dFJlY3Qgc2Nyb2xsUmVjdCA9IHJlY3Q7CiAgICAgc2Nyb2xsUmVjdC5t
b3ZlKHdpZHRoKCkgLSBib3JkZXJSaWdodCgpIC0gc2Nyb2xsYmFyLT53aWR0aCgpLCBib3JkZXJU
b3AoKSk7CiAgICAgcmVwYWludFJlY3RhbmdsZShzY3JvbGxSZWN0KTsKIH0KIAotSW50UmVjdCBS
ZW5kZXJMaXN0Qm94Ojpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3Qg
U2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHNjcm9sbGJhclJlY3QpIGNvbnN0
CitMYXlvdXRSZWN0IFJlbmRlckxpc3RCb3g6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWlu
aW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgTGF5b3V0UmVjdCYgc2Ny
b2xsYmFyUmVjdCkgY29uc3QKIHsKICAgICBSZW5kZXJWaWV3KiB2aWV3ID0gdGhpcy0+dmlldygp
OwogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIHNjcm9sbGJhclJlY3Q7CiAKLSAgICBJ
bnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OworICAgIExheW91dFJlY3QgcmVjdCA9IHNjcm9s
bGJhclJlY3Q7CiAKLSAgICBpbnQgc2Nyb2xsYmFyTGVmdCA9IHdpZHRoKCkgLSBib3JkZXJSaWdo
dCgpIC0gc2Nyb2xsYmFyLT53aWR0aCgpOwotICAgIGludCBzY3JvbGxiYXJUb3AgPSBib3JkZXJU
b3AoKTsKKyAgICBMYXlvdXRVbml0IHNjcm9sbGJhckxlZnQgPSB3aWR0aCgpIC0gYm9yZGVyUmln
aHQoKSAtIHNjcm9sbGJhci0+d2lkdGgoKTsKKyAgICBMYXlvdXRVbml0IHNjcm9sbGJhclRvcCA9
IGJvcmRlclRvcCgpOwogICAgIHJlY3QubW92ZShzY3JvbGxiYXJMZWZ0LCBzY3JvbGxiYXJUb3Ap
OwogCiAgICAgcmV0dXJuIHZpZXctPmZyYW1lVmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyKHRo
aXMsIHJlY3QpOwogfQogCi1JbnRSZWN0IFJlbmRlckxpc3RCb3g6OmNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50
UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyTGlzdEJveDo6Y29udmVy
dEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFy
LCBjb25zdCBMYXlvdXRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAogewogICAgIFJlbmRlclZpZXcq
IHZpZXcgPSB0aGlzLT52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gcGFy
ZW50UmVjdDsKIAotICAgIEludFJlY3QgcmVjdCA9IHZpZXctPmZyYW1lVmlldygpLT5jb252ZXJ0
VG9SZW5kZXJlcih0aGlzLCBwYXJlbnRSZWN0KTsKKyAgICBMYXlvdXRSZWN0IHJlY3QgPSB2aWV3
LT5mcmFtZVZpZXcoKS0+Y29udmVydFRvUmVuZGVyZXIodGhpcywgcGFyZW50UmVjdCk7CiAKLSAg
ICBpbnQgc2Nyb2xsYmFyTGVmdCA9IHdpZHRoKCkgLSBib3JkZXJSaWdodCgpIC0gc2Nyb2xsYmFy
LT53aWR0aCgpOwotICAgIGludCBzY3JvbGxiYXJUb3AgPSBib3JkZXJUb3AoKTsKKyAgICBMYXlv
dXRVbml0IHNjcm9sbGJhckxlZnQgPSB3aWR0aCgpIC0gYm9yZGVyUmlnaHQoKSAtIHNjcm9sbGJh
ci0+d2lkdGgoKTsKKyAgICBMYXlvdXRVbml0IHNjcm9sbGJhclRvcCA9IGJvcmRlclRvcCgpOwog
ICAgIHJlY3QubW92ZSgtc2Nyb2xsYmFyTGVmdCwgLXNjcm9sbGJhclRvcCk7CiAgICAgcmV0dXJu
IHJlY3Q7CiB9CiAKLUludFBvaW50IFJlbmRlckxpc3RCb3g6OmNvbnZlcnRGcm9tU2Nyb2xsYmFy
VG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9p
bnQmIHNjcm9sbGJhclBvaW50KSBjb25zdAorTGF5b3V0UG9pbnQgUmVuZGVyTGlzdEJveDo6Y29u
dmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xs
YmFyLCBjb25zdCBMYXlvdXRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0CiB7CiAgICAgUmVu
ZGVyVmlldyogdmlldyA9IHRoaXMtPnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJl
dHVybiBzY3JvbGxiYXJQb2ludDsKIAotICAgIEludFBvaW50IHBvaW50ID0gc2Nyb2xsYmFyUG9p
bnQ7CisgICAgTGF5b3V0UG9pbnQgcG9pbnQgPSBzY3JvbGxiYXJQb2ludDsKIAotICAgIGludCBz
Y3JvbGxiYXJMZWZ0ID0gd2lkdGgoKSAtIGJvcmRlclJpZ2h0KCkgLSBzY3JvbGxiYXItPndpZHRo
KCk7Ci0gICAgaW50IHNjcm9sbGJhclRvcCA9IGJvcmRlclRvcCgpOworICAgIExheW91dFVuaXQg
c2Nyb2xsYmFyTGVmdCA9IHdpZHRoKCkgLSBib3JkZXJSaWdodCgpIC0gc2Nyb2xsYmFyLT53aWR0
aCgpOworICAgIExheW91dFVuaXQgc2Nyb2xsYmFyVG9wID0gYm9yZGVyVG9wKCk7CiAgICAgcG9p
bnQubW92ZShzY3JvbGxiYXJMZWZ0LCBzY3JvbGxiYXJUb3ApOwogCiAgICAgcmV0dXJuIHZpZXct
PmZyYW1lVmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyKHRoaXMsIHBvaW50KTsKIH0KIAotSW50
UG9pbnQgUmVuZGVyTGlzdEJveDo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFy
KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQp
IGNvbnN0CitMYXlvdXRQb2ludCBSZW5kZXJMaXN0Qm94Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdW
aWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IExheW91dFBv
aW50JiBwYXJlbnRQb2ludCkgY29uc3QKIHsKICAgICBSZW5kZXJWaWV3KiB2aWV3ID0gdGhpcy0+
dmlldygpOwogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIHBhcmVudFBvaW50OwogCi0g
ICAgSW50UG9pbnQgcG9pbnQgPSB2aWV3LT5mcmFtZVZpZXcoKS0+Y29udmVydFRvUmVuZGVyZXIo
dGhpcywgcGFyZW50UG9pbnQpOworICAgIExheW91dFBvaW50IHBvaW50ID0gdmlldy0+ZnJhbWVW
aWV3KCktPmNvbnZlcnRUb1JlbmRlcmVyKHRoaXMsIHBhcmVudFBvaW50KTsKIAotICAgIGludCBz
Y3JvbGxiYXJMZWZ0ID0gd2lkdGgoKSAtIGJvcmRlclJpZ2h0KCkgLSBzY3JvbGxiYXItPndpZHRo
KCk7Ci0gICAgaW50IHNjcm9sbGJhclRvcCA9IGJvcmRlclRvcCgpOworICAgIExheW91dFVuaXQg
c2Nyb2xsYmFyTGVmdCA9IHdpZHRoKCkgLSBib3JkZXJSaWdodCgpIC0gc2Nyb2xsYmFyLT53aWR0
aCgpOworICAgIExheW91dFVuaXQgc2Nyb2xsYmFyVG9wID0gYm9yZGVyVG9wKCk7CiAgICAgcG9p
bnQubW92ZSgtc2Nyb2xsYmFyTGVmdCwgLXNjcm9sbGJhclRvcCk7CiAgICAgcmV0dXJuIHBvaW50
OwogfQogCi1JbnRTaXplIFJlbmRlckxpc3RCb3g6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0CitMYXlv
dXRTaXplIFJlbmRlckxpc3RCb3g6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IEludFNpemUoc2Nyb2xsV2lkdGgoKSwgc2Nyb2xsSGVpZ2h0KCkpOworICAgIHJldHVybiBMYXlv
dXRTaXplKHNjcm9sbFdpZHRoKCksIHNjcm9sbEhlaWdodCgpKTsKIH0KIAogTGF5b3V0VW5pdCBS
ZW5kZXJMaXN0Qm94Ojp2aXNpYmxlSGVpZ2h0KCkgY29uc3QKQEAgLTc4NywxMSArNzg3LDExIEBA
IExheW91dFVuaXQgUmVuZGVyTGlzdEJveDo6dmlzaWJsZVdpZHRoKCkKICAgICByZXR1cm4gd2lk
dGgoKTsKIH0KIAotSW50UG9pbnQgUmVuZGVyTGlzdEJveDo6Y3VycmVudE1vdXNlUG9zaXRpb24o
KSBjb25zdAorTGF5b3V0UG9pbnQgUmVuZGVyTGlzdEJveDo6Y3VycmVudE1vdXNlUG9zaXRpb24o
KSBjb25zdAogewogICAgIFJlbmRlclZpZXcqIHZpZXcgPSB0aGlzLT52aWV3KCk7CiAgICAgaWYg
KCF2aWV3KQotICAgICAgICByZXR1cm4gSW50UG9pbnQoKTsKKyAgICAgICAgcmV0dXJuIExheW91
dFBvaW50KCk7CiAgICAgcmV0dXJuIHZpZXctPmZyYW1lVmlldygpLT5jdXJyZW50TW91c2VQb3Np
dGlvbigpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94
LmgJKHJldmlzaW9uIDkyOTY2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTIgKzQ2LDEyIEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldE9wdGlvbnNDaGFuZ2VkKGJvb2wgY2hhbmdlZCkgeyBtX29wdGlvbnNDaGFuZ2VkID0g
Y2hhbmdlZDsgfQogCiAgICAgaW50IGxpc3RJbmRleEF0T2Zmc2V0KGludCB4LCBpbnQgeSk7Ci0g
ICAgSW50UmVjdCBpdGVtQm91bmRpbmdCb3hSZWN0KGNvbnN0IExheW91dFBvaW50JiwgaW50IGlu
ZGV4KTsKKyAgICBMYXlvdXRSZWN0IGl0ZW1Cb3VuZGluZ0JveFJlY3QoY29uc3QgTGF5b3V0UG9p
bnQmLCBpbnQgaW5kZXgpOwogCiAgICAgYm9vbCBzY3JvbGxUb1JldmVhbEVsZW1lbnRBdExpc3RJ
bmRleChpbnQgaW5kZXgpOwogICAgIGJvb2wgbGlzdEluZGV4SXNWaXNpYmxlKGludCBpbmRleCk7
CiAKLSAgICBpbnQgc2Nyb2xsVG93YXJkKGNvbnN0IEludFBvaW50Jik7IC8vIFJldHVybnMgdGhl
IG5ldyBpbmRleCBvciAtMSBpZiBubyBzY3JvbGwgb2NjdXJyZWQKKyAgICBpbnQgc2Nyb2xsVG93
YXJkKGNvbnN0IExheW91dFBvaW50Jik7IC8vIFJldHVybnMgdGhlIG5ldyBpbmRleCBvciAtMSBp
ZiBubyBzY3JvbGwgb2NjdXJyZWQKIAogICAgIGludCBzaXplKCkgY29uc3Q7CiAKQEAgLTY2LDcg
KzY2LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNDb250cm9sQ2xpcCgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmplY3QoUGFpbnRJ
bmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgY29udHJvbENs
aXBSZWN0KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGNv
bnRyb2xDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCiAgICAgdmlydHVhbCBi
b29sIGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0
UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCk7CiAKQEAgLTc0LDcgKzc0LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgbG9n
aWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxv
YXQgbXVsdGlwbGllciA9IDEsIE5vZGUqKiBzdG9wTm9kZSA9IDApOwogCiAgICAgdmlydHVhbCB2
b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7Ci0gICAgdmlydHVhbCBpbnQgYmFz
ZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9u
TW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkgY29uc3Q7
CisgICAgdmlydHVhbCBMYXlvdXRVbml0IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lLCBi
b29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3Np
dGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlTG9n
aWNhbEhlaWdodCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwpAQCAtODgsMzQgKzg4
LDM0IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHNob3VsZFBhblNjcm9sbCgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFuU2Nyb2xsKGNvbnN0IEludFBv
aW50Jik7CiAKLSAgICB2aXJ0dWFsIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsTGVmdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHNj
cm9sbFRvcCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBpbnQgc2Nyb2xsSGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFNjcm9sbExlZnQoaW50KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsVG9wKGludCk7Cisg
ICAgdmlydHVhbCBMYXlvdXRVbml0IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIExheW91dFVuaXQgc2Nyb2xsTGVmdCgpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5
b3V0VW5pdCBzY3JvbGxUb3AoKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgc2Nyb2xs
V2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgc2Nyb2xsSGVpZ2h0KCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbExlZnQoTGF5b3V0VW5pdCk7CisgICAgdmly
dHVhbCB2b2lkIHNldFNjcm9sbFRvcChMYXlvdXRVbml0KTsKIAogICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBM
YXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxh
dGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIC8vIFNjcm9sbGFibGVBcmVhIGludGVy
ZmFjZS4KLSAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9y
aWVudGF0aW9uKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxQb3NpdGlvbihTY3JvbGxi
YXIqKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBv
aW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJh
ciosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgc2Nyb2xsU2l6ZShT
Y3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IHNjcm9s
bFBvc2l0aW9uKFNjcm9sbGJhciopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxP
ZmZzZXQoY29uc3QgTGF5b3V0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNj
cm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgTGF5b3V0UmVjdCYpOwogICAgIHZpcnR1YWwg
Ym9vbCBpc0FjdGl2ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbENvcm5lclZp
c2libGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfSAvLyBXZSBkb24ndCBzdXBwb3J0IHJlc2l6
ZSBvbiBsaXN0IGJveGVzIHlldC4gSWYgd2UgZGlkIHRoZXNlIHdvdWxkIGhhdmUgdG8gY2hhbmdl
LgotICAgIHZpcnR1YWwgSW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QgeyByZXR1cm4g
SW50UmVjdCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0
KGNvbnN0IEludFJlY3QmKSB7IH0KLSAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZyb21TY3Jv
bGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSBj
b25zdDsKLSAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Ny
b2xsYmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICB2aXJ0
dWFsIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBT
Y3JvbGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OwotICAgIHZpcnR1YWwgSW50UG9pbnQg
Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciosIGNv
bnN0IEludFBvaW50JikgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IHNjcm9sbENvcm5l
clJlY3QoKSBjb25zdCB7IHJldHVybiBMYXlvdXRSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIHsgfQorICAgIHZp
cnR1YWwgTGF5b3V0UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29u
c3QgU2Nyb2xsYmFyKiwgY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5
b3V0UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xs
YmFyKiwgY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0UG9pbnQg
Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNv
bnN0IExheW91dFBvaW50JikgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRQb2ludCBjb252ZXJ0
RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgTGF5
b3V0UG9pbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxi
YXIoKSBjb25zdCB7IHJldHVybiBtX3ZCYXIuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIEludFNpemUg
Y29udGVudHNTaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRTaXplIGNvbnRlbnRzU2l6
ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCB2aXNpYmxlSGVpZ2h0KCkgY29uc3Q7
CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IHZpc2libGVXaWR0aCgpIGNvbnN0OwotICAgIHZpcnR1
YWwgSW50UG9pbnQgY3VycmVudE1vdXNlUG9zaXRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIExh
eW91dFBvaW50IGN1cnJlbnRNb3VzZVBvc2l0aW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IGlzT25BY3RpdmVQYWdlKCkgY29uc3Q7CiAKQEAgLTEzMCwxMSArMTMwLDExIEBAIHByaXZhdGU6
CiAgICAgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcigpOwogICAgIHZvaWQg
ZGVzdHJveVNjcm9sbGJhcigpOwogICAgIAotICAgIGludCBpdGVtSGVpZ2h0KCkgY29uc3Q7Cisg
ICAgTGF5b3V0VW5pdCBpdGVtSGVpZ2h0KCkgY29uc3Q7CiAgICAgdm9pZCB2YWx1ZUNoYW5nZWQo
dW5zaWduZWQgbGlzdEluZGV4KTsKICAgICBpbnQgbnVtVmlzaWJsZUl0ZW1zKCkgY29uc3Q7CiAg
ICAgaW50IG51bUl0ZW1zKCkgY29uc3Q7Ci0gICAgaW50IGxpc3RIZWlnaHQoKSBjb25zdDsKKyAg
ICBMYXlvdXRVbml0IGxpc3RIZWlnaHQoKSBjb25zdDsKICAgICB2b2lkIHBhaW50U2Nyb2xsYmFy
KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgdm9pZCBwYWludEl0ZW1Gb3Jl
Z3JvdW5kKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiwgaW50IGxpc3RJbmRleCk7CiAg
ICAgdm9pZCBwYWludEl0ZW1CYWNrZ3JvdW5kKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50
JiwgaW50IGxpc3RJbmRleCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TWVudUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNZW51TGlzdC5jcHAJKHJldmlzaW9uIDkyOTY2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM3LDE3ICsyMzcsMTcg
QEAgU3RyaW5nIFJlbmRlck1lbnVMaXN0Ojp0ZXh0KCkgY29uc3QKICAgICByZXR1cm4gbV9idXR0
b25UZXh0ID8gbV9idXR0b25UZXh0LT50ZXh0KCkgOiAwOwogfQogCi1JbnRSZWN0IFJlbmRlck1l
bnVMaXN0Ojpjb250cm9sQ2xpcFJlY3QoY29uc3QgSW50UG9pbnQmIGFkZGl0aW9uYWxPZmZzZXQp
IGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlck1lbnVMaXN0Ojpjb250cm9sQ2xpcFJlY3QoY29uc3Qg
TGF5b3V0UG9pbnQmIGFkZGl0aW9uYWxPZmZzZXQpIGNvbnN0CiB7CiAgICAgLy8gQ2xpcCB0byB0
aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBjb250ZW50IGJveCBhbmQgdGhlIGNvbnRlbnQgYm94IGZv
ciB0aGUgaW5uZXIgYm94CiAgICAgLy8gVGhpcyB3aWxsIGxlYXZlIHJvb20gZm9yIHRoZSBhcnJv
d3Mgd2hpY2ggc2l0IGluIHRoZSBpbm5lciBib3ggcGFkZGluZywKICAgICAvLyBhbmQgaWYgdGhl
IGlubmVyIGJveCBldmVyIHNwaWxscyBvdXQgb2YgdGhlIG91dGVyIGJveCwgdGhhdCB3aWxsIGdl
dCBjbGlwcGVkIHRvby4KLSAgICBJbnRSZWN0IG91dGVyQm94KGFkZGl0aW9uYWxPZmZzZXQueCgp
ICsgYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSwgCisgICAgTGF5b3V0UmVjdCBvdXRlckJv
eChhZGRpdGlvbmFsT2Zmc2V0LngoKSArIGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCksIAog
ICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxPZmZzZXQueSgpICsgYm9yZGVyVG9wKCkgKyBw
YWRkaW5nVG9wKCksCiAgICAgICAgICAgICAgICAgICAgY29udGVudFdpZHRoKCksIAogICAgICAg
ICAgICAgICAgICAgIGNvbnRlbnRIZWlnaHQoKSk7CiAgICAgCi0gICAgSW50UmVjdCBpbm5lckJv
eChhZGRpdGlvbmFsT2Zmc2V0LngoKSArIG1faW5uZXJCbG9jay0+eCgpICsgbV9pbm5lckJsb2Nr
LT5wYWRkaW5nTGVmdCgpLCAKKyAgICBMYXlvdXRSZWN0IGlubmVyQm94KGFkZGl0aW9uYWxPZmZz
ZXQueCgpICsgbV9pbm5lckJsb2NrLT54KCkgKyBtX2lubmVyQmxvY2stPnBhZGRpbmdMZWZ0KCks
IAogICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxPZmZzZXQueSgpICsgbV9pbm5lckJsb2Nr
LT55KCkgKyBtX2lubmVyQmxvY2stPnBhZGRpbmdUb3AoKSwKICAgICAgICAgICAgICAgICAgICBt
X2lubmVyQmxvY2stPmNvbnRlbnRXaWR0aCgpLCAKICAgICAgICAgICAgICAgICAgICBtX2lubmVy
QmxvY2stPmNvbnRlbnRIZWlnaHQoKSk7CkBAIC0zMDIsNyArMzAyLDcgQEAgdm9pZCBSZW5kZXJN
ZW51TGlzdDo6c2hvd1BvcHVwKCkKICAgICAvLyBDb21wdXRlIHRoZSB0b3AgbGVmdCB0YWtpbmcg
dHJhbnNmb3JtcyBpbnRvIGFjY291bnQsIGJ1dCB1c2UKICAgICAvLyB0aGUgYWN0dWFsIHdpZHRo
IG9mIHRoZSBlbGVtZW50IHRvIHNpemUgdGhlIHBvcHVwLgogICAgIEZsb2F0UG9pbnQgYWJzVG9w
TGVmdCA9IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCksIGZhbHNlLCB0cnVlKTsKLSAgICBJ
bnRSZWN0IGFic0JvdW5kcyA9IGFic29sdXRlQm91bmRpbmdCb3hSZWN0KCk7CisgICAgTGF5b3V0
UmVjdCBhYnNCb3VuZHMgPSBhYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpOwogICAgIGFic0JvdW5k
cy5zZXRMb2NhdGlvbihyb3VuZGVkSW50UG9pbnQoYWJzVG9wTGVmdCkpOwogICAgIG1fcG9wdXAt
PnNob3coYWJzQm91bmRzLCBkb2N1bWVudCgpLT52aWV3KCksCiAgICAgICAgIHNlbGVjdC0+b3B0
aW9uVG9MaXN0SW5kZXgoc2VsZWN0LT5zZWxlY3RlZEluZGV4KCkpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oCShyZXZpc2lvbiA5Mjk2NikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MCw3ICs3MCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVt
ZW50KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzQ29udHJvbENsaXAoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9Ci0gICAgdmlydHVhbCBJbnRSZWN0IGNvbnRyb2xDbGlwUmVjdChjb25zdCBJbnRQ
b2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb250cm9sQ2xpcFJlY3QoY29u
c3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVy
TmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJNZW51TGlzdCI7IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103810</attachid>
            <date>2011-08-12 13:49:34 -0700</date>
            <delta_ts>2011-08-12 14:35:17 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-66149-20110812134933.patch</filename>
            <type>text/plain</type>
            <size>27725</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkyOTg0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTEtMDgtMTIgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN3aXRjaCBSZW5kZXJNZW51
TGlzdCwgUmVuZGVyTGlzdEJveCwgYW5kIFJlbmRlckZpZWxkU2V0IHRvIG5ldyBsYXlvdXQgdW5p
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MTQ5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAgICAgQ2hhbmdpbmcg
UmVuZGVyTWVudUxpc3QsIFJlbmRlckxpc3RCb3gsIGFuZCBSZW5kZXJGaWVsZFNldCB0byB0aGUg
TGF5b3V0VW5pdAorICAgICAgICBhYnN0cmFjdGlvbiBmcm9tIGludHMuCisKKyAgICAgICAgTm8g
dGVzdHMgYXMgbm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyRmllbGRzZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmllbGRzZXQ6
OmxheW91dFNwZWNpYWxFeGNsdWRlZENoaWxkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpudW1WaXNpYmxl
SXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6bGlzdEhlaWdodCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpiYXNlbGluZVBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6Oml0ZW1Cb3VuZGluZ0JveFJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6aXRlbU9mZnNldEZvckFsaWdubWVudCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMaXN0Qm94OjpwYW5TY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJv
eDo6c2Nyb2xsVG93YXJkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmF1dG9z
Y3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2Nyb2xsU2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGxQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxPZmZzZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGlzdEJveDo6aXRlbUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMaXN0Qm94Ojp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxpc3RCb3g6OnNjcm9sbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RC
b3g6OnNjcm9sbEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzY3Jv
bGxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNldFNjcm9sbExlZnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2Nyb2xsVG9wKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNldFNjcm9sbFRvcCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMaXN0Qm94Ojpjb250cm9sQ2xpcFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGlzdEJveDo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGlzdEJveDo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdU
b1Njcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpjb250ZW50c1Np
emUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6Y3VycmVudE1vdXNlUG9zaXRp
b24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94Lmg6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGxDb3JuZXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxpc3RCb3g6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVu
dUxpc3Q6OmNvbnRyb2xDbGlwUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlz
dDo6c2hvd1BvcHVwKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaDoKKwog
MjAxMS0wOC0xMiAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjkyOTc2LgpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL1NlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9TZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gOTI5ODQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vU2VsZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3NCw3ICs3NzQsNyBA
QCB2b2lkIFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZhdWx0RXZlbnRICiAgICAgICAgIC8vIENv
bnZlcnQgdG8gY29vcmRzIHJlbGF0aXZlIHRvIHRoZSBsaXN0IGJveCBpZiBuZWVkZWQuCiAgICAg
ICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZl
bnQpOwogICAgICAgICBJbnRQb2ludCBsb2NhbE9mZnNldCA9IHJvdW5kZWRJbnRQb2ludChlbGVt
ZW50LT5yZW5kZXJlcigpLT5hYnNvbHV0ZVRvTG9jYWwobW91c2VFdmVudC0+YWJzb2x1dGVMb2Nh
dGlvbigpLCBmYWxzZSwgdHJ1ZSkpOwotICAgICAgICBpbnQgbGlzdEluZGV4ID0gdG9SZW5kZXJM
aXN0Qm94KGVsZW1lbnQtPnJlbmRlcmVyKCkpLT5saXN0SW5kZXhBdE9mZnNldChsb2NhbE9mZnNl
dC54KCksIGxvY2FsT2Zmc2V0LnkoKSk7CisgICAgICAgIGludCBsaXN0SW5kZXggPSB0b1JlbmRl
ckxpc3RCb3goZWxlbWVudC0+cmVuZGVyZXIoKSktPmxpc3RJbmRleEF0T2Zmc2V0KHRvU2l6ZShs
b2NhbE9mZnNldCkpOwogICAgICAgICBpZiAobGlzdEluZGV4ID49IDApIHsKICNpZiBQTEFURk9S
TShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKICAgICAgICAgICAg
IHVwZGF0ZVNlbGVjdGVkU3RhdGUoZGF0YSwgZWxlbWVudCwgbGlzdEluZGV4LCBtb3VzZUV2ZW50
LT5tZXRhS2V5KCksIG1vdXNlRXZlbnQtPnNoaWZ0S2V5KCkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0xheW91dFR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0xheW91dFR5cGVzLmgJKHJldmlzaW9uIDkyOTg0KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0xheW91dFR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDEx
IEBAIGlubGluZSBMYXlvdXRSZWN0IGVuY2xvc2luZ0xheW91dFJlY3QoY28KICAgICByZXR1cm4g
ZW5jbG9zaW5nSW50UmVjdChyZWN0KTsKIH0KIAoraW5saW5lIExheW91dFNpemUgcm91bmRlZExh
eW91dFNpemUoY29uc3QgRmxvYXRTaXplJiBzKQoreworICAgIHJldHVybiByb3VuZGVkSW50U2l6
ZShzKTsKK30KKwogaW5saW5lIExheW91dFBvaW50IHJvdW5kZWRMYXlvdXRQb2ludChjb25zdCBG
bG9hdFBvaW50JiBwKQogewogICAgIHJldHVybiByb3VuZGVkSW50UG9pbnQocCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAJKHJldmlzaW9uIDky
OTg0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBSZW5kZXJPYmplY3QqIFJlbmRlckZpZWxkc2V0
OjpsYXlvdXRTcGVjCiAgICAgICAgICAgICBsZWdlbmQtPnNldE5lZWRzTGF5b3V0KHRydWUpOwog
ICAgICAgICBsZWdlbmQtPmxheW91dElmTmVlZGVkKCk7CiAKLSAgICAgICAgaW50IGxvZ2ljYWxM
ZWZ0OworICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0OwogICAgICAgICBpZiAoc3R5bGUo
KS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGxlZ2Vu
ZC0+c3R5bGUoKS0+dGV4dEFsaWduKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ0VOVEVSOgpAQCAt
ODksNyArODksNyBAQCBSZW5kZXJPYmplY3QqIFJlbmRlckZpZWxkc2V0OjpsYXlvdXRTcGVjCiAg
ICAgICAgICAgICBjYXNlIENFTlRFUjogewogICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0
aGF0IHRoZSBleHRyYSBwaXhlbCBnb2VzIHRvIHRoZSBlbmQgc2lkZSBpbiBSVEwgKHNpbmNlIGl0
IHdlbnQgdG8gdGhlIGVuZCBzaWRlCiAgICAgICAgICAgICAgICAgLy8gaW4gTFRSKS4KLSAgICAg
ICAgICAgICAgICBpbnQgY2VudGVyZWRXaWR0aCA9IGxvZ2ljYWxXaWR0aCgpIC0gbG9naWNhbFdp
ZHRoRm9yQ2hpbGQobGVnZW5kKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGNlbnRlcmVk
V2lkdGggPSBsb2dpY2FsV2lkdGgoKSAtIGxvZ2ljYWxXaWR0aEZvckNoaWxkKGxlZ2VuZCk7CiAg
ICAgICAgICAgICAgICAgbG9naWNhbExlZnQgPSBjZW50ZXJlZFdpZHRoIC0gY2VudGVyZWRXaWR0
aCAvIDI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xMDEsOSAr
MTAxLDkgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJGaWVsZHNldDo6bGF5b3V0U3BlYwogCiAgICAg
ICAgIHNldExvZ2ljYWxMZWZ0Rm9yQ2hpbGQobGVnZW5kLCBsb2dpY2FsTGVmdCk7CiAKLSAgICAg
ICAgaW50IGIgPSBib3JkZXJCZWZvcmUoKTsKLSAgICAgICAgaW50IGggPSBsb2dpY2FsSGVpZ2h0
Rm9yQ2hpbGQobGVnZW5kKTsKLSAgICAgICAgc2V0TG9naWNhbFRvcEZvckNoaWxkKGxlZ2VuZCwg
bWF4KChiIC0gaCkgLyAyLCAwKSk7CisgICAgICAgIExheW91dFVuaXQgYiA9IGJvcmRlckJlZm9y
ZSgpOworICAgICAgICBMYXlvdXRVbml0IGggPSBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQobGVnZW5k
KTsKKyAgICAgICAgc2V0TG9naWNhbFRvcEZvckNoaWxkKGxlZ2VuZCwgbWF4PExheW91dFVuaXQ+
KChiIC0gaCkgLyAyLCAwKSk7CiAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQobWF4KGIsIGgpICsg
cGFkZGluZ0JlZm9yZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIGxlZ2VuZDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDkyOTg0KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTcsNyArMjE3LDcgQEAgaW50IFJlbmRlckxpc3RCb3g6OnNpemUoKSBjb25zdAog
aW50IFJlbmRlckxpc3RCb3g6Om51bVZpc2libGVJdGVtcygpIGNvbnN0CiB7CiAgICAgLy8gT25s
eSBjb3VudCBmdWxseSB2aXNpYmxlIHJvd3MuIEJ1dCBkb24ndCByZXR1cm4gMCBldmVuIGlmIG9u
bHkgcGFydCBvZiBhIHJvdyBzaG93cy4KLSAgICByZXR1cm4gbWF4KDEsIChjb250ZW50SGVpZ2h0
KCkgKyByb3dTcGFjaW5nKSAvIGl0ZW1IZWlnaHQoKSk7CisgICAgcmV0dXJuIG1heDxpbnQ+KDEs
IChjb250ZW50SGVpZ2h0KCkgKyByb3dTcGFjaW5nKSAvIGl0ZW1IZWlnaHQoKSk7CiB9CiAKIGlu
dCBSZW5kZXJMaXN0Qm94OjpudW1JdGVtcygpIGNvbnN0CkBAIC0yMjUsNyArMjI1LDcgQEAgaW50
IFJlbmRlckxpc3RCb3g6Om51bUl0ZW1zKCkgY29uc3QKICAgICByZXR1cm4gdG9TZWxlY3RFbGVt
ZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpKS0+bGlzdEl0ZW1zKCkuc2l6ZSgpOwog
fQogCi1pbnQgUmVuZGVyTGlzdEJveDo6bGlzdEhlaWdodCgpIGNvbnN0CitMYXlvdXRVbml0IFJl
bmRlckxpc3RCb3g6Omxpc3RIZWlnaHQoKSBjb25zdAogewogICAgIHJldHVybiBpdGVtSGVpZ2h0
KCkgKiBudW1JdGVtcygpIC0gcm93U3BhY2luZzsKIH0KQEAgLTI0OSwxNCArMjQ5LDE0IEBAIHZv
aWQgUmVuZGVyTGlzdEJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQKICAgICB9CiB9CiAKLWludCBS
ZW5kZXJMaXN0Qm94OjpiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUs
IGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSBsaW5lRGlyZWN0aW9uLCBMaW5lUG9z
aXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckxpc3RC
b3g6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSwgYm9vbCBmaXJz
dExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGxpbmVEaXJlY3Rpb24sIExpbmVQb3NpdGlvbk1vZGUg
bGluZVBvc2l0aW9uTW9kZSkgY29uc3QKIHsKICAgICByZXR1cm4gUmVuZGVyQm94OjpiYXNlbGlu
ZVBvc2l0aW9uKGJhc2VsaW5lVHlwZSwgZmlyc3RMaW5lLCBsaW5lRGlyZWN0aW9uLCBsaW5lUG9z
aXRpb25Nb2RlKSAtIGJhc2VsaW5lQWRqdXN0bWVudDsKIH0KIAotSW50UmVjdCBSZW5kZXJMaXN0
Qm94OjppdGVtQm91bmRpbmdCb3hSZWN0KGNvbnN0IExheW91dFBvaW50JiBhZGRpdGlvbmFsT2Zm
c2V0LCBpbnQgaW5kZXgpCitMYXlvdXRSZWN0IFJlbmRlckxpc3RCb3g6Oml0ZW1Cb3VuZGluZ0Jv
eFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGFkZGl0aW9uYWxPZmZzZXQsIGludCBpbmRleCkKIHsK
LSAgICByZXR1cm4gSW50UmVjdChhZGRpdGlvbmFsT2Zmc2V0LngoKSArIGJvcmRlckxlZnQoKSAr
IHBhZGRpbmdMZWZ0KCksCisgICAgcmV0dXJuIExheW91dFJlY3QoYWRkaXRpb25hbE9mZnNldC54
KCkgKyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpLAogICAgICAgICAgICAgICAgICAgIGFk
ZGl0aW9uYWxPZmZzZXQueSgpICsgYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgKyBpdGVtSGVp
Z2h0KCkgKiAoaW5kZXggLSBtX2luZGV4T2Zmc2V0KSwKICAgICAgICAgICAgICAgICAgICBjb250
ZW50V2lkdGgoKSwgaXRlbUhlaWdodCgpKTsKIH0KQEAgLTM0MiwxNCArMzQyLDE0IEBAIHZvaWQg
UmVuZGVyTGlzdEJveDo6cGFpbnRTY3JvbGxiYXIoUGFpbnQKICAgICB9CiB9CiAKLXN0YXRpYyBJ
bnRTaXplIGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQoVGV4dFJ1biB0ZXh0UnVuLCBSZW5kZXJTdHls
ZSogaXRlbVN0eWxlLCBGb250IGl0ZW1Gb250LCBJbnRSZWN0IGl0ZW1Cb3VkaW5nQm94KQorc3Rh
dGljIExheW91dFNpemUgaXRlbU9mZnNldEZvckFsaWdubWVudChUZXh0UnVuIHRleHRSdW4sIFJl
bmRlclN0eWxlKiBpdGVtU3R5bGUsIEZvbnQgaXRlbUZvbnQsIExheW91dFJlY3QgaXRlbUJvdWRp
bmdCb3gpCiB7CiAgICAgRVRleHRBbGlnbiBhY3R1YWxBbGlnbm1lbnQgPSBpdGVtU3R5bGUtPnRl
eHRBbGlnbigpOwogICAgIC8vIEZJWE1FOiBGaXJlZm94IGRvZXNuJ3QgcmVzcGVjdCBKVVNUSUZZ
LiBTaG91bGQgd2U/CiAgICAgaWYgKGFjdHVhbEFsaWdubWVudCA9PSBUQUFVVE8gfHwgYWN0dWFs
QWxpZ25tZW50ID09IEpVU1RJRlkpCiAgICAgICBhY3R1YWxBbGlnbm1lbnQgPSBpdGVtU3R5bGUt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IExFRlQgOiBSSUdIVDsKIAotICAgIEludFNpemUg
b2Zmc2V0ID0gSW50U2l6ZSgwLCBpdGVtRm9udC5mb250TWV0cmljcygpLmFzY2VudCgpKTsKKyAg
ICBMYXlvdXRTaXplIG9mZnNldCA9IExheW91dFNpemUoMCwgaXRlbUZvbnQuZm9udE1ldHJpY3Mo
KS5hc2NlbnQoKSk7CiAgICAgaWYgKGFjdHVhbEFsaWdubWVudCA9PSBSSUdIVCB8fCBhY3R1YWxB
bGlnbm1lbnQgPT0gV0VCS0lUX1JJR0hUKSB7CiAgICAgICAgIGZsb2F0IHRleHRXaWR0aCA9IGl0
ZW1Gb250LndpZHRoKHRleHRSdW4pOwogICAgICAgICBvZmZzZXQuc2V0V2lkdGgoaXRlbUJvdWRp
bmdCb3gud2lkdGgoKSAtIHRleHRXaWR0aCAtIG9wdGlvbnNTcGFjaW5nSG9yaXpvbnRhbCk7CkBA
IC00NTYsMTkgKzQ1NiwxOSBAQCBib29sIFJlbmRlckxpc3RCb3g6OmlzUG9pbnRJbk92ZXJmbG93
Q29uCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1pbnQgUmVuZGVyTGlzdEJveDo6bGlzdEluZGV4
QXRPZmZzZXQoaW50IG9mZnNldFgsIGludCBvZmZzZXRZKQoraW50IFJlbmRlckxpc3RCb3g6Omxp
c3RJbmRleEF0T2Zmc2V0KGNvbnN0IExheW91dFNpemUmIG9mZnNldCkKIHsKICAgICBpZiAoIW51
bUl0ZW1zKCkpCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIGlmIChvZmZzZXRZIDwgYm9yZGVy
VG9wKCkgKyBwYWRkaW5nVG9wKCkgfHwgb2Zmc2V0WSA+IGhlaWdodCgpIC0gcGFkZGluZ0JvdHRv
bSgpIC0gYm9yZGVyQm90dG9tKCkpCisgICAgaWYgKG9mZnNldC5oZWlnaHQoKSA8IGJvcmRlclRv
cCgpICsgcGFkZGluZ1RvcCgpIHx8IG9mZnNldC5oZWlnaHQoKSA+IGhlaWdodCgpIC0gcGFkZGlu
Z0JvdHRvbSgpIC0gYm9yZGVyQm90dG9tKCkpCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIGlu
dCBzY3JvbGxiYXJXaWR0aCA9IG1fdkJhciA/IG1fdkJhci0+d2lkdGgoKSA6IDA7Ci0gICAgaWYg
KG9mZnNldFggPCBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpIHx8IG9mZnNldFggPiB3aWR0
aCgpIC0gYm9yZGVyUmlnaHQoKSAtIHBhZGRpbmdSaWdodCgpIC0gc2Nyb2xsYmFyV2lkdGgpCisg
ICAgTGF5b3V0VW5pdCBzY3JvbGxiYXJXaWR0aCA9IG1fdkJhciA/IG1fdkJhci0+d2lkdGgoKSA6
IDA7CisgICAgaWYgKG9mZnNldC53aWR0aCgpIDwgYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQo
KSB8fCBvZmZzZXQud2lkdGgoKSA+IHdpZHRoKCkgLSBib3JkZXJSaWdodCgpIC0gcGFkZGluZ1Jp
Z2h0KCkgLSBzY3JvbGxiYXJXaWR0aCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgaW50IG5l
d09mZnNldCA9IChvZmZzZXRZIC0gYm9yZGVyVG9wKCkgLSBwYWRkaW5nVG9wKCkpIC8gaXRlbUhl
aWdodCgpICsgbV9pbmRleE9mZnNldDsKKyAgICBpbnQgbmV3T2Zmc2V0ID0gKG9mZnNldC5oZWln
aHQoKSAtIGJvcmRlclRvcCgpIC0gcGFkZGluZ1RvcCgpKSAvIGl0ZW1IZWlnaHQoKSArIG1faW5k
ZXhPZmZzZXQ7CiAgICAgcmV0dXJuIG5ld09mZnNldCA8IG51bUl0ZW1zKCkgPyBuZXdPZmZzZXQg
OiAtMTsKIH0KIApAQCAtNDgxLDcgKzQ4MSw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFuU2Ny
b2xsKGNvbnN0IEludFAKICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5
IHdpdGggdHJhbnNmb3Jtcy4KICAgICBGbG9hdFBvaW50IGFic09mZnNldCA9IGxvY2FsVG9BYnNv
bHV0ZSgpOwogCi0gICAgSW50UG9pbnQgY3VycmVudE1vdXNlUG9zaXRpb24gPSBmcmFtZSgpLT5l
dmVudEhhbmRsZXIoKS0+Y3VycmVudE1vdXNlUG9zaXRpb24oKTsKKyAgICBJbnRQb2ludCBjdXJy
ZW50TW91c2VQb3NpdGlvbiA9IHJvdW5kZWRJbnRQb2ludChmcmFtZSgpLT5ldmVudEhhbmRsZXIo
KS0+Y3VycmVudE1vdXNlUG9zaXRpb24oKSk7CiAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0
aGUgY3VycmVudCBtb3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUg
bW91c2UgaXMgb3V0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBpbmNvaGVyZW50CiAg
ICAgc3RhdGljIEludFBvaW50IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKICAgICBpZiAoY3VycmVu
dE1vdXNlUG9zaXRpb24ueSgpIDwgMCkKQEAgLTQ4OSwxMCArNDg5LDEwIEBAIHZvaWQgUmVuZGVy
TGlzdEJveDo6cGFuU2Nyb2xsKGNvbnN0IEludFAKICAgICBlbHNlCiAgICAgICAgIHByZXZpb3Vz
TW91c2VQb3NpdGlvbiA9IGN1cnJlbnRNb3VzZVBvc2l0aW9uOwogCi0gICAgaW50IHlEZWx0YSA9
IGN1cnJlbnRNb3VzZVBvc2l0aW9uLnkoKSAtIHBhblN0YXJ0TW91c2VQb3NpdGlvbi55KCk7Cisg
ICAgTGF5b3V0VW5pdCB5RGVsdGEgPSBjdXJyZW50TW91c2VQb3NpdGlvbi55KCkgLSBwYW5TdGFy
dE1vdXNlUG9zaXRpb24ueSgpOwogCiAgICAgLy8gSWYgdGhlIHBvaW50IGlzIHRvbyBmYXIgZnJv
bSB0aGUgY2VudGVyIHdlIGxpbWl0IHRoZSBzcGVlZAotICAgIHlEZWx0YSA9IG1heChtaW4oeURl
bHRhLCBtYXhTcGVlZCksIC1tYXhTcGVlZCk7CisgICAgeURlbHRhID0gbWF4PExheW91dFVuaXQ+
KG1pbjxMYXlvdXRVbml0Pih5RGVsdGEsIG1heFNwZWVkKSwgLW1heFNwZWVkKTsKICAgICAKICAg
ICBpZiAoYWJzKHlEZWx0YSkgPCBpY29uUmFkaXVzKSAvLyBhdCB0aGUgY2VudGVyIHdlIGxldCB0
aGUgc3BhY2UgZm9yIHRoZSBpY29uCiAgICAgICAgIHJldHVybjsKQEAgLTUwNiw5ICs1MDYsOSBA
QCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhblNjcm9sbChjb25zdCBJbnRQCiAgICAgLy8gTGV0J3Mg
YXR0ZW51YXRlIHRoZSBzcGVlZAogICAgIHlEZWx0YSAvPSBzcGVlZFJlZHVjZXI7CiAKLSAgICBJ
bnRQb2ludCBzY3JvbGxQb2ludCgwLCAwKTsKKyAgICBMYXlvdXRQb2ludCBzY3JvbGxQb2ludCgw
LCAwKTsKICAgICBzY3JvbGxQb2ludC5zZXRZKGFic09mZnNldC55KCkgKyB5RGVsdGEpOwotICAg
IGludCBuZXdPZmZzZXQgPSBzY3JvbGxUb3dhcmQoc2Nyb2xsUG9pbnQpOworICAgIExheW91dFVu
aXQgbmV3T2Zmc2V0ID0gc2Nyb2xsVG93YXJkKHNjcm9sbFBvaW50KTsKICAgICBpZiAobmV3T2Zm
c2V0IDwgMCkgCiAgICAgICAgIHJldHVybjsKIApAQCAtNTE4LDI4ICs1MTgsMjcgQEAgdm9pZCBS
ZW5kZXJMaXN0Qm94OjpwYW5TY3JvbGwoY29uc3QgSW50UAogICAgIG1faW5BdXRvc2Nyb2xsID0g
ZmFsc2U7CiB9CiAKLWludCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxUb3dhcmQoY29uc3QgSW50UG9p
bnQmIGRlc3RpbmF0aW9uKQoraW50IFJlbmRlckxpc3RCb3g6OnNjcm9sbFRvd2FyZChjb25zdCBM
YXlvdXRQb2ludCYgZGVzdGluYXRpb24pCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3
b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuCiAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBs
b2NhbFRvQWJzb2x1dGUoKTsKLSAgICBpbnQgb2Zmc2V0WCA9IGRlc3RpbmF0aW9uLngoKSAtIGFi
c1Bvcy54KCk7Ci0gICAgaW50IG9mZnNldFkgPSBkZXN0aW5hdGlvbi55KCkgLSBhYnNQb3MueSgp
OworICAgIExheW91dFNpemUgcG9zaXRpb25PZmZzZXQgPSByb3VuZGVkTGF5b3V0U2l6ZShkZXN0
aW5hdGlvbiAtIGFic1Bvcyk7CiAKICAgICBpbnQgcm93cyA9IG51bVZpc2libGVJdGVtcygpOwog
ICAgIGludCBvZmZzZXQgPSBtX2luZGV4T2Zmc2V0OwogICAgIAotICAgIGlmIChvZmZzZXRZIDwg
Ym9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgJiYgc2Nyb2xsVG9SZXZlYWxFbGVtZW50QXRMaXN0
SW5kZXgob2Zmc2V0IC0gMSkpCisgICAgaWYgKHBvc2l0aW9uT2Zmc2V0LmhlaWdodCgpIDwgYm9y
ZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgJiYgc2Nyb2xsVG9SZXZlYWxFbGVtZW50QXRMaXN0SW5k
ZXgob2Zmc2V0IC0gMSkpCiAgICAgICAgIHJldHVybiBvZmZzZXQgLSAxOwogICAgIAotICAgIGlm
IChvZmZzZXRZID4gaGVpZ2h0KCkgLSBwYWRkaW5nQm90dG9tKCkgLSBib3JkZXJCb3R0b20oKSAm
JiBzY3JvbGxUb1JldmVhbEVsZW1lbnRBdExpc3RJbmRleChvZmZzZXQgKyByb3dzKSkKKyAgICBp
ZiAocG9zaXRpb25PZmZzZXQuaGVpZ2h0KCkgPiBoZWlnaHQoKSAtIHBhZGRpbmdCb3R0b20oKSAt
IGJvcmRlckJvdHRvbSgpICYmIHNjcm9sbFRvUmV2ZWFsRWxlbWVudEF0TGlzdEluZGV4KG9mZnNl
dCArIHJvd3MpKQogICAgICAgICByZXR1cm4gb2Zmc2V0ICsgcm93cyAtIDE7CiAgICAgCi0gICAg
cmV0dXJuIGxpc3RJbmRleEF0T2Zmc2V0KG9mZnNldFgsIG9mZnNldFkpOworICAgIHJldHVybiBs
aXN0SW5kZXhBdE9mZnNldChwb3NpdGlvbk9mZnNldCk7CiB9CiAKIHZvaWQgUmVuZGVyTGlzdEJv
eDo6YXV0b3Njcm9sbCgpCiB7Ci0gICAgSW50UG9pbnQgcG9zID0gZnJhbWUoKS0+dmlldygpLT53
aW5kb3dUb0NvbnRlbnRzKGZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5jdXJyZW50TW91c2VQb3Np
dGlvbigpKTsKKyAgICBMYXlvdXRQb2ludCBwb3MgPSBmcmFtZSgpLT52aWV3KCktPndpbmRvd1Rv
Q29udGVudHMoZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmN1cnJlbnRNb3VzZVBvc2l0aW9uKCkp
OwogCiAgICAgaW50IGVuZEluZGV4ID0gc2Nyb2xsVG93YXJkKHBvcyk7CiAgICAgaWYgKGVuZElu
ZGV4ID49IDApIHsKQEAgLTU5OSwxNyArNTk4LDE3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6dmFs
dWVDaGFuZ2VkKHVuc2lnbmUKICAgICBlbGVtZW50LT5kaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdl
RXZlbnQoKTsKIH0KIAotaW50IFJlbmRlckxpc3RCb3g6OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckxpc3RCb3g6OnNj
cm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0CiB7CiAgICAg
cmV0dXJuICgob3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpICYmIG1fdkJhcikgPyAo
bV92QmFyLT50b3RhbFNpemUoKSAtIG1fdkJhci0+dmlzaWJsZVNpemUoKSkgOiAwOwogfQogCi1p
bnQgUmVuZGVyTGlzdEJveDo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKikgY29uc3QKK0xheW91
dFVuaXQgUmVuZGVyTGlzdEJveDo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKikgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9pbmRleE9mZnNldDsKIH0KIAotdm9pZCBSZW5kZXJMaXN0Qm94OjpzZXRT
Y3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3ZvaWQgUmVuZGVyTGlzdEJveDo6
c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IExheW91dFBvaW50JiBvZmZzZXQpCiB7CiAgICAgc2Nyb2xs
VG8ob2Zmc2V0LnkoKSk7CiB9CkBAIC02MjQsNDQgKzYyMyw0NCBAQCB2b2lkIFJlbmRlckxpc3RC
b3g6OnNjcm9sbFRvKGludCBuZXdPZmZzCiAgICAgbm9kZSgpLT5kb2N1bWVudCgpLT5ldmVudFF1
ZXVlKCktPmVucXVldWVPckRpc3BhdGNoU2Nyb2xsRXZlbnQobm9kZSgpLCBFdmVudFF1ZXVlOjpT
Y3JvbGxFdmVudEVsZW1lbnRUYXJnZXQpOwogfQogCi1pbnQgUmVuZGVyTGlzdEJveDo6aXRlbUhl
aWdodCgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckxpc3RCb3g6Oml0ZW1IZWlnaHQoKSBjb25z
dAogewogICAgIHJldHVybiBzdHlsZSgpLT5mb250TWV0cmljcygpLmhlaWdodCgpICsgcm93U3Bh
Y2luZzsKIH0KIAotaW50IFJlbmRlckxpc3RCb3g6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSBj
b25zdAorTGF5b3V0VW5pdCBSZW5kZXJMaXN0Qm94Ojp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV92QmFyICYmICFtX3ZCYXItPmlzT3ZlcmxheVNjcm9sbGJh
cigpID8gbV92QmFyLT53aWR0aCgpIDogMDsKIH0KIAogLy8gRklYTUU6IFdlIGlnbm9yZSBwYWRk
aW5nIGluIHRoZSB2ZXJ0aWNhbCBkaXJlY3Rpb24gYXMgZmFyIGFzIHRoZXNlIHZhbHVlcyBhcmUg
Y29uY2VybmVkLCBzaW5jZSB0aGF0J3MKIC8vIGhvdyB0aGUgY29udHJvbCBjdXJyZW50bHkgcGFp
bnRzLgotaW50IFJlbmRlckxpc3RCb3g6OnNjcm9sbFdpZHRoKCkgY29uc3QKK0xheW91dFVuaXQg
UmVuZGVyTGlzdEJveDo6c2Nyb2xsV2lkdGgoKSBjb25zdAogewogICAgIC8vIFRoZXJlIGlzIG5v
IGhvcml6b250YWwgc2Nyb2xsaW5nIGFsbG93ZWQuCiAgICAgcmV0dXJuIGNsaWVudFdpZHRoKCk7
CiB9CiAKLWludCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxIZWlnaHQoKSBjb25zdAorTGF5b3V0VW5p
dCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxIZWlnaHQoKSBjb25zdAogewogICAgIHJldHVybiBtYXgo
Y2xpZW50SGVpZ2h0KCksIGxpc3RIZWlnaHQoKSk7CiB9CiAKLWludCBSZW5kZXJMaXN0Qm94Ojpz
Y3JvbGxMZWZ0KCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyTGlzdEJveDo6c2Nyb2xsTGVmdCgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUmVuZGVyTGlzdEJveDo6c2V0U2Ny
b2xsTGVmdChpbnQpCit2b2lkIFJlbmRlckxpc3RCb3g6OnNldFNjcm9sbExlZnQoTGF5b3V0VW5p
dCkKIHsKIH0KIAotaW50IFJlbmRlckxpc3RCb3g6OnNjcm9sbFRvcCgpIGNvbnN0CitMYXlvdXRV
bml0IFJlbmRlckxpc3RCb3g6OnNjcm9sbFRvcCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW5k
ZXhPZmZzZXQgKiBpdGVtSGVpZ2h0KCk7CiB9CiAKLXZvaWQgUmVuZGVyTGlzdEJveDo6c2V0U2Ny
b2xsVG9wKGludCBuZXdUb3ApCit2b2lkIFJlbmRlckxpc3RCb3g6OnNldFNjcm9sbFRvcChMYXlv
dXRVbml0IG5ld1RvcCkKIHsKICAgICAvLyBEZXRlcm1pbmUgYW4gaW5kZXggYW5kIHNjcm9sbCB0
byBpdC4gICAgCiAgICAgaW50IGluZGV4ID0gbmV3VG9wIC8gaXRlbUhlaWdodCgpOwpAQCAtNjk0
LDkgKzY5Myw5IEBAIGJvb2wgUmVuZGVyTGlzdEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGkKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotSW50UmVjdCBSZW5kZXJMaXN0Qm94Ojpjb250cm9sQ2xpcFJl
Y3QoY29uc3QgSW50UG9pbnQmIGFkZGl0aW9uYWxPZmZzZXQpIGNvbnN0CitMYXlvdXRSZWN0IFJl
bmRlckxpc3RCb3g6OmNvbnRyb2xDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYgYWRkaXRpb25h
bE9mZnNldCkgY29uc3QKIHsKLSAgICBJbnRSZWN0IGNsaXBSZWN0ID0gY29udGVudEJveFJlY3Qo
KTsKKyAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gY29udGVudEJveFJlY3QoKTsKICAgICBjbGlw
UmVjdC5tb3ZlQnkoYWRkaXRpb25hbE9mZnNldCk7CiAgICAgcmV0dXJuIGNsaXBSZWN0OwogfQpA
QCAtNzA3LDc0ICs3MDYsNzQgQEAgYm9vbCBSZW5kZXJMaXN0Qm94Ojppc0FjdGl2ZSgpIGNvbnN0
CiAgICAgcmV0dXJuIHBhZ2UgJiYgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7
CiB9CiAKLXZvaWQgUmVuZGVyTGlzdEJveDo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xs
YmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIFJlbmRlckxpc3RCb3g6
OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBMYXlv
dXRSZWN0JiByZWN0KQogewotICAgIEludFJlY3Qgc2Nyb2xsUmVjdCA9IHJlY3Q7CisgICAgTGF5
b3V0UmVjdCBzY3JvbGxSZWN0ID0gcmVjdDsKICAgICBzY3JvbGxSZWN0Lm1vdmUod2lkdGgoKSAt
IGJvcmRlclJpZ2h0KCkgLSBzY3JvbGxiYXItPndpZHRoKCksIGJvcmRlclRvcCgpKTsKICAgICBy
ZXBhaW50UmVjdGFuZ2xlKHNjcm9sbFJlY3QpOwogfQogCi1JbnRSZWN0IFJlbmRlckxpc3RCb3g6
OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNj
cm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QKK0xheW91dFJlY3Qg
UmVuZGVyTGlzdEJveDo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0
IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBMYXlvdXRSZWN0JiBzY3JvbGxiYXJSZWN0KSBj
b25zdAogewogICAgIFJlbmRlclZpZXcqIHZpZXcgPSB0aGlzLT52aWV3KCk7CiAgICAgaWYgKCF2
aWV3KQogICAgICAgICByZXR1cm4gc2Nyb2xsYmFyUmVjdDsKIAotICAgIEludFJlY3QgcmVjdCA9
IHNjcm9sbGJhclJlY3Q7CisgICAgTGF5b3V0UmVjdCByZWN0ID0gc2Nyb2xsYmFyUmVjdDsKIAot
ICAgIGludCBzY3JvbGxiYXJMZWZ0ID0gd2lkdGgoKSAtIGJvcmRlclJpZ2h0KCkgLSBzY3JvbGxi
YXItPndpZHRoKCk7Ci0gICAgaW50IHNjcm9sbGJhclRvcCA9IGJvcmRlclRvcCgpOworICAgIExh
eW91dFVuaXQgc2Nyb2xsYmFyTGVmdCA9IHdpZHRoKCkgLSBib3JkZXJSaWdodCgpIC0gc2Nyb2xs
YmFyLT53aWR0aCgpOworICAgIExheW91dFVuaXQgc2Nyb2xsYmFyVG9wID0gYm9yZGVyVG9wKCk7
CiAgICAgcmVjdC5tb3ZlKHNjcm9sbGJhckxlZnQsIHNjcm9sbGJhclRvcCk7CiAKICAgICByZXR1
cm4gdmlldy0+ZnJhbWVWaWV3KCktPmNvbnZlcnRGcm9tUmVuZGVyZXIodGhpcywgcmVjdCk7CiB9
CiAKLUludFJlY3QgUmVuZGVyTGlzdEJveDo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Ny
b2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBwYXJlbnRS
ZWN0KSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJMaXN0Qm94Ojpjb252ZXJ0RnJvbUNvbnRhaW5p
bmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IExheW91
dFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0CiB7CiAgICAgUmVuZGVyVmlldyogdmlldyA9IHRoaXMt
PnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiBwYXJlbnRSZWN0OwogCi0g
ICAgSW50UmVjdCByZWN0ID0gdmlldy0+ZnJhbWVWaWV3KCktPmNvbnZlcnRUb1JlbmRlcmVyKHRo
aXMsIHBhcmVudFJlY3QpOworICAgIExheW91dFJlY3QgcmVjdCA9IHZpZXctPmZyYW1lVmlldygp
LT5jb252ZXJ0VG9SZW5kZXJlcih0aGlzLCBwYXJlbnRSZWN0KTsKIAotICAgIGludCBzY3JvbGxi
YXJMZWZ0ID0gd2lkdGgoKSAtIGJvcmRlclJpZ2h0KCkgLSBzY3JvbGxiYXItPndpZHRoKCk7Ci0g
ICAgaW50IHNjcm9sbGJhclRvcCA9IGJvcmRlclRvcCgpOworICAgIExheW91dFVuaXQgc2Nyb2xs
YmFyTGVmdCA9IHdpZHRoKCkgLSBib3JkZXJSaWdodCgpIC0gc2Nyb2xsYmFyLT53aWR0aCgpOwor
ICAgIExheW91dFVuaXQgc2Nyb2xsYmFyVG9wID0gYm9yZGVyVG9wKCk7CiAgICAgcmVjdC5tb3Zl
KC1zY3JvbGxiYXJMZWZ0LCAtc2Nyb2xsYmFyVG9wKTsKICAgICByZXR1cm4gcmVjdDsKIH0KIAot
SW50UG9pbnQgUmVuZGVyTGlzdEJveDo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdW
aWV3KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsYmFy
UG9pbnQpIGNvbnN0CitMYXlvdXRQb2ludCBSZW5kZXJMaXN0Qm94Ojpjb252ZXJ0RnJvbVNjcm9s
bGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IExh
eW91dFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKIHsKICAgICBSZW5kZXJWaWV3KiB2aWV3
ID0gdGhpcy0+dmlldygpOwogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIHNjcm9sbGJh
clBvaW50OwogCi0gICAgSW50UG9pbnQgcG9pbnQgPSBzY3JvbGxiYXJQb2ludDsKKyAgICBMYXlv
dXRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50OwogCi0gICAgaW50IHNjcm9sbGJhckxlZnQg
PSB3aWR0aCgpIC0gYm9yZGVyUmlnaHQoKSAtIHNjcm9sbGJhci0+d2lkdGgoKTsKLSAgICBpbnQg
c2Nyb2xsYmFyVG9wID0gYm9yZGVyVG9wKCk7CisgICAgTGF5b3V0VW5pdCBzY3JvbGxiYXJMZWZ0
ID0gd2lkdGgoKSAtIGJvcmRlclJpZ2h0KCkgLSBzY3JvbGxiYXItPndpZHRoKCk7CisgICAgTGF5
b3V0VW5pdCBzY3JvbGxiYXJUb3AgPSBib3JkZXJUb3AoKTsKICAgICBwb2ludC5tb3ZlKHNjcm9s
bGJhckxlZnQsIHNjcm9sbGJhclRvcCk7CiAKICAgICByZXR1cm4gdmlldy0+ZnJhbWVWaWV3KCkt
PmNvbnZlcnRGcm9tUmVuZGVyZXIodGhpcywgcG9pbnQpOwogfQogCi1JbnRQb2ludCBSZW5kZXJM
aXN0Qm94Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xs
YmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QKK0xheW91
dFBvaW50IFJlbmRlckxpc3RCb3g6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJh
cihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgTGF5b3V0UG9pbnQmIHBhcmVudFBv
aW50KSBjb25zdAogewogICAgIFJlbmRlclZpZXcqIHZpZXcgPSB0aGlzLT52aWV3KCk7CiAgICAg
aWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gcGFyZW50UG9pbnQ7CiAKLSAgICBJbnRQb2ludCBw
b2ludCA9IHZpZXctPmZyYW1lVmlldygpLT5jb252ZXJ0VG9SZW5kZXJlcih0aGlzLCBwYXJlbnRQ
b2ludCk7CisgICAgTGF5b3V0UG9pbnQgcG9pbnQgPSB2aWV3LT5mcmFtZVZpZXcoKS0+Y29udmVy
dFRvUmVuZGVyZXIodGhpcywgcGFyZW50UG9pbnQpOwogCi0gICAgaW50IHNjcm9sbGJhckxlZnQg
PSB3aWR0aCgpIC0gYm9yZGVyUmlnaHQoKSAtIHNjcm9sbGJhci0+d2lkdGgoKTsKLSAgICBpbnQg
c2Nyb2xsYmFyVG9wID0gYm9yZGVyVG9wKCk7CisgICAgTGF5b3V0VW5pdCBzY3JvbGxiYXJMZWZ0
ID0gd2lkdGgoKSAtIGJvcmRlclJpZ2h0KCkgLSBzY3JvbGxiYXItPndpZHRoKCk7CisgICAgTGF5
b3V0VW5pdCBzY3JvbGxiYXJUb3AgPSBib3JkZXJUb3AoKTsKICAgICBwb2ludC5tb3ZlKC1zY3Jv
bGxiYXJMZWZ0LCAtc2Nyb2xsYmFyVG9wKTsKICAgICByZXR1cm4gcG9pbnQ7CiB9CiAKLUludFNp
emUgUmVuZGVyTGlzdEJveDo6Y29udGVudHNTaXplKCkgY29uc3QKK0xheW91dFNpemUgUmVuZGVy
TGlzdEJveDo6Y29udGVudHNTaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gSW50U2l6ZShzY3Jv
bGxXaWR0aCgpLCBzY3JvbGxIZWlnaHQoKSk7CisgICAgcmV0dXJuIExheW91dFNpemUoc2Nyb2xs
V2lkdGgoKSwgc2Nyb2xsSGVpZ2h0KCkpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlckxpc3RCb3g6
OnZpc2libGVIZWlnaHQoKSBjb25zdApAQCAtNzg3LDExICs3ODYsMTEgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJMaXN0Qm94Ojp2aXNpYmxlV2lkdGgoKQogICAgIHJldHVybiB3aWR0aCgpOwogfQogCi1J
bnRQb2ludCBSZW5kZXJMaXN0Qm94OjpjdXJyZW50TW91c2VQb3NpdGlvbigpIGNvbnN0CitMYXlv
dXRQb2ludCBSZW5kZXJMaXN0Qm94OjpjdXJyZW50TW91c2VQb3NpdGlvbigpIGNvbnN0CiB7CiAg
ICAgUmVuZGVyVmlldyogdmlldyA9IHRoaXMtPnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCi0gICAg
ICAgIHJldHVybiBJbnRQb2ludCgpOworICAgICAgICByZXR1cm4gTGF5b3V0UG9pbnQoKTsKICAg
ICByZXR1cm4gdmlldy0+ZnJhbWVWaWV3KCktPmN1cnJlbnRNb3VzZVBvc2l0aW9uKCk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkocmV2aXNpb24g
OTI5ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSwxMyArNDUsMTMgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRPcHRp
b25zQ2hhbmdlZChib29sIGNoYW5nZWQpIHsgbV9vcHRpb25zQ2hhbmdlZCA9IGNoYW5nZWQ7IH0K
IAotICAgIGludCBsaXN0SW5kZXhBdE9mZnNldChpbnQgeCwgaW50IHkpOwotICAgIEludFJlY3Qg
aXRlbUJvdW5kaW5nQm94UmVjdChjb25zdCBMYXlvdXRQb2ludCYsIGludCBpbmRleCk7CisgICAg
aW50IGxpc3RJbmRleEF0T2Zmc2V0KGNvbnN0IExheW91dFNpemUmKTsKKyAgICBMYXlvdXRSZWN0
IGl0ZW1Cb3VuZGluZ0JveFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmLCBpbnQgaW5kZXgpOwogCiAg
ICAgYm9vbCBzY3JvbGxUb1JldmVhbEVsZW1lbnRBdExpc3RJbmRleChpbnQgaW5kZXgpOwogICAg
IGJvb2wgbGlzdEluZGV4SXNWaXNpYmxlKGludCBpbmRleCk7CiAKLSAgICBpbnQgc2Nyb2xsVG93
YXJkKGNvbnN0IEludFBvaW50Jik7IC8vIFJldHVybnMgdGhlIG5ldyBpbmRleCBvciAtMSBpZiBu
byBzY3JvbGwgb2NjdXJyZWQKKyAgICBpbnQgc2Nyb2xsVG93YXJkKGNvbnN0IExheW91dFBvaW50
Jik7IC8vIFJldHVybnMgdGhlIG5ldyBpbmRleCBvciAtMSBpZiBubyBzY3JvbGwgb2NjdXJyZWQK
IAogICAgIGludCBzaXplKCkgY29uc3Q7CiAKQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKIAog
ICAgIHZpcnR1YWwgYm9vbCBoYXNDb250cm9sQ2xpcCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmplY3QoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9p
bnQmKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgY29udHJvbENsaXBSZWN0KGNvbnN0IEludFBvaW50
JikgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbnRyb2xDbGlwUmVjdChjb25zdCBM
YXlvdXRQb2ludCYpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGlzUG9pbnRJbk92ZXJmbG93
Q29udHJvbChIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWlu
ZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCk7CiAKQEAgLTc0LDcgKzc0
LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgbG9naWNhbFNjcm9sbChTY3JvbGxMb2dp
Y2FsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEsIE5v
ZGUqKiBzdG9wTm9kZSA9IDApOwogCiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRM
b2dpY2FsV2lkdGhzKCk7Ci0gICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFz
ZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9k
ZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRV
bml0IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lLCBib29sIGZpcnN0TGluZSwgTGluZURp
cmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUp
IGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlTG9naWNhbEhlaWdodCgpOwogCiAgICAg
dmlydHVhbCB2b2lkIGxheW91dCgpOwpAQCAtODgsMzQgKzg4LDM0IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCBib29sIHNob3VsZFBhblNjcm9sbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgcGFuU2Nyb2xsKGNvbnN0IEludFBvaW50Jik7CiAKLSAgICB2aXJ0dWFs
IGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgc2Ny
b2xsTGVmdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHNjcm9sbFRvcCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xs
SGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbExlZnQoaW50KTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsVG9wKGludCk7CisgICAgdmlydHVhbCBMYXlvdXRVbml0
IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQg
c2Nyb2xsTGVmdCgpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBzY3JvbGxUb3AoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgc2Nyb2xsV2lkdGgoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIExheW91dFVuaXQgc2Nyb2xsSGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHNldFNjcm9sbExlZnQoTGF5b3V0VW5pdCk7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFRv
cChMYXlvdXRVbml0KTsKIAogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNv
bnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0
aW9uKTsKIAogICAgIC8vIFNjcm9sbGFibGVBcmVhIGludGVyZmFjZS4KLSAgICB2aXJ0dWFsIGlu
dCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGludCBzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqKSBjb25zdDsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50Jik7Ci0gICAgdmlydHVhbCB2
b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsK
KyAgICB2aXJ0dWFsIExheW91dFVuaXQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbikg
Y29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IHNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciop
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgTGF5b3V0UG9p
bnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFy
KiwgY29uc3QgTGF5b3V0UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfSAvLyBXZSBkb24ndCBzdXBwb3J0IHJlc2l6ZSBvbiBsaXN0IGJveGVzIHlldC4g
SWYgd2UgZGlkIHRoZXNlIHdvdWxkIGhhdmUgdG8gY2hhbmdlLgotICAgIHZpcnR1YWwgSW50UmVj
dCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVjdCgpOyB9Ci0gICAgdmly
dHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmKSB7IH0K
LSAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3
KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICB2aXJ0dWFsIElu
dFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJh
ciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRG
cm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRQ
b2ludCYpIGNvbnN0OwotICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5n
Vmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFBvaW50JikgY29uc3Q7
CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCB7IHJldHVy
biBMYXlvdXRSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5l
clJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIHsgfQorICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb252
ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3Qg
TGF5b3V0UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgTGF5b3V0UmVj
dCYpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJU
b0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IExheW91dFBvaW50JikgY29u
c3Q7CisgICAgdmlydHVhbCBMYXlvdXRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9T
Y3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKICAg
ICB2aXJ0dWFsIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBt
X3ZCYXIuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIEludFNpemUgY29udGVudHNTaXplKCkgY29uc3Q7
CisgICAgdmlydHVhbCBMYXlvdXRTaXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgTGF5b3V0VW5pdCB2aXNpYmxlSGVpZ2h0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBMYXlvdXRV
bml0IHZpc2libGVXaWR0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgSW50UG9pbnQgY3VycmVudE1v
dXNlUG9zaXRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFBvaW50IGN1cnJlbnRNb3Vz
ZVBvc2l0aW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxB
bmltYXRpb25zKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzT25BY3RpdmVQYWdlKCkgY29u
c3Q7CiAKQEAgLTEzMCwxMSArMTMwLDExIEBAIHByaXZhdGU6CiAgICAgUGFzc1JlZlB0cjxTY3Jv
bGxiYXI+IGNyZWF0ZVNjcm9sbGJhcigpOwogICAgIHZvaWQgZGVzdHJveVNjcm9sbGJhcigpOwog
ICAgIAotICAgIGludCBpdGVtSGVpZ2h0KCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBpdGVtSGVp
Z2h0KCkgY29uc3Q7CiAgICAgdm9pZCB2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4KTsK
ICAgICBpbnQgbnVtVmlzaWJsZUl0ZW1zKCkgY29uc3Q7CiAgICAgaW50IG51bUl0ZW1zKCkgY29u
c3Q7Ci0gICAgaW50IGxpc3RIZWlnaHQoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGxpc3RIZWln
aHQoKSBjb25zdDsKICAgICB2b2lkIHBhaW50U2Nyb2xsYmFyKFBhaW50SW5mbyYsIGNvbnN0IExh
eW91dFBvaW50Jik7CiAgICAgdm9pZCBwYWludEl0ZW1Gb3JlZ3JvdW5kKFBhaW50SW5mbyYsIGNv
bnN0IExheW91dFBvaW50JiwgaW50IGxpc3RJbmRleCk7CiAgICAgdm9pZCBwYWludEl0ZW1CYWNr
Z3JvdW5kKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiwgaW50IGxpc3RJbmRleCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHJldmlz
aW9uIDkyOTg0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjM3LDE3ICsyMzcsMTcgQEAgU3RyaW5nIFJlbmRlck1lbnVM
aXN0Ojp0ZXh0KCkgY29uc3QKICAgICByZXR1cm4gbV9idXR0b25UZXh0ID8gbV9idXR0b25UZXh0
LT50ZXh0KCkgOiAwOwogfQogCi1JbnRSZWN0IFJlbmRlck1lbnVMaXN0Ojpjb250cm9sQ2xpcFJl
Y3QoY29uc3QgSW50UG9pbnQmIGFkZGl0aW9uYWxPZmZzZXQpIGNvbnN0CitMYXlvdXRSZWN0IFJl
bmRlck1lbnVMaXN0Ojpjb250cm9sQ2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGFkZGl0aW9u
YWxPZmZzZXQpIGNvbnN0CiB7CiAgICAgLy8gQ2xpcCB0byB0aGUgaW50ZXJzZWN0aW9uIG9mIHRo
ZSBjb250ZW50IGJveCBhbmQgdGhlIGNvbnRlbnQgYm94IGZvciB0aGUgaW5uZXIgYm94CiAgICAg
Ly8gVGhpcyB3aWxsIGxlYXZlIHJvb20gZm9yIHRoZSBhcnJvd3Mgd2hpY2ggc2l0IGluIHRoZSBp
bm5lciBib3ggcGFkZGluZywKICAgICAvLyBhbmQgaWYgdGhlIGlubmVyIGJveCBldmVyIHNwaWxs
cyBvdXQgb2YgdGhlIG91dGVyIGJveCwgdGhhdCB3aWxsIGdldCBjbGlwcGVkIHRvby4KLSAgICBJ
bnRSZWN0IG91dGVyQm94KGFkZGl0aW9uYWxPZmZzZXQueCgpICsgYm9yZGVyTGVmdCgpICsgcGFk
ZGluZ0xlZnQoKSwgCisgICAgTGF5b3V0UmVjdCBvdXRlckJveChhZGRpdGlvbmFsT2Zmc2V0Lngo
KSArIGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCksIAogICAgICAgICAgICAgICAgICAgIGFk
ZGl0aW9uYWxPZmZzZXQueSgpICsgYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCksCiAgICAgICAg
ICAgICAgICAgICAgY29udGVudFdpZHRoKCksIAogICAgICAgICAgICAgICAgICAgIGNvbnRlbnRI
ZWlnaHQoKSk7CiAgICAgCi0gICAgSW50UmVjdCBpbm5lckJveChhZGRpdGlvbmFsT2Zmc2V0Lngo
KSArIG1faW5uZXJCbG9jay0+eCgpICsgbV9pbm5lckJsb2NrLT5wYWRkaW5nTGVmdCgpLCAKKyAg
ICBMYXlvdXRSZWN0IGlubmVyQm94KGFkZGl0aW9uYWxPZmZzZXQueCgpICsgbV9pbm5lckJsb2Nr
LT54KCkgKyBtX2lubmVyQmxvY2stPnBhZGRpbmdMZWZ0KCksIAogICAgICAgICAgICAgICAgICAg
IGFkZGl0aW9uYWxPZmZzZXQueSgpICsgbV9pbm5lckJsb2NrLT55KCkgKyBtX2lubmVyQmxvY2st
PnBhZGRpbmdUb3AoKSwKICAgICAgICAgICAgICAgICAgICBtX2lubmVyQmxvY2stPmNvbnRlbnRX
aWR0aCgpLCAKICAgICAgICAgICAgICAgICAgICBtX2lubmVyQmxvY2stPmNvbnRlbnRIZWlnaHQo
KSk7CkBAIC0zMDIsNyArMzAyLDcgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6c2hvd1BvcHVwKCkK
ICAgICAvLyBDb21wdXRlIHRoZSB0b3AgbGVmdCB0YWtpbmcgdHJhbnNmb3JtcyBpbnRvIGFjY291
bnQsIGJ1dCB1c2UKICAgICAvLyB0aGUgYWN0dWFsIHdpZHRoIG9mIHRoZSBlbGVtZW50IHRvIHNp
emUgdGhlIHBvcHVwLgogICAgIEZsb2F0UG9pbnQgYWJzVG9wTGVmdCA9IGxvY2FsVG9BYnNvbHV0
ZShGbG9hdFBvaW50KCksIGZhbHNlLCB0cnVlKTsKLSAgICBJbnRSZWN0IGFic0JvdW5kcyA9IGFi
c29sdXRlQm91bmRpbmdCb3hSZWN0KCk7CisgICAgTGF5b3V0UmVjdCBhYnNCb3VuZHMgPSBhYnNv
bHV0ZUJvdW5kaW5nQm94UmVjdCgpOwogICAgIGFic0JvdW5kcy5zZXRMb2NhdGlvbihyb3VuZGVk
SW50UG9pbnQoYWJzVG9wTGVmdCkpOwogICAgIG1fcG9wdXAtPnNob3coYWJzQm91bmRzLCBkb2N1
bWVudCgpLT52aWV3KCksCiAgICAgICAgIHNlbGVjdC0+b3B0aW9uVG9MaXN0SW5kZXgoc2VsZWN0
LT5zZWxlY3RlZEluZGV4KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNZW51TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNZW51TGlzdC5oCShyZXZpc2lvbiA5Mjk4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNZW51TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7CiAKICAgICB2aXJ0dWFs
IGJvb2wgaGFzQ29udHJvbENsaXAoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVh
bCBJbnRSZWN0IGNvbnRyb2xDbGlwUmVjdChjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgIHZp
cnR1YWwgTGF5b3V0UmVjdCBjb250cm9sQ2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmKSBjb25z
dDsKIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJu
ICJSZW5kZXJNZW51TGlzdCI7IH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>