<?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>175627</bug_id>
          
          <creation_ts>2017-08-16 04:48:28 -0700</creation_ts>
          <short_desc>Move first-letter renderer mutation code out of RenderBlock and into RenderTreeUpdater</short_desc>
          <delta_ts>2017-08-16 06:16:05 -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>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kling</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1339145</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-08-16 04:48:28 -0700</bug_when>
    <thetext>Render tree should not mutate itself. We already fixed this for first-letter and the code can now move to RenderTreeUpdater.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339147</commentid>
    <comment_count>1</comment_count>
      <attachid>318254</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-08-16 04:54:09 -0700</bug_when>
    <thetext>Created attachment 318254
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339150</commentid>
    <comment_count>2</comment_count>
      <attachid>318254</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2017-08-16 05:19:25 -0700</bug_when>
    <thetext>Comment on attachment 318254
patch

r=me without the bogus Xcode project changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339153</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-08-16 05:36:53 -0700</bug_when>
    <thetext>The project file changes appear to be correct, XCode is cleaning up some duplicates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339154</commentid>
    <comment_count>4</comment_count>
      <attachid>318254</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-16 06:15:24 -0700</bug_when>
    <thetext>Comment on attachment 318254
patch

Clearing flags on attachment: 318254

Committed r220795: &lt;http://trac.webkit.org/changeset/220795&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339155</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-16 06:15:25 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339156</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-16 06:16:05 -0700</bug_when>
    <thetext>&lt;rdar://problem/33917420&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318254</attachid>
            <date>2017-08-16 04:54:09 -0700</date>
            <delta_ts>2017-08-16 06:15:24 -0700</delta_ts>
            <desc>patch</desc>
            <filename>first-letter-move-3.patch</filename>
            <type>text/plain</type>
            <size>46303</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDc5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDE3LTA4LTE2ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGZpcnN0LWxldHRlciBy
ZW5kZXJlciBtdXRhdGlvbiBjb2RlIG91dCBvZiBSZW5kZXJCbG9jayBhbmQgaW50byBSZW5kZXJU
cmVlVXBkYXRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc1NjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVuZGVyIHRyZWUgc2hvdWxkIG5vdCBtdXRhdGUgaXRzZWxmLiBXZSBhbHJlYWR5IGZpeGVk
IHRoaXMgZm9yIGZpcnN0LWxldHRlciwgc3VwcG9ydGluZyBjb2RlCisgICAgICAgIGNhbiBub3cg
bW92ZSB0byBSZW5kZXJUcmVlVXBkYXRlciB0b28uCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlRm9y
Rmlyc3RMZXR0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aXNQdW5jdHVhdGlvbkZv
ckZpcnN0TGV0dGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZFNraXBGb3JG
aXJzdExldHRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6dXBk
YXRlRmlyc3RMZXR0ZXJTdHlsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6Y3JlYXRlRmlyc3RMZXR0ZXJSZW5kZXJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlRmlyc3RMZXR0ZXIpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSdWJ5
UnVuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlSdW46OnVwZGF0ZUZpcnN0TGV0
dGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZTo6dXBkYXRlRmlyc3RMZXR0ZXIpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5oOgorCisgICAgICAgICAgICBWaXJ0dWFsIG92ZXJyaWRlcyBqdXN0IGRp
c2FibGVkIGZpcnN0IGxldHRlciBmb3Igc29tZSBSZW5kZXJCbG9jayBzdWJjbGFzc2VzLiBUaGlz
IGlzIG5vdyBhY2hpZXZlZCB2aWEKKyAgICAgICAgICAgIHN1cHBvcnRzRmlyc3RMZXR0ZXIgdGVz
dCBpbiB0aGUgZmlyc3QgbGV0dGVyIHVwZGF0ZXIuCisKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4
dEF1dG9TaXppbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9TaXppbmdWYWx1ZTo6
YWRqdXN0VGV4dE5vZGVTaXplcyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdU
ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OnVwZGF0ZUZpcnN0TGV0
dGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaDoK
KyAgICAgICAgKiBzdHlsZS9SZW5kZXJUcmVlVXBkYXRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUcmVlVXBkYXRlcjo6cG9wUGFyZW50KToKKyAgICAgICAgKiBzdHlsZS9SZW5kZXJU
cmVlVXBkYXRlci5oOgorICAgICAgICAqIHN0eWxlL1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlRm9yRmlyc3RMZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6aXNQdW5jdHVhdGlvbkZvckZpcnN0TGV0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OnNob3VsZFNraXBGb3JGaXJzdExldHRlcik6CisgICAgICAgIChXZWJDb3JlOjp1
cGRhdGVGaXJzdExldHRlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZpcnN0TGV0
dGVyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6c3VwcG9ydHNGaXJzdExldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlVXBkYXRlcjo6Rmlyc3RMZXR0ZXI6OnVwZGF0ZSk6
CisgICAgICAgICogc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5oOiBBZGRlZC4K
KwogMjAxNy0wOC0xNiAgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJpc0BpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFtHU3RyZWFtZXJdW0VNRV0gUmV3b3JrIGhhbmRsaW5nIGtleSBzeXN0
ZW1zIGFuZCBVVUlEcwpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIyMDc0MSkK
KysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yNzk2
LDYgKzI3OTYsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgc3R5bGUvSW5saW5lVGV4dEJv
eFN0eWxlLmNwcAogICAgIHN0eWxlL1JlbmRlclRyZWVQb3NpdGlvbi5jcHAKICAgICBzdHlsZS9S
ZW5kZXJUcmVlVXBkYXRlci5jcHAKKyAgICBzdHlsZS9SZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0
dGVyLmNwcAogICAgIHN0eWxlL1N0eWxlQ2hhbmdlLmNwcAogICAgIHN0eWxlL1N0eWxlRm9udFNp
emVGdW5jdGlvbnMuY3BwCiAgICAgc3R5bGUvU3R5bGVJbnZhbGlkYXRvci5jcHAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDIyMDc0MSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjc5Nyw2ICs2Nzk3LDcgQEAKIAkJRTQ3RTI3
NjUxNjAzNkVEMjAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdFMjc2NDE2MDM2RUQyMDBFRTJB
RkIgLyogRXh0ZW5zaW9uU3R5bGVTaGVldHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDdFMjc2ODE2MDM2RURDMDBFRTJBRkIgLyogRXh0ZW5z
aW9uU3R5bGVTaGVldHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTQ3RTI3NjcxNjAzNkVEQzAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hlZXRz
LmNwcCAqLzsgfTsKIAkJRTQ4MTM3QjkxREIzQjUyNjAwNUM1OUJGIC8qIFN0eWxlVmFsaWRpdHku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODEzN0I4
MURCM0I1MjYwMDVDNTlCRiAvKiBTdHlsZVZhbGlkaXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTQ4Mjg0MDgxRjQ0NTk0QzAwODYzQUMzIC8q
IFJlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4Mjg0MDYxRjQ0NTk0QjAwODYzQUMzIC8qIFJlbmRl
clRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuY3BwICovOyB9OwogCQlFNDg5NDRBMjE4MEI1N0Q4MDBG
MTY1RDggLyogU2ltcGxlTGluZUxheW91dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNDg5NDRBMDE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGlu
ZUxheW91dC5jcHAgKi87IH07CiAJCUU0ODk0NEEzMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVM
aW5lTGF5b3V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNDg5NDRBMTE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0OTE2RkY3MTk1REY2
QTAwMDVBQjM0OSAvKiBMYXllckZsdXNoVGhyb3R0bGVTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5MTZGRjYxOTVERjZBMDAwNUFCMzQ5IC8q
IExheWVyRmx1c2hUaHJvdHRsZVN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEyNDg0LDggKzEyNDg1LDggQEAKIAkJOUIwOThCREUxRjNE
NjczRDAwMkRENTYyIC8qIEpTRGF0YVRyYW5zZmVySXRlbS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0RhdGFUcmFuc2Zlckl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOUIwOThCREYxRjNENjczRDAwMkRENTYyIC8qIEpTRGF0YVRyYW5zZmVySXRlbUxp
c3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEYXRhVHJhbnNm
ZXJJdGVtTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMDk4QkUwMUYz
RDY3M0QwMDJERDU2MiAvKiBKU0RhdGFUcmFuc2Zlckl0ZW1MaXN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YVRyYW5zZmVySXRlbUxpc3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJOUIwOThCRTYxRjNENkFGNjAwMkRENTYyIC8qIEpTU3RyaW5nQ2Fs
bGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNTdHJpbmdD
YWxsYmFjay5jcHA7IHBhdGggPSBKU1N0cmluZ0NhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJOUIwOThCRTcxRjNENkFGNjAwMkRENTYyIC8qIEpTU3RyaW5nQ2FsbGJh
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNTdHJpbmdDYWxsYmFjay5o
OyBwYXRoID0gSlNTdHJpbmdDYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk5QjA5OEJFNjFGM0Q2QUY2MDAyREQ1NjIgLyogSlNTdHJpbmdDYWxsYmFjay5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0cmluZ0NhbGxiYWNrLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUIwOThCRTcxRjNENkFGNjAwMkRENTYyIC8qIEpT
U3RyaW5nQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTdHJp
bmdDYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjBGRTg3MzFEOUUw
MkRGMDA0QThBQ0IgLyogRG9jdW1lbnRPclNoYWRvd1Jvb3QuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IERvY3VtZW50T3JTaGFkb3dSb290LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOUIxMzI1N0IxRjNEMkFCQTAwREFBQjY5IC8qIERhdGFUcmFuc2Zlckl0ZW1MaXN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGFUcmFuc2Zlckl0ZW1M
aXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIxOUI2N0UxQjk2NEU1MjAw
MzQ4NzQ1IC8qIFNoYWRvd1Jvb3QuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNoYWRvd1Jv
b3QuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU0MjAsNiArMTU0MjEsOCBA
QAogCQlFNDdFMjc2NDE2MDM2RUQyMDBFRTJBRkIgLyogRXh0ZW5zaW9uU3R5bGVTaGVldHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uU3R5bGVTaGVldHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3RTI3NjcxNjAzNkVEQzAwRUUyQUZCIC8q
IEV4dGVuc2lvblN0eWxlU2hlZXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEV4dGVuc2lvblN0eWxlU2hlZXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTQ4MTM3QjgxREIzQjUyNjAwNUM1OUJGIC8qIFN0eWxlVmFsaWRpdHkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVWYWxpZGl0eS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFNDgyODQwNjFGNDQ1OTRCMDA4NjNBQzMgLyogUmVuZGVyVHJlZVVw
ZGF0ZXJGaXJzdExldHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUcmVlVXBkYXRl
ckZpcnN0TGV0dGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ4Mjg0MDkx
RjQ0NTk1NjAwODYzQUMzIC8qIFJlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNDg5NDRBMDE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVMaW5lTGF5
b3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ4OTQ0QTExODBCNTdEODAw
RjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2ltcGxlTGluZUxheW91dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
NDkxNkZGNjE5NURGNkEwMDA1QUIzNDkgLyogTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0OTUyLDYgKzI0OTU1LDggQEAKIAkJCQk1
ODI0QUJBOTFBRTg0OUM4MDA5MDc0QjcgLyogUmVuZGVyVHJlZVBvc2l0aW9uLmggKi8sCiAJCQkJ
RTQ2MTgwMkExQzhBMDZEOTAwMjZDMDJDIC8qIFJlbmRlclRyZWVVcGRhdGVyLmNwcCAqLywKIAkJ
CQlFNDYxODAyODFDOEEwNkNEMDAyNkMwMkMgLyogUmVuZGVyVHJlZVVwZGF0ZXIuaCAqLywKKwkJ
CQlFNDgyODQwNjFGNDQ1OTRCMDA4NjNBQzMgLyogUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRl
ci5jcHAgKi8sCisJCQkJRTQ4Mjg0MDkxRjQ0NTk1NjAwODYzQUMzIC8qIFJlbmRlclRyZWVVcGRh
dGVyRmlyc3RMZXR0ZXIuaCAqLywKIAkJCQlFNDAxRTBBNTFDM0MwQ0Y3MDBGMzREMTAgLyogU3R5
bGVDaGFuZ2UuY3BwICovLAogCQkJCUU0MDFFMEEzMUMzQzBCODMwMEYzNEQxMCAvKiBTdHlsZUNo
YW5nZS5oICovLAogCQkJCUU0RDU4RUI2MTdCNEVEODkwMENCRENBOCAvKiBTdHlsZUZvbnRTaXpl
RnVuY3Rpb25zLmNwcCAqLywKQEAgLTI5NDY4LDIzICsyOTQ3MywxNSBAQAogCQkJCTUxNkY3RjZE
MUMzMUUzOUEwMEYxMTFEQyAvKiBTZXJ2ZXJPcGVuREJSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkyRDkzQUVFMzE5REY1NjQxMDAyQTg2QzMgLyogU2VydmljZXNPdmVybGF5Q29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFGMTc1NUQxRjNFQkM4MzAwQzc0OTUwIC8qIFNlcnZp
Y2VXb3JrZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxODJDMjNGMUYzMTNBMDkwMDU5QkE3QyAv
KiBTZXJ2aWNlV29ya2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUYxNzU1RjFGM0VCQzgzMDBD
NzQ5NTAgLyogU2VydmljZVdvcmtlckNvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE4
MkMyNDExRjMxM0EwOTAwNTlCQTdDIC8qIFNlcnZpY2VXb3JrZXJDb250YWluZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxRjE3NTYxMUYzRUJDODMwMEM3NDk1MCAvKiBTZXJ2aWNlV29ya2VyR2xv
YmFsU2NvcGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxODJDMjQzMUYzMTNBMDkwMDU5QkE3QyAv
KiBTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRjE3NTYz
MUYzRUJDODMwMEM3NDk1MCAvKiBTZXJ2aWNlV29ya2VySm9iLmggaW4gSGVhZGVycyAqLywKLQkJ
CQk1MTFDQTY3RTFGMzkwNUE2MDAxOUUwNzQgLyogU2VydmljZVdvcmtlckpvYi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTFGMTc1NjQxRjNFQkM4MzAwQzc0OTUwIC8qIFNlcnZpY2VXb3JrZXJKb2JD
bGllbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxMUNBNjgwMUYzOTMzMUYwMDE5RTA3NCAvKiBT
ZXJ2aWNlV29ya2VySm9iQ2xpZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTFDQTY3QTFGMzkw
NEIxMDAxOUUwNzQgLyogU2VydmljZVdvcmtlclByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MUYxNzU2NjFGM0VCQzgzMDBDNzQ5NTAgLyogU2VydmljZVdvcmtlclByb3ZpZGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MUYxNzU2ODFGM0VCQzgzMDBDNzQ5NTAgLyogU2VydmljZVdvcmtl
clJlZ2lzdHJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE4MkMyNDUxRjMxM0EwOTAwNTlC
QTdDIC8qIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
RjE3NTY5MUYzRUJDODMwMEM3NDk1MCAvKiBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uT3B0aW9u
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFGMTc1NkIxRjNFQkM4MzAwQzc0OTUwIC8qIFNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25QYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUYx
NzU2QzFGM0VCQzgzMDBDNzQ5NTAgLyogU2VydmljZVdvcmtlclVwZGF0ZVZpYUNhY2hlLmggaW4g
SGVhZGVycyAqLywKLQkJCQk1MUYxNzRGRjFGMzU4OTk3MDBDNzQ5NTAgLyogU2VydmljZVdvcmtl
clVwZGF0ZVZpYUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3NTZCMkNFMTE4QjcxMDE2MDBG
RUNGQUEgLyogU2Vzc2lvbklELmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxMDA5OUU2NDky
MDA1NkU1ODEgLyogU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUI4REJEQjRDMTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmggaW4gSGVh
ZGVycyAqLywKQEAgLTMxODk4LDYgKzMxODk1LDcgQEAKIAkJCQlFMTI1RjgzRDE4MjQxMUU3MDBE
ODRDRDkgLyogSlNDcnlwdG9PcGVyYXRpb25EYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdD
OUFDQUJGMUYzQ0YxQUYwMEYzQUEwOSAvKiBKU0NyeXB0b1JzYUhhc2hlZEtleUFsZ29yaXRobS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzlBQ0FDMTFGM0NGMUFGMDBGM0FBMDkgLyogSlNDcnlw
dG9Sc2FLZXlBbGdvcml0aG0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTQ4Mjg0MDgxRjQ0NTk0
QzAwODYzQUMzIC8qIFJlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkM0NkMxRkMwQzBEREM4RjAwMjBDRkMzIC8qIEpTQ1NTRm9udEZhY2VSdWxlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDNDZDMUZFMEMwRERDOEYwMDIwQ0ZDMyAvKiBKU0NTU0lt
cG9ydFJ1bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE2RkUwNzEwRTZDQ0JFRTAwQkY2MDg4
IC8qIEpTQ1NTS2V5ZnJhbWVSdWxlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzMzMzQsMTkgKzMz
MzMyLDEyIEBACiAJCQkJNTE2RjdGNkUxQzMxRTM5QzAwRjExMURDIC8qIFNlcnZlck9wZW5EQlJl
cXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5M0FFRTQxOURGNTY0MTAwMkE4NkMzIC8q
IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUYxNzU1
QzFGM0VCQzgzMDBDNzQ5NTAgLyogU2VydmljZVdvcmtlci5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk1MTgyQzIzRTFGMzEzQTA5MDA1OUJBN0MgLyogU2VydmljZVdvcmtlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MUYxNzU1RTFGM0VCQzgzMDBDNzQ5NTAgLyogU2VydmljZVdvcmtlckNvbnRh
aW5lci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTgyQzI0MDFGMzEzQTA5MDA1OUJBN0MgLyog
U2VydmljZVdvcmtlckNvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTgyQzI0MjFG
MzEzQTA5MDA1OUJBN0MgLyogU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxRjE3NTYwMUYzRUJDODMwMEM3NDk1MCAvKiBTZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMTc1NjIxRjNFQkM4MzAwQzc0OTUwIC8q
IFNlcnZpY2VXb3JrZXJKb2IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTExQ0E2N0QxRjM5MDVB
NjAwMTlFMDc0IC8qIFNlcnZpY2VXb3JrZXJKb2IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTEx
Q0E2NzkxRjM5MDRCMTAwMTlFMDc0IC8qIFNlcnZpY2VXb3JrZXJQcm92aWRlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1MUYxNzU2NTFGM0VCQzgzMDBDNzQ5NTAgLyogU2VydmljZVdvcmtlclBy
b3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjE3NTY3MUYzRUJDODMwMEM3NDk1MCAv
KiBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxODJD
MjQ0MUYzMTNBMDkwMDU5QkE3QyAvKiBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTUxRjE3NTZBMUYzRUJDODMwMEM3NDk1MCAvKiBTZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uUGFyYW1ldGVycy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTFDQTY4MzFG
M0EzQ0Q5MDAxOUUwNzQgLyogU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvblBhcmFtZXRlcnMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNTExRjdENDQxRUIxQzM5MTAwRTQ3QjgzIC8qIFNlc3Npb25J
RC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUwRjA5OUU2NDkyMDA1NkU1ODEgLyogU2V0
Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjhEQkRCNEIxMzBC
MEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDIy
MDc0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwODUsNzAgKzMwODUsNiBAQCBSZW5kZXJCbG9jayogUmVuZGVyQmxvY2s6
OmZpcnN0TGluZUJsb2NrCiAgICAgcmV0dXJuIGZpcnN0TGluZUJsb2NrOwogfQogCi1zdGF0aWMg
UmVuZGVyU3R5bGUgc3R5bGVGb3JGaXJzdExldHRlcihjb25zdCBSZW5kZXJFbGVtZW50JiBmaXJz
dExldHRlckJsb2NrLCBjb25zdCBSZW5kZXJPYmplY3QmIGZpcnN0TGV0dGVyQ29udGFpbmVyKQot
ewotICAgIGF1dG8qIGNvbnRhaW5lckZpcnN0TGV0dGVyU3R5bGUgPSBmaXJzdExldHRlckJsb2Nr
LmdldENhY2hlZFBzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUiwgJmZpcnN0TGV0dGVyQ29udGFpbmVy
LmZpcnN0TGluZVN0eWxlKCkpOwotICAgIC8vIEZJWE1FOiBUaGVyZSBhcHBlYXJzIHRvIGJlIHNv
bWUgcGF0aCB3aGVyZSB3ZSBoYXZlIGEgZmlyc3QgbGV0dGVyIHJlbmRlcmVyIHdpdGhvdXQgZmly
c3QgbGV0dGVyIHN0eWxlLgotICAgIEFTU0VSVChjb250YWluZXJGaXJzdExldHRlclN0eWxlKTsK
LSAgICBhdXRvIGZpcnN0TGV0dGVyU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoY29udGFpbmVy
Rmlyc3RMZXR0ZXJTdHlsZSA/ICpjb250YWluZXJGaXJzdExldHRlclN0eWxlIDogZmlyc3RMZXR0
ZXJDb250YWluZXIuZmlyc3RMaW5lU3R5bGUoKSk7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIGFuIGlu
aXRpYWwgbGV0dGVyIGRyb3AgdGhhdCBpcyA+PSAxLCB0aGVuIHdlIG5lZWQgdG8gZm9yY2UgZmxv
YXRpbmcgdG8gYmUgb24uCi0gICAgaWYgKGZpcnN0TGV0dGVyU3R5bGUuaW5pdGlhbExldHRlckRy
b3AoKSA+PSAxICYmICFmaXJzdExldHRlclN0eWxlLmlzRmxvYXRpbmcoKSkKLSAgICAgICAgZmly
c3RMZXR0ZXJTdHlsZS5zZXRGbG9hdGluZyhmaXJzdExldHRlclN0eWxlLmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSA/IExlZnRGbG9hdCA6IFJpZ2h0RmxvYXQpOwotCi0gICAgLy8gV2UgaGF2ZSB0
byBjb21wdXRlIHRoZSBjb3JyZWN0IGZvbnQtc2l6ZSBmb3IgdGhlIGZpcnN0LWxldHRlciBpZiBp
dCBoYXMgYW4gaW5pdGlhbCBsZXR0ZXIgaGVpZ2h0IHNldC4KLSAgICBhdXRvKiBwYXJhZ3JhcGgg
PSBmaXJzdExldHRlckNvbnRhaW5lci5pc1JlbmRlckJsb2NrRmxvdygpID8gJmZpcnN0TGV0dGVy
Q29udGFpbmVyIDogZmlyc3RMZXR0ZXJDb250YWluZXIuY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAg
aWYgKGZpcnN0TGV0dGVyU3R5bGUuaW5pdGlhbExldHRlckhlaWdodCgpID49IDEgJiYgZmlyc3RM
ZXR0ZXJTdHlsZS5mb250TWV0cmljcygpLmhhc0NhcEhlaWdodCgpICYmIHBhcmFncmFwaC0+c3R5
bGUoKS5mb250TWV0cmljcygpLmhhc0NhcEhlaWdodCgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBG
b3IgaWRlb2dyYXBoaWMgYmFzZWxpbmVzLCB3ZSB3YW50IHRvIGdvIGZyb20gbGluZSBlZGdlIHRv
IGxpbmUgZWRnZS4gVGhpcyBpcyBlcXVpdmFsZW50IHRvIChOLTEpKmxpbmUtaGVpZ2h0ICsgdGhl
IGZvbnQgaGVpZ2h0LgotICAgICAgICAvLyBXZSBkb24ndCB5ZXQgc3VwcG9ydCBpZGVvZ3JhcGhp
YyBiYXNlbGluZXMuCi0gICAgICAgIC8vIEZvciBhbiBOLWxpbmUgZmlyc3QtbGV0dGVyIGFuZCBm
b3IgYWxwaGFiZXRpYyBiYXNlbGluZXMsIHRoZSBjYXAtaGVpZ2h0IG9mIHRoZSBmaXJzdCBsZXR0
ZXIgbmVlZHMgdG8gZXF1YWwgKE4tMSkqbGluZS1oZWlnaHQgb2YgcGFyYWdyYXBoIGxpbmVzICsg
Y2FwLWhlaWdodCBvZiB0aGUgcGFyYWdyYXBoCi0gICAgICAgIC8vIE1hdGhlbWF0aWNhbGx5IHdl
IGNhbid0IHJlbHkgb24gZm9udC1zaXplLCBzaW5jZSBmb250KCkuaGVpZ2h0KCkgZG9lc24ndCBu
ZWNlc3NhcmlseSBtYXRjaC4gRm9yIHJlbGlhYmlsaXR5LCB0aGUgYmVzdCBhcHByb2FjaCBpcyBz
aW1wbHkgdG8KLSAgICAgICAgLy8gY29tcGFyZSB0aGUgZmluYWwgbWVhc3VyZWQgY2FwLWhlaWdo
dHMgb2YgdGhlIHR3byBmb250cyBpbiBvcmRlciB0byBnZXQgdG8gdGhlIGNsb3Nlc3QgcG9zc2li
bGUgdmFsdWUuCi0gICAgICAgIGZpcnN0TGV0dGVyU3R5bGUuc2V0TGluZUJveENvbnRhaW4oTGlu
ZUJveENvbnRhaW5Jbml0aWFsTGV0dGVyKTsKLSAgICAgICAgaW50IGxpbmVIZWlnaHQgPSBwYXJh
Z3JhcGgtPnN0eWxlKCkuY29tcHV0ZWRMaW5lSGVpZ2h0KCk7Ci0gICAgICAgIAotICAgICAgICAv
LyBTZXQgdGhlIGZvbnQgdG8gYmUgb25lIGxpbmUgdG9vIGJpZyBhbmQgdGhlbiByYXRjaGV0IGJh
Y2sgdG8gZ2V0IHRvIGEgcHJlY2lzZSBmaXQuIFdlIGNhbid0IGp1c3Qgc2V0IHRoZSBkZXNpcmVk
IGZvbnQgc2l6ZSBiYXNlZCBvZmYgZm9udCBoZWlnaHQgbWV0cmljcwotICAgICAgICAvLyBiZWNh
dXNlIG1hbnkgZm9udHMgYmFrZSBhc2NlbnQgaW50byB0aGUgZm9udCBtZXRyaWNzLiBUaGVyZWZv
cmUgd2UgaGF2ZSB0byBsb29rIGF0IGFjdHVhbCBtZWFzdXJlZCBjYXAgaGVpZ2h0IHZhbHVlcyBp
biBvcmRlciB0byBrbm93IHdoZW4gd2UgaGF2ZSBhIGdvb2QgZml0LgotICAgICAgICBhdXRvIG5l
d0ZvbnREZXNjcmlwdGlvbiA9IGZpcnN0TGV0dGVyU3R5bGUuZm9udERlc2NyaXB0aW9uKCk7Ci0g
ICAgICAgIGZsb2F0IGNhcFJhdGlvID0gZmlyc3RMZXR0ZXJTdHlsZS5mb250TWV0cmljcygpLmZs
b2F0Q2FwSGVpZ2h0KCkgLyBmaXJzdExldHRlclN0eWxlLmNvbXB1dGVkRm9udFBpeGVsU2l6ZSgp
OwotICAgICAgICBmbG9hdCBzdGFydGluZ0ZvbnRTaXplID0gKChmaXJzdExldHRlclN0eWxlLmlu
aXRpYWxMZXR0ZXJIZWlnaHQoKSAtIDEpICogbGluZUhlaWdodCArIHBhcmFncmFwaC0+c3R5bGUo
KS5mb250TWV0cmljcygpLmNhcEhlaWdodCgpKSAvIGNhcFJhdGlvOwotICAgICAgICBuZXdGb250
RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzdGFydGluZ0ZvbnRTaXplKTsKLSAgICAgICAg
bmV3Rm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShzdGFydGluZ0ZvbnRTaXplKTsKLSAg
ICAgICAgZmlyc3RMZXR0ZXJTdHlsZS5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0
aW9uKTsKLSAgICAgICAgZmlyc3RMZXR0ZXJTdHlsZS5mb250Q2FzY2FkZSgpLnVwZGF0ZShmaXJz
dExldHRlclN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCkpOwotICAgICAgICAKLSAg
ICAgICAgaW50IGRlc2lyZWRDYXBIZWlnaHQgPSAoZmlyc3RMZXR0ZXJTdHlsZS5pbml0aWFsTGV0
dGVySGVpZ2h0KCkgLSAxKSAqIGxpbmVIZWlnaHQgKyBwYXJhZ3JhcGgtPnN0eWxlKCkuZm9udE1l
dHJpY3MoKS5jYXBIZWlnaHQoKTsKLSAgICAgICAgaW50IGFjdHVhbENhcEhlaWdodCA9IGZpcnN0
TGV0dGVyU3R5bGUuZm9udE1ldHJpY3MoKS5jYXBIZWlnaHQoKTsKLSAgICAgICAgd2hpbGUgKGFj
dHVhbENhcEhlaWdodCA+IGRlc2lyZWRDYXBIZWlnaHQpIHsKLSAgICAgICAgICAgIGF1dG8gbmV3
Rm9udERlc2NyaXB0aW9uID0gZmlyc3RMZXR0ZXJTdHlsZS5mb250RGVzY3JpcHRpb24oKTsKLSAg
ICAgICAgICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKG5ld0ZvbnREZXNj
cmlwdGlvbi5zcGVjaWZpZWRTaXplKCkgLSAxKTsKLSAgICAgICAgICAgIG5ld0ZvbnREZXNjcmlw
dGlvbi5zZXRDb21wdXRlZFNpemUobmV3Rm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpIC0x
KTsKLSAgICAgICAgICAgIGZpcnN0TGV0dGVyU3R5bGUuc2V0Rm9udERlc2NyaXB0aW9uKG5ld0Zv
bnREZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICBmaXJzdExldHRlclN0eWxlLmZvbnRDYXNjYWRl
KCkudXBkYXRlKGZpcnN0TGV0dGVyU3R5bGUuZm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKSk7
Ci0gICAgICAgICAgICBhY3R1YWxDYXBIZWlnaHQgPSBmaXJzdExldHRlclN0eWxlLmZvbnRNZXRy
aWNzKCkuY2FwSGVpZ2h0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gRm9yY2Ug
aW5saW5lIGRpc3BsYXkgKGV4Y2VwdCBmb3IgZmxvYXRpbmcgZmlyc3QtbGV0dGVycykuCi0gICAg
Zmlyc3RMZXR0ZXJTdHlsZS5zZXREaXNwbGF5KGZpcnN0TGV0dGVyU3R5bGUuaXNGbG9hdGluZygp
ID8gQkxPQ0sgOiBJTkxJTkUpOwotICAgIC8vIENTUzIgc2F5cyBmaXJzdC1sZXR0ZXIgY2FuJ3Qg
YmUgcG9zaXRpb25lZC4KLSAgICBmaXJzdExldHRlclN0eWxlLnNldFBvc2l0aW9uKFN0YXRpY1Bv
c2l0aW9uKTsKLSAgICByZXR1cm4gZmlyc3RMZXR0ZXJTdHlsZTsKLX0KLQotLy8gQ1NTIDIuMSBo
dHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zZWxlY3Rvci5odG1sI2ZpcnN0LWxldHRlcgotLy8g
IlB1bmN0dWF0aW9uIChpLmUsIGNoYXJhY3RlcnMgZGVmaW5lZCBpbiBVbmljb2RlIFtVTklDT0RF
XSBpbiB0aGUgIm9wZW4iIChQcyksICJjbG9zZSIgKFBlKSwKLS8vICJpbml0aWFsIiAoUGkpLiAi
ZmluYWwiIChQZikgYW5kICJvdGhlciIgKFBvKSBwdW5jdHVhdGlvbiBjbGFzc2VzKSwgdGhhdCBw
cmVjZWRlcyBvciBmb2xsb3dzIHRoZSBmaXJzdCBsZXR0ZXIgc2hvdWxkIGJlIGluY2x1ZGVkIgot
c3RhdGljIGlubGluZSBib29sIGlzUHVuY3R1YXRpb25Gb3JGaXJzdExldHRlcihVQ2hhciBjKQot
ewotICAgIHJldHVybiBVX0dFVF9HQ19NQVNLKGMpICYgKFVfR0NfUFNfTUFTSyB8IFVfR0NfUEVf
TUFTSyB8IFVfR0NfUElfTUFTSyB8IFVfR0NfUEZfTUFTSyB8IFVfR0NfUE9fTUFTSyk7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRTa2lwRm9yRmlyc3RMZXR0ZXIoVUNoYXIgYykKLXsK
LSAgICByZXR1cm4gaXNTcGFjZU9yTmV3bGluZShjKSB8fCBjID09IG5vQnJlYWtTcGFjZSB8fCBp
c1B1bmN0dWF0aW9uRm9yRmlyc3RMZXR0ZXIoYyk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgUmVuZGVy
QmxvY2sqIGZpbmRGaXJzdExldHRlckJsb2NrKFJlbmRlckJsb2NrKiBzdGFydCkKIHsKICAgICBS
ZW5kZXJCbG9jayogZmlyc3RMZXR0ZXJCbG9jayA9IHN0YXJ0OwpAQCAtMzE2OSwxMTcgKzMxMDUs
NiBAQCBzdGF0aWMgaW5saW5lIFJlbmRlckJsb2NrKiBmaW5kRmlyc3RMZXR0CiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZUZpcnN0TGV0dGVyU3R5bGUo
UmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXJCbG9jaywgUmVuZGVyT2JqZWN0KiBjdXJyZW50Q2hp
bGQpCi17Ci0gICAgUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXIgPSBjdXJyZW50Q2hpbGQtPnBh
cmVudCgpOwotICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyQ29udGFpbmVyID0gZmlyc3RM
ZXR0ZXItPnBhcmVudCgpOwotICAgIGF1dG8gcHNldWRvU3R5bGUgPSBzdHlsZUZvckZpcnN0TGV0
dGVyKCpmaXJzdExldHRlckJsb2NrLCAqZmlyc3RMZXR0ZXJDb250YWluZXIpOwotICAgIEFTU0VS
VChmaXJzdExldHRlci0+aXNGbG9hdGluZygpIHx8IGZpcnN0TGV0dGVyLT5pc0lubGluZSgpKTsK
LQotICAgIGlmIChTdHlsZTo6ZGV0ZXJtaW5lQ2hhbmdlKGZpcnN0TGV0dGVyLT5zdHlsZSgpLCBw
c2V1ZG9TdHlsZSkgPT0gU3R5bGU6OkRldGFjaCkgewotICAgICAgICAvLyBUaGUgZmlyc3QtbGV0
dGVyIHJlbmRlcmVyIG5lZWRzIHRvIGJlIHJlcGxhY2VkLiBDcmVhdGUgYSBuZXcgcmVuZGVyZXIg
b2YgdGhlIHJpZ2h0IHR5cGUuCi0gICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBuZXdGaXJz
dExldHRlcjsKLSAgICAgICAgaWYgKHBzZXVkb1N0eWxlLmRpc3BsYXkoKSA9PSBJTkxJTkUpCi0g
ICAgICAgICAgICBuZXdGaXJzdExldHRlciA9IG5ldyBSZW5kZXJJbmxpbmUoZG9jdW1lbnQoKSwg
V1RGTW92ZShwc2V1ZG9TdHlsZSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBuZXdGaXJz
dExldHRlciA9IG5ldyBSZW5kZXJCbG9ja0Zsb3coZG9jdW1lbnQoKSwgV1RGTW92ZShwc2V1ZG9T
dHlsZSkpOwotICAgICAgICBuZXdGaXJzdExldHRlci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0KLSAg
ICAgICAgLy8gTW92ZSB0aGUgZmlyc3QgbGV0dGVyIGludG8gdGhlIG5ldyByZW5kZXJlci4KLSAg
ICAgICAgTGF5b3V0U3RhdGVEaXNhYmxlciBsYXlvdXRTdGF0ZURpc2FibGVyKHZpZXcoKSk7Ci0g
ICAgICAgIHdoaWxlIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RMZXR0ZXItPmZpcnN0Q2hp
bGQoKSkgewotICAgICAgICAgICAgaWYgKGlzPFJlbmRlclRleHQ+KCpjaGlsZCkpCi0gICAgICAg
ICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmNoaWxkKS5yZW1vdmVBbmREZXN0cm95VGV4
dEJveGVzKCk7Ci0gICAgICAgICAgICBmaXJzdExldHRlci0+cmVtb3ZlQ2hpbGQoKmNoaWxkKTsK
LSAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyLT5hZGRDaGlsZChjaGlsZCwgbnVsbHB0cik7Ci0g
ICAgICAgIH0KLQotICAgICAgICBSZW5kZXJPYmplY3QqIG5leHRTaWJsaW5nID0gZmlyc3RMZXR0
ZXItPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIGlmIChSZW5kZXJUZXh0RnJhZ21lbnQqIHJlbWFp
bmluZ1RleHQgPSBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKmZpcnN0TGV0dGVyKS5m
aXJzdExldHRlclJlbWFpbmluZ1RleHQoKSkgewotICAgICAgICAgICAgQVNTRVJUKHJlbWFpbmlu
Z1RleHQtPmlzQW5vbnltb3VzKCkgfHwgcmVtYWluaW5nVGV4dC0+dGV4dE5vZGUoKS0+cmVuZGVy
ZXIoKSA9PSByZW1haW5pbmdUZXh0KTsKLSAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIG9sZCBy
ZW5kZXJlciB3aXRoIHRoZSBuZXcgb25lLgotICAgICAgICAgICAgcmVtYWluaW5nVGV4dC0+c2V0
Rmlyc3RMZXR0ZXIoKm5ld0ZpcnN0TGV0dGVyKTsKLSAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVy
LT5zZXRGaXJzdExldHRlclJlbWFpbmluZ1RleHQocmVtYWluaW5nVGV4dCk7Ci0gICAgICAgIH0K
LSAgICAgICAgLy8gVG8gcHJldmVudCByZW1vdmFsIG9mIHNpbmdsZSBhbm9ueW1vdXMgYmxvY2sg
aW4gUmVuZGVyQmxvY2s6OnJlbW92ZUNoaWxkIGFuZCBjYXVzaW5nCi0gICAgICAgIC8vIHxuZXh0
U2libGluZ3wgdG8gZ28gc3RhbGUsIHdlIHJlbW92ZSB0aGUgb2xkIGZpcnN0IGxldHRlciB1c2lu
ZyByZW1vdmVDaGlsZE5vZGUgZmlyc3QuCi0gICAgICAgIGZpcnN0TGV0dGVyQ29udGFpbmVyLT5y
ZW1vdmVDaGlsZEludGVybmFsKCpmaXJzdExldHRlciwgTm90aWZ5Q2hpbGRyZW4pOwotICAgICAg
ICBmaXJzdExldHRlci0+ZGVzdHJveSgpOwotICAgICAgICBmaXJzdExldHRlciA9IG5ld0ZpcnN0
TGV0dGVyOwotICAgICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+YWRkQ2hpbGQoZmlyc3RMZXR0
ZXIsIG5leHRTaWJsaW5nKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmlyc3RMZXR0ZXItPnNldFN0
eWxlKFdURk1vdmUocHNldWRvU3R5bGUpKTsKLX0KLQotdm9pZCBSZW5kZXJCbG9jazo6Y3JlYXRl
Rmlyc3RMZXR0ZXJSZW5kZXJlcihSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckJsb2NrLCBSZW5k
ZXJUZXh0KiBjdXJyZW50VGV4dENoaWxkKQotewotICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0
dGVyQ29udGFpbmVyID0gY3VycmVudFRleHRDaGlsZC0+cGFyZW50KCk7Ci0gICAgYXV0byBwc2V1
ZG9TdHlsZSA9IHN0eWxlRm9yRmlyc3RMZXR0ZXIoKmZpcnN0TGV0dGVyQmxvY2ssICpmaXJzdExl
dHRlckNvbnRhaW5lcik7Ci0gICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGZpcnN0TGV0dGVyID0g
bnVsbHB0cjsKLSAgICBpZiAocHNldWRvU3R5bGUuZGlzcGxheSgpID09IElOTElORSkKLSAgICAg
ICAgZmlyc3RMZXR0ZXIgPSBuZXcgUmVuZGVySW5saW5lKGRvY3VtZW50KCksIFdURk1vdmUocHNl
dWRvU3R5bGUpKTsKLSAgICBlbHNlCi0gICAgICAgIGZpcnN0TGV0dGVyID0gbmV3IFJlbmRlckJs
b2NrRmxvdyhkb2N1bWVudCgpLCBXVEZNb3ZlKHBzZXVkb1N0eWxlKSk7Ci0gICAgZmlyc3RMZXR0
ZXItPmluaXRpYWxpemVTdHlsZSgpOwotICAgIGZpcnN0TGV0dGVyQ29udGFpbmVyLT5hZGRDaGls
ZChmaXJzdExldHRlciwgY3VycmVudFRleHRDaGlsZCk7Ci0KLSAgICAvLyBUaGUgb3JpZ2luYWwg
c3RyaW5nIGlzIGdvaW5nIHRvIGJlIGVpdGhlciBhIGdlbmVyYXRlZCBjb250ZW50IHN0cmluZyBv
ciBhIERPTSBub2RlJ3MKLSAgICAvLyBzdHJpbmcuICBXZSB3YW50IHRoZSBvcmlnaW5hbCBzdHJp
bmcgYmVmb3JlIGl0IGdvdCB0cmFuc2Zvcm1lZCBpbiBjYXNlIGZpcnN0LWxldHRlciBoYXMKLSAg
ICAvLyBubyB0ZXh0LXRyYW5zZm9ybSBvciBhIGRpZmZlcmVudCB0ZXh0LXRyYW5zZm9ybSBhcHBs
aWVkIHRvIGl0LgotICAgIFN0cmluZyBvbGRUZXh0ID0gY3VycmVudFRleHRDaGlsZC0+b3JpZ2lu
YWxUZXh0KCk7Ci0gICAgQVNTRVJUKCFvbGRUZXh0LmlzTnVsbCgpKTsKLQotICAgIGlmICghb2xk
VGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKLQotICAgICAg
ICAvLyBBY2NvdW50IGZvciBsZWFkaW5nIHNwYWNlcyBhbmQgcHVuY3R1YXRpb24uCi0gICAgICAg
IHdoaWxlIChsZW5ndGggPCBvbGRUZXh0Lmxlbmd0aCgpICYmIHNob3VsZFNraXBGb3JGaXJzdExl
dHRlcihvbGRUZXh0W2xlbmd0aF0pKQotICAgICAgICAgICAgbGVuZ3RoKys7Ci0KLSAgICAgICAg
Ly8gQWNjb3VudCBmb3IgZmlyc3QgZ3JhcGhlbWUgY2x1c3Rlci4KLSAgICAgICAgbGVuZ3RoICs9
IG51bUNoYXJhY3RlcnNJbkdyYXBoZW1lQ2x1c3RlcnMoU3RyaW5nVmlldyhvbGRUZXh0KS5zdWJz
dHJpbmcobGVuZ3RoKSwgMSk7Ci0gICAgICAgIAotICAgICAgICAvLyBLZWVwIGxvb2tpbmcgZm9y
IHdoaXRlc3BhY2UgYW5kIGFsbG93ZWQgcHVuY3R1YXRpb24sIGJ1dCBhdm9pZAotICAgICAgICAv
LyBhY2N1bXVsYXRpbmcganVzdCB3aGl0ZXNwYWNlIGludG8gdGhlIDpmaXJzdC1sZXR0ZXIuCi0g
ICAgICAgIGZvciAodW5zaWduZWQgc2Nhbkxlbmd0aCA9IGxlbmd0aDsgc2Nhbkxlbmd0aCA8IG9s
ZFRleHQubGVuZ3RoKCk7ICsrc2Nhbkxlbmd0aCkgewotICAgICAgICAgICAgVUNoYXIgYyA9IG9s
ZFRleHRbc2Nhbkxlbmd0aF07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghc2hvdWxk
U2tpcEZvckZpcnN0TGV0dGVyKGMpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgICBpZiAoaXNQdW5jdHVhdGlvbkZvckZpcnN0TGV0dGVyKGMpKQotICAgICAgICAgICAgICAg
IGxlbmd0aCA9IHNjYW5MZW5ndGggKyAxOwotICAgICAgICAgfQotICAgICAgICAgCi0gICAgICAg
IC8vIENvbnN0cnVjdCBhIHRleHQgZnJhZ21lbnQgZm9yIHRoZSB0ZXh0IGFmdGVyIHRoZSBmaXJz
dCBsZXR0ZXIuCi0gICAgICAgIC8vIFRoaXMgdGV4dCBmcmFnbWVudCBtaWdodCBiZSBlbXB0eS4K
LSAgICAgICAgUmVuZGVyVGV4dEZyYWdtZW50KiByZW1haW5pbmdUZXh0OwotICAgICAgICBpZiAo
Y3VycmVudFRleHRDaGlsZC0+dGV4dE5vZGUoKSkKLSAgICAgICAgICAgIHJlbWFpbmluZ1RleHQg
PSBuZXcgUmVuZGVyVGV4dEZyYWdtZW50KCpjdXJyZW50VGV4dENoaWxkLT50ZXh0Tm9kZSgpLCBv
bGRUZXh0LCBsZW5ndGgsIG9sZFRleHQubGVuZ3RoKCkgLSBsZW5ndGgpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICByZW1haW5pbmdUZXh0ID0gbmV3IFJlbmRlclRleHRGcmFnbWVudChkb2N1
bWVudCgpLCBvbGRUZXh0LCBsZW5ndGgsIG9sZFRleHQubGVuZ3RoKCkgLSBsZW5ndGgpOwotCi0g
ICAgICAgIGlmIChyZW1haW5pbmdUZXh0LT50ZXh0Tm9kZSgpKQotICAgICAgICAgICAgcmVtYWlu
aW5nVGV4dC0+dGV4dE5vZGUoKS0+c2V0UmVuZGVyZXIocmVtYWluaW5nVGV4dCk7Ci0KLSAgICAg
ICAgZmlyc3RMZXR0ZXJDb250YWluZXItPmFkZENoaWxkKHJlbWFpbmluZ1RleHQsIGN1cnJlbnRU
ZXh0Q2hpbGQpOwotICAgICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+cmVtb3ZlQ2hpbGQoKmN1
cnJlbnRUZXh0Q2hpbGQpOwotICAgICAgICByZW1haW5pbmdUZXh0LT5zZXRGaXJzdExldHRlcigq
Zmlyc3RMZXR0ZXIpOwotICAgICAgICBmaXJzdExldHRlci0+c2V0Rmlyc3RMZXR0ZXJSZW1haW5p
bmdUZXh0KHJlbWFpbmluZ1RleHQpOwotICAgICAgICAKLSAgICAgICAgLy8gY29uc3RydWN0IHRl
eHQgZnJhZ21lbnQgZm9yIHRoZSBmaXJzdCBsZXR0ZXIKLSAgICAgICAgUmVuZGVyVGV4dEZyYWdt
ZW50KiBsZXR0ZXI7Ci0gICAgICAgIGlmIChyZW1haW5pbmdUZXh0LT50ZXh0Tm9kZSgpKQotICAg
ICAgICAgICAgbGV0dGVyID0gbmV3IFJlbmRlclRleHRGcmFnbWVudCgqcmVtYWluaW5nVGV4dC0+
dGV4dE5vZGUoKSwgb2xkVGV4dCwgMCwgbGVuZ3RoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbGV0dGVyID0gbmV3IFJlbmRlclRleHRGcmFnbWVudChkb2N1bWVudCgpLCBvbGRUZXh0LCAw
LCBsZW5ndGgpOwotCi0gICAgICAgIGZpcnN0TGV0dGVyLT5hZGRDaGlsZChsZXR0ZXIpOwotCi0g
ICAgICAgIGN1cnJlbnRUZXh0Q2hpbGQtPmRlc3Ryb3koKTsKLSAgICB9Ci19Ci0gICAgCiB2b2lk
IFJlbmRlckJsb2NrOjpnZXRGaXJzdExldHRlcihSZW5kZXJPYmplY3QqJiBmaXJzdExldHRlciwg
UmVuZGVyRWxlbWVudComIGZpcnN0TGV0dGVyQ29udGFpbmVyLCBSZW5kZXJPYmplY3QqIHNraXBP
YmplY3QpCiB7CiAgICAgZmlyc3RMZXR0ZXIgPSBudWxscHRyOwpAQCAtMzMzNSwzMiArMzE2MCw2
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmdldEZpcnN0TGV0dGVyKFJlbmRlck8KICAgICAgICAgZmly
c3RMZXR0ZXJDb250YWluZXIgPSBudWxscHRyOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjp1cGRh
dGVGaXJzdExldHRlcigpCi17Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
IXZpZXcoKS5sYXlvdXRTdGF0ZSgpKTsKLQotICAgIFJlbmRlck9iamVjdCogZmlyc3RMZXR0ZXJP
Ymo7Ci0gICAgUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXJDb250YWluZXI7Ci0gICAgLy8gRklY
TUU6IFRoZSBmaXJzdCBsZXR0ZXIgbWlnaHQgYmUgY29tcG9zZWQgb2YgYSB2YXJpZXR5IG9mIGNv
ZGUgdW5pdHMsIGFuZCB0aGVyZWZvcmUgbWlnaHQKLSAgICAvLyBiZSBjb250YWluZWQgd2l0aGlu
IG11bHRpcGxlIFJlbmRlckVsZW1lbnRzLgotICAgIGdldEZpcnN0TGV0dGVyKGZpcnN0TGV0dGVy
T2JqLCBmaXJzdExldHRlckNvbnRhaW5lcik7Ci0KLSAgICBpZiAoIWZpcnN0TGV0dGVyT2JqIHx8
ICFmaXJzdExldHRlckNvbnRhaW5lcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgdGhl
IGNoaWxkIGFscmVhZHkgaGFzIHN0eWxlLCB0aGVuIGl0IGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRl
ZCwgc28gd2UganVzdCB3YW50Ci0gICAgLy8gdG8gdXBkYXRlIGl0LgotICAgIGlmIChmaXJzdExl
dHRlck9iai0+cGFyZW50KCktPnN0eWxlKCkuc3R5bGVUeXBlKCkgPT0gRklSU1RfTEVUVEVSKSB7
Ci0gICAgICAgIHVwZGF0ZUZpcnN0TGV0dGVyU3R5bGUoZmlyc3RMZXR0ZXJDb250YWluZXIsIGZp
cnN0TGV0dGVyT2JqKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghaXM8UmVu
ZGVyVGV4dD4oKmZpcnN0TGV0dGVyT2JqKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY3JlYXRl
Rmlyc3RMZXR0ZXJSZW5kZXJlcihmaXJzdExldHRlckNvbnRhaW5lciwgZG93bmNhc3Q8UmVuZGVy
VGV4dD4oZmlyc3RMZXR0ZXJPYmopKTsKLX0KLQogUmVuZGVyRmxvd1RocmVhZCogUmVuZGVyQmxv
Y2s6OmNhY2hlZEZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSBjb25zdAogewogICAgIFJlbmRl
ckJsb2NrUmFyZURhdGEqIHJhcmVEYXRhID0gZ2V0QmxvY2tSYXJlRGF0YSgqdGhpcyk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gMjIwNzQxKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2Myw3ICsyNjMsNiBAQCBwdWJsaWM6CiAgICAgTGF5b3V0VW5pdCBjb2xsYXBzZWRNYXJn
aW5CZWZvcmVGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdDsKICAgICBMYXlv
dXRVbml0IGNvbGxhcHNlZE1hcmdpbkFmdGVyRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGls
ZCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRmlyc3RMZXR0ZXIoKTsKICAgICB2
b2lkIGdldEZpcnN0TGV0dGVyKFJlbmRlck9iamVjdComIGZpcnN0TGV0dGVyLCBSZW5kZXJFbGVt
ZW50KiYgZmlyc3RMZXR0ZXJDb250YWluZXIsIFJlbmRlck9iamVjdCogc2tpcE9iamVjdCA9IG51
bGxwdHIpOwogCiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbGJhcnNDaGFuZ2VkKGJvb2wgLypob3Jp
em9udGFsU2Nyb2xsYmFyQ2hhbmdlZCovLCBib29sIC8qdmVydGljYWxTY3JvbGxiYXJDaGFuZ2Vk
Ki8pIHsgfQpAQCAtNDU0LDkgKzQ1Myw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc1NlbGZDb2xs
YXBzaW5nQmxvY2soKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRyZW5Q
cmV2ZW50U2VsZkNvbGxhcHNpbmcoKSBjb25zdDsKICAgICAKLSAgICB2b2lkIGNyZWF0ZUZpcnN0
TGV0dGVyUmVuZGVyZXIoUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXJCbG9jaywgUmVuZGVyVGV4
dCogY3VycmVudFRleHRDaGlsZCk7Ci0gICAgdm9pZCB1cGRhdGVGaXJzdExldHRlclN0eWxlKFJl
bmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyQmxvY2ssIFJlbmRlck9iamVjdCogZmlyc3RMZXR0ZXJD
b250YWluZXIpOwotCiAgICAgTm9kZSogbm9kZUZvckhpdFRlc3QoKSBjb25zdDsKIAogICAgIC8v
IEZJWE1FLUJMT0NLRkxPVzogUmVtb3ZlIHZpcnR1YWxpemFpb24gd2hlbiBhbGwgY2FsbGVycyBo
YXZlIG1vdmVkIHRvIFJlbmRlckJsb2NrRmxvdwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJ1YnlSdW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJSdWJ5UnVuLmNwcAkocmV2aXNpb24gMjIwNzQxKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMTAg
KzEwMSw2IEBAIFJlbmRlckJsb2NrKiBSZW5kZXJSdWJ5UnVuOjpmaXJzdExpbmVCbG8KICAgICBy
ZXR1cm4gMDsKIH0KIAotdm9pZCBSZW5kZXJSdWJ5UnVuOjp1cGRhdGVGaXJzdExldHRlcigpCi17
Ci19Ci0KIGJvb2wgUmVuZGVyUnVieVJ1bjo6aXNDaGlsZEFsbG93ZWQoY29uc3QgUmVuZGVyT2Jq
ZWN0JiBjaGlsZCwgY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdAogewogICAgIHJldHVybiBjaGls
ZC5pc0lubGluZSgpIHx8IGNoaWxkLmlzUnVieVRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uaAkocmV2aXNpb24gMjIwNzQxKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyAr
NjAsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmKSBvdmVy
cmlkZTsKIAogICAgIFJlbmRlckJsb2NrKiBmaXJzdExpbmVCbG9jaygpIGNvbnN0IG92ZXJyaWRl
OwotICAgIHZvaWQgdXBkYXRlRmlyc3RMZXR0ZXIoKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZ2V0
T3ZlcmhhbmcoYm9vbCBmaXJzdExpbmUsIFJlbmRlck9iamVjdCogc3RhcnRSZW5kZXJlciwgUmVu
ZGVyT2JqZWN0KiBlbmRSZW5kZXJlciwgZmxvYXQmIHN0YXJ0T3ZlcmhhbmcsIGZsb2F0JiBlbmRP
dmVyaGFuZykgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlLmNwcAkocmV2aXNpb24gMjIwNzQxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4NSwxMCArMTQ4NSw2IEBAIFJlbmRl
ckJsb2NrKiBSZW5kZXJUYWJsZTo6Zmlyc3RMaW5lQmxvY2sKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAotdm9pZCBSZW5kZXJUYWJsZTo6dXBkYXRlRmlyc3RMZXR0ZXIoKQotewotfQotCiBpbnQg
UmVuZGVyVGFibGU6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSwg
Ym9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwgTGluZVBvc2l0aW9u
TW9kZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdAogewogICAgIHJldHVybiB2YWx1ZU9yQ29tcHV0
ZShmaXJzdExpbmVCYXNlbGluZSgpLCBbJl0gewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlLmgJKHJldmlzaW9uIDIyMDc0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDIsNyArMzAyLDYgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGludmFsaWRhdGVDYWNoZWRDb2x1bW5PZmZzZXRzKCk7CiAKICAgICBS
ZW5kZXJCbG9jayogZmlyc3RMaW5lQmxvY2soKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIHVwZGF0
ZUZpcnN0TGV0dGVyKCkgZmluYWw7CiAgICAgCiAgICAgdm9pZCB1cGRhdGVMb2dpY2FsV2lkdGgo
KSBmaW5hbDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9TaXpp
bmcuY3BwCShyZXZpc2lvbiAyMjA3NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4
dEF1dG9TaXppbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVk
ZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRl
ICJSZW5kZXJUZXh0RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlckZpcnN0
TGV0dGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0xNTcsNyArMTU4LDYgQEAgYXV0byBUZXh0QXV0b1NpemluZ1ZhbHVlOjphZGp1c3RU
ZXh0Tm9kZQogICAgICAgICBwYXJlbnRSZW5kZXJlci0+c2V0U3R5bGUoV1RGTW92ZShuZXdQYXJl
bnRTdHlsZSkpOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBBbGwgcmVuZGVyIHRyZWUgbXV0YXRp
b25zIHNob3VsZCBiZSBkb25lIHZpYSBSZW5kZXJUcmVlVXBkYXRlci4KICAgICBmb3IgKGF1dG8m
IG5vZGUgOiBtX2F1dG9TaXplZE5vZGVzKSB7CiAgICAgICAgIGF1dG8mIHRleHRSZW5kZXJlciA9
ICpub2RlLT5yZW5kZXJlcigpOwogICAgICAgICBpZiAoIWlzPFJlbmRlclRleHRGcmFnbWVudD4o
dGV4dFJlbmRlcmVyKSkKQEAgLTE2NSw3ICsxNjUsOCBAQCBhdXRvIFRleHRBdXRvU2l6aW5nVmFs
dWU6OmFkanVzdFRleHROb2RlCiAgICAgICAgIGF1dG8qIGJsb2NrID0gZG93bmNhc3Q8UmVuZGVy
VGV4dEZyYWdtZW50Pih0ZXh0UmVuZGVyZXIpLmJsb2NrRm9yQWNjb21wYW55aW5nRmlyc3RMZXR0
ZXIoKTsKICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBibG9jay0+dXBkYXRlRmlyc3RMZXR0ZXIoKTsKKyAgICAgICAgLy8gRklYTUU6IEFsbCByZW5k
ZXIgdHJlZSBtdXRhdGlvbnMgc2hvdWxkIGJlIGRvbmUgYnkgUmVuZGVyVHJlZVVwZGF0ZXIgY29t
bWl0LgorICAgICAgICBSZW5kZXJUcmVlVXBkYXRlcjo6Rmlyc3RMZXR0ZXI6OnVwZGF0ZSgqYmxv
Y2spOwogICAgIH0KIAogICAgIHJldHVybiBzdGlsbEhhc05vZGVzOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCShyZXZpc2lvbiAyMjA3
NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NDIsMTAgKzU0Miw0IEBAIFJlbmRlckJsb2NrKiBSZW5kZXJTVkdU
ZXh0OjpmaXJzdExpbmVCbG8KICAgICByZXR1cm4gMDsKIH0KIAotLy8gRml4IGZvciA8cmRhcjov
L3Byb2JsZW0vODA0ODg3NT4uIFdlIHNob3VsZCBub3QgcmVuZGVyIDpmaXJzdC1sZXR0ZXIgQ1NT
IFN0eWxlCi0vLyBpbiBhIFNWRyB0ZXh0IGVsZW1lbnQgY29udGV4dC4KLXZvaWQgUmVuZGVyU1ZH
VGV4dDo6dXBkYXRlRmlyc3RMZXR0ZXIoKQotewotfQotCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaAkocmV2aXNpb24gMjIwNzQxKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTkxLDcgKzkxLDYgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Um9vdElu
bGluZUJveD4gY3JlYXRlUm9vdElubGluZUJveCgpIG92ZXJyaWRlOwogCiAgICAgUmVuZGVyQmxv
Y2sqIGZpcnN0TGluZUJsb2NrKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1cGRhdGVGaXJz
dExldHRlcigpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzaG91bGRIYW5kbGVTdWJ0cmVlTXV0YXRp
b25zKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRh
dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBk
YXRlci5jcHAJKHJldmlzaW9uIDIyMDc0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRl
clRyZWVVcGRhdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1
ZGUgIlJlbmRlckZ1bGxTY3JlZW4uaCIKICNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dUaHJlYWQu
aCIKICNpbmNsdWRlICJSZW5kZXJRdW90ZS5oIgorI2luY2x1ZGUgIlJlbmRlclRyZWVVcGRhdGVy
Rmlyc3RMZXR0ZXIuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5
bGVUcmVlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvU3lzdGVtVHJhY2luZy5oPgpAQCAtMjM0
LDcgKzIzNSw3IEBAIHZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OnBvcFBhcmVudCgpCiAKICAgICAg
ICAgYXV0byogcmVuZGVyZXIgPSBwYXJlbnQuZWxlbWVudC0+cmVuZGVyZXIoKTsKICAgICAgICAg
aWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcikpCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5k
ZXJCbG9jaz4oKnJlbmRlcmVyKS51cGRhdGVGaXJzdExldHRlcigpOworICAgICAgICAgICAgRmly
c3RMZXR0ZXI6OnVwZGF0ZShkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnJlbmRlcmVyKSk7CiAKICAg
ICAgICAgaWYgKHBhcmVudC5lbGVtZW50LT5oYXNDdXN0b21TdHlsZVJlc29sdmVDYWxsYmFja3Mo
KSAmJiBwYXJlbnQuc3R5bGVDaGFuZ2UgPT0gU3R5bGU6OkRldGFjaCAmJiByZW5kZXJlcikKICAg
ICAgICAgICAgIHBhcmVudC5lbGVtZW50LT5kaWRBdHRhY2hSZW5kZXJlcnMoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXIuaAkocmV2aXNpb24gMjIwNzQxKQor
KysgU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNTEsNiArNTEsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgdGVhckRvd25SZW5k
ZXJlcnMoRWxlbWVudCYsIFRlYXJkb3duVHlwZSA9IFRlYXJkb3duVHlwZTo6Tm9ybWFsKTsKICAg
ICBzdGF0aWMgdm9pZCB0ZWFyRG93blJlbmRlcmVyKFRleHQmKTsKIAorICAgIGNsYXNzIEZpcnN0
TGV0dGVyOworCiBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlUmVuZGVyVHJlZShDb250YWluZXJO
b2RlJiByb290KTsKICAgICB2b2lkIHVwZGF0ZVRleHRSZW5kZXJlcihUZXh0JiwgY29uc3QgU3R5
bGU6OlRleHRVcGRhdGUqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVV
cGRhdGVyRmlyc3RMZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxl
L1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMg
S25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlz
dG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDcgRGF2aWQgU21pdGgg
KGNhdGZpc2gubWFuQGdtYWlsLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDExLCAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuaCIKKwor
I2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKKyNpbmNs
dWRlICJSZW5kZXJJbmxpbmUuaCIKKyNpbmNsdWRlICJSZW5kZXJSdWJ5UnVuLmgiCisjaW5jbHVk
ZSAiUmVuZGVyU1ZHVGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAi
UmVuZGVyVGFibGUuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0RnJhZ21lbnQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgUmVuZGVyU3R5bGUgc3R5bGVGb3JGaXJzdExldHRlcihj
b25zdCBSZW5kZXJFbGVtZW50JiBmaXJzdExldHRlckJsb2NrLCBjb25zdCBSZW5kZXJPYmplY3Qm
IGZpcnN0TGV0dGVyQ29udGFpbmVyKQoreworICAgIGF1dG8qIGNvbnRhaW5lckZpcnN0TGV0dGVy
U3R5bGUgPSBmaXJzdExldHRlckJsb2NrLmdldENhY2hlZFBzZXVkb1N0eWxlKEZJUlNUX0xFVFRF
UiwgJmZpcnN0TGV0dGVyQ29udGFpbmVyLmZpcnN0TGluZVN0eWxlKCkpOworICAgIC8vIEZJWE1F
OiBUaGVyZSBhcHBlYXJzIHRvIGJlIHNvbWUgcGF0aCB3aGVyZSB3ZSBoYXZlIGEgZmlyc3QgbGV0
dGVyIHJlbmRlcmVyIHdpdGhvdXQgZmlyc3QgbGV0dGVyIHN0eWxlLgorICAgIEFTU0VSVChjb250
YWluZXJGaXJzdExldHRlclN0eWxlKTsKKyAgICBhdXRvIGZpcnN0TGV0dGVyU3R5bGUgPSBSZW5k
ZXJTdHlsZTo6Y2xvbmUoY29udGFpbmVyRmlyc3RMZXR0ZXJTdHlsZSA/ICpjb250YWluZXJGaXJz
dExldHRlclN0eWxlIDogZmlyc3RMZXR0ZXJDb250YWluZXIuZmlyc3RMaW5lU3R5bGUoKSk7CisK
KyAgICAvLyBJZiB3ZSBoYXZlIGFuIGluaXRpYWwgbGV0dGVyIGRyb3AgdGhhdCBpcyA+PSAxLCB0
aGVuIHdlIG5lZWQgdG8gZm9yY2UgZmxvYXRpbmcgdG8gYmUgb24uCisgICAgaWYgKGZpcnN0TGV0
dGVyU3R5bGUuaW5pdGlhbExldHRlckRyb3AoKSA+PSAxICYmICFmaXJzdExldHRlclN0eWxlLmlz
RmxvYXRpbmcoKSkKKyAgICAgICAgZmlyc3RMZXR0ZXJTdHlsZS5zZXRGbG9hdGluZyhmaXJzdExl
dHRlclN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IExlZnRGbG9hdCA6IFJpZ2h0Rmxv
YXQpOworCisgICAgLy8gV2UgaGF2ZSB0byBjb21wdXRlIHRoZSBjb3JyZWN0IGZvbnQtc2l6ZSBm
b3IgdGhlIGZpcnN0LWxldHRlciBpZiBpdCBoYXMgYW4gaW5pdGlhbCBsZXR0ZXIgaGVpZ2h0IHNl
dC4KKyAgICBhdXRvKiBwYXJhZ3JhcGggPSBmaXJzdExldHRlckNvbnRhaW5lci5pc1JlbmRlckJs
b2NrRmxvdygpID8gJmZpcnN0TGV0dGVyQ29udGFpbmVyIDogZmlyc3RMZXR0ZXJDb250YWluZXIu
Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgaWYgKGZpcnN0TGV0dGVyU3R5bGUuaW5pdGlhbExldHRl
ckhlaWdodCgpID49IDEgJiYgZmlyc3RMZXR0ZXJTdHlsZS5mb250TWV0cmljcygpLmhhc0NhcEhl
aWdodCgpICYmIHBhcmFncmFwaC0+c3R5bGUoKS5mb250TWV0cmljcygpLmhhc0NhcEhlaWdodCgp
KSB7CisgICAgICAgIC8vIEZJWE1FOiBGb3IgaWRlb2dyYXBoaWMgYmFzZWxpbmVzLCB3ZSB3YW50
IHRvIGdvIGZyb20gbGluZSBlZGdlIHRvIGxpbmUgZWRnZS4gVGhpcyBpcyBlcXVpdmFsZW50IHRv
IChOLTEpKmxpbmUtaGVpZ2h0ICsgdGhlIGZvbnQgaGVpZ2h0LgorICAgICAgICAvLyBXZSBkb24n
dCB5ZXQgc3VwcG9ydCBpZGVvZ3JhcGhpYyBiYXNlbGluZXMuCisgICAgICAgIC8vIEZvciBhbiBO
LWxpbmUgZmlyc3QtbGV0dGVyIGFuZCBmb3IgYWxwaGFiZXRpYyBiYXNlbGluZXMsIHRoZSBjYXAt
aGVpZ2h0IG9mIHRoZSBmaXJzdCBsZXR0ZXIgbmVlZHMgdG8gZXF1YWwgKE4tMSkqbGluZS1oZWln
aHQgb2YgcGFyYWdyYXBoIGxpbmVzICsgY2FwLWhlaWdodCBvZiB0aGUgcGFyYWdyYXBoCisgICAg
ICAgIC8vIE1hdGhlbWF0aWNhbGx5IHdlIGNhbid0IHJlbHkgb24gZm9udC1zaXplLCBzaW5jZSBm
b250KCkuaGVpZ2h0KCkgZG9lc24ndCBuZWNlc3NhcmlseSBtYXRjaC4gRm9yIHJlbGlhYmlsaXR5
LCB0aGUgYmVzdCBhcHByb2FjaCBpcyBzaW1wbHkgdG8KKyAgICAgICAgLy8gY29tcGFyZSB0aGUg
ZmluYWwgbWVhc3VyZWQgY2FwLWhlaWdodHMgb2YgdGhlIHR3byBmb250cyBpbiBvcmRlciB0byBn
ZXQgdG8gdGhlIGNsb3Nlc3QgcG9zc2libGUgdmFsdWUuCisgICAgICAgIGZpcnN0TGV0dGVyU3R5
bGUuc2V0TGluZUJveENvbnRhaW4oTGluZUJveENvbnRhaW5Jbml0aWFsTGV0dGVyKTsKKyAgICAg
ICAgaW50IGxpbmVIZWlnaHQgPSBwYXJhZ3JhcGgtPnN0eWxlKCkuY29tcHV0ZWRMaW5lSGVpZ2h0
KCk7CisKKyAgICAgICAgLy8gU2V0IHRoZSBmb250IHRvIGJlIG9uZSBsaW5lIHRvbyBiaWcgYW5k
IHRoZW4gcmF0Y2hldCBiYWNrIHRvIGdldCB0byBhIHByZWNpc2UgZml0LiBXZSBjYW4ndCBqdXN0
IHNldCB0aGUgZGVzaXJlZCBmb250IHNpemUgYmFzZWQgb2ZmIGZvbnQgaGVpZ2h0IG1ldHJpY3MK
KyAgICAgICAgLy8gYmVjYXVzZSBtYW55IGZvbnRzIGJha2UgYXNjZW50IGludG8gdGhlIGZvbnQg
bWV0cmljcy4gVGhlcmVmb3JlIHdlIGhhdmUgdG8gbG9vayBhdCBhY3R1YWwgbWVhc3VyZWQgY2Fw
IGhlaWdodCB2YWx1ZXMgaW4gb3JkZXIgdG8ga25vdyB3aGVuIHdlIGhhdmUgYSBnb29kIGZpdC4K
KyAgICAgICAgYXV0byBuZXdGb250RGVzY3JpcHRpb24gPSBmaXJzdExldHRlclN0eWxlLmZvbnRE
ZXNjcmlwdGlvbigpOworICAgICAgICBmbG9hdCBjYXBSYXRpbyA9IGZpcnN0TGV0dGVyU3R5bGUu
Zm9udE1ldHJpY3MoKS5mbG9hdENhcEhlaWdodCgpIC8gZmlyc3RMZXR0ZXJTdHlsZS5jb21wdXRl
ZEZvbnRQaXhlbFNpemUoKTsKKyAgICAgICAgZmxvYXQgc3RhcnRpbmdGb250U2l6ZSA9ICgoZmly
c3RMZXR0ZXJTdHlsZS5pbml0aWFsTGV0dGVySGVpZ2h0KCkgLSAxKSAqIGxpbmVIZWlnaHQgKyBw
YXJhZ3JhcGgtPnN0eWxlKCkuZm9udE1ldHJpY3MoKS5jYXBIZWlnaHQoKSkgLyBjYXBSYXRpbzsK
KyAgICAgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc3RhcnRpbmdGb250
U2l6ZSk7CisgICAgICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoc3RhcnRp
bmdGb250U2l6ZSk7CisgICAgICAgIGZpcnN0TGV0dGVyU3R5bGUuc2V0Rm9udERlc2NyaXB0aW9u
KG5ld0ZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIGZpcnN0TGV0dGVyU3R5bGUuZm9udENhc2Nh
ZGUoKS51cGRhdGUoZmlyc3RMZXR0ZXJTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRTZWxlY3Rvcigp
KTsKKworICAgICAgICBpbnQgZGVzaXJlZENhcEhlaWdodCA9IChmaXJzdExldHRlclN0eWxlLmlu
aXRpYWxMZXR0ZXJIZWlnaHQoKSAtIDEpICogbGluZUhlaWdodCArIHBhcmFncmFwaC0+c3R5bGUo
KS5mb250TWV0cmljcygpLmNhcEhlaWdodCgpOworICAgICAgICBpbnQgYWN0dWFsQ2FwSGVpZ2h0
ID0gZmlyc3RMZXR0ZXJTdHlsZS5mb250TWV0cmljcygpLmNhcEhlaWdodCgpOworICAgICAgICB3
aGlsZSAoYWN0dWFsQ2FwSGVpZ2h0ID4gZGVzaXJlZENhcEhlaWdodCkgeworICAgICAgICAgICAg
YXV0byBuZXdGb250RGVzY3JpcHRpb24gPSBmaXJzdExldHRlclN0eWxlLmZvbnREZXNjcmlwdGlv
bigpOworICAgICAgICAgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUobmV3
Rm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSAtIDEpOworICAgICAgICAgICAgbmV3Rm9u
dERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShuZXdGb250RGVzY3JpcHRpb24uY29tcHV0ZWRT
aXplKCkgLTEpOworICAgICAgICAgICAgZmlyc3RMZXR0ZXJTdHlsZS5zZXRGb250RGVzY3JpcHRp
b24obmV3Rm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIGZpcnN0TGV0dGVyU3R5bGUuZm9u
dENhc2NhZGUoKS51cGRhdGUoZmlyc3RMZXR0ZXJTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRTZWxl
Y3RvcigpKTsKKyAgICAgICAgICAgIGFjdHVhbENhcEhlaWdodCA9IGZpcnN0TGV0dGVyU3R5bGUu
Zm9udE1ldHJpY3MoKS5jYXBIZWlnaHQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZv
cmNlIGlubGluZSBkaXNwbGF5IChleGNlcHQgZm9yIGZsb2F0aW5nIGZpcnN0LWxldHRlcnMpLgor
ICAgIGZpcnN0TGV0dGVyU3R5bGUuc2V0RGlzcGxheShmaXJzdExldHRlclN0eWxlLmlzRmxvYXRp
bmcoKSA/IEJMT0NLIDogSU5MSU5FKTsKKyAgICAvLyBDU1MyIHNheXMgZmlyc3QtbGV0dGVyIGNh
bid0IGJlIHBvc2l0aW9uZWQuCisgICAgZmlyc3RMZXR0ZXJTdHlsZS5zZXRQb3NpdGlvbihTdGF0
aWNQb3NpdGlvbik7CisgICAgcmV0dXJuIGZpcnN0TGV0dGVyU3R5bGU7Cit9CisKKy8vIENTUyAy
LjEgaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc2VsZWN0b3IuaHRtbCNmaXJzdC1sZXR0ZXIK
Ky8vICJQdW5jdHVhdGlvbiAoaS5lLCBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gVW5pY29kZSBbVU5J
Q09ERV0gaW4gdGhlICJvcGVuIiAoUHMpLCAiY2xvc2UiIChQZSksCisvLyAiaW5pdGlhbCIgKFBp
KS4gImZpbmFsIiAoUGYpIGFuZCAib3RoZXIiIChQbykgcHVuY3R1YXRpb24gY2xhc3NlcyksIHRo
YXQgcHJlY2VkZXMgb3IgZm9sbG93cyB0aGUgZmlyc3QgbGV0dGVyIHNob3VsZCBiZSBpbmNsdWRl
ZCIKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1B1bmN0dWF0aW9uRm9yRmlyc3RMZXR0ZXIoVUNoYXIg
YykKK3sKKyAgICByZXR1cm4gVV9HRVRfR0NfTUFTSyhjKSAmIChVX0dDX1BTX01BU0sgfCBVX0dD
X1BFX01BU0sgfCBVX0dDX1BJX01BU0sgfCBVX0dDX1BGX01BU0sgfCBVX0dDX1BPX01BU0spOwor
fQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkU2tpcEZvckZpcnN0TGV0dGVyKFVDaGFyIGMp
Cit7CisgICAgcmV0dXJuIGlzU3BhY2VPck5ld2xpbmUoYykgfHwgYyA9PSBub0JyZWFrU3BhY2Ug
fHwgaXNQdW5jdHVhdGlvbkZvckZpcnN0TGV0dGVyKGMpOworfQorCitzdGF0aWMgdm9pZCB1cGRh
dGVGaXJzdExldHRlclN0eWxlKFJlbmRlckVsZW1lbnQmIGZpcnN0TGV0dGVyQmxvY2ssIFJlbmRl
ck9iamVjdCYgY3VycmVudENoaWxkKQoreworICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVy
ID0gY3VycmVudENoaWxkLnBhcmVudCgpOworICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVy
Q29udGFpbmVyID0gZmlyc3RMZXR0ZXItPnBhcmVudCgpOworICAgIGF1dG8gcHNldWRvU3R5bGUg
PSBzdHlsZUZvckZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyQmxvY2ssICpmaXJzdExldHRlckNvbnRh
aW5lcik7CisgICAgQVNTRVJUKGZpcnN0TGV0dGVyLT5pc0Zsb2F0aW5nKCkgfHwgZmlyc3RMZXR0
ZXItPmlzSW5saW5lKCkpOworCisgICAgaWYgKFN0eWxlOjpkZXRlcm1pbmVDaGFuZ2UoZmlyc3RM
ZXR0ZXItPnN0eWxlKCksIHBzZXVkb1N0eWxlKSA9PSBTdHlsZTo6RGV0YWNoKSB7CisgICAgICAg
IC8vIFRoZSBmaXJzdC1sZXR0ZXIgcmVuZGVyZXIgbmVlZHMgdG8gYmUgcmVwbGFjZWQuIENyZWF0
ZSBhIG5ldyByZW5kZXJlciBvZiB0aGUgcmlnaHQgdHlwZS4KKyAgICAgICAgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIG5ld0ZpcnN0TGV0dGVyOworICAgICAgICBpZiAocHNldWRvU3R5bGUuZGlzcGxh
eSgpID09IElOTElORSkKKyAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyID0gbmV3IFJlbmRlcklu
bGluZShmaXJzdExldHRlckJsb2NrLmRvY3VtZW50KCksIFdURk1vdmUocHNldWRvU3R5bGUpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV3Rmlyc3RMZXR0ZXIgPSBuZXcgUmVuZGVyQmxv
Y2tGbG93KGZpcnN0TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwgV1RGTW92ZShwc2V1ZG9TdHlsZSkp
OworICAgICAgICBuZXdGaXJzdExldHRlci0+aW5pdGlhbGl6ZVN0eWxlKCk7CisKKyAgICAgICAg
Ly8gTW92ZSB0aGUgZmlyc3QgbGV0dGVyIGludG8gdGhlIG5ldyByZW5kZXJlci4KKyAgICAgICAg
TGF5b3V0U3RhdGVEaXNhYmxlciBsYXlvdXRTdGF0ZURpc2FibGVyKGZpcnN0TGV0dGVyQmxvY2su
dmlldygpKTsKKyAgICAgICAgd2hpbGUgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdExldHRl
ci0+Zmlyc3RDaGlsZCgpKSB7CisgICAgICAgICAgICBpZiAoaXM8UmVuZGVyVGV4dD4oKmNoaWxk
KSkKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJUZXh0PigqY2hpbGQpLnJlbW92ZUFu
ZERlc3Ryb3lUZXh0Qm94ZXMoKTsKKyAgICAgICAgICAgIGZpcnN0TGV0dGVyLT5yZW1vdmVDaGls
ZCgqY2hpbGQpOworICAgICAgICAgICAgbmV3Rmlyc3RMZXR0ZXItPmFkZENoaWxkKGNoaWxkLCBu
dWxscHRyKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlbmRlck9iamVjdCogbmV4dFNpYmxpbmcg
PSBmaXJzdExldHRlci0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgaWYgKFJlbmRlclRleHRGcmFn
bWVudCogcmVtYWluaW5nVGV4dCA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PigqZmly
c3RMZXR0ZXIpLmZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dCgpKSB7CisgICAgICAgICAgICBBU1NF
UlQocmVtYWluaW5nVGV4dC0+aXNBbm9ueW1vdXMoKSB8fCByZW1haW5pbmdUZXh0LT50ZXh0Tm9k
ZSgpLT5yZW5kZXJlcigpID09IHJlbWFpbmluZ1RleHQpOworICAgICAgICAgICAgLy8gUmVwbGFj
ZSB0aGUgb2xkIHJlbmRlcmVyIHdpdGggdGhlIG5ldyBvbmUuCisgICAgICAgICAgICByZW1haW5p
bmdUZXh0LT5zZXRGaXJzdExldHRlcigqbmV3Rmlyc3RMZXR0ZXIpOworICAgICAgICAgICAgbmV3
Rmlyc3RMZXR0ZXItPnNldEZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dChyZW1haW5pbmdUZXh0KTsK
KyAgICAgICAgfQorICAgICAgICAvLyBUbyBwcmV2ZW50IHJlbW92YWwgb2Ygc2luZ2xlIGFub255
bW91cyBibG9jayBpbiBSZW5kZXJCbG9jazo6cmVtb3ZlQ2hpbGQgYW5kIGNhdXNpbmcKKyAgICAg
ICAgLy8gfG5leHRTaWJsaW5nfCB0byBnbyBzdGFsZSwgd2UgcmVtb3ZlIHRoZSBvbGQgZmlyc3Qg
bGV0dGVyIHVzaW5nIHJlbW92ZUNoaWxkTm9kZSBmaXJzdC4KKyAgICAgICAgZmlyc3RMZXR0ZXJD
b250YWluZXItPnJlbW92ZUNoaWxkSW50ZXJuYWwoKmZpcnN0TGV0dGVyLCBSZW5kZXJFbGVtZW50
OjpOb3RpZnlDaGlsZHJlbik7CisgICAgICAgIGZpcnN0TGV0dGVyLT5kZXN0cm95KCk7CisgICAg
ICAgIGZpcnN0TGV0dGVyID0gbmV3Rmlyc3RMZXR0ZXI7CisgICAgICAgIGZpcnN0TGV0dGVyQ29u
dGFpbmVyLT5hZGRDaGlsZChmaXJzdExldHRlciwgbmV4dFNpYmxpbmcpOworICAgIH0gZWxzZQor
ICAgICAgICBmaXJzdExldHRlci0+c2V0U3R5bGUoV1RGTW92ZShwc2V1ZG9TdHlsZSkpOworfQor
CitzdGF0aWMgdm9pZCBjcmVhdGVGaXJzdExldHRlclJlbmRlcmVyKFJlbmRlckVsZW1lbnQmIGZp
cnN0TGV0dGVyQmxvY2ssIFJlbmRlclRleHQmIGN1cnJlbnRUZXh0Q2hpbGQpCit7CisgICAgUmVu
ZGVyRWxlbWVudCogZmlyc3RMZXR0ZXJDb250YWluZXIgPSBjdXJyZW50VGV4dENoaWxkLnBhcmVu
dCgpOworICAgIGF1dG8gcHNldWRvU3R5bGUgPSBzdHlsZUZvckZpcnN0TGV0dGVyKGZpcnN0TGV0
dGVyQmxvY2ssICpmaXJzdExldHRlckNvbnRhaW5lcik7CisgICAgUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIGZpcnN0TGV0dGVyID0gbnVsbHB0cjsKKyAgICBpZiAocHNldWRvU3R5bGUuZGlzcGxheSgp
ID09IElOTElORSkKKyAgICAgICAgZmlyc3RMZXR0ZXIgPSBuZXcgUmVuZGVySW5saW5lKGZpcnN0
TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwgV1RGTW92ZShwc2V1ZG9TdHlsZSkpOworICAgIGVsc2UK
KyAgICAgICAgZmlyc3RMZXR0ZXIgPSBuZXcgUmVuZGVyQmxvY2tGbG93KGZpcnN0TGV0dGVyQmxv
Y2suZG9jdW1lbnQoKSwgV1RGTW92ZShwc2V1ZG9TdHlsZSkpOworICAgIGZpcnN0TGV0dGVyLT5p
bml0aWFsaXplU3R5bGUoKTsKKyAgICBmaXJzdExldHRlckNvbnRhaW5lci0+YWRkQ2hpbGQoZmly
c3RMZXR0ZXIsICZjdXJyZW50VGV4dENoaWxkKTsKKworICAgIC8vIFRoZSBvcmlnaW5hbCBzdHJp
bmcgaXMgZ29pbmcgdG8gYmUgZWl0aGVyIGEgZ2VuZXJhdGVkIGNvbnRlbnQgc3RyaW5nIG9yIGEg
RE9NIG5vZGUncworICAgIC8vIHN0cmluZy4gV2Ugd2FudCB0aGUgb3JpZ2luYWwgc3RyaW5nIGJl
Zm9yZSBpdCBnb3QgdHJhbnNmb3JtZWQgaW4gY2FzZSBmaXJzdC1sZXR0ZXIgaGFzCisgICAgLy8g
bm8gdGV4dC10cmFuc2Zvcm0gb3IgYSBkaWZmZXJlbnQgdGV4dC10cmFuc2Zvcm0gYXBwbGllZCB0
byBpdC4KKyAgICBTdHJpbmcgb2xkVGV4dCA9IGN1cnJlbnRUZXh0Q2hpbGQub3JpZ2luYWxUZXh0
KCk7CisgICAgQVNTRVJUKCFvbGRUZXh0LmlzTnVsbCgpKTsKKworICAgIGlmICghb2xkVGV4dC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKKworICAgICAgICAvLyBB
Y2NvdW50IGZvciBsZWFkaW5nIHNwYWNlcyBhbmQgcHVuY3R1YXRpb24uCisgICAgICAgIHdoaWxl
IChsZW5ndGggPCBvbGRUZXh0Lmxlbmd0aCgpICYmIHNob3VsZFNraXBGb3JGaXJzdExldHRlcihv
bGRUZXh0W2xlbmd0aF0pKQorICAgICAgICAgICAgbGVuZ3RoKys7CisKKyAgICAgICAgLy8gQWNj
b3VudCBmb3IgZmlyc3QgZ3JhcGhlbWUgY2x1c3Rlci4KKyAgICAgICAgbGVuZ3RoICs9IG51bUNo
YXJhY3RlcnNJbkdyYXBoZW1lQ2x1c3RlcnMoU3RyaW5nVmlldyhvbGRUZXh0KS5zdWJzdHJpbmco
bGVuZ3RoKSwgMSk7CisKKyAgICAgICAgLy8gS2VlcCBsb29raW5nIGZvciB3aGl0ZXNwYWNlIGFu
ZCBhbGxvd2VkIHB1bmN0dWF0aW9uLCBidXQgYXZvaWQKKyAgICAgICAgLy8gYWNjdW11bGF0aW5n
IGp1c3Qgd2hpdGVzcGFjZSBpbnRvIHRoZSA6Zmlyc3QtbGV0dGVyLgorICAgICAgICBmb3IgKHVu
c2lnbmVkIHNjYW5MZW5ndGggPSBsZW5ndGg7IHNjYW5MZW5ndGggPCBvbGRUZXh0Lmxlbmd0aCgp
OyArK3NjYW5MZW5ndGgpIHsKKyAgICAgICAgICAgIFVDaGFyIGMgPSBvbGRUZXh0W3NjYW5MZW5n
dGhdOworCisgICAgICAgICAgICBpZiAoIXNob3VsZFNraXBGb3JGaXJzdExldHRlcihjKSkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgaWYgKGlzUHVuY3R1YXRpb25Gb3JG
aXJzdExldHRlcihjKSkKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBzY2FuTGVuZ3RoICsgMTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIENvbnN0cnVjdCBhIHRleHQgZnJhZ21lbnQgZm9yIHRo
ZSB0ZXh0IGFmdGVyIHRoZSBmaXJzdCBsZXR0ZXIuCisgICAgICAgIC8vIFRoaXMgdGV4dCBmcmFn
bWVudCBtaWdodCBiZSBlbXB0eS4KKyAgICAgICAgUmVuZGVyVGV4dEZyYWdtZW50KiByZW1haW5p
bmdUZXh0OworICAgICAgICBpZiAoY3VycmVudFRleHRDaGlsZC50ZXh0Tm9kZSgpKQorICAgICAg
ICAgICAgcmVtYWluaW5nVGV4dCA9IG5ldyBSZW5kZXJUZXh0RnJhZ21lbnQoKmN1cnJlbnRUZXh0
Q2hpbGQudGV4dE5vZGUoKSwgb2xkVGV4dCwgbGVuZ3RoLCBvbGRUZXh0Lmxlbmd0aCgpIC0gbGVu
Z3RoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVtYWluaW5nVGV4dCA9IG5ldyBSZW5k
ZXJUZXh0RnJhZ21lbnQoZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBvbGRUZXh0LCBsZW5n
dGgsIG9sZFRleHQubGVuZ3RoKCkgLSBsZW5ndGgpOworCisgICAgICAgIGlmIChyZW1haW5pbmdU
ZXh0LT50ZXh0Tm9kZSgpKQorICAgICAgICAgICAgcmVtYWluaW5nVGV4dC0+dGV4dE5vZGUoKS0+
c2V0UmVuZGVyZXIocmVtYWluaW5nVGV4dCk7CisKKyAgICAgICAgZmlyc3RMZXR0ZXJDb250YWlu
ZXItPmFkZENoaWxkKHJlbWFpbmluZ1RleHQsICZjdXJyZW50VGV4dENoaWxkKTsKKyAgICAgICAg
Zmlyc3RMZXR0ZXJDb250YWluZXItPnJlbW92ZUNoaWxkKGN1cnJlbnRUZXh0Q2hpbGQpOworICAg
ICAgICByZW1haW5pbmdUZXh0LT5zZXRGaXJzdExldHRlcigqZmlyc3RMZXR0ZXIpOworICAgICAg
ICBmaXJzdExldHRlci0+c2V0Rmlyc3RMZXR0ZXJSZW1haW5pbmdUZXh0KHJlbWFpbmluZ1RleHQp
OworCisgICAgICAgIC8vIGNvbnN0cnVjdCB0ZXh0IGZyYWdtZW50IGZvciB0aGUgZmlyc3QgbGV0
dGVyCisgICAgICAgIFJlbmRlclRleHRGcmFnbWVudCogbGV0dGVyOworICAgICAgICBpZiAocmVt
YWluaW5nVGV4dC0+dGV4dE5vZGUoKSkKKyAgICAgICAgICAgIGxldHRlciA9IG5ldyBSZW5kZXJU
ZXh0RnJhZ21lbnQoKnJlbWFpbmluZ1RleHQtPnRleHROb2RlKCksIG9sZFRleHQsIDAsIGxlbmd0
aCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxldHRlciA9IG5ldyBSZW5kZXJUZXh0RnJh
Z21lbnQoZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBvbGRUZXh0LCAwLCBsZW5ndGgpOwor
CisgICAgICAgIGZpcnN0TGV0dGVyLT5hZGRDaGlsZChsZXR0ZXIpOworCisgICAgICAgIGN1cnJl
bnRUZXh0Q2hpbGQuZGVzdHJveSgpOworICAgIH0KK30KKworc3RhdGljIGJvb2wgc3VwcG9ydHNG
aXJzdExldHRlcihSZW5kZXJCbG9jayYgYmxvY2spCit7CisgICAgaWYgKGlzPFJlbmRlclRhYmxl
PihibG9jaykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaXM8UmVuZGVyU1ZHVGV4
dD4oYmxvY2spKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzPFJlbmRlclJ1YnlS
dW4+KGJsb2NrKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjpGaXJzdExldHRlcjo6dXBkYXRlKFJlbmRlckJsb2Nr
JiBibG9jaykKK3sKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighYmxvY2su
dmlldygpLmxheW91dFN0YXRlKCkpOworCisgICAgaWYgKCFzdXBwb3J0c0ZpcnN0TGV0dGVyKGJs
b2NrKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyT2JqZWN0KiBmaXJzdExldHRlck9i
ajsKKyAgICBSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckNvbnRhaW5lcjsKKyAgICAvLyBGSVhN
RTogVGhlIGZpcnN0IGxldHRlciBtaWdodCBiZSBjb21wb3NlZCBvZiBhIHZhcmlldHkgb2YgY29k
ZSB1bml0cywgYW5kIHRoZXJlZm9yZSBtaWdodAorICAgIC8vIGJlIGNvbnRhaW5lZCB3aXRoaW4g
bXVsdGlwbGUgUmVuZGVyRWxlbWVudHMuCisgICAgYmxvY2suZ2V0Rmlyc3RMZXR0ZXIoZmlyc3RM
ZXR0ZXJPYmosIGZpcnN0TGV0dGVyQ29udGFpbmVyKTsKKworICAgIGlmICghZmlyc3RMZXR0ZXJP
YmogfHwgIWZpcnN0TGV0dGVyQ29udGFpbmVyKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJ
ZiB0aGUgY2hpbGQgYWxyZWFkeSBoYXMgc3R5bGUsIHRoZW4gaXQgaGFzIGFscmVhZHkgYmVlbiBj
cmVhdGVkLCBzbyB3ZSBqdXN0IHdhbnQKKyAgICAvLyB0byB1cGRhdGUgaXQuCisgICAgaWYgKGZp
cnN0TGV0dGVyT2JqLT5wYXJlbnQoKS0+c3R5bGUoKS5zdHlsZVR5cGUoKSA9PSBGSVJTVF9MRVRU
RVIpIHsKKyAgICAgICAgdXBkYXRlRmlyc3RMZXR0ZXJTdHlsZSgqZmlyc3RMZXR0ZXJDb250YWlu
ZXIsICpmaXJzdExldHRlck9iaik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IWlzPFJlbmRlclRleHQ+KCpmaXJzdExldHRlck9iaikpCisgICAgICAgIHJldHVybjsKKworICAg
IGNyZWF0ZUZpcnN0TGV0dGVyUmVuZGVyZXIoKmZpcnN0TGV0dGVyQ29udGFpbmVyLCBkb3duY2Fz
dDxSZW5kZXJUZXh0PigqZmlyc3RMZXR0ZXJPYmopKTsKK30KKworfTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJGaXJz
dExldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlbmRlclRyZWVVcGRhdGVyLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyQmxvY2s7CisKK2NsYXNzIFJlbmRlclRyZWVVcGRh
dGVyOjpGaXJzdExldHRlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgdXBkYXRlKFJlbmRl
ckJsb2NrJik7Cit9OworCit9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>