<?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>63852</bug_id>
          
          <creation_ts>2011-07-01 16:01:56 -0700</creation_ts>
          <short_desc>Switch primary virtual layout functions to new layout types</short_desc>
          <delta_ts>2011-07-01 17:17:10 -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>431502</commentid>
    <comment_count>0</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-07-01 16:01:56 -0700</bug_when>
    <thetext>The abstraction march goes on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431505</commentid>
    <comment_count>1</comment_count>
      <attachid>99533</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-07-01 16:04:42 -0700</bug_when>
    <thetext>Created attachment 99533
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431525</commentid>
    <comment_count>2</comment_count>
      <attachid>99533</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-07-01 16:34:41 -0700</bug_when>
    <thetext>Comment on attachment 99533
Patch

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431545</commentid>
    <comment_count>3</comment_count>
      <attachid>99533</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-01 17:17:06 -0700</bug_when>
    <thetext>Comment on attachment 99533
Patch

Clearing flags on attachment: 99533

Committed r90302: &lt;http://trac.webkit.org/changeset/90302&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431546</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-01 17:17:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99533</attachid>
            <date>2011-07-01 16:04:42 -0700</date>
            <delta_ts>2011-07-01 17:17:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63852-20110701160440.patch</filename>
            <type>text/plain</type>
            <size>47454</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwMjkwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTggQEAKKzIwMTEtMDctMDEgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN3aXRjaCBwcmltYXJ5IHZp
cnR1YWwgbGF5b3V0IGZ1bmN0aW9ucyB0byBuZXcgbGF5b3V0IHR5cGVzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzg1MgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaGluZyB0aGUgcHJpbWFyeSBv
dmVybG9hZGVkIGxheW91dCBmdW5jdGlvbnMgb3ZlciB0byB0aGUgbmV3IGxheW91dCB1bml0IGFi
c3RyYWN0aW9uLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gZnVuY3Rpb25hbGl0eSBjaGFu
Z2VzLgorCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXI6OmxheW91
dCk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QXV0b1RhYmxlTGF5b3V0OjpsYXlvdXQpOgorICAgICAgICAq
IHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpeGVk
VGFibGVMYXlvdXQ6OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmxheW91dCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckZyYW1lU2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYW1lU2V0
OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNZWRpYTo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyUnVieVJ1bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjpsYXlvdXQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNjcm9sbGJhclBhcnQ6OmxheW91dCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclNsaWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTbGlkZXI6Omxh
eW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRhYmxlOjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
YWJsZVJvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVJvdzo6bGF5b3V0KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpsYXlvdXQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJW
aWV3OjpsYXlvdXREZWx0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjphZGRMYXlv
dXREZWx0YSk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFJvb3Q6OmxheW91dCk6CisgICAgICAg
ICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTWF0aE1MUm93OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRo
TUxTcXVhcmVSb290OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MU3ViU3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFN1YlN1cDo6
bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxVbmRlck92ZXI6OmxheW91dCk6
CisKIDIwMTEtMDctMDEgIEFkZWxlIFBldGVyc29uICA8YWRlbGVAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAkocmV2aXNpb24gOTAyODAp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3NCw3ICsyNzQsNyBAQCB2b2lkIFJlbmRlck1lZGlhVm9sdW1l
U2xpZGVyQ29udGFpbmVyOjpsCiAKICAgICBMYXlvdXRTdGF0ZURpc2FibGVyIGxheW91dFN0YXRl
RGlzYWJsZXIodmlldygpKTsKIAotICAgIEludFBvaW50IG9mZnNldCA9IHRoZW1lKCktPnZvbHVt
ZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKGJ1dHRvbkJveCwgSW50U2l6ZSh3aWR0aCgpLCBo
ZWlnaHQoKSkpOworICAgIExheW91dFBvaW50IG9mZnNldCA9IHRoZW1lKCktPnZvbHVtZVNsaWRl
ck9mZnNldEZyb21NdXRlQnV0dG9uKGJ1dHRvbkJveCwgc2l6ZSgpKTsKICAgICBzZXRYKG9mZnNl
dC54KCkgKyBidXR0b25Cb3gtPm9mZnNldExlZnQoKSk7CiAgICAgc2V0WShvZmZzZXQueSgpICsg
YnV0dG9uQm94LT5vZmZzZXRUb3AoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCShyZXZpc2lvbiA5MDI4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTY4LDcgKzk2OCw3IEBAIHZvaWQgRnJhbWVWaWV3OjpsYXlv
dXQoYm9vbCBhbGxvd1N1YnRyZWUKIAogICAgICAgICAgICAgICAgIG1fZmlyc3RMYXlvdXQgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICBtX2ZpcnN0TGF5b3V0Q2FsbGJhY2tQZW5kaW5nID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBtX2xhc3RMYXlvdXRTaXplID0gSW50U2l6ZSh3aWR0aCgpLCBo
ZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgbV9sYXN0TGF5b3V0U2l6ZSA9IExheW91dFNpemUo
d2lkdGgoKSwgaGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIG1fbGFzdFpvb21GYWN0b3IgPSBy
b290LT5zdHlsZSgpLT56b29tKCk7CiAKICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIGluaXRp
YWwgdk1vZGUgdG8gQWx3YXlzT24gaWYgd2UncmUgYXV0by4KQEAgLTk4NCw5ICs5ODQsOSBAQCB2
b2lkIEZyYW1lVmlldzo6bGF5b3V0KGJvb2wgYWxsb3dTdWJ0cmVlCiAgICAgICAgICAgICAgICAg
c2V0U2Nyb2xsYmFyTW9kZXMoaE1vZGUsIHZNb2RlKTsKICAgICAgICAgfQogCi0gICAgICAgIElu
dFNpemUgb2xkU2l6ZSA9IG1fc2l6ZTsKKyAgICAgICAgTGF5b3V0U2l6ZSBvbGRTaXplID0gbV9z
aXplOwogCi0gICAgICAgIG1fc2l6ZSA9IEludFNpemUobGF5b3V0V2lkdGgoKSwgbGF5b3V0SGVp
Z2h0KCkpOworICAgICAgICBtX3NpemUgPSBMYXlvdXRTaXplKGxheW91dFdpZHRoKCksIGxheW91
dEhlaWdodCgpKTsKIAogICAgICAgICBpZiAob2xkU2l6ZSAhPSBtX3NpemUpIHsKICAgICAgICAg
ICAgIG1fZG9GdWxsUmVwYWludCA9IHRydWU7CkBAIC0xMDMyLDcgKzEwMzIsNyBAQCB2b2lkIEZy
YW1lVmlldzo6bGF5b3V0KGJvb2wgYWxsb3dTdWJ0cmVlCiAKICAgICAvLyBOb3cgdXBkYXRlIHRo
ZSBwb3NpdGlvbnMgb2YgYWxsIGxheWVycy4KICAgICBiZWdpbkRlZmVycmVkUmVwYWludHMoKTsK
LSAgICBJbnRQb2ludCBjYWNoZWRPZmZzZXQ7CisgICAgTGF5b3V0UG9pbnQgY2FjaGVkT2Zmc2V0
OwogICAgIGlmIChtX2RvRnVsbFJlcGFpbnQpCiAgICAgICAgIHJvb3QtPnZpZXcoKS0+cmVwYWlu
dCgpOyAvLyBGSVhNRTogVGhpcyBpc24ndCByZWFsbHkgcmlnaHQsIHNpbmNlIHRoZSBSZW5kZXJW
aWV3IGRvZXNuJ3QgZnVsbHkgZW5jb21wYXNzIHRoZSB2aXNpYmxlQ29udGVudFJlY3QoKS4gSXQg
anVzdCBoYXBwZW5zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byB3b3Jr
IG91dCBtb3N0IG9mIHRoZSB0aW1lLCBzaW5jZSBmaXJzdCBsYXlvdXRzIGFuZCBwcmludGluZyBk
b24ndCBoYXZlIHlvdSBzY3JvbGxlZCBhbnl3aGVyZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCShyZXZpc2lvbiA5MDI4MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NzcsOCArNDc3LDggQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6Omluc2VydFNwYW5DZWxsKFJl
bgogdm9pZCBBdXRvVGFibGVMYXlvdXQ6OmxheW91dCgpCiB7CiAgICAgLy8gdGFibGUgbGF5b3V0
IGJhc2VkIG9uIHRoZSB2YWx1ZXMgY29sbGVjdGVkIGluIHRoZSBsYXlvdXQgc3RydWN0dXJlLgot
ICAgIGludCB0YWJsZUxvZ2ljYWxXaWR0aCA9IG1fdGFibGUtPmxvZ2ljYWxXaWR0aCgpIC0gbV90
YWJsZS0+Ym9yZGVyc1BhZGRpbmdBbmRTcGFjaW5nSW5Sb3dEaXJlY3Rpb24oKTsKLSAgICBpbnQg
YXZhaWxhYmxlID0gdGFibGVMb2dpY2FsV2lkdGg7CisgICAgTGF5b3V0VW5pdCB0YWJsZUxvZ2lj
YWxXaWR0aCA9IG1fdGFibGUtPmxvZ2ljYWxXaWR0aCgpIC0gbV90YWJsZS0+Ym9yZGVyc1BhZGRp
bmdBbmRTcGFjaW5nSW5Sb3dEaXJlY3Rpb24oKTsKKyAgICBMYXlvdXRVbml0IGF2YWlsYWJsZSA9
IHRhYmxlTG9naWNhbFdpZHRoOwogICAgIHNpemVfdCBuRWZmQ29scyA9IG1fdGFibGUtPm51bUVm
ZkNvbHMoKTsKIAogICAgIGlmIChuRWZmQ29scyAhPSBtX2xheW91dFN0cnVjdC5zaXplKCkpIHsK
QEAgLTUwMSw3ICs1MDEsNyBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6bGF5b3V0KCkKIAogICAg
IC8vIGZpbGwgdXAgZXZlcnkgY2VsbCB3aXRoIGl0cyBtaW5XaWR0aAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbkVmZkNvbHM7ICsraSkgewotICAgICAgICBpbnQgY2VsbExvZ2ljYWxXaWR0
aCA9IG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZU1pbkxvZ2ljYWxXaWR0aDsKKyAgICAgICAg
TGF5b3V0VW5pdCBjZWxsTG9naWNhbFdpZHRoID0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZl
TWluTG9naWNhbFdpZHRoOwogICAgICAgICBtX2xheW91dFN0cnVjdFtpXS5jb21wdXRlZExvZ2lj
YWxXaWR0aCA9IGNlbGxMb2dpY2FsV2lkdGg7CiAgICAgICAgIGF2YWlsYWJsZSAtPSBjZWxsTG9n
aWNhbFdpZHRoOwogICAgICAgICBMZW5ndGgmIGxvZ2ljYWxXaWR0aCA9IG1fbGF5b3V0U3RydWN0
W2ldLmVmZmVjdGl2ZUxvZ2ljYWxXaWR0aDsKQEAgLTUzNywyMSArNTM3LDIxIEBAIHZvaWQgQXV0
b1RhYmxlTGF5b3V0OjpsYXlvdXQoKQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5F
ZmZDb2xzOyArK2kpIHsKICAgICAgICAgICAgIExlbmd0aCYgbG9naWNhbFdpZHRoID0gbV9sYXlv
dXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTG9naWNhbFdpZHRoOwogICAgICAgICAgICAgaWYgKGxvZ2lj
YWxXaWR0aC5pc1BlcmNlbnQoKSkgewotICAgICAgICAgICAgICAgIGludCBjZWxsTG9naWNhbFdp
ZHRoID0gbWF4KG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZU1pbkxvZ2ljYWxXaWR0aCwgbG9n
aWNhbFdpZHRoLmNhbGNNaW5WYWx1ZSh0YWJsZUxvZ2ljYWxXaWR0aCkpOworICAgICAgICAgICAg
ICAgIExheW91dFVuaXQgY2VsbExvZ2ljYWxXaWR0aCA9IG1heChtX2xheW91dFN0cnVjdFtpXS5l
ZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGgsIGxvZ2ljYWxXaWR0aC5jYWxjTWluVmFsdWUodGFibGVM
b2dpY2FsV2lkdGgpKTsKICAgICAgICAgICAgICAgICBhdmFpbGFibGUgKz0gbV9sYXlvdXRTdHJ1
Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGggLSBjZWxsTG9naWNhbFdpZHRoOwogICAgICAgICAg
ICAgICAgIG1fbGF5b3V0U3RydWN0W2ldLmNvbXB1dGVkTG9naWNhbFdpZHRoID0gY2VsbExvZ2lj
YWxXaWR0aDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAodG90YWxQZXJj
ZW50ID4gMTAwKSB7CiAgICAgICAgICAgICAvLyByZW1vdmUgb3ZlcmFsbG9jYXRlZCBzcGFjZSBm
cm9tIHRoZSBsYXN0IGNvbHVtbnMKLSAgICAgICAgICAgIGludCBleGNlc3MgPSB0YWJsZUxvZ2lj
YWxXaWR0aCAqICh0b3RhbFBlcmNlbnQgLSAxMDApIC8gMTAwOworICAgICAgICAgICAgTGF5b3V0
VW5pdCBleGNlc3MgPSB0YWJsZUxvZ2ljYWxXaWR0aCAqICh0b3RhbFBlcmNlbnQgLSAxMDApIC8g
MTAwOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IG5FZmZDb2xzIC0gMTsgaSA+PSAwOyAtLWkp
IHsKICAgICAgICAgICAgICAgICBpZiAobV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTG9naWNh
bFdpZHRoLmlzUGVyY2VudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBjZWxsTG9naWNh
bFdpZHRoID0gbV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGg7Ci0gICAgICAg
ICAgICAgICAgICAgIGludCByZWR1Y3Rpb24gPSBtaW4oY2VsbExvZ2ljYWxXaWR0aCwgIGV4Y2Vz
cyk7CisgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgY2VsbExvZ2ljYWxXaWR0aCA9IG1f
bGF5b3V0U3RydWN0W2ldLmNvbXB1dGVkTG9naWNhbFdpZHRoOworICAgICAgICAgICAgICAgICAg
ICBMYXlvdXRVbml0IHJlZHVjdGlvbiA9IG1pbihjZWxsTG9naWNhbFdpZHRoLCAgZXhjZXNzKTsK
ICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGxpbmVzIGJlbG93IG1pZ2h0IGxvb2sgaW5jb25z
aXN0ZW50LCBidXQgdGhhdCdzIHRoZSB3YXkgaXQncyBoYW5kbGVkIGluIG1vemlsbGEKICAgICAg
ICAgICAgICAgICAgICAgZXhjZXNzIC09IHJlZHVjdGlvbjsKLSAgICAgICAgICAgICAgICAgICAg
aW50IG5ld0xvZ2ljYWxXaWR0aCA9IG1heChtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVNaW5M
b2dpY2FsV2lkdGgsIGNlbGxMb2dpY2FsV2lkdGggLSByZWR1Y3Rpb24pOworICAgICAgICAgICAg
ICAgICAgICBMYXlvdXRVbml0IG5ld0xvZ2ljYWxXaWR0aCA9IG1heChtX2xheW91dFN0cnVjdFtp
XS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGgsIGNlbGxMb2dpY2FsV2lkdGggLSByZWR1Y3Rpb24p
OwogICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgKz0gY2VsbExvZ2ljYWxXaWR0aCAtIG5l
d0xvZ2ljYWxXaWR0aDsKICAgICAgICAgICAgICAgICAgICAgbV9sYXlvdXRTdHJ1Y3RbaV0uY29t
cHV0ZWRMb2dpY2FsV2lkdGggPSBuZXdMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICAgICAgfQpA
QCAtNTc2LDcgKzU3Niw3IEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpsYXlvdXQoKQogICAgICAg
ICAgICAgTGVuZ3RoJiBsb2dpY2FsV2lkdGggPSBtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVM
b2dpY2FsV2lkdGg7CiAgICAgICAgICAgICBpZiAobG9naWNhbFdpZHRoLmlzUmVsYXRpdmUoKSAm
JiBsb2dpY2FsV2lkdGgudmFsdWUoKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgLy8gd2lkdGg9
MCogZ2V0cyBlZmZNaW5XaWR0aC4KLSAgICAgICAgICAgICAgICBpbnQgY2VsbExvZ2ljYWxXaWR0
aCA9IGxvZ2ljYWxXaWR0aC52YWx1ZSgpICogdGFibGVMb2dpY2FsV2lkdGggLyB0b3RhbFJlbGF0
aXZlOworICAgICAgICAgICAgICAgIExheW91dFVuaXQgY2VsbExvZ2ljYWxXaWR0aCA9IGxvZ2lj
YWxXaWR0aC52YWx1ZSgpICogdGFibGVMb2dpY2FsV2lkdGggLyB0b3RhbFJlbGF0aXZlOwogICAg
ICAgICAgICAgICAgIGF2YWlsYWJsZSArPSBtX2xheW91dFN0cnVjdFtpXS5jb21wdXRlZExvZ2lj
YWxXaWR0aCAtIGNlbGxMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICAgICAgbV9sYXlvdXRTdHJ1
Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGggPSBjZWxsTG9naWNhbFdpZHRoOwogICAgICAgICAg
ICAgfQpAQCAtNTg5LDcgKzU4OSw3IEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpsYXlvdXQoKQog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5FZmZDb2xzOyArK2kpIHsKICAgICAgICAg
ICAgIExlbmd0aCYgbG9naWNhbFdpZHRoID0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTG9n
aWNhbFdpZHRoOwogICAgICAgICAgICAgaWYgKGxvZ2ljYWxXaWR0aC5pc0F1dG8oKSAmJiB0b3Rh
bEF1dG8gJiYgIW1fbGF5b3V0U3RydWN0W2ldLmVtcHR5Q2VsbHNPbmx5KSB7Ci0gICAgICAgICAg
ICAgICAgaW50IGNlbGxMb2dpY2FsV2lkdGggPSBtYXgobV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0
ZWRMb2dpY2FsV2lkdGgsIHN0YXRpY19jYXN0PGludD4oYXZhaWxhYmxlICogc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZU1heExvZ2ljYWxXaWR0aCkgLyB0b3Rh
bEF1dG8pKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGNlbGxMb2dpY2FsV2lkdGggPSBt
YXgobV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGgsIHN0YXRpY19jYXN0PExh
eW91dFVuaXQ+KGF2YWlsYWJsZSAqIHN0YXRpY19jYXN0PGZsb2F0PihtX2xheW91dFN0cnVjdFtp
XS5lZmZlY3RpdmVNYXhMb2dpY2FsV2lkdGgpIC8gdG90YWxBdXRvKSk7CiAgICAgICAgICAgICAg
ICAgYXZhaWxhYmxlIC09IGNlbGxMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICAgICAgdG90YWxB
dXRvIC09IG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZU1heExvZ2ljYWxXaWR0aDsKICAgICAg
ICAgICAgICAgICBtX2xheW91dFN0cnVjdFtpXS5jb21wdXRlZExvZ2ljYWxXaWR0aCA9IGNlbGxM
b2dpY2FsV2lkdGg7CkBAIC02MDIsNyArNjAyLDcgQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6Omxh
eW91dCgpCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbkVmZkNvbHM7ICsraSkgewog
ICAgICAgICAgICAgTGVuZ3RoJiBsb2dpY2FsV2lkdGggPSBtX2xheW91dFN0cnVjdFtpXS5lZmZl
Y3RpdmVMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICBpZiAobG9naWNhbFdpZHRoLmlzRml4ZWQo
KSkgewotICAgICAgICAgICAgICAgIGludCBjZWxsTG9naWNhbFdpZHRoID0gc3RhdGljX2Nhc3Q8
aW50PihhdmFpbGFibGUgKiBzdGF0aWNfY2FzdDxmbG9hdD4obV9sYXlvdXRTdHJ1Y3RbaV0uZWZm
ZWN0aXZlTWF4TG9naWNhbFdpZHRoKSAvIHRvdGFsRml4ZWQpOworICAgICAgICAgICAgICAgIExh
eW91dFVuaXQgY2VsbExvZ2ljYWxXaWR0aCA9IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGF2YWls
YWJsZSAqIHN0YXRpY19jYXN0PGZsb2F0PihtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVNYXhM
b2dpY2FsV2lkdGgpIC8gdG90YWxGaXhlZCk7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIC09
IGNlbGxMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICAgICAgdG90YWxGaXhlZCAtPSBtX2xheW91
dFN0cnVjdFtpXS5lZmZlY3RpdmVNYXhMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICAgICAgbV9s
YXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGggKz0gY2VsbExvZ2ljYWxXaWR0aDsK
QEAgLTYxNSw3ICs2MTUsNyBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6bGF5b3V0KCkKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuRWZmQ29sczsgKytpKSB7CiAgICAgICAgICAgICBM
ZW5ndGgmIGxvZ2ljYWxXaWR0aCA9IG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZUxvZ2ljYWxX
aWR0aDsKICAgICAgICAgICAgIGlmIChsb2dpY2FsV2lkdGguaXNQZXJjZW50KCkpIHsKLSAgICAg
ICAgICAgICAgICBpbnQgY2VsbExvZ2ljYWxXaWR0aCA9IGF2YWlsYWJsZSAqIGxvZ2ljYWxXaWR0
aC5wZXJjZW50KCkgLyB0b3RhbFBlcmNlbnQ7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBj
ZWxsTG9naWNhbFdpZHRoID0gYXZhaWxhYmxlICogbG9naWNhbFdpZHRoLnBlcmNlbnQoKSAvIHRv
dGFsUGVyY2VudDsKICAgICAgICAgICAgICAgICBhdmFpbGFibGUgLT0gY2VsbExvZ2ljYWxXaWR0
aDsKICAgICAgICAgICAgICAgICB0b3RhbFBlcmNlbnQgLT0gbG9naWNhbFdpZHRoLnBlcmNlbnQo
KTsKICAgICAgICAgICAgICAgICBtX2xheW91dFN0cnVjdFtpXS5jb21wdXRlZExvZ2ljYWxXaWR0
aCArPSBjZWxsTG9naWNhbFdpZHRoOwpAQCAtNjMzLDcgKzYzMyw3IEBAIHZvaWQgQXV0b1RhYmxl
TGF5b3V0OjpsYXlvdXQoKQogICAgICAgICAgICAgLy8gdmFyaWFibGUgY29sdW1ucyB3aXRoIGVt
cHR5IGNlbGxzIG9ubHkgZG9uJ3QgZ2V0IGFueSB3aWR0aAogICAgICAgICAgICAgaWYgKG1fbGF5
b3V0U3RydWN0W2ldLmVmZmVjdGl2ZUxvZ2ljYWxXaWR0aC5pc0F1dG8oKSAmJiBtX2xheW91dFN0
cnVjdFtpXS5lbXB0eUNlbGxzT25seSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIGludCBjZWxsTG9naWNhbFdpZHRoID0gYXZhaWxhYmxlIC8gdG90YWw7CisgICAgICAg
ICAgICBMYXlvdXRVbml0IGNlbGxMb2dpY2FsV2lkdGggPSBhdmFpbGFibGUgLyB0b3RhbDsKICAg
ICAgICAgICAgIGF2YWlsYWJsZSAtPSBjZWxsTG9naWNhbFdpZHRoOwogICAgICAgICAgICAgdG90
YWwtLTsKICAgICAgICAgICAgIG1fbGF5b3V0U3RydWN0W2ldLmNvbXB1dGVkTG9naWNhbFdpZHRo
ICs9IGNlbGxMb2dpY2FsV2lkdGg7CkBAIC02NTAsNyArNjUwLDcgQEAgdm9pZCBBdXRvVGFibGVM
YXlvdXQ6OmxheW91dCgpCiAgICAgICAgIC8vICg0KSBQZXJjZW50CiAgICAgICAgIC8vIFRoaXMg
aXMgYmFzaWNhbGx5IHRoZSByZXZlcnNlIG9mIGhvdyB3ZSBncmV3IHRoZSBjZWxscy4KICAgICAg
ICAgaWYgKGF2YWlsYWJsZSA8IDApIHsKLSAgICAgICAgICAgIGludCBsb2dpY2FsV2lkdGhCZXlv
bmRNaW4gPSAwOworICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGhCZXlvbmRNaW4g
PSAwOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IG5FZmZDb2xzIC0gMTsgaSA+PSAwOyAtLWkp
IHsKICAgICAgICAgICAgICAgICBMZW5ndGgmIGxvZ2ljYWxXaWR0aCA9IG1fbGF5b3V0U3RydWN0
W2ldLmVmZmVjdGl2ZUxvZ2ljYWxXaWR0aDsKICAgICAgICAgICAgICAgICBpZiAobG9naWNhbFdp
ZHRoLmlzQXV0bygpKQpAQCAtNjYwLDggKzY2MCw4IEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0Ojps
YXlvdXQoKQogICAgICAgICAgICAgZm9yIChpbnQgaSA9IG5FZmZDb2xzIC0gMTsgaSA+PSAwICYm
IGxvZ2ljYWxXaWR0aEJleW9uZE1pbiA+IDA7IC0taSkgewogICAgICAgICAgICAgICAgIExlbmd0
aCYgbG9naWNhbFdpZHRoID0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTG9naWNhbFdpZHRo
OwogICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsV2lkdGguaXNBdXRvKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaW50IG1pbk1heERpZmYgPSBtX2xheW91dFN0cnVjdFtpXS5jb21wdXRlZExv
Z2ljYWxXaWR0aCAtIG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZU1pbkxvZ2ljYWxXaWR0aDsK
LSAgICAgICAgICAgICAgICAgICAgaW50IHJlZHVjZSA9IGF2YWlsYWJsZSAqIG1pbk1heERpZmYg
LyBsb2dpY2FsV2lkdGhCZXlvbmRNaW47CisgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQg
bWluTWF4RGlmZiA9IG1fbGF5b3V0U3RydWN0W2ldLmNvbXB1dGVkTG9naWNhbFdpZHRoIC0gbV9s
YXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTWluTG9naWNhbFdpZHRoOworICAgICAgICAgICAgICAg
ICAgICBMYXlvdXRVbml0IHJlZHVjZSA9IGF2YWlsYWJsZSAqIG1pbk1heERpZmYgLyBsb2dpY2Fs
V2lkdGhCZXlvbmRNaW47CiAgICAgICAgICAgICAgICAgICAgIG1fbGF5b3V0U3RydWN0W2ldLmNv
bXB1dGVkTG9naWNhbFdpZHRoICs9IHJlZHVjZTsKICAgICAgICAgICAgICAgICAgICAgYXZhaWxh
YmxlIC09IHJlZHVjZTsKICAgICAgICAgICAgICAgICAgICAgbG9naWNhbFdpZHRoQmV5b25kTWlu
IC09IG1pbk1heERpZmY7CkBAIC02NzIsNyArNjcyLDcgQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6
OmxheW91dCgpCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYXZhaWxhYmxlIDwgMCkgewotICAg
ICAgICAgICAgaW50IGxvZ2ljYWxXaWR0aEJleW9uZE1pbiA9IDA7CisgICAgICAgICAgICBMYXlv
dXRVbml0IGxvZ2ljYWxXaWR0aEJleW9uZE1pbiA9IDA7CiAgICAgICAgICAgICBmb3IgKGludCBp
ID0gbkVmZkNvbHMgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICAgICAgICAgIExlbmd0aCYg
bG9naWNhbFdpZHRoID0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTG9naWNhbFdpZHRoOwog
ICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsV2lkdGguaXNSZWxhdGl2ZSgpKQpAQCAtNjgyLDgg
KzY4Miw4IEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpsYXlvdXQoKQogICAgICAgICAgICAgZm9y
IChpbnQgaSA9IG5FZmZDb2xzIC0gMTsgaSA+PSAwICYmIGxvZ2ljYWxXaWR0aEJleW9uZE1pbiA+
IDA7IC0taSkgewogICAgICAgICAgICAgICAgIExlbmd0aCYgbG9naWNhbFdpZHRoID0gbV9sYXlv
dXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTG9naWNhbFdpZHRoOwogICAgICAgICAgICAgICAgIGlmIChs
b2dpY2FsV2lkdGguaXNSZWxhdGl2ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBtaW5N
YXhEaWZmID0gbV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGggLSBtX2xheW91
dFN0cnVjdFtpXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGg7Ci0gICAgICAgICAgICAgICAgICAg
IGludCByZWR1Y2UgPSBhdmFpbGFibGUgKiBtaW5NYXhEaWZmIC8gbG9naWNhbFdpZHRoQmV5b25k
TWluOworICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG1pbk1heERpZmYgPSBtX2xheW91
dFN0cnVjdFtpXS5jb21wdXRlZExvZ2ljYWxXaWR0aCAtIG1fbGF5b3V0U3RydWN0W2ldLmVmZmVj
dGl2ZU1pbkxvZ2ljYWxXaWR0aDsKKyAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCByZWR1
Y2UgPSBhdmFpbGFibGUgKiBtaW5NYXhEaWZmIC8gbG9naWNhbFdpZHRoQmV5b25kTWluOwogICAg
ICAgICAgICAgICAgICAgICBtX2xheW91dFN0cnVjdFtpXS5jb21wdXRlZExvZ2ljYWxXaWR0aCAr
PSByZWR1Y2U7CiAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSAtPSByZWR1Y2U7CiAgICAg
ICAgICAgICAgICAgICAgIGxvZ2ljYWxXaWR0aEJleW9uZE1pbiAtPSBtaW5NYXhEaWZmOwpAQCAt
Njk0LDcgKzY5NCw3IEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpsYXlvdXQoKQogICAgICAgICB9
CiAKICAgICAgICAgaWYgKGF2YWlsYWJsZSA8IDApIHsKLSAgICAgICAgICAgIGludCBsb2dpY2Fs
V2lkdGhCZXlvbmRNaW4gPSAwOworICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGhC
ZXlvbmRNaW4gPSAwOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IG5FZmZDb2xzIC0gMTsgaSA+
PSAwOyAtLWkpIHsKICAgICAgICAgICAgICAgICBMZW5ndGgmIGxvZ2ljYWxXaWR0aCA9IG1fbGF5
b3V0U3RydWN0W2ldLmVmZmVjdGl2ZUxvZ2ljYWxXaWR0aDsKICAgICAgICAgICAgICAgICBpZiAo
bG9naWNhbFdpZHRoLmlzRml4ZWQoKSkKQEAgLTcwNCw4ICs3MDQsOCBAQCB2b2lkIEF1dG9UYWJs
ZUxheW91dDo6bGF5b3V0KCkKICAgICAgICAgICAgIGZvciAoaW50IGkgPSBuRWZmQ29scyAtIDE7
IGkgPj0gMCAmJiBsb2dpY2FsV2lkdGhCZXlvbmRNaW4gPiAwOyAtLWkpIHsKICAgICAgICAgICAg
ICAgICBMZW5ndGgmIGxvZ2ljYWxXaWR0aCA9IG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZUxv
Z2ljYWxXaWR0aDsKICAgICAgICAgICAgICAgICBpZiAobG9naWNhbFdpZHRoLmlzRml4ZWQoKSkg
ewotICAgICAgICAgICAgICAgICAgICBpbnQgbWluTWF4RGlmZiA9IG1fbGF5b3V0U3RydWN0W2ld
LmNvbXB1dGVkTG9naWNhbFdpZHRoIC0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTWluTG9n
aWNhbFdpZHRoOwotICAgICAgICAgICAgICAgICAgICBpbnQgcmVkdWNlID0gYXZhaWxhYmxlICog
bWluTWF4RGlmZiAvIGxvZ2ljYWxXaWR0aEJleW9uZE1pbjsKKyAgICAgICAgICAgICAgICAgICAg
TGF5b3V0VW5pdCBtaW5NYXhEaWZmID0gbV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2Fs
V2lkdGggLSBtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGg7CisgICAg
ICAgICAgICAgICAgICAgIExheW91dFVuaXQgcmVkdWNlID0gYXZhaWxhYmxlICogbWluTWF4RGlm
ZiAvIGxvZ2ljYWxXaWR0aEJleW9uZE1pbjsKICAgICAgICAgICAgICAgICAgICAgbV9sYXlvdXRT
dHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGggKz0gcmVkdWNlOwogICAgICAgICAgICAgICAg
ICAgICBhdmFpbGFibGUgLT0gcmVkdWNlOwogICAgICAgICAgICAgICAgICAgICBsb2dpY2FsV2lk
dGhCZXlvbmRNaW4gLT0gbWluTWF4RGlmZjsKQEAgLTcxNiw3ICs3MTYsNyBAQCB2b2lkIEF1dG9U
YWJsZUxheW91dDo6bGF5b3V0KCkKICAgICAgICAgfQogCiAgICAgICAgIGlmIChhdmFpbGFibGUg
PCAwKSB7Ci0gICAgICAgICAgICBpbnQgbG9naWNhbFdpZHRoQmV5b25kTWluID0gMDsKKyAgICAg
ICAgICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoQmV5b25kTWluID0gMDsKICAgICAgICAgICAg
IGZvciAoaW50IGkgPSBuRWZmQ29scyAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgICAgICAg
ICAgTGVuZ3RoJiBsb2dpY2FsV2lkdGggPSBtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVMb2dp
Y2FsV2lkdGg7CiAgICAgICAgICAgICAgICAgaWYgKGxvZ2ljYWxXaWR0aC5pc1BlcmNlbnQoKSkK
QEAgLTcyNiw4ICs3MjYsOCBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6bGF5b3V0KCkKICAgICAg
ICAgICAgIGZvciAoaW50IGkgPSBuRWZmQ29scy0xOyBpID49IDAgJiYgbG9naWNhbFdpZHRoQmV5
b25kTWluID4gMDsgaS0tKSB7CiAgICAgICAgICAgICAgICAgTGVuZ3RoJiBsb2dpY2FsV2lkdGgg
PSBtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICAg
ICAgaWYgKGxvZ2ljYWxXaWR0aC5pc1BlcmNlbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBp
bnQgbWluTWF4RGlmZiA9IG1fbGF5b3V0U3RydWN0W2ldLmNvbXB1dGVkTG9naWNhbFdpZHRoIC0g
bV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTWluTG9naWNhbFdpZHRoOwotICAgICAgICAgICAg
ICAgICAgICBpbnQgcmVkdWNlID0gYXZhaWxhYmxlICogbWluTWF4RGlmZiAvIGxvZ2ljYWxXaWR0
aEJleW9uZE1pbjsKKyAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBtaW5NYXhEaWZmID0g
bV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGggLSBtX2xheW91dFN0cnVjdFtp
XS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGg7CisgICAgICAgICAgICAgICAgICAgIExheW91dFVu
aXQgcmVkdWNlID0gYXZhaWxhYmxlICogbWluTWF4RGlmZiAvIGxvZ2ljYWxXaWR0aEJleW9uZE1p
bjsKICAgICAgICAgICAgICAgICAgICAgbV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2Fs
V2lkdGggKz0gcmVkdWNlOwogICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgLT0gcmVkdWNl
OwogICAgICAgICAgICAgICAgICAgICBsb2dpY2FsV2lkdGhCZXlvbmRNaW4gLT0gbWluTWF4RGlm
ZjsKQEAgLTczOCw3ICs3MzgsNyBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6bGF5b3V0KCkKICAg
ICAgICAgfQogICAgIH0KIAotICAgIGludCBwb3MgPSAwOworICAgIExheW91dFVuaXQgcG9zID0g
MDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5FZmZDb2xzOyArK2kpIHsKICAgICAgICAg
bV90YWJsZS0+Y29sdW1uUG9zaXRpb25zKClbaV0gPSBwb3M7CiAgICAgICAgIHBvcyArPSBtX2xh
eW91dFN0cnVjdFtpXS5jb21wdXRlZExvZ2ljYWxXaWR0aCArIG1fdGFibGUtPmhCb3JkZXJTcGFj
aW5nKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlv
dXQuY3BwCShyZXZpc2lvbiA5MDI4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXhl
ZFRhYmxlTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDE0ICsyMjgsMTQgQEAgdm9p
ZCBGaXhlZFRhYmxlTGF5b3V0Ojpjb21wdXRlUHJlZmVycmVkTAogCiB2b2lkIEZpeGVkVGFibGVM
YXlvdXQ6OmxheW91dCgpCiB7Ci0gICAgaW50IHRhYmxlTG9naWNhbFdpZHRoID0gbV90YWJsZS0+
bG9naWNhbFdpZHRoKCkgLSBtX3RhYmxlLT5ib3JkZXJzUGFkZGluZ0FuZFNwYWNpbmdJblJvd0Rp
cmVjdGlvbigpOworICAgIExheW91dFVuaXQgdGFibGVMb2dpY2FsV2lkdGggPSBtX3RhYmxlLT5s
b2dpY2FsV2lkdGgoKSAtIG1fdGFibGUtPmJvcmRlcnNQYWRkaW5nQW5kU3BhY2luZ0luUm93RGly
ZWN0aW9uKCk7CiAgICAgaW50IG5FZmZDb2xzID0gbV90YWJsZS0+bnVtRWZmQ29scygpOwogICAg
IFZlY3RvcjxpbnQ+IGNhbGNXaWR0aChuRWZmQ29scywgMCk7CiAKICAgICBpbnQgbnVtQXV0byA9
IDA7Ci0gICAgaW50IGF1dG9TcGFuID0gMDsKLSAgICBpbnQgdG90YWxGaXhlZFdpZHRoID0gMDsK
LSAgICBpbnQgdG90YWxQZXJjZW50V2lkdGggPSAwOworICAgIExheW91dFVuaXQgYXV0b1NwYW4g
PSAwOworICAgIExheW91dFVuaXQgdG90YWxGaXhlZFdpZHRoID0gMDsKKyAgICBMYXlvdXRVbml0
IHRvdGFsUGVyY2VudFdpZHRoID0gMDsKICAgICBmbG9hdCB0b3RhbFBlcmNlbnQgPSAwOwogCiAg
ICAgLy8gQ29tcHV0ZSByZXF1aXJlbWVudHMgYW5kIHRyeSB0byBzYXRpc2Z5IGZpeGVkIGFuZCBw
ZXJjZW50IHdpZHRocy4KQEAgLTI1Niw4ICsyNTYsOCBAQCB2b2lkIEZpeGVkVGFibGVMYXlvdXQ6
OmxheW91dCgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpbnQgaHNwYWNpbmcgPSBtX3RhYmxl
LT5oQm9yZGVyU3BhY2luZygpOwotICAgIGludCB0b3RhbFdpZHRoID0gdG90YWxGaXhlZFdpZHRo
ICsgdG90YWxQZXJjZW50V2lkdGg7CisgICAgTGF5b3V0VW5pdCBoc3BhY2luZyA9IG1fdGFibGUt
PmhCb3JkZXJTcGFjaW5nKCk7CisgICAgTGF5b3V0VW5pdCB0b3RhbFdpZHRoID0gdG90YWxGaXhl
ZFdpZHRoICsgdG90YWxQZXJjZW50V2lkdGg7CiAgICAgaWYgKCFudW1BdXRvIHx8IHRvdGFsV2lk
dGggPiB0YWJsZUxvZ2ljYWxXaWR0aCkgewogICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gYXV0
byBjb2x1bW5zLCBvciBpZiB0aGUgdG90YWwgaXMgdG9vIHdpZGUsIHRha2UKICAgICAgICAgLy8g
d2hhdCB3ZSBoYXZlIGFuZCBzY2FsZSBpdCB0byBmaXQgYXMgbmVjZXNzYXJ5LgpAQCAtMjg1LDEy
ICsyODUsMTIgQEAgdm9pZCBGaXhlZFRhYmxlTGF5b3V0OjpsYXlvdXQoKQogICAgICAgICB9CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgLy8gRGl2aWRlIHRoZSByZW1haW5pbmcgd2lkdGggYW1vbmcg
dGhlIGF1dG8gY29sdW1ucy4KLSAgICAgICAgaW50IHJlbWFpbmluZ1dpZHRoID0gdGFibGVMb2dp
Y2FsV2lkdGggLSB0b3RhbEZpeGVkV2lkdGggLSB0b3RhbFBlcmNlbnRXaWR0aCAtIGhzcGFjaW5n
ICogKGF1dG9TcGFuIC0gbnVtQXV0byk7CisgICAgICAgIExheW91dFVuaXQgcmVtYWluaW5nV2lk
dGggPSB0YWJsZUxvZ2ljYWxXaWR0aCAtIHRvdGFsRml4ZWRXaWR0aCAtIHRvdGFsUGVyY2VudFdp
ZHRoIC0gaHNwYWNpbmcgKiAoYXV0b1NwYW4gLSBudW1BdXRvKTsKICAgICAgICAgaW50IGxhc3RB
dXRvID0gMDsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuRWZmQ29sczsgaSsrKSB7CiAg
ICAgICAgICAgICBpZiAobV93aWR0aFtpXS5pc0F1dG8oKSkgewotICAgICAgICAgICAgICAgIGlu
dCBzcGFuID0gbV90YWJsZS0+c3Bhbk9mRWZmQ29sKGkpOwotICAgICAgICAgICAgICAgIGludCB3
ID0gcmVtYWluaW5nV2lkdGggKiBzcGFuIC8gYXV0b1NwYW47CisgICAgICAgICAgICAgICAgTGF5
b3V0VW5pdCBzcGFuID0gbV90YWJsZS0+c3Bhbk9mRWZmQ29sKGkpOworICAgICAgICAgICAgICAg
IExheW91dFVuaXQgdyA9IHJlbWFpbmluZ1dpZHRoICogc3BhbiAvIGF1dG9TcGFuOwogICAgICAg
ICAgICAgICAgIGNhbGNXaWR0aFtpXSA9IHcgKyBoc3BhY2luZyAqIChzcGFuIC0gMSk7CiAgICAg
ICAgICAgICAgICAgcmVtYWluaW5nV2lkdGggLT0gdzsKICAgICAgICAgICAgICAgICBpZiAoIXJl
bWFpbmluZ1dpZHRoKQpAQCAtMzA4LDEwICszMDgsMTAgQEAgdm9pZCBGaXhlZFRhYmxlTGF5b3V0
OjpsYXlvdXQoKQogCiAgICAgaWYgKHRvdGFsV2lkdGggPCB0YWJsZUxvZ2ljYWxXaWR0aCkgewog
ICAgICAgICAvLyBTcHJlYWQgZXh0cmEgc3BhY2Ugb3ZlciBjb2x1bW5zLgotICAgICAgICBpbnQg
cmVtYWluaW5nV2lkdGggPSB0YWJsZUxvZ2ljYWxXaWR0aCAtIHRvdGFsV2lkdGg7CisgICAgICAg
IExheW91dFVuaXQgcmVtYWluaW5nV2lkdGggPSB0YWJsZUxvZ2ljYWxXaWR0aCAtIHRvdGFsV2lk
dGg7CiAgICAgICAgIGludCB0b3RhbCA9IG5FZmZDb2xzOwogICAgICAgICB3aGlsZSAodG90YWwp
IHsKLSAgICAgICAgICAgIGludCB3ID0gcmVtYWluaW5nV2lkdGggLyB0b3RhbDsKKyAgICAgICAg
ICAgIExheW91dFVuaXQgdyA9IHJlbWFpbmluZ1dpZHRoIC8gdG90YWw7CiAgICAgICAgICAgICBy
ZW1haW5pbmdXaWR0aCAtPSB3OwogICAgICAgICAgICAgY2FsY1dpZHRoWy0tdG90YWxdICs9IHc7
CiAgICAgICAgIH0KQEAgLTMxOSwxMiArMzE5LDEyIEBAIHZvaWQgRml4ZWRUYWJsZUxheW91dDo6
bGF5b3V0KCkKICAgICAgICAgICAgIGNhbGNXaWR0aFtuRWZmQ29scyAtIDFdICs9IHJlbWFpbmlu
Z1dpZHRoOwogICAgIH0KICAgICAKLSAgICBpbnQgcG9zID0gMDsKKyAgICBMYXlvdXRVbml0IHBv
cyA9IDA7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuRWZmQ29sczsgaSsrKSB7CiAgICAgICAg
IG1fdGFibGUtPmNvbHVtblBvc2l0aW9ucygpW2ldID0gcG9zOwogICAgICAgICBwb3MgKz0gY2Fs
Y1dpZHRoW2ldICsgaHNwYWNpbmc7CiAgICAgfQotICAgIGludCBjb2xQb3NpdGlvbnNTaXplID0g
bV90YWJsZS0+Y29sdW1uUG9zaXRpb25zKCkuc2l6ZSgpOworICAgIExheW91dFVuaXQgY29sUG9z
aXRpb25zU2l6ZSA9IG1fdGFibGUtPmNvbHVtblBvc2l0aW9ucygpLnNpemUoKTsKICAgICBpZiAo
Y29sUG9zaXRpb25zU2l6ZSA+IDApCiAgICAgICAgIG1fdGFibGUtPmNvbHVtblBvc2l0aW9ucygp
W2NvbFBvc2l0aW9uc1NpemUgLSAxXSA9IHBvczsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA5MDI4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTEsNyArMzkxLDcgQEAg
dm9pZCBSZW5kZXJCb3g6OmxheW91dCgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBM
YXlvdXRTdGF0ZU1haW50YWluZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBJbnRTaXplKHgo
KSwgeSgpKSwgc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSk7CisgICAgTGF5
b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgdGhpcywgbG9jYXRpb25PZmZz
ZXQoKSwgc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSk7CiAgICAgd2hpbGUg
KGNoaWxkKSB7CiAgICAgICAgIGNoaWxkLT5sYXlvdXRJZk5lZWRlZCgpOwogICAgICAgICBBU1NF
UlQoIWNoaWxkLT5uZWVkc0xheW91dCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGcmFtZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZyYW1lU2V0LmNwcAkocmV2aXNpb24gOTAyODApCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjEsNyAr
NDYxLDcgQEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6bGF5b3V0KCkKICAgICBBU1NFUlQobmVlZHNM
YXlvdXQoKSk7CiAKICAgICBib29sIGRvRnVsbFJlcGFpbnQgPSBzZWxmTmVlZHNMYXlvdXQoKSAm
JiBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKTsKLSAgICBJbnRSZWN0IG9sZEJvdW5kczsK
KyAgICBMYXlvdXRSZWN0IG9sZEJvdW5kczsKICAgICBpZiAoZG9GdWxsUmVwYWludCkKICAgICAg
ICAgb2xkQm91bmRzID0gYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7CiAKQEAgLTQ3OCw3
ICs0NzgsNyBAQCB2b2lkIFJlbmRlckZyYW1lU2V0OjpsYXlvdXQoKQogICAgICAgICBtX2NvbHMu
cmVzaXplKGNvbHMpOwogICAgIH0KIAotICAgIGludCBib3JkZXJUaGlja25lc3MgPSBmcmFtZVNl
dCgpLT5ib3JkZXIoKTsKKyAgICBMYXlvdXRVbml0IGJvcmRlclRoaWNrbmVzcyA9IGZyYW1lU2V0
KCktPmJvcmRlcigpOwogICAgIGxheU91dEF4aXMobV9yb3dzLCBmcmFtZVNldCgpLT5yb3dMZW5n
dGhzKCksIGhlaWdodCgpIC0gKHJvd3MgLSAxKSAqIGJvcmRlclRoaWNrbmVzcyk7CiAgICAgbGF5
T3V0QXhpcyhtX2NvbHMsIGZyYW1lU2V0KCktPmNvbExlbmd0aHMoKSwgd2lkdGgoKSAtIChjb2xz
IC0gMSkgKiBib3JkZXJUaGlja25lc3MpOwogCkBAIC00OTMsNyArNDkzLDcgQEAgdm9pZCBSZW5k
ZXJGcmFtZVNldDo6bGF5b3V0KCkKIAogICAgIGlmIChkb0Z1bGxSZXBhaW50KSB7CiAgICAgICAg
IHZpZXcoKS0+cmVwYWludFZpZXdSZWN0YW5nbGUob2xkQm91bmRzKTsKLSAgICAgICAgSW50UmVj
dCBuZXdCb3VuZHMgPSBhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKKyAgICAgICAgTGF5
b3V0UmVjdCBuZXdCb3VuZHMgPSBhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKICAgICAg
ICAgaWYgKG5ld0JvdW5kcyAhPSBvbGRCb3VuZHMpCiAgICAgICAgICAgICB2aWV3KCktPnJlcGFp
bnRWaWV3UmVjdGFuZ2xlKG5ld0JvdW5kcyk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lZGlhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwCShyZXZpc2lvbiA5MDI4MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3
LDcgQEAgSFRNTE1lZGlhRWxlbWVudCogUmVuZGVyTWVkaWE6Om1lZGlhRWxlbQogCiB2b2lkIFJl
bmRlck1lZGlhOjpsYXlvdXQoKQogewotICAgIEludFNpemUgb2xkU2l6ZSA9IGNvbnRlbnRCb3hS
ZWN0KCkuc2l6ZSgpOworICAgIExheW91dFNpemUgb2xkU2l6ZSA9IGNvbnRlbnRCb3hSZWN0KCku
c2l6ZSgpOwogCiAgICAgUmVuZGVySW1hZ2U6OmxheW91dCgpOwogCkBAIC02NSwxNiArNjUsMTYg
QEAgdm9pZCBSZW5kZXJNZWRpYTo6bGF5b3V0KCkKICAgICBpZiAoIWNvbnRyb2xzUmVuZGVyZXIp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEludFNpemUgbmV3U2l6ZSA9IGNvbnRlbnRCb3hSZWN0
KCkuc2l6ZSgpOworICAgIExheW91dFNpemUgbmV3U2l6ZSA9IGNvbnRlbnRCb3hSZWN0KCkuc2l6
ZSgpOwogICAgIGlmIChuZXdTaXplID09IG9sZFNpemUgJiYgIWNvbnRyb2xzUmVuZGVyZXItPm5l
ZWRzTGF5b3V0KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdoZW4gY2FsbGluZyBsYXlv
dXQoKSBvbiBhIGNoaWxkIG5vZGUsIGEgcGFyZW50IG11c3QgZWl0aGVyIHB1c2ggYSBMYXlvdXRT
dGF0ZU1haW50YWludGVyLCBvciAKICAgICAvLyBpbnN0YW50aWF0ZSBMYXlvdXRTdGF0ZURpc2Fi
bGVyLiBTaW5jZSB1c2luZyBhIExheW91dFN0YXRlTWFpbnRhaW5lciBpcyBzbGlnaHRseSBtb3Jl
IGVmZmljaWVudCwKICAgICAvLyBhbmQgdGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgbWFueSB0
aW1lcyBwZXIgc2Vjb25kIGR1cmluZyBwbGF5YmFjaywgdXNlIGEgTGF5b3V0U3RhdGVNYWludGFp
bmVyOgotICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksIHRoaXMs
IEludFNpemUoeCgpLCB5KCkpLCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkgfHwg
c3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSk7CisgICAgTGF5b3V0U3RhdGVN
YWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgdGhpcywgbG9jYXRpb25PZmZzZXQoKSwgaGFz
VHJhbnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlvbigpIHx8IHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nr
c1dyaXRpbmdNb2RlKCkpOwogCi0gICAgY29udHJvbHNSZW5kZXJlci0+c2V0TG9jYXRpb24oSW50
UG9pbnQoYm9yZGVyTGVmdCgpLCBib3JkZXJUb3AoKSkgKyBJbnRTaXplKHBhZGRpbmdMZWZ0KCks
IHBhZGRpbmdUb3AoKSkpOworICAgIGNvbnRyb2xzUmVuZGVyZXItPnNldExvY2F0aW9uKExheW91
dFBvaW50KGJvcmRlckxlZnQoKSwgYm9yZGVyVG9wKCkpICsgTGF5b3V0U2l6ZShwYWRkaW5nTGVm
dCgpLCBwYWRkaW5nVG9wKCkpKTsKICAgICBjb250cm9sc1JlbmRlcmVyLT5zdHlsZSgpLT5zZXRI
ZWlnaHQoTGVuZ3RoKG5ld1NpemUuaGVpZ2h0KCksIEZpeGVkKSk7CiAgICAgY29udHJvbHNSZW5k
ZXJlci0+c3R5bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKG5ld1NpemUud2lkdGgoKSwgRml4ZWQpKTsK
ICAgICBjb250cm9sc1JlbmRlcmVyLT5zZXROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uY3BwCShyZXZpc2lvbiA5
MDI4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjMyLDggKzIzMiw4IEBAIHZvaWQgUmVuZGVyUnVieVJ1bjo6bGF5b3V0
KCkKICAgICBpZiAoIXJ0KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaW50IGxhc3RMaW5l
UnVieVRleHRCb3R0b20gPSBydC0+bG9naWNhbEhlaWdodCgpOwotICAgIGludCBmaXJzdExpbmVS
dWJ5VGV4dFRvcCA9IDA7CisgICAgTGF5b3V0VW5pdCBsYXN0TGluZVJ1YnlUZXh0Qm90dG9tID0g
cnQtPmxvZ2ljYWxIZWlnaHQoKTsKKyAgICBMYXlvdXRVbml0IGZpcnN0TGluZVJ1YnlUZXh0VG9w
ID0gMDsKICAgICBSb290SW5saW5lQm94KiByb290Qm94ID0gcnQtPmxhc3RSb290Qm94KCk7CiAg
ICAgaWYgKHJvb3RCb3gpIHsKICAgICAgICAgLy8gSW4gb3JkZXIgdG8gYWxpZ24sIHdlIGhhdmUg
dG8gaWdub3JlIG5lZ2F0aXZlIGxlYWRpbmcuCkBAIC0yNDIsNyArMjQyLDcgQEAgdm9pZCBSZW5k
ZXJSdWJ5UnVuOjpsYXlvdXQoKQogICAgIH0KIAogICAgIGlmICghc3R5bGUoKS0+aXNGbGlwcGVk
TGluZXNXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgIGludCBmaXJzdExpbmVUb3AgPSAwOworICAg
ICAgICBMYXlvdXRVbml0IGZpcnN0TGluZVRvcCA9IDA7CiAgICAgICAgIGlmIChSZW5kZXJSdWJ5
QmFzZSogcmIgPSBydWJ5QmFzZSgpKSB7CiAgICAgICAgICAgICBSb290SW5saW5lQm94KiByb290
Qm94ID0gcmItPmZpcnN0Um9vdEJveCgpOwogICAgICAgICAgICAgaWYgKHJvb3RCb3gpCkBAIC0y
NTIsNyArMjUyLDcgQEAgdm9pZCBSZW5kZXJSdWJ5UnVuOjpsYXlvdXQoKQogICAgICAgICAKICAg
ICAgICAgcnQtPnNldExvZ2ljYWxUb3AoLWxhc3RMaW5lUnVieVRleHRCb3R0b20gKyBmaXJzdExp
bmVUb3ApOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCBsYXN0TGluZUJvdHRvbSA9IGxvZ2lj
YWxIZWlnaHQoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBsYXN0TGluZUJvdHRvbSA9IGxvZ2ljYWxI
ZWlnaHQoKTsKICAgICAgICAgaWYgKFJlbmRlclJ1YnlCYXNlKiByYiA9IHJ1YnlCYXNlKCkpIHsK
ICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSByYi0+bGFzdFJvb3RCb3goKTsK
ICAgICAgICAgICAgIGlmIChyb290Qm94KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNjcm9sbGJhclBhcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcAkocmV2aXNpb24gOTAyODApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDcgKzQ4LDcgQEAgUmVuZGVyU2Nyb2xsYmFyUGFydDo6flJlbmRlclNjcm9sbGJh
clBhcgogCiB2b2lkIFJlbmRlclNjcm9sbGJhclBhcnQ6OmxheW91dCgpCiB7Ci0gICAgc2V0TG9j
YXRpb24oSW50UG9pbnQoKSk7IC8vIFdlIGRvbid0IHdvcnJ5IGFib3V0IHBvc2l0aW9uaW5nIG91
cnNlbHZlcy4gIFdlJ3JlIGp1c3QgZGV0ZXJtaW5pbmcgb3VyIG1pbmltdW0gd2lkdGgvaGVpZ2h0
LgorICAgIHNldExvY2F0aW9uKExheW91dFBvaW50KCkpOyAvLyBXZSBkb24ndCB3b3JyeSBhYm91
dCBwb3NpdGlvbmluZyBvdXJzZWx2ZXMuIFdlJ3JlIGp1c3QgZGV0ZXJtaW5pbmcgb3VyIG1pbmlt
dW0gd2lkdGgvaGVpZ2h0LgogICAgIGlmIChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBI
b3Jpem9udGFsU2Nyb2xsYmFyKQogICAgICAgICBsYXlvdXRIb3Jpem9udGFsUGFydCgpOwogICAg
IGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCShy
ZXZpc2lvbiA5MDI4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDcgQEAgdm9pZCBSZW5kZXJTbGlkZXI6
OmxheW91dCgpCiAgICAgUmVuZGVyQm94KiB0aHVtYkJveCA9IHNsaWRlclRodW1iRWxlbWVudE9m
KG5vZGUoKSktPnJlbmRlckJveCgpOwogICAgIGlmICghdGh1bWJCb3gpCiAgICAgICAgIHJldHVy
bjsKLSAgICBpbnQgaGVpZ2h0RGlmZiA9IHRodW1iQm94LT5oZWlnaHQoKSAtIGNvbnRlbnRIZWln
aHQoKTsKKyAgICBMYXlvdXRVbml0IGhlaWdodERpZmYgPSB0aHVtYkJveC0+aGVpZ2h0KCkgLSBj
b250ZW50SGVpZ2h0KCk7CiAgICAgaWYgKGhlaWdodERpZmYgPiAwKQogICAgICAgICB0aHVtYkJv
eC0+c2V0WSh0aHVtYkJveC0+eSgpIC0gKGhlaWdodERpZmYgLyAyKSk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHJldmlzaW9uIDkwMjgwKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjc0LDE0ICsyNzQsMTQgQEAgdm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKICAgICByZWNh
bGNTZWN0aW9uc0lmTmVlZGVkKCk7CiAgICAgICAgIAogICAgIExheW91dFJlcGFpbnRlciByZXBh
aW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKTsKLSAgICBMYXlvdXRT
dGF0ZU1haW50YWluZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBJbnRTaXplKHgoKSwgeSgp
KSwgc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSk7CisgICAgTGF5b3V0U3Rh
dGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgdGhpcywgbG9jYXRpb25PZmZzZXQoKSwg
c3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSk7CiAKICAgICBzZXRMb2dpY2Fs
SGVpZ2h0KDApOwogICAgIG1fb3ZlcmZsb3cuY2xlYXIoKTsKIAogICAgIGluaXRNYXhNYXJnaW5W
YWx1ZXMoKTsKICAgICAKLSAgICBpbnQgb2xkTG9naWNhbFdpZHRoID0gbG9naWNhbFdpZHRoKCk7
CisgICAgTGF5b3V0VW5pdCBvbGRMb2dpY2FsV2lkdGggPSBsb2dpY2FsV2lkdGgoKTsKICAgICBj
b21wdXRlTG9naWNhbFdpZHRoKCk7CiAKICAgICBpZiAobV9jYXB0aW9uICYmIGxvZ2ljYWxXaWR0
aCgpICE9IG9sZExvZ2ljYWxXaWR0aCkKQEAgLTI5Niw4ICsyOTYsOCBAQCB2b2lkIFJlbmRlclRh
YmxlOjpsYXlvdXQoKQogCiAgICAgc2V0Q2VsbExvZ2ljYWxXaWR0aHMoKTsKIAotICAgIGludCB0
b3RhbFNlY3Rpb25Mb2dpY2FsSGVpZ2h0ID0gMDsKLSAgICBpbnQgb2xkVGFibGVMb2dpY2FsVG9w
ID0gbV9jYXB0aW9uID8gbV9jYXB0aW9uLT5sb2dpY2FsSGVpZ2h0KCkgKyBtX2NhcHRpb24tPm1h
cmdpbkJlZm9yZSgpICsgbV9jYXB0aW9uLT5tYXJnaW5BZnRlcigpIDogMDsKKyAgICBMYXlvdXRV
bml0IHRvdGFsU2VjdGlvbkxvZ2ljYWxIZWlnaHQgPSAwOworICAgIExheW91dFVuaXQgb2xkVGFi
bGVMb2dpY2FsVG9wID0gbV9jYXB0aW9uID8gbV9jYXB0aW9uLT5sb2dpY2FsSGVpZ2h0KCkgKyBt
X2NhcHRpb24tPm1hcmdpbkJlZm9yZSgpICsgbV9jYXB0aW9uLT5tYXJnaW5BZnRlcigpIDogMDsK
IAogICAgIGJvb2wgY29sbGFwc2luZyA9IGNvbGxhcHNlQm9yZGVycygpOwogCkBAIC0zMjMsNyAr
MzIzLDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKICAgICAvLyBzZWN0aW9uIGRvd24g
KGl0IGlzIHF1aXRlIHVubGlrZWx5IHRoYXQgYW55IG9mIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMK
ICAgICAvLyBkaWQgbm90IHNoaWZ0KS4KICAgICBib29sIHNlY3Rpb25Nb3ZlZCA9IGZhbHNlOwot
ICAgIGludCBtb3ZlZFNlY3Rpb25Mb2dpY2FsVG9wID0gMDsKKyAgICBMYXlvdXRVbml0IG1vdmVk
U2VjdGlvbkxvZ2ljYWxUb3AgPSAwOwogCiAgICAgLy8gRklYTUU6IENvbGxhcHNlIGNhcHRpb24g
bWFyZ2luLgogICAgIGlmIChtX2NhcHRpb24gJiYgbV9jYXB0aW9uLT5zdHlsZSgpLT5jYXB0aW9u
U2lkZSgpICE9IENBUEJPVFRPTSkgewpAQCAtMzM0LDggKzMzNCw4IEBAIHZvaWQgUmVuZGVyVGFi
bGU6OmxheW91dCgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpbnQgYm9yZGVyQW5kUGFkZGlu
Z0JlZm9yZSA9IGJvcmRlckJlZm9yZSgpICsgKGNvbGxhcHNpbmcgPyAwIDogcGFkZGluZ0JlZm9y
ZSgpKTsKLSAgICBpbnQgYm9yZGVyQW5kUGFkZGluZ0FmdGVyID0gYm9yZGVyQWZ0ZXIoKSArIChj
b2xsYXBzaW5nID8gMCA6IHBhZGRpbmdBZnRlcigpKTsKKyAgICBMYXlvdXRVbml0IGJvcmRlckFu
ZFBhZGRpbmdCZWZvcmUgPSBib3JkZXJCZWZvcmUoKSArIChjb2xsYXBzaW5nID8gMCA6IHBhZGRp
bmdCZWZvcmUoKSk7CisgICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQWZ0ZXIgPSBib3Jk
ZXJBZnRlcigpICsgKGNvbGxhcHNpbmcgPyAwIDogcGFkZGluZ0FmdGVyKCkpOwogCiAgICAgc2V0
TG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0KCkgKyBib3JkZXJBbmRQYWRkaW5nQmVmb3JlKTsK
IApAQCAtMzQzLDcgKzM0Myw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAgICAgICAg
IGNvbXB1dGVMb2dpY2FsSGVpZ2h0KCk7CiAKICAgICBMZW5ndGggbG9naWNhbEhlaWdodExlbmd0
aCA9IHN0eWxlKCktPmxvZ2ljYWxIZWlnaHQoKTsKLSAgICBpbnQgY29tcHV0ZWRMb2dpY2FsSGVp
Z2h0ID0gMDsKKyAgICBMYXlvdXRVbml0IGNvbXB1dGVkTG9naWNhbEhlaWdodCA9IDA7CiAgICAg
aWYgKGxvZ2ljYWxIZWlnaHRMZW5ndGguaXNGaXhlZCgpKSB7CiAgICAgICAgIC8vIFRhYmxlcyBz
aXplIGFzIHRob3VnaCBDU1MgaGVpZ2h0IGluY2x1ZGVzIGJvcmRlci9wYWRkaW5nLgogICAgICAg
ICBjb21wdXRlZExvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0TGVuZ3RoLnZhbHVlKCkgLSAo
Ym9yZGVyQW5kUGFkZGluZ0JlZm9yZSArIGJvcmRlckFuZFBhZGRpbmdBZnRlcik7CkBAIC0zNjMs
NyArMzYzLDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKICAgICAgICAgc2V0TG9naWNh
bEhlaWdodChsb2dpY2FsSGVpZ2h0KCkgKyBjb21wdXRlZExvZ2ljYWxIZWlnaHQpOwogICAgIH0K
IAotICAgIGludCBzZWN0aW9uTG9naWNhbExlZnQgPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkgPyBib3JkZXJTdGFydCgpIDogYm9yZGVyRW5kKCk7CisgICAgTGF5b3V0VW5pdCBz
ZWN0aW9uTG9naWNhbExlZnQgPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBi
b3JkZXJTdGFydCgpIDogYm9yZGVyRW5kKCk7CiAgICAgaWYgKCFjb2xsYXBzaW5nKQogICAgICAg
ICBzZWN0aW9uTG9naWNhbExlZnQgKz0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
ID8gcGFkZGluZ1N0YXJ0KCkgOiBwYWRkaW5nRW5kKCk7CiAKQEAgLTM3NCw3ICszNzQsNyBAQCB2
b2lkIFJlbmRlclRhYmxlOjpsYXlvdXQoKQogICAgICAgICAgICAgc2VjdGlvbk1vdmVkID0gdHJ1
ZTsKICAgICAgICAgICAgIG1vdmVkU2VjdGlvbkxvZ2ljYWxUb3AgPSBtaW4obG9naWNhbEhlaWdo
dCgpLCBzZWN0aW9uLT5sb2dpY2FsVG9wKCkpICsgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyBzZWN0aW9uLT5taW5ZVmlzdWFsT3ZlcmZsb3coKSA6IHNlY3Rpb24tPm1pblhW
aXN1YWxPdmVyZmxvdygpKTsKICAgICAgICAgfQotICAgICAgICBzZWN0aW9uLT5zZXRMb2dpY2Fs
TG9jYXRpb24oSW50UG9pbnQoc2VjdGlvbkxvZ2ljYWxMZWZ0LCBsb2dpY2FsSGVpZ2h0KCkpKTsK
KyAgICAgICAgc2VjdGlvbi0+c2V0TG9naWNhbExvY2F0aW9uKExheW91dFBvaW50KHNlY3Rpb25M
b2dpY2FsTGVmdCwgbG9naWNhbEhlaWdodCgpKSk7CiAKICAgICAgICAgc2V0TG9naWNhbEhlaWdo
dChsb2dpY2FsSGVpZ2h0KCkgKyBzZWN0aW9uLT5sb2dpY2FsSGVpZ2h0KCkpOwogICAgICAgICBz
ZWN0aW9uID0gc2VjdGlvbkJlbG93KHNlY3Rpb24pOwpAQCAtNDA1LDkgKzQwNSw5IEBAIHZvaWQg
UmVuZGVyVGFibGU6OmxheW91dCgpCiAgICAgLy8gUmVwYWludCB3aXRoIG91ciBuZXcgYm91bmRz
IGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmcm9tIG91ciBvbGQgYm91bmRzLgogICAgIGlmICghZGlk
RnVsbFJlcGFpbnQgJiYgc2VjdGlvbk1vdmVkKSB7CiAgICAgICAgIGlmIChzdHlsZSgpLT5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICAgICAgcmVwYWludFJlY3RhbmdsZShJbnRS
ZWN0KG1pblhWaXN1YWxPdmVyZmxvdygpLCBtb3ZlZFNlY3Rpb25Mb2dpY2FsVG9wLCBtYXhYVmlz
dWFsT3ZlcmZsb3coKSAtIG1pblhWaXN1YWxPdmVyZmxvdygpLCBtYXhZVmlzdWFsT3ZlcmZsb3co
KSAtIG1vdmVkU2VjdGlvbkxvZ2ljYWxUb3ApKTsKKyAgICAgICAgICAgIHJlcGFpbnRSZWN0YW5n
bGUoTGF5b3V0UmVjdChtaW5YVmlzdWFsT3ZlcmZsb3coKSwgbW92ZWRTZWN0aW9uTG9naWNhbFRv
cCwgbWF4WFZpc3VhbE92ZXJmbG93KCkgLSBtaW5YVmlzdWFsT3ZlcmZsb3coKSwgbWF4WVZpc3Vh
bE92ZXJmbG93KCkgLSBtb3ZlZFNlY3Rpb25Mb2dpY2FsVG9wKSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHJlcGFpbnRSZWN0YW5nbGUoSW50UmVjdChtb3ZlZFNlY3Rpb25Mb2dpY2FsVG9w
LCBtaW5ZVmlzdWFsT3ZlcmZsb3coKSwgbWF4WFZpc3VhbE92ZXJmbG93KCkgLSBtb3ZlZFNlY3Rp
b25Mb2dpY2FsVG9wLCBtYXhZVmlzdWFsT3ZlcmZsb3coKSAtIG1pbllWaXN1YWxPdmVyZmxvdygp
KSk7CisgICAgICAgICAgICByZXBhaW50UmVjdGFuZ2xlKExheW91dFJlY3QobW92ZWRTZWN0aW9u
TG9naWNhbFRvcCwgbWluWVZpc3VhbE92ZXJmbG93KCksIG1heFhWaXN1YWxPdmVyZmxvdygpIC0g
bW92ZWRTZWN0aW9uTG9naWNhbFRvcCwgbWF4WVZpc3VhbE92ZXJmbG93KCkgLSBtaW5ZVmlzdWFs
T3ZlcmZsb3coKSkpOwogICAgIH0KIAogICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAkocmV2aXNpb24g
OTAyODApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzUsNyArMTM1LDcgQEAgdm9pZCBSZW5kZXJUYWJsZVJvdzo6bGF5
b3V0KCkKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CiAKICAgICAvLyBUYWJsZSByb3dzIGRv
IG5vdCBhZGQgdHJhbnNsYXRpb24uCi0gICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVz
aGVyKHZpZXcoKSwgdGhpcywgSW50U2l6ZSgpLCBzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0
aW5nTW9kZSgpKTsKKyAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIgc3RhdGVQdXNoZXIodmlldygp
LCB0aGlzLCBMYXlvdXRTaXplKCksIHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2Rl
KCkpOwogCiAgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPmlzUGFn
aW5hdGVkKCk7CiAgICAgICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkocmV2aXNpb24gOTAyODApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzk3LDcgKzM5Nyw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXQoKQog
ewogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKIAotICAgIExheW91dFN0YXRlTWFpbnRhaW5l
ciBzdGF0ZVB1c2hlcih2aWV3KCksIHRoaXMsIEludFNpemUoeCgpLCB5KCkpLCBzdHlsZSgpLT5p
c0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKTsKKyAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIg
c3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBsb2NhdGlvbk9mZnNldCgpLCBzdHlsZSgpLT5pc0Zs
aXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKTsKICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQg
PSBjaGlsZHJlbigpLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2li
bGluZygpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZVJvdygpKSB7CiAgICAgICAgICAg
ICBjaGlsZC0+bGF5b3V0SWZOZWVkZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lv
biA5MDI4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjksMTAgKzI2OSwxMCBAQCB2b2lkIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAgICAgLy8gYW5kIHR5cGU9c2VhcmNo
IGlmIHRoZSB0ZXh0IGhlaWdodCBpcyB0YWxsZXIgdGhhbiB0aGUgY29udGVudEhlaWdodCgpCiAg
ICAgLy8gYmVjYXVzZSBvZiBjb21wYWJpbGl0eS4KIAotICAgIGludCBvbGRIZWlnaHQgPSBoZWln
aHQoKTsKKyAgICBMYXlvdXRVbml0IG9sZEhlaWdodCA9IGhlaWdodCgpOwogICAgIGNvbXB1dGVM
b2dpY2FsSGVpZ2h0KCk7CiAKLSAgICBpbnQgb2xkV2lkdGggPSB3aWR0aCgpOworICAgIExheW91
dFVuaXQgb2xkV2lkdGggPSB3aWR0aCgpOwogICAgIGNvbXB1dGVMb2dpY2FsV2lkdGgoKTsKIAog
ICAgIGJvb2wgcmVsYXlvdXRDaGlsZHJlbiA9IG9sZEhlaWdodCAhPSBoZWlnaHQoKSB8fCBvbGRX
aWR0aCAhPSB3aWR0aCgpOwpAQCAtMjg0LDEwICsyODQsMTAgQEAgdm9pZCBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmxheW91dAogICAgIFJlbmRlckJveCogY29udGFpbmVyUmVuZGVyZXIg
PSBjb250YWluZXIgPyBjb250YWluZXItPnJlbmRlckJveCgpIDogMDsKIAogICAgIC8vIFNldCB0
aGUgdGV4dCBibG9jayBoZWlnaHQKLSAgICBpbnQgZGVzaXJlZEhlaWdodCA9IHRleHRCbG9ja0hl
aWdodCgpOwotICAgIGludCBjdXJyZW50SGVpZ2h0ID0gaW5uZXJUZXh0UmVuZGVyZXItPmhlaWdo
dCgpOworICAgIExheW91dFVuaXQgZGVzaXJlZEhlaWdodCA9IHRleHRCbG9ja0hlaWdodCgpOwor
ICAgIExheW91dFVuaXQgY3VycmVudEhlaWdodCA9IGlubmVyVGV4dFJlbmRlcmVyLT5oZWlnaHQo
KTsKIAotICAgIGludCBoZWlnaHRMaW1pdCA9IChpbnB1dEVsZW1lbnQoKS0+aXNTZWFyY2hGaWVs
ZCgpIHx8ICFjb250YWluZXIpID8gaGVpZ2h0KCkgOiBjb250ZW50SGVpZ2h0KCk7CisgICAgTGF5
b3V0VW5pdCBoZWlnaHRMaW1pdCA9IChpbnB1dEVsZW1lbnQoKS0+aXNTZWFyY2hGaWVsZCgpIHx8
ICFjb250YWluZXIpID8gaGVpZ2h0KCkgOiBjb250ZW50SGVpZ2h0KCk7CiAgICAgaWYgKGN1cnJl
bnRIZWlnaHQgPiBoZWlnaHRMaW1pdCkgewogICAgICAgICBpZiAoZGVzaXJlZEhlaWdodCAhPSBj
dXJyZW50SGVpZ2h0KQogICAgICAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7CkBAIC0y
OTgsNyArMjk4LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxheW91dAog
ICAgIC8vIFRoZSBjb250YWluZXIgbWlnaHQgYmUgdGFsbGVyIGJlY2F1c2Ugb2YgZGVjb3JhdGlv
biBlbGVtZW50cy4KICAgICBpZiAoY29udGFpbmVyUmVuZGVyZXIpIHsKICAgICAgICAgY29udGFp
bmVyUmVuZGVyZXItPmxheW91dElmTmVlZGVkKCk7Ci0gICAgICAgIGludCBjb250YWluZXJIZWln
aHQgPSBjb250YWluZXJSZW5kZXJlci0+aGVpZ2h0KCk7CisgICAgICAgIExheW91dFVuaXQgY29u
dGFpbmVySGVpZ2h0ID0gY29udGFpbmVyUmVuZGVyZXItPmhlaWdodCgpOwogICAgICAgICBpZiAo
Y29udGFpbmVySGVpZ2h0ID4gaGVpZ2h0TGltaXQpIHsKICAgICAgICAgICAgIGNvbnRhaW5lclJl
bmRlcmVyLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKGhlaWdodExpbWl0LCBGaXhlZCkpOwog
ICAgICAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7CkBAIC0zMTMsMTkgKzMxMywxOSBA
QCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAgICAgLy8gQ2VudGVy
IHRoZSBjaGlsZCBibG9jayB2ZXJ0aWNhbGx5CiAgICAgY3VycmVudEhlaWdodCA9IGlubmVyVGV4
dFJlbmRlcmVyLT5oZWlnaHQoKTsKICAgICBpZiAoIWNvbnRhaW5lciAmJiBjdXJyZW50SGVpZ2h0
ICE9IGNvbnRlbnRIZWlnaHQoKSkgewotICAgICAgICBpbnQgaGVpZ2h0RGlmZiA9IGN1cnJlbnRI
ZWlnaHQgLSBjb250ZW50SGVpZ2h0KCk7CisgICAgICAgIExheW91dFVuaXQgaGVpZ2h0RGlmZiA9
IGN1cnJlbnRIZWlnaHQgLSBjb250ZW50SGVpZ2h0KCk7CiAgICAgICAgIGlubmVyVGV4dFJlbmRl
cmVyLT5zZXRZKGlubmVyVGV4dFJlbmRlcmVyLT55KCkgLSAoaGVpZ2h0RGlmZiAvIDIgKyBoZWln
aHREaWZmICUgMikpOwogICAgIH0gZWxzZSBpZiAoaW5wdXRFbGVtZW50KCktPmlzU2VhcmNoRmll
bGQoKSAmJiBjb250YWluZXJSZW5kZXJlciAmJiBjb250YWluZXJSZW5kZXJlci0+aGVpZ2h0KCkg
PiBjb250ZW50SGVpZ2h0KCkpIHsKICAgICAgICAgLy8gQSBxdWlyayBmb3IgZmluZC1pbi1wYWdl
IGJveCBvbiBTYWZhcmkgV2luZG93cy4KICAgICAgICAgLy8gaHR0cDovL3dlYmtpdC5vcmcvYi82
MzE1NwotICAgICAgICBpbnQgaGVpZ2h0RGlmZiA9IGNvbnRhaW5lclJlbmRlcmVyLT5oZWlnaHQo
KSAtIGNvbnRlbnRIZWlnaHQoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBoZWlnaHREaWZmID0gY29u
dGFpbmVyUmVuZGVyZXItPmhlaWdodCgpIC0gY29udGVudEhlaWdodCgpOwogICAgICAgICBjb250
YWluZXJSZW5kZXJlci0+c2V0WShjb250YWluZXJSZW5kZXJlci0+eSgpIC0gKGhlaWdodERpZmYg
LyAyICsgaGVpZ2h0RGlmZiAlIDIpKTsKICAgICB9CiAKICAgICAvLyBJZ25vcmVzIHRoZSBwYWRk
aW5ncyBmb3IgdGhlIGlubmVyIHNwaW4gYnV0dG9uLgogICAgIGlmIChSZW5kZXJCb3gqIGlubmVy
U3BpbkJveCA9IGlubmVyU3BpbkJ1dHRvbkVsZW1lbnQoKSA/IGlubmVyU3BpbkJ1dHRvbkVsZW1l
bnQoKS0+cmVuZGVyQm94KCkgOiAwKSB7CiAgICAgICAgIFJlbmRlckJveCogcGFyZW50Qm94ID0g
aW5uZXJTcGluQm94LT5wYXJlbnRCb3goKTsKLSAgICAgICAgaW5uZXJTcGluQm94LT5zZXRMb2Nh
dGlvbihJbnRQb2ludChwYXJlbnRCb3gtPndpZHRoKCkgLSBpbm5lclNwaW5Cb3gtPndpZHRoKCkg
KyBwYWRkaW5nUmlnaHQoKSwgLXBhZGRpbmdUb3AoKSkpOworICAgICAgICBpbm5lclNwaW5Cb3gt
PnNldExvY2F0aW9uKExheW91dFBvaW50KHBhcmVudEJveC0+d2lkdGgoKSAtIGlubmVyU3BpbkJv
eC0+d2lkdGgoKSArIHBhZGRpbmdSaWdodCgpLCAtcGFkZGluZ1RvcCgpKSk7CiAgICAgICAgIGlu
bmVyU3BpbkJveC0+c2V0SGVpZ2h0KGhlaWdodCgpIC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0
b20oKSk7CiAgICAgfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3
LmNwcAkocmV2aXNpb24gOTAyODApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFJlbmRlclZp
ZXc6OmxheW91dCgpCiAgICAgaWYgKG5lZWRzTGF5b3V0KCkpCiAgICAgICAgIFJlbmRlckJsb2Nr
OjpsYXlvdXQoKTsKIAotICAgIEFTU0VSVChsYXlvdXREZWx0YSgpID09IEludFNpemUoKSk7Cisg
ICAgQVNTRVJUKGxheW91dERlbHRhKCkgPT0gTGF5b3V0U2l6ZSgpKTsKICAgICBBU1NFUlQobV9s
YXlvdXRTdGF0ZURpc2FibGVDb3VudCA9PSAwKTsKICAgICBBU1NFUlQobV9sYXlvdXRTdGF0ZSA9
PSAmc3RhdGUpOwogICAgIG1fbGF5b3V0U3RhdGUgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlldy5oCShyZXZpc2lvbiA5MDI4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMywxMSArMTAzLDExIEBA
IHB1YmxpYzoKICAgICAvLyBsYXlvdXREZWx0YSBpcyB1c2VkIHRyYW5zaWVudGx5IGR1cmluZyBs
YXlvdXQgdG8gc3RvcmUgaG93IGZhciBhbiBvYmplY3QgaGFzIG1vdmVkIGZyb20gaXRzCiAgICAg
Ly8gbGFzdCBsYXlvdXQgbG9jYXRpb24sIGluIG9yZGVyIHRvIHJlcGFpbnQgY29ycmVjdGx5Lgog
ICAgIC8vIElmIHdlJ3JlIGRvaW5nIGEgZnVsbCByZXBhaW50IG1fbGF5b3V0U3RhdGUgd2lsbCBi
ZSAwLCBidXQgaW4gdGhhdCBjYXNlIGxheW91dERlbHRhIGRvZXNuJ3QgbWF0dGVyLgotICAgIElu
dFNpemUgbGF5b3V0RGVsdGEoKSBjb25zdAorICAgIExheW91dFNpemUgbGF5b3V0RGVsdGEoKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGF5b3V0U3RhdGUgPyBtX2xheW91dFN0YXRl
LT5tX2xheW91dERlbHRhIDogSW50U2l6ZSgpOworICAgICAgICByZXR1cm4gbV9sYXlvdXRTdGF0
ZSA/IG1fbGF5b3V0U3RhdGUtPm1fbGF5b3V0RGVsdGEgOiBMYXlvdXRTaXplKCk7CiAgICAgfQot
ICAgIHZvaWQgYWRkTGF5b3V0RGVsdGEoY29uc3QgSW50U2l6ZSYgZGVsdGEpIAorICAgIHZvaWQg
YWRkTGF5b3V0RGVsdGEoY29uc3QgTGF5b3V0U2l6ZSYgZGVsdGEpIAogICAgIHsKICAgICAgICAg
aWYgKG1fbGF5b3V0U3RhdGUpCiAgICAgICAgICAgICBtX2xheW91dFN0YXRlLT5tX2xheW91dERl
bHRhICs9IGRlbHRhOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCShyZXZpc2lvbiA5MDI4MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OmxheW91dCgpCiAg
ICAgaWYgKCFmaXJzdENoaWxkKCkgfHwgIWxhc3RDaGlsZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpbnQgbWF4SGVpZ2h0ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChsYXN0Q2hpbGQoKSkt
Pm9mZnNldEhlaWdodCgpOworICAgIExheW91dFVuaXQgbWF4SGVpZ2h0ID0gdG9SZW5kZXJCb3hN
b2RlbE9iamVjdChsYXN0Q2hpbGQoKSktPm9mZnNldEhlaWdodCgpOwogICAgIAogICAgIFJlbmRl
ck9iamVjdCogY3VycmVudCA9IGxhc3RDaGlsZCgpLT5maXJzdENoaWxkKCk7CiAgICAgaWYgKGN1
cnJlbnQpCkBAIC0yMDksMTcgKzIwOSwxNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OmxheW91
dCgpCiAgICAgICAgIG1heEhlaWdodCA9IHN0eWxlKCktPmZvbnRTaXplKCk7CiAgICAgCiAgICAg
Ly8gQmFzZSBoZWlnaHQgYWJvdmUgd2hpY2ggdGhlIHNoYXBlIG9mIHRoZSByb290IGNoYW5nZXMK
LSAgICBpbnQgdGhyZXNob2xkSGVpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihnVGhyZXNob2xkQmFz
ZUhlaWdodCAqIHN0eWxlKCktPmZvbnRTaXplKCkpOwotICAgIGludCB0b3BTdGFydFNoaWZ0ID0g
MDsKKyAgICBMYXlvdXRVbml0IHRocmVzaG9sZEhlaWdodCA9IHN0YXRpY19jYXN0PExheW91dFVu
aXQ+KGdUaHJlc2hvbGRCYXNlSGVpZ2h0ICogc3R5bGUoKS0+Zm9udFNpemUoKSk7CisgICAgTGF5
b3V0VW5pdCB0b3BTdGFydFNoaWZ0ID0gMDsKICAgICAKICAgICBpZiAobWF4SGVpZ2h0ID4gdGhy
ZXNob2xkSGVpZ2h0ICYmIHRocmVzaG9sZEhlaWdodCkgewogICAgICAgICBmbG9hdCBzaGlmdCA9
IChtYXhIZWlnaHQgLSB0aHJlc2hvbGRIZWlnaHQpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRocmVz
aG9sZEhlaWdodCk7CiAgICAgICAgIGlmIChzaGlmdCA+IDEuKQogICAgICAgICAgICAgc2hpZnQg
PSAxLjBmOwotICAgICAgICBpbnQgZnJvbnRXaWR0aCA9IHN0YXRpY19jYXN0PGludD4oc3R5bGUo
KS0+Zm9udFNpemUoKSAqIGdSYWRpY2FsV2lkdGgpOwotICAgICAgICB0b3BTdGFydFNoaWZ0ID0g
c3RhdGljX2Nhc3Q8aW50PihnUmFkaWNhbEJvdHRvbVBvaW50WFBvcyAqIGZyb250V2lkdGggKiBz
aGlmdCk7CisgICAgICAgIExheW91dFVuaXQgZnJvbnRXaWR0aCA9IHN0YXRpY19jYXN0PExheW91
dFVuaXQ+KHN0eWxlKCktPmZvbnRTaXplKCkgKiBnUmFkaWNhbFdpZHRoKTsKKyAgICAgICAgdG9w
U3RhcnRTaGlmdCA9IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGdSYWRpY2FsQm90dG9tUG9pbnRY
UG9zICogZnJvbnRXaWR0aCAqIHNoaWZ0KTsKICAgICAgICAgCi0gICAgICAgIHN0eWxlKCktPnNl
dFBhZGRpbmdCb3R0b20oTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oZ1Jvb3RCb3R0b21QYWRkaW5n
ICogc3R5bGUoKS0+Zm9udFNpemUoKSksIEZpeGVkKSk7CisgICAgICAgIHN0eWxlKCktPnNldFBh
ZGRpbmdCb3R0b20oTGVuZ3RoKHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGdSb290Qm90dG9tUGFk
ZGluZyAqIHN0eWxlKCktPmZvbnRTaXplKCkpLCBGaXhlZCkpOwogICAgIH0KICAgICAKICAgICAv
LyBQb3NpdGlvbmluZyBvZiB0aGUgaW5kZXgKQEAgLTIzMCwxMyArMjMwLDEzIEBAIHZvaWQgUmVu
ZGVyTWF0aE1MUm9vdDo6bGF5b3V0KCkKICAgICBpZiAoIWluZGV4Qm94KQogICAgICAgICByZXR1
cm47CiAgICAgCi0gICAgaW50IGluZGV4U2hpZnQgPSBpbmRleEJveC0+b2Zmc2V0V2lkdGgoKSAr
IHRvcFN0YXJ0U2hpZnQ7Ci0gICAgaW50IHJhZGljYWxIZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+
KCgxIC0gZ1JhZGljYWxUb3BMZWZ0UG9pbnRZUG9zKSAqIG1heEhlaWdodCk7Ci0gICAgaW50IHJv
b3RNYXJnaW5Ub3AgPSByYWRpY2FsSGVpZ2h0ICsgc3R5bGUoKS0+cGFkZGluZ0JvdHRvbSgpLnZh
bHVlKCkgKyBpbmRleEJveC0+b2Zmc2V0SGVpZ2h0KCkgLSAobWF4SGVpZ2h0ICsgc3RhdGljX2Nh
c3Q8aW50PihnUm9vdFBhZGRpbmcgKiBzdHlsZSgpLT5mb250U2l6ZSgpKSk7CisgICAgTGF5b3V0
VW5pdCBpbmRleFNoaWZ0ID0gaW5kZXhCb3gtPm9mZnNldFdpZHRoKCkgKyB0b3BTdGFydFNoaWZ0
OworICAgIExheW91dFVuaXQgcmFkaWNhbEhlaWdodCA9IHN0YXRpY19jYXN0PExheW91dFVuaXQ+
KCgxIC0gZ1JhZGljYWxUb3BMZWZ0UG9pbnRZUG9zKSAqIG1heEhlaWdodCk7CisgICAgTGF5b3V0
VW5pdCByb290TWFyZ2luVG9wID0gcmFkaWNhbEhlaWdodCArIHN0eWxlKCktPnBhZGRpbmdCb3R0
b20oKS52YWx1ZSgpICsgaW5kZXhCb3gtPm9mZnNldEhlaWdodCgpIC0gKG1heEhlaWdodCArIHN0
YXRpY19jYXN0PExheW91dFVuaXQ+KGdSb290UGFkZGluZyAqIHN0eWxlKCktPmZvbnRTaXplKCkp
KTsKICAgICAKICAgICBzdHlsZSgpLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgoaW5kZXhTaGlmdCwg
Rml4ZWQpKTsKICAgICBpZiAocm9vdE1hcmdpblRvcCA+IDApCi0gICAgICAgIHN0eWxlKCktPnNl
dFBhZGRpbmdUb3AoTGVuZ3RoKHJvb3RNYXJnaW5Ub3AgKyBzdGF0aWNfY2FzdDxpbnQ+KGdSb290
UGFkZGluZyAqIHN0eWxlKCktPmZvbnRTaXplKCkpLCBGaXhlZCkpOworICAgICAgICBzdHlsZSgp
LT5zZXRQYWRkaW5nVG9wKExlbmd0aChyb290TWFyZ2luVG9wICsgc3RhdGljX2Nhc3Q8TGF5b3V0
VW5pdD4oZ1Jvb3RQYWRkaW5nICogc3R5bGUoKS0+Zm9udFNpemUoKSksIEZpeGVkKSk7CiAgICAg
CiAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSk7CiAgICAgc2V0UHJlZmVycmVkTG9naWNhbFdpZHRo
c0RpcnR5KHRydWUsIGZhbHNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MUm93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5jcHAJKHJldmlzaW9uIDkwMjgwKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NiwxMiArNjYsMTIgQEAgdm9pZCBSZW5kZXJNYXRoTUxSb3c6OmxheW91dCgp
IAogewogICAgIFJlbmRlckJsb2NrOjpsYXlvdXQoKTsKICAgICAKLSAgICBpbnQgbWF4SGVpZ2h0
ID0gMDsKKyAgICBMYXlvdXRVbml0IG1heEhlaWdodCA9IDA7CiAgICAgaW50IGNoaWxkQ291bnQg
PSAwOwogICAgIGludCBvcGVyYXRvckNvdW50ID0gMDsKIAogICAgIC8vIENhbGN1bGF0ZSB0aGUg
bm9uLW9wZXJhdG9yIG1heCBoZWlnaHQgb2YgdGhlIHJvdy4KLSAgICBpbnQgb3BlcmF0b3JIZWln
aHQgPSAwOworICAgIExheW91dFVuaXQgb3BlcmF0b3JIZWlnaHQgPSAwOwogICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3Vy
cmVudC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBjaGlsZENvdW50Kys7CiAgICAgICAgIGlm
IChjdXJyZW50LT5pc1JlbmRlck1hdGhNTEJsb2NrKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290
LmNwcAkocmV2aXNpb24gOTAyODApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNyArMTYw
LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxTcXVhcmVSb290OjpwYWludChQYWludAogCiB2b2lkIFJl
bmRlck1hdGhNTFNxdWFyZVJvb3Q6OmxheW91dCgpCiB7Ci0gICAgaW50IG1heEhlaWdodCA9IDA7
CisgICAgTGF5b3V0VW5pdCBtYXhIZWlnaHQgPSAwOwogICAgIAogICAgIFJlbmRlck9iamVjdCog
Y3VycmVudCA9IGZpcnN0Q2hpbGQoKTsKICAgICB3aGlsZSAoY3VycmVudCkgewpAQCAtMTc5LDgg
KzE3OSw4IEBAIHZvaWQgUmVuZGVyTWF0aE1MU3F1YXJlUm9vdDo6bGF5b3V0KCkKICAgICAgICAg
bWF4SGVpZ2h0ID0gc3R5bGUoKS0+Zm9udFNpemUoKTsKIAogICAgIAotICAgIGlmIChtYXhIZWln
aHQgPiBzdGF0aWNfY2FzdDxpbnQ+KGdUaHJlc2hvbGRCYXNlSGVpZ2h0ICogc3R5bGUoKS0+Zm9u
dFNpemUoKSkpCi0gICAgICAgIHN0eWxlKCktPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHN0YXRp
Y19jYXN0PGludD4oZ1Jvb3RCb3R0b21QYWRkaW5nICogc3R5bGUoKS0+Zm9udFNpemUoKSksIEZp
eGVkKSk7CisgICAgaWYgKG1heEhlaWdodCA+IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGdUaHJl
c2hvbGRCYXNlSGVpZ2h0ICogc3R5bGUoKS0+Zm9udFNpemUoKSkpCisgICAgICAgIHN0eWxlKCkt
PnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGdSb290Qm90
dG9tUGFkZGluZyAqIHN0eWxlKCktPmZvbnRTaXplKCkpLCBGaXhlZCkpOwogCiAgICAgCiAgICAg
UmVuZGVyQmxvY2s6OmxheW91dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxTdWJTdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3ViU3VwLmNwcAkocmV2aXNpb24gOTAyODAp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFN1YlN1cC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MiwxNSArMTYyLDE1IEBAIHZvaWQgUmVuZGVyTWF0aE1M
U3ViU3VwOjpsYXlvdXQoKSAKICAgICAKICAgICBpZiAobV9raW5kID09IFN1YlN1cCkgewogICAg
ICAgICBpZiAoUmVuZGVyT2JqZWN0KiBiYXNlID0gZmlyc3RDaGlsZCgpKSB7Ci0gICAgICAgICAg
ICBpbnQgbWF4SGVpZ2h0ID0gMDsKKyAgICAgICAgICAgIExheW91dFVuaXQgbWF4SGVpZ2h0ID0g
MDsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCogY3VycmVudCA9IGJhc2UtPmZpcnN0Q2hpbGQo
KTsKICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50KSB7Ci0gICAgICAgICAgICAgICAgaW50IGhl
aWdodCA9IGdldEJveE1vZGVsT2JqZWN0SGVpZ2h0KGN1cnJlbnQpOworICAgICAgICAgICAgICAg
IExheW91dFVuaXQgaGVpZ2h0ID0gZ2V0Qm94TW9kZWxPYmplY3RIZWlnaHQoY3VycmVudCk7CiAg
ICAgICAgICAgICAgICAgaWYgKGhlaWdodCA+IG1heEhlaWdodCkKICAgICAgICAgICAgICAgICAg
ICAgbWF4SGVpZ2h0ID0gaGVpZ2h0OwogICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50
LT5uZXh0U2libGluZygpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IGhlaWdodERp
ZmYgPSBtX3NjcmlwdHMgPyAobV9zY3JpcHRzLT5vZmZzZXRIZWlnaHQoKSAtIG1heEhlaWdodCkg
LyAyIDogMDsKKyAgICAgICAgICAgIExheW91dFVuaXQgaGVpZ2h0RGlmZiA9IG1fc2NyaXB0cyA/
IChtX3NjcmlwdHMtPm9mZnNldEhlaWdodCgpIC0gbWF4SGVpZ2h0KSAvIDIgOiAwOwogICAgICAg
ICAgICAgaWYgKGhlaWdodERpZmYgPCAwKSAKICAgICAgICAgICAgICAgICBoZWlnaHREaWZmID0g
MDsKICAgICAgICAgICAgIGJhc2UtPnN0eWxlKCktPnNldFBhZGRpbmdUb3AoTGVuZ3RoKGhlaWdo
dERpZmYsIEZpeGVkKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTFVuZGVyT3Zlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwCShyZXZpc2lvbiA5MDI4MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVW5kZXJPdmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDcgKzE1OSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1M
VW5kZXJPdmVyOjpsYXlvdXQoKSAKICAgICAgICAgICAgIGlmICghb3Zlci0+Zmlyc3RDaGlsZCgp
IHx8ICFvdmVyLT5maXJzdENoaWxkKCktPmlzQm94TW9kZWxPYmplY3QoKSkKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaW50IG92ZXJTcGFjaW5nID0g
c3RhdGljX2Nhc3Q8aW50PihnT3ZlclNwYWNpbmdBZGp1c3RtZW50ICogKGdldE9mZnNldEhlaWdo
dChvdmVyKSAtIHRvUmVuZGVyQm94TW9kZWxPYmplY3Qob3Zlci0+Zmlyc3RDaGlsZCgpKS0+YmFz
ZWxpbmVQb3NpdGlvbihBbHBoYWJldGljQmFzZWxpbmUsIHRydWUsIEhvcml6b250YWxMaW5lKSkp
OworICAgICAgICAgICAgTGF5b3V0VW5pdCBvdmVyU3BhY2luZyA9IHN0YXRpY19jYXN0PExheW91
dFVuaXQ+KGdPdmVyU3BhY2luZ0FkanVzdG1lbnQgKiAoZ2V0T2Zmc2V0SGVpZ2h0KG92ZXIpIC0g
dG9SZW5kZXJCb3hNb2RlbE9iamVjdChvdmVyLT5maXJzdENoaWxkKCkpLT5iYXNlbGluZVBvc2l0
aW9uKEFscGhhYmV0aWNCYXNlbGluZSwgdHJ1ZSwgSG9yaXpvbnRhbExpbmUpKSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIC8vIGJhc2Ugcm93IHdyYXBwZXIKICAgICAgICAgICAgIGJhc2Ug
PSBvdmVyLT5uZXh0U2libGluZygpOwpAQCAtMTgxLDcgKzE4MSw3IEBAIHZvaWQgUmVuZGVyTWF0
aE1MVW5kZXJPdmVyOjpsYXlvdXQoKSAKICAgICAgICAgLy8gYmFzZSByb3cgd3JhcHBlcgogICAg
ICAgICBiYXNlID0gZmlyc3RDaGlsZCgpOwogICAgICAgICBpZiAoYmFzZSkgewotICAgICAgICAg
ICAgaW50IGJhc2VIZWlnaHQgPSBnZXRPZmZzZXRIZWlnaHQoYmFzZSk7CisgICAgICAgICAgICBM
YXlvdXRVbml0IGJhc2VIZWlnaHQgPSBnZXRPZmZzZXRIZWlnaHQoYmFzZSk7CiAgICAgICAgICAg
ICAvLyBhY3R1YWwgYmFzZQogICAgICAgICAgICAgYmFzZSA9IGJhc2UtPmZpcnN0Q2hpbGQoKTsK
ICAgICAgICAgICAgIGlmICghYmFzZSB8fCAhYmFzZS0+aXNCb3hNb2RlbE9iamVjdCgpKQpAQCAt
MTg5LDcgKzE4OSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MVW5kZXJPdmVyOjpsYXlvdXQoKSAKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gbG9vayBhdCB0aGUg
c3BhY2UgYmV0d2VlbiBhIHNpbmdsZSBtYXhpbXVtIGhlaWdodCBvZgogICAgICAgICAgICAgLy8g
ICAgICAgIHRoZSBsaW5lIGJveGVzIGFuZCB0aGUgYmFzZWxpbmUgYW5kIHNxdWVlemUgdGhlbSB0
b2dldGhlcgotICAgICAgICAgICAgaW50IHVuZGVyU3BhY2luZyA9IGJhc2VIZWlnaHQgLSB0b1Jl
bmRlckJveE1vZGVsT2JqZWN0KGJhc2UpLT5iYXNlbGluZVBvc2l0aW9uKEFscGhhYmV0aWNCYXNl
bGluZSwgdHJ1ZSwgSG9yaXpvbnRhbExpbmUpOworICAgICAgICAgICAgTGF5b3V0VW5pdCB1bmRl
clNwYWNpbmcgPSBiYXNlSGVpZ2h0IC0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChiYXNlKS0+YmFz
ZWxpbmVQb3NpdGlvbihBbHBoYWJldGljQmFzZWxpbmUsIHRydWUsIEhvcml6b250YWxMaW5lKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gYWRqdXN0IHRoZSBiYXNlJ3MgaW50cnVzaW9u
IGludG8gdGhlIHVuZGVyCiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHVuZGVyID0gbGFzdENo
aWxkKCk7CkBAIC0yMTAsNyArMjEwLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxVbmRlck92ZXI6Omxh
eW91dCgpIAogICAgICAgICAgICAgLy8gRklYTUU6IGJhc2VzIHRoYXQgYXNjZW5kIGhpZ2hlciB0
aGFuIHRoZSBsaW5lIGJveCBpbnRydWRlIGludG8gdGhlIG92ZXIKICAgICAgICAgICAgIGlmICgh
b3Zlci0+Zmlyc3RDaGlsZCgpIHx8ICFvdmVyLT5maXJzdENoaWxkKCktPmlzQm94TW9kZWxPYmpl
Y3QoKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGludCBvdmVyU3BhY2lu
ZyA9IHN0YXRpY19jYXN0PGludD4oZ092ZXJTcGFjaW5nQWRqdXN0bWVudCAqIChnZXRPZmZzZXRI
ZWlnaHQob3ZlcikgLSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG92ZXItPmZpcnN0Q2hpbGQoKSkt
PmJhc2VsaW5lUG9zaXRpb24oQWxwaGFiZXRpY0Jhc2VsaW5lLCB0cnVlLCBIb3Jpem9udGFsTGlu
ZSkpKTsKKyAgICAgICAgICAgIExheW91dFVuaXQgb3ZlclNwYWNpbmcgPSBzdGF0aWNfY2FzdDxM
YXlvdXRVbml0PihnT3ZlclNwYWNpbmdBZGp1c3RtZW50ICogKGdldE9mZnNldEhlaWdodChvdmVy
KSAtIHRvUmVuZGVyQm94TW9kZWxPYmplY3Qob3Zlci0+Zmlyc3RDaGlsZCgpKS0+YmFzZWxpbmVQ
b3NpdGlvbihBbHBoYWJldGljQmFzZWxpbmUsIHRydWUsIEhvcml6b250YWxMaW5lKSkpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICAvLyBiYXNlIHJvdyB3cmFwcGVyCiAgICAgICAgICAgICBi
YXNlID0gb3Zlci0+bmV4dFNpYmxpbmcoKTsKQEAgLTIyMiw3ICsyMjIsNyBAQCB2b2lkIFJlbmRl
ck1hdGhNTFVuZGVyT3Zlcjo6bGF5b3V0KCkgCiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0
byBjYWxjdWxhdGUgdGhlIGJhc2VsaW5lIG9mIHRoZSBiYXNlIHZlcnN1cyB0aGUgc3RhcnQgb2Yg
dGhlIHVuZGVyIGJsb2NrIGFuZAogICAgICAgICAgICAgICAgIC8vIGFkanVzdCB0aGUgcGxhY2Vt
ZW50IG9mIHRoZSB1bmRlciBibG9jay4KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpbnQgYmFzZUhlaWdodCA9IGdldE9mZnNldEhlaWdodChiYXNlKTsKKyAgICAgICAgICAgICAg
ICBMYXlvdXRVbml0IGJhc2VIZWlnaHQgPSBnZXRPZmZzZXRIZWlnaHQoYmFzZSk7CiAgICAgICAg
ICAgICAgICAgLy8gYWN0dWFsIGJhc2UKICAgICAgICAgICAgICAgICBiYXNlID0gYmFzZS0+Zmly
c3RDaGlsZCgpOwogICAgICAgICAgICAgICAgIGlmICghYmFzZSB8fCAhYmFzZS0+aXNCb3hNb2Rl
bE9iamVjdCgpKQpAQCAtMjMwLDcgKzIzMCw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MVW5kZXJPdmVy
OjpsYXlvdXQoKSAKIAogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGxvb2sg
YXQgdGhlIHNwYWNlIGJldHdlZW4gYSBzaW5nbGUgbWF4aW11bSBoZWlnaHQgb2YKICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgdGhlIGxpbmUgYm94ZXMgYW5kIHRoZSBiYXNlbGluZSBhbmQgc3F1
ZWV6ZSB0aGVtIHRvZ2V0aGVyCi0gICAgICAgICAgICAgICAgaW50IHVuZGVyU3BhY2luZyA9IGJh
c2VIZWlnaHQgLSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGJhc2UpLT5iYXNlbGluZVBvc2l0aW9u
KEFscGhhYmV0aWNCYXNlbGluZSwgdHJ1ZSwgSG9yaXpvbnRhbExpbmUpOworICAgICAgICAgICAg
ICAgIExheW91dFVuaXQgdW5kZXJTcGFjaW5nID0gYmFzZUhlaWdodCAtIHRvUmVuZGVyQm94TW9k
ZWxPYmplY3QoYmFzZSktPmJhc2VsaW5lUG9zaXRpb24oQWxwaGFiZXRpY0Jhc2VsaW5lLCB0cnVl
LCBIb3Jpem9udGFsTGluZSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgUmVu
ZGVyT2JqZWN0KiB1bmRlciA9IGxhc3RDaGlsZCgpOwogICAgICAgICAgICAgICAgIGlmICh1bmRl
ciAmJiB1bmRlci0+Zmlyc3RDaGlsZCgpICYmIHVuZGVyLT5maXJzdENoaWxkKCktPmlzUmVuZGVy
SW5saW5lKCkgJiYgdW5kZXJTcGFjaW5nID4gMCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>