<?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>200625</bug_id>
          
          <creation_ts>2019-08-12 01:02:51 -0700</creation_ts>
          <short_desc>Only construct ComplexLineLayout when needed</short_desc>
          <delta_ts>2019-08-12 08:32:17 -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>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>1560366</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-08-12 01:02:51 -0700</bug_when>
    <thetext>We don&apos;t need it when using block layout or simple line layout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560371</commentid>
    <comment_count>1</comment_count>
      <attachid>376054</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-08-12 02:14:17 -0700</bug_when>
    <thetext>Created attachment 376054
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560385</commentid>
    <comment_count>2</comment_count>
      <attachid>376058</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-08-12 06:10:43 -0700</bug_when>
    <thetext>Created attachment 376058
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560399</commentid>
    <comment_count>3</comment_count>
      <attachid>376058</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-12 08:31:40 -0700</bug_when>
    <thetext>Comment on attachment 376058
patch

Clearing flags on attachment: 376058

Committed r248528: &lt;https://trac.webkit.org/changeset/248528&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560400</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-12 08:31:42 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560402</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-12 08:32:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/54210025&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376054</attachid>
            <date>2019-08-12 02:14:17 -0700</date>
            <delta_ts>2019-08-12 06:10:43 -0700</delta_ts>
            <desc>patch</desc>
            <filename>complex-line-layout-on-demand-4.patch</filename>
            <type>text/plain</type>
            <size>33616</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0ODUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDE5LTA4LTEyICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBPbmx5IGNvbnN0cnVjdCBDb21w
bGV4TGluZUxheW91dCB3aGVuIG5lZWRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjAwNjI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiByZW5kZXJpbmcvQ29tcGxleExpbmVMYXlvdXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcGxleExpbmVMYXlvdXQ6OmNyZWF0ZUlubGluZUJveEZvclJlbmRl
cmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhMaW5lTGF5b3V0OjpjcmVhdGVMaW5lQm94
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleExpbmVMYXlvdXQ6OmNvbnN0cnVjdExpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleExpbmVMYXlvdXQ6OnVwZGF0ZUxvZ2ljYWxXaWR0
aEZvckFsaWdubWVudCk6CisKKyAgICAgICAgTWFrZSBzdGF0aWMgc28gdGhpcyBjYW4gYmUgaW52
b2tlZCB3aXRob3V0IGNvbnN0cnVjdGluZyBjb21wbGV4IGxpbmUgbGF5b3V0IChmcm9tIHN0YXJ0
QWxpZ25lZE9mZnNldEZvckxpbmUpLgorCisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4TGluZUxh
eW91dDo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvclNlZ21lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcGxleExpbmVMYXlvdXQ6OmRlbGV0ZUVsbGlwc2lzTGluZUJveGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhMaW5lTGF5b3V0OjpjaGVja0xpbmVzRm9yVGV4dE92
ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhMaW5lTGF5b3V0OjpzdGFydEFsaWdu
ZWRPZmZzZXRGb3JMaW5lKTogRGVsZXRlZC4KKworICAgICAgICBUaGlzIGlzIGFsc28gdXNlZCBp
biBibG9jayBsYXlvdXQgdG8gc2V0IHN0YXRpYyBwb3NpdGlvbnMgb2YgcG9zaXRpb25lZCBvYmpl
Y3RzLgorICAgICAgICBNb3ZlIHRvIFJlbmRlckJsb2NrRmxvdyB3aGVyZSBpdHMgb25seSBjYWxs
ZXIgaXMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvQ29tcGxleExpbmVMYXlvdXQuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrRmxvdzo6UmVuZGVyQmxvY2tGbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrRmxvdzo6d2lsbEJlRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrRmxvdzo6bGF5b3V0SW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2tGbG93Ojp1cGRhdGVTdGF0aWNJbmxpbmVQb3NpdGlvbkZvckNoaWxkKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6c3RhcnRBbGlnbmVkT2Zmc2V0Rm9yTGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmRlbGV0ZUxpbmVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6aGl0VGVzdElubGluZUNoaWxkcmVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6YWRkT3ZlcmZsb3dGcm9tSW5saW5lQ2hpbGRy
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpwYWludElubGluZUNoaWxk
cmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6aGFzTGluZXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRTaW1wbGVMaW5lcyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmRlbGV0ZUxpbmVCb3hlc0JlZm9y
ZVNpbXBsZUxpbmVMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93Ojpl
bnN1cmVMaW5lQm94ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6Zmlyc3RSb290Qm94IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bGFzdFJvb3RCb3ggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93Ojpjb21wbGV4TGluZUxheW91dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxpbmVCb3hlcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxpbmVCb3hlcyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Um9vdElubGluZUJveDo6cmVtb3ZlTGluZUJveEZyb21SZW5kZXJPYmplY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6ZXh0cmFjdExpbmVCb3hGcm9tUmVuZGVyT2Jq
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OmF0dGFjaExpbmVCb3hUb1Jl
bmRlck9iamVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlv
bnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Z2VuZXJhdGVMaW5l
Qm94VHJlZSk6CisKIDIwMTktMDgtMTEgIEFsaWNpYSBCb3lhIEdhcmPDrWEgIDxhYm95YUBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtNU0VdW0dTdHJlYW1lcl0gRG9uJ3QgdXNlIHZvcmJpc3BhcnNl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29tcGxleExpbmVMYXlvdXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db21wbGV4TGluZUxheW91dC5j
cHAJKHJldmlzaW9uIDI0ODUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db21wbGV4
TGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MiwxMCArMTUyLDEwIEBAIFJvb3RJ
bmxpbmVCb3gqIENvbXBsZXhMaW5lTGF5b3V0OjpjcmVhdGUKICAgICByZXR1cm4gcm9vdEJveDsK
IH0KIAotaW5saW5lIElubGluZUJveCogQ29tcGxleExpbmVMYXlvdXQ6OmNyZWF0ZUlubGluZUJv
eEZvclJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGJvb2wgaXNSb290TGluZUJveCwg
Ym9vbCBpc09ubHlSdW4pCitJbmxpbmVCb3gqIENvbXBsZXhMaW5lTGF5b3V0OjpjcmVhdGVJbmxp
bmVCb3hGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBib29sIGlzT25seVJ1bikK
IHsKLSAgICBpZiAoaXNSb290TGluZUJveCkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRl
ckJsb2NrRmxvdz4oKnJlbmRlcmVyKS5jb21wbGV4TGluZUxheW91dCgpLmNyZWF0ZUFuZEFwcGVu
ZFJvb3RJbmxpbmVCb3goKTsKKyAgICBpZiAocmVuZGVyZXIgPT0gJm1fZmxvdykKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZUFuZEFwcGVuZFJvb3RJbmxpbmVCb3goKTsKIAogICAgIGlmIChpczxSZW5k
ZXJUZXh0PigqcmVuZGVyZXIpKQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGV4dD4o
KnJlbmRlcmVyKS5jcmVhdGVJbmxpbmVUZXh0Qm94KCk7CkBAIC0yMjYsNyArMjI2LDcgQEAgSW5s
aW5lRmxvd0JveCogQ29tcGxleExpbmVMYXlvdXQ6OmNyZWF0ZQogICAgICAgICBpZiAoYWxsb3dl
ZFRvQ29uc3RydWN0TmV3Qm94ICYmICFjYW5Vc2VFeGlzdGluZ1BhcmVudEJveCkgewogICAgICAg
ICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIGEgbmV3IGJveCBmb3IgdGhpcyByZW5kZXIgb2JqZWN0
LiBPbmNlCiAgICAgICAgICAgICAvLyBtYWRlLCB3ZSBuZWVkIHRvIHBsYWNlIGl0IGF0IHRoZSBl
bmQgb2YgdGhlIGN1cnJlbnQgbGluZS4KLSAgICAgICAgICAgIElubGluZUJveCogbmV3Qm94ID0g
Y3JlYXRlSW5saW5lQm94Rm9yUmVuZGVyZXIob2JqLCBvYmogPT0gJm1fZmxvdyk7CisgICAgICAg
ICAgICBJbmxpbmVCb3gqIG5ld0JveCA9IGNyZWF0ZUlubGluZUJveEZvclJlbmRlcmVyKG9iaik7
CiAgICAgICAgICAgICBwYXJlbnRCb3ggPSBkb3duY2FzdDxJbmxpbmVGbG93Qm94PihuZXdCb3gp
OwogICAgICAgICAgICAgcGFyZW50Qm94LT5zZXRJc0ZpcnN0TGluZShsaW5lSW5mby5pc0ZpcnN0
TGluZSgpKTsKICAgICAgICAgICAgIHBhcmVudEJveC0+c2V0SXNIb3Jpem9udGFsKG1fZmxvdy5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKQEAgLTMwMSw3ICszMDEsNyBAQCBSb290SW5saW5l
Qm94KiBDb21wbGV4TGluZUxheW91dDo6Y29uc3RyCiAgICAgICAgIGlmIChsaW5lSW5mby5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBJbmxpbmVCb3gqIGJveCA9
IGNyZWF0ZUlubGluZUJveEZvclJlbmRlcmVyKCZyLT5yZW5kZXJlcigpLCBmYWxzZSwgaXNPbmx5
UnVuKTsKKyAgICAgICAgSW5saW5lQm94KiBib3ggPSBjcmVhdGVJbmxpbmVCb3hGb3JSZW5kZXJl
cigmci0+cmVuZGVyZXIoKSwgaXNPbmx5UnVuKTsKICAgICAgICAgci0+c2V0Qm94KGJveCk7CiAK
ICAgICAgICAgaWYgKCFyb290SGFzU2VsZWN0ZWRDaGlsZHJlbiAmJiBib3gtPnJlbmRlcmVyKCku
c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpCkBAIC02MzEs
MTMgKzYzMSwxNSBAQCB2b2lkIENvbXBsZXhMaW5lTGF5b3V0Ojpjb21wdXRlRXhwYW5zaW9uCiAg
ICAgfQogfQogCi12b2lkIENvbXBsZXhMaW5lTGF5b3V0Ojp1cGRhdGVMb2dpY2FsV2lkdGhGb3JB
bGlnbm1lbnQoY29uc3QgVGV4dEFsaWduTW9kZSYgdGV4dEFsaWduLCBjb25zdCBSb290SW5saW5l
Qm94KiByb290SW5saW5lQm94LCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBmbG9hdCYgbG9n
aWNhbExlZnQsIGZsb2F0JiB0b3RhbExvZ2ljYWxXaWR0aCwgZmxvYXQmIGF2YWlsYWJsZUxvZ2lj
YWxXaWR0aCwgaW50IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpCit2b2lkIENvbXBsZXhMaW5l
TGF5b3V0Ojp1cGRhdGVMb2dpY2FsV2lkdGhGb3JBbGlnbm1lbnQoUmVuZGVyQmxvY2tGbG93JiBm
bG93LCBjb25zdCBUZXh0QWxpZ25Nb2RlJiB0ZXh0QWxpZ24sIGNvbnN0IFJvb3RJbmxpbmVCb3gq
IHJvb3RJbmxpbmVCb3gsIEJpZGlSdW4qIHRyYWlsaW5nU3BhY2VSdW4sIGZsb2F0JiBsb2dpY2Fs
TGVmdCwgZmxvYXQmIHRvdGFsTG9naWNhbFdpZHRoLCBmbG9hdCYgYXZhaWxhYmxlTG9naWNhbFdp
ZHRoLCBpbnQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCkKIHsKICAgICBUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbjsKLSAgICBpZiAocm9vdElubGluZUJveCAmJiBzdHlsZSgpLnVuaWNvZGVCaWRp
KCkgPT0gUGxhaW50ZXh0KQorICAgIGlmIChyb290SW5saW5lQm94ICYmIGZsb3cuc3R5bGUoKS51
bmljb2RlQmlkaSgpID09IFBsYWludGV4dCkKICAgICAgICAgZGlyZWN0aW9uID0gcm9vdElubGlu
ZUJveC0+ZGlyZWN0aW9uKCk7CiAgICAgZWxzZQotICAgICAgICBkaXJlY3Rpb24gPSBzdHlsZSgp
LmRpcmVjdGlvbigpOworICAgICAgICBkaXJlY3Rpb24gPSBmbG93LnN0eWxlKCkuZGlyZWN0aW9u
KCk7CisKKyAgICBib29sIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24gPSBmbG93LnN0eWxlKCkuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpOwogCiAgICAgLy8gQXJtZWQgd2l0aCB0aGUgdG90YWwgd2lk
dGggb2YgdGhlIGxpbmUgKHdpdGhvdXQganVzdGlmaWNhdGlvbiksCiAgICAgLy8gd2Ugbm93IGV4
YW1pbmUgb3VyIHRleHQtYWxpZ24gcHJvcGVydHkgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHdoZXJl
IHRvIHBvc2l0aW9uIHRoZQpAQCAtNjQ2LDE4ICs2NDgsMTggQEAgdm9pZCBDb21wbGV4TGluZUxh
eW91dDo6dXBkYXRlTG9naWNhbFdpZAogICAgIHN3aXRjaCAodGV4dEFsaWduKSB7CiAgICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpMZWZ0OgogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVm
dDoKLSAgICAgICAgdXBkYXRlTG9naWNhbFdpZHRoRm9yTGVmdEFsaWduZWRCbG9jayhzdHlsZSgp
LmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSwgdHJhaWxpbmdTcGFjZVJ1biwgbG9naWNhbExlZnQs
IHRvdGFsTG9naWNhbFdpZHRoLCBhdmFpbGFibGVMb2dpY2FsV2lkdGgpOworICAgICAgICB1cGRh
dGVMb2dpY2FsV2lkdGhGb3JMZWZ0QWxpZ25lZEJsb2NrKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24s
IHRyYWlsaW5nU3BhY2VSdW4sIGxvZ2ljYWxMZWZ0LCB0b3RhbExvZ2ljYWxXaWR0aCwgYXZhaWxh
YmxlTG9naWNhbFdpZHRoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUZXh0QWxpZ25Nb2Rl
OjpSaWdodDoKICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0OgotICAgICAgICB1
cGRhdGVMb2dpY2FsV2lkdGhGb3JSaWdodEFsaWduZWRCbG9jayhzdHlsZSgpLmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSwgdHJhaWxpbmdTcGFjZVJ1biwgbG9naWNhbExlZnQsIHRvdGFsTG9naWNh
bFdpZHRoLCBhdmFpbGFibGVMb2dpY2FsV2lkdGgpOworICAgICAgICB1cGRhdGVMb2dpY2FsV2lk
dGhGb3JSaWdodEFsaWduZWRCbG9jayhpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uLCB0cmFpbGluZ1Nw
YWNlUnVuLCBsb2dpY2FsTGVmdCwgdG90YWxMb2dpY2FsV2lkdGgsIGF2YWlsYWJsZUxvZ2ljYWxX
aWR0aCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Q2VudGVyOgog
ICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0Q2VudGVyOgotICAgICAgICB1cGRhdGVMb2dp
Y2FsV2lkdGhGb3JDZW50ZXJBbGlnbmVkQmxvY2soc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCksIHRyYWlsaW5nU3BhY2VSdW4sIGxvZ2ljYWxMZWZ0LCB0b3RhbExvZ2ljYWxXaWR0aCwg
YXZhaWxhYmxlTG9naWNhbFdpZHRoKTsKKyAgICAgICAgdXBkYXRlTG9naWNhbFdpZHRoRm9yQ2Vu
dGVyQWxpZ25lZEJsb2NrKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24sIHRyYWlsaW5nU3BhY2VSdW4s
IGxvZ2ljYWxMZWZ0LCB0b3RhbExvZ2ljYWxXaWR0aCwgYXZhaWxhYmxlTG9naWNhbFdpZHRoKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OgotICAgICAg
ICBtX2Zsb3cuYWRqdXN0SW5saW5lRGlyZWN0aW9uTGluZUJvdW5kcyhleHBhbnNpb25PcHBvcnR1
bml0eUNvdW50LCBsb2dpY2FsTGVmdCwgYXZhaWxhYmxlTG9naWNhbFdpZHRoKTsKKyAgICAgICAg
Zmxvdy5hZGp1c3RJbmxpbmVEaXJlY3Rpb25MaW5lQm91bmRzKGV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnQsIGxvZ2ljYWxMZWZ0LCBhdmFpbGFibGVMb2dpY2FsV2lkdGgpOwogICAgICAgICBpZiAo
ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCkgewogICAgICAgICAgICAgaWYgKHRyYWlsaW5nU3Bh
Y2VSdW4pIHsKICAgICAgICAgICAgICAgICB0b3RhbExvZ2ljYWxXaWR0aCAtPSB0cmFpbGluZ1Nw
YWNlUnVuLT5ib3goKS0+bG9naWNhbFdpZHRoKCk7CkBAIC02NjgsMTUgKzY3MCwxNSBAQCB2b2lk
IENvbXBsZXhMaW5lTGF5b3V0Ojp1cGRhdGVMb2dpY2FsV2lkCiAgICAgICAgIEZBTExUSFJPVUdI
OwogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6U3RhcnQ6CiAgICAgICAgIGlmIChkaXJlY3Rpb24g
PT0gVGV4dERpcmVjdGlvbjo6TFRSKQotICAgICAgICAgICAgdXBkYXRlTG9naWNhbFdpZHRoRm9y
TGVmdEFsaWduZWRCbG9jayhzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSwgdHJhaWxp
bmdTcGFjZVJ1biwgbG9naWNhbExlZnQsIHRvdGFsTG9naWNhbFdpZHRoLCBhdmFpbGFibGVMb2dp
Y2FsV2lkdGgpOworICAgICAgICAgICAgdXBkYXRlTG9naWNhbFdpZHRoRm9yTGVmdEFsaWduZWRC
bG9jayhpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uLCB0cmFpbGluZ1NwYWNlUnVuLCBsb2dpY2FsTGVm
dCwgdG90YWxMb2dpY2FsV2lkdGgsIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aEZvclJpZ2h0QWxpZ25lZEJsb2NrKHN0
eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpLCB0cmFpbGluZ1NwYWNlUnVuLCBsb2dpY2Fs
TGVmdCwgdG90YWxMb2dpY2FsV2lkdGgsIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCk7CisgICAgICAg
ICAgICB1cGRhdGVMb2dpY2FsV2lkdGhGb3JSaWdodEFsaWduZWRCbG9jayhpc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uLCB0cmFpbGluZ1NwYWNlUnVuLCBsb2dpY2FsTGVmdCwgdG90YWxMb2dpY2FsV2lk
dGgsIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVGV4
dEFsaWduTW9kZTo6RW5kOgogICAgICAgICBpZiAoZGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246
OkxUUikKLSAgICAgICAgICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aEZvclJpZ2h0QWxpZ25lZEJsb2Nr
KHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpLCB0cmFpbGluZ1NwYWNlUnVuLCBsb2dp
Y2FsTGVmdCwgdG90YWxMb2dpY2FsV2lkdGgsIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCk7CisgICAg
ICAgICAgICB1cGRhdGVMb2dpY2FsV2lkdGhGb3JSaWdodEFsaWduZWRCbG9jayhpc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uLCB0cmFpbGluZ1NwYWNlUnVuLCBsb2dpY2FsTGVmdCwgdG90YWxMb2dpY2Fs
V2lkdGgsIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHVwZGF0ZUxvZ2ljYWxXaWR0aEZvckxlZnRBbGlnbmVkQmxvY2soc3R5bGUoKS5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCksIHRyYWlsaW5nU3BhY2VSdW4sIGxvZ2ljYWxMZWZ0LCB0b3RhbExvZ2lj
YWxXaWR0aCwgYXZhaWxhYmxlTG9naWNhbFdpZHRoKTsKKyAgICAgICAgICAgIHVwZGF0ZUxvZ2lj
YWxXaWR0aEZvckxlZnRBbGlnbmVkQmxvY2soaXNMZWZ0VG9SaWdodERpcmVjdGlvbiwgdHJhaWxp
bmdTcGFjZVJ1biwgbG9naWNhbExlZnQsIHRvdGFsTG9naWNhbFdpZHRoLCBhdmFpbGFibGVMb2dp
Y2FsV2lkdGgpOwogICAgICAgICBicmVhazsKICAgICB9CiB9CkBAIC05NTksNyArOTYxLDcgQEAg
QmlkaVJ1biogQ29tcGxleExpbmVMYXlvdXQ6OmNvbXB1dGVJbmxpbgogICAgIGlmIChpczxSZW5k
ZXJSdWJ5QmFzZT4obV9mbG93KSAmJiAhZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCkKICAgICAg
ICAgdGV4dEFsaWduID0gVGV4dEFsaWduTW9kZTo6Q2VudGVyOwogCi0gICAgdXBkYXRlTG9naWNh
bFdpZHRoRm9yQWxpZ25tZW50KHRleHRBbGlnbiwgbGluZUJveCwgdHJhaWxpbmdTcGFjZVJ1biwg
bG9naWNhbExlZnQsIHRvdGFsTG9naWNhbFdpZHRoLCBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIGV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpOworICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aEZvckFsaWdu
bWVudChtX2Zsb3csIHRleHRBbGlnbiwgbGluZUJveCwgdHJhaWxpbmdTcGFjZVJ1biwgbG9naWNh
bExlZnQsIHRvdGFsTG9naWNhbFdpZHRoLCBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIGV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnQpOwogCiAgICAgY29tcHV0ZUV4cGFuc2lvbkZvckp1c3RpZmllZFRl
eHQoZmlyc3RSdW4sIHRyYWlsaW5nU3BhY2VSdW4sIGV4cGFuc2lvbk9wcG9ydHVuaXRpZXMsIGV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQsIHRvdGFsTG9naWNhbFdpZHRoLCBhdmFpbGFibGVMb2dp
Y2FsV2lkdGgpOwogCkBAIC0yMTEzLDcgKzIxMTUsNyBAQCB2b2lkIENvbXBsZXhMaW5lTGF5b3V0
OjpkZWxldGVFbGxpcHNpc0xpCiAgICAgICAgICAgICBmbG9hdCBsb2dpY2FsTGVmdCA9IG1fZmxv
dy5sb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoY3Vyci0+bGluZVRvcCgpLCBzaG91bGRJbmRlbnRU
ZXh0KTsKICAgICAgICAgICAgIGZsb2F0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCA9IG1fZmxvdy5s
b2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKGN1cnItPmxpbmVUb3AoKSwgRG9Ob3RJbmRlbnRUZXh0
KSAtIGxvZ2ljYWxMZWZ0OwogICAgICAgICAgICAgZmxvYXQgdG90YWxMb2dpY2FsV2lkdGggPSBj
dXJyLT5sb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aEZvckFs
aWdubWVudCh0ZXh0QWxpZ24sIGN1cnIsIDAsIGxvZ2ljYWxMZWZ0LCB0b3RhbExvZ2ljYWxXaWR0
aCwgYXZhaWxhYmxlTG9naWNhbFdpZHRoLCAwKTsKKyAgICAgICAgICAgIHVwZGF0ZUxvZ2ljYWxX
aWR0aEZvckFsaWdubWVudChtX2Zsb3csIHRleHRBbGlnbiwgY3VyciwgMCwgbG9naWNhbExlZnQs
IHRvdGFsTG9naWNhbFdpZHRoLCBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIDApOwogCiAgICAgICAg
ICAgICBpZiAobHRyKQogICAgICAgICAgICAgICAgIGN1cnItPmFkanVzdExvZ2ljYWxQb3NpdGlv
bigobG9naWNhbExlZnQgLSBjdXJyLT5sb2dpY2FsTGVmdCgpKSwgMCk7CkBAIC0yMTU4LDcgKzIx
NjAsNyBAQCB2b2lkIENvbXBsZXhMaW5lTGF5b3V0OjpjaGVja0xpbmVzRm9yVGV4CiAKICAgICAg
ICAgICAgICAgICBmbG9hdCBsb2dpY2FsTGVmdCA9IDA7IC8vIFdlIGFyZSBvbmx5IGludGVyZXN0
ZWQgaW4gdGhlIGRlbHRhIGZyb20gdGhlIGJhc2UgcG9zaXRpb24uCiAgICAgICAgICAgICAgICAg
ZmxvYXQgdHJ1bmNhdGVkV2lkdGggPSBtX2Zsb3cuYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yTGlu
ZShjdXJyLT5saW5lVG9wKCksIHNob3VsZEluZGVudFRleHQpOwotICAgICAgICAgICAgICAgIHVw
ZGF0ZUxvZ2ljYWxXaWR0aEZvckFsaWdubWVudCh0ZXh0QWxpZ24sIGN1cnIsIG51bGxwdHIsIGxv
Z2ljYWxMZWZ0LCB0b3RhbExvZ2ljYWxXaWR0aCwgdHJ1bmNhdGVkV2lkdGgsIDApOworICAgICAg
ICAgICAgICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aEZvckFsaWdubWVudChtX2Zsb3csIHRleHRBbGln
biwgY3VyciwgbnVsbHB0ciwgbG9naWNhbExlZnQsIHRvdGFsTG9naWNhbFdpZHRoLCB0cnVuY2F0
ZWRXaWR0aCwgMCk7CiAgICAgICAgICAgICAgICAgaWYgKGx0cikKICAgICAgICAgICAgICAgICAg
ICAgY3Vyci0+YWRqdXN0TG9naWNhbFBvc2l0aW9uKGxvZ2ljYWxMZWZ0LCAwKTsKICAgICAgICAg
ICAgICAgICBlbHNlCkBAIC0yMjI1LDQ1ICsyMjI3LDYgQEAgYm9vbCBDb21wbGV4TGluZUxheW91
dDo6cG9zaXRpb25OZXdGbG9hdAogICAgIHJldHVybiB0cnVlOwogfQogCi1MYXlvdXRVbml0IENv
bXBsZXhMaW5lTGF5b3V0OjpzdGFydEFsaWduZWRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9z
aXRpb24sIEluZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRUZXh0KQotewotICAgIFRleHRBbGln
bk1vZGUgdGV4dEFsaWduID0gc3R5bGUoKS50ZXh0QWxpZ24oKTsKLSAgICBib29sIHNob3VsZEFw
cGx5SW5kZW50VGV4dCA9IGZhbHNlOwotICAgIHN3aXRjaCAodGV4dEFsaWduKSB7Ci0gICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpMZWZ0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVm
dDoKLSAgICAgICAgc2hvdWxkQXBwbHlJbmRlbnRUZXh0ID0gc3R5bGUoKS5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Umln
aHQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodDoKLSAgICAgICAgc2hvdWxk
QXBwbHlJbmRlbnRUZXh0ID0gIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlN0YXJ0OgotICAgICAgICBzaG91
bGRBcHBseUluZGVudFRleHQgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBzaG91bGRBcHBseUluZGVudFRleHQgPSBmYWxzZTsKLSAgICB9Ci0gICAgLy8gPHJk
YXI6Ly9wcm9ibGVtLzE1NDI3NTcxPgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjQ1MjIKLSAgICAvLyBUaGlzIHF1aXJrIGlzIGZvciBsZWdhY3kgY29u
dGVudCB0aGF0IGRvZXNuJ3Qgd29yayBwcm9wZXJseSB3aXRoIHRoZSBjZW50ZXIgcG9zaXRpb25p
bmcgc2NoZW1lCi0gICAgLy8gYmVpbmcgaG9ub3JlZCAoZS5nLiwgZXB1YnMpLgotICAgIGlmIChz
aG91bGRBcHBseUluZGVudFRleHQgfHwgbV9mbG93LnNldHRpbmdzKCkudXNlTGVnYWN5VGV4dEFs
aWduUG9zaXRpb25lZEVsZW1lbnRCZWhhdmlvcigpKSAvLyBGSVhNRTogSGFuZGxlIFRleHRBbGln
bk1vZGU6OkVuZCBoZXJlCi0gICAgICAgIHJldHVybiBtX2Zsb3cuc3RhcnRPZmZzZXRGb3JMaW5l
KHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0KTsKLQotICAgIC8vIHVwZGF0ZUxvZ2ljYWxXaWR0
aEZvckFsaWdubWVudCgpIGhhbmRsZXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgYmxvY2sgc28gbm8g
bmVlZCB0byBjb25zaWRlciBpdCBoZXJlCi0gICAgZmxvYXQgdG90YWxMb2dpY2FsV2lkdGggPSAw
OwotICAgIGZsb2F0IGxvZ2ljYWxMZWZ0ID0gbV9mbG93LmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGlu
ZShtX2Zsb3cubG9naWNhbEhlaWdodCgpLCBEb05vdEluZGVudFRleHQpOwotICAgIGZsb2F0IGF2
YWlsYWJsZUxvZ2ljYWxXaWR0aCA9IG1fZmxvdy5sb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKG1f
Zmxvdy5sb2dpY2FsSGVpZ2h0KCksIERvTm90SW5kZW50VGV4dCkgLSBsb2dpY2FsTGVmdDsKLQot
ICAgIC8vIEZJWE1FOiBCdWcgMTI5MzExOiBXZSBuZWVkIHRvIHBhc3MgYSB2YWxpZCBSb290SW5s
aW5lQm94IGhlcmUsIGNvbnNpZGVyaW5nIHRoZSBiaWRpIGxldmVsIHVzZWQgdG8gY29uc3RydWN0
IHRoZSBsaW5lLgotICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aEZvckFsaWdubWVudCh0ZXh0QWxpZ24s
IDAsIDAsIGxvZ2ljYWxMZWZ0LCB0b3RhbExvZ2ljYWxXaWR0aCwgYXZhaWxhYmxlTG9naWNhbFdp
ZHRoLCAwKTsKLQotICAgIGlmICghc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0g
ICAgICAgIHJldHVybiBMYXlvdXRVbml0KG1fZmxvdy5sb2dpY2FsV2lkdGgoKSAtIGxvZ2ljYWxM
ZWZ0KTsKLSAgICByZXR1cm4gTGF5b3V0VW5pdChsb2dpY2FsTGVmdCk7Ci19Ci0KIHZvaWQgQ29t
cGxleExpbmVMYXlvdXQ6OnVwZGF0ZUZyYWdtZW50Rm9yTGluZShSb290SW5saW5lQm94KiBsaW5l
Qm94KSBjb25zdAogewogICAgIEFTU0VSVChsaW5lQm94KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9Db21wbGV4TGluZUxheW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9Db21wbGV4TGluZUxheW91dC5oCShyZXZpc2lvbiAyNDg1MjUpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29tcGxleExpbmVMYXlvdXQuaAkod29ya2luZyBjb3B5
KQpAQCAtNjYsMjMgKzY2LDIyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbGF5b3V0TGluZUJveGVz
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxUb3AsIExh
eW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKIAotICAgIExheW91dFVuaXQgc3RhcnRB
bGlnbmVkT2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IHBvc2l0aW9uLCBJbmRlbnRUZXh0T3JOb3Qg
c2hvdWxkSW5kZW50VGV4dCk7CiAgICAgUm9vdElubGluZUJveCogY29uc3RydWN0TGluZShCaWRp
UnVuTGlzdDxCaWRpUnVuPiYsIGNvbnN0IExpbmVJbmZvJik7CiAgICAgYm9vbCBwb3NpdGlvbk5l
d0Zsb2F0T25MaW5lKGNvbnN0IEZsb2F0aW5nT2JqZWN0JiBuZXdGbG9hdCwgRmxvYXRpbmdPYmpl
Y3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIExpbmVJbmZvJiwgTGluZVdpZHRoJik7CiAg
ICAgdm9pZCBhZGRPdmVyZmxvd0Zyb21JbmxpbmVDaGlsZHJlbigpOwogCiAgICAgc3RhdGljIHZv
aWQgYXBwZW5kUnVuc0Zvck9iamVjdChCaWRpUnVuTGlzdDxCaWRpUnVuPiosIGludCBzdGFydCwg
aW50IGVuZCwgUmVuZGVyT2JqZWN0JiwgSW5saW5lQmlkaVJlc29sdmVyJik7CisgICAgc3RhdGlj
IHZvaWQgdXBkYXRlTG9naWNhbFdpZHRoRm9yQWxpZ25tZW50KFJlbmRlckJsb2NrRmxvdyYsIGNv
bnN0IFRleHRBbGlnbk1vZGUmLCBjb25zdCBSb290SW5saW5lQm94KiwgQmlkaVJ1biogdHJhaWxp
bmdTcGFjZVJ1biwgZmxvYXQmIGxvZ2ljYWxMZWZ0LCBmbG9hdCYgdG90YWxMb2dpY2FsV2lkdGgs
IGZsb2F0JiBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIGludCBleHBhbnNpb25PcHBvcnR1bml0eUNv
dW50KTsKIAogcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Um9vdElubGluZUJveD4gY3Jl
YXRlUm9vdElubGluZUJveCgpOwogICAgIFJvb3RJbmxpbmVCb3gqIGNyZWF0ZUFuZEFwcGVuZFJv
b3RJbmxpbmVCb3goKTsKLSAgICBzdGF0aWMgSW5saW5lQm94KiBjcmVhdGVJbmxpbmVCb3hGb3JS
ZW5kZXJlcihSZW5kZXJPYmplY3QqLCBib29sIGlzUm9vdExpbmVCb3gsIGJvb2wgaXNPbmx5UnVu
ID0gZmFsc2UpOworICAgIElubGluZUJveCogY3JlYXRlSW5saW5lQm94Rm9yUmVuZGVyZXIoUmVu
ZGVyT2JqZWN0KiwgYm9vbCBpc09ubHlSdW4gPSBmYWxzZSk7CiAgICAgSW5saW5lRmxvd0JveCog
Y3JlYXRlTGluZUJveGVzKFJlbmRlck9iamVjdCosIGNvbnN0IExpbmVJbmZvJiwgSW5saW5lQm94
Kik7CiAgICAgVGV4dEFsaWduTW9kZSB0ZXh0QWxpZ25tZW50Rm9yTGluZShib29sIGVuZHNXaXRo
U29mdEJyZWFrKSBjb25zdDsKICAgICB2b2lkIHNldE1hcmdpbnNGb3JSdWJ5UnVuKEJpZGlSdW4q
LCBSZW5kZXJSdWJ5UnVuJiwgUmVuZGVyT2JqZWN0KiBwcmV2aW91c09iamVjdCwgY29uc3QgTGlu
ZUluZm8mKTsKICAgICB2b2lkIHVwZGF0ZVJ1YnlGb3JKdXN0aWZpZWRUZXh0KFJlbmRlclJ1YnlS
dW4mLCBCaWRpUnVuJiwgY29uc3QgVmVjdG9yPHVuc2lnbmVkLCAxNj4mIGV4cGFuc2lvbk9wcG9y
dHVuaXRpZXMsIHVuc2lnbmVkJiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50LCBmbG9hdCYgdG90
YWxMb2dpY2FsV2lkdGgsIGZsb2F0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgc2l6ZV90Jik7CiAg
ICAgdm9pZCBjb21wdXRlRXhwYW5zaW9uRm9ySnVzdGlmaWVkVGV4dChCaWRpUnVuKiBmaXJzdFJ1
biwgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biwgY29uc3QgVmVjdG9yPHVuc2lnbmVkLCAxNj4m
IGV4cGFuc2lvbk9wcG9ydHVuaXRpZXMsIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291
bnQsIGZsb2F0IHRvdGFsTG9naWNhbFdpZHRoLCBmbG9hdCBhdmFpbGFibGVMb2dpY2FsV2lkdGgp
OwotICAgIHZvaWQgdXBkYXRlTG9naWNhbFdpZHRoRm9yQWxpZ25tZW50KGNvbnN0IFRleHRBbGln
bk1vZGUmLCBjb25zdCBSb290SW5saW5lQm94KiwgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biwg
ZmxvYXQmIGxvZ2ljYWxMZWZ0LCBmbG9hdCYgdG90YWxMb2dpY2FsV2lkdGgsIGZsb2F0JiBhdmFp
bGFibGVMb2dpY2FsV2lkdGgsIGludCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KTsKICAgICB2
b2lkIGNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JMaW5lKFJvb3RJbmxpbmVCb3gq
LCBjb25zdCBMaW5lSW5mbyYsIEJpZGlSdW4qIGZpcnN0UnVuLCBCaWRpUnVuKiB0cmFpbGluZ1Nw
YWNlUnVuLCBib29sIHJlYWNoZWRFbmQsIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFw
JiwgVmVydGljYWxQb3NpdGlvbkNhY2hlJiwgV29yZE1lYXN1cmVtZW50cyYpOwogICAgIEJpZGlS
dW4qIGNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JTZWdtZW50KFJvb3RJbmxpbmVC
b3gqLCBjb25zdCBMaW5lSW5mbyYsIFRleHRBbGlnbk1vZGUsIGZsb2F0JiBsb2dpY2FsTGVmdCwg
ZmxvYXQmIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgQmlkaVJ1biogZmlyc3RSdW4sIEJpZGlSdW4q
IHRyYWlsaW5nU3BhY2VSdW4sIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwJiwgVmVy
dGljYWxQb3NpdGlvbkNhY2hlJiwgV29yZE1lYXN1cmVtZW50cyYpOwogICAgIHZvaWQgcmVtb3Zl
SW5saW5lQm94KEJpZGlSdW4mLCBjb25zdCBSb290SW5saW5lQm94JikgY29uc3Q7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkocmV2aXNpb24g
MjQ4NTI1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNiBAQCBSZW5kZXJCbG9ja0Zsb3c6OlJlbmRl
ckJsb2NrRmxvdyhFbGVtZW50CiAgICAgLCBtX3dpZHRoRm9yVGV4dEF1dG9zaXppbmcoLTEpCiAg
ICAgLCBtX2xpbmVDb3VudEZvclRleHRBdXRvc2l6aW5nKE5PVF9TRVQpCiAjZW5kaWYKLSAgICAs
IG1fY29tcGxleExpbmVMYXlvdXQoKnRoaXMpCiB7CiAgICAgc2V0Q2hpbGRyZW5JbmxpbmUodHJ1
ZSk7CiB9CkBAIC0xMjIsNyArMTIxLDYgQEAgUmVuZGVyQmxvY2tGbG93OjpSZW5kZXJCbG9ja0Zs
b3coRG9jdW1lbgogICAgICwgbV93aWR0aEZvclRleHRBdXRvc2l6aW5nKC0xKQogICAgICwgbV9s
aW5lQ291bnRGb3JUZXh0QXV0b3NpemluZyhOT1RfU0VUKQogI2VuZGlmCi0gICAgLCBtX2NvbXBs
ZXhMaW5lTGF5b3V0KCp0aGlzKQogewogICAgIHNldENoaWxkcmVuSW5saW5lKHRydWUpOwogfQpA
QCAtMTU0LDcgKzE1Miw4IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojp3aWxsQmVEZXN0cm95ZWQo
KQogICAgICAgICAgICAgcGFyZW50KCktPmRpcnR5TGluZXNGcm9tQ2hhbmdlZENoaWxkKCp0aGlz
KTsKICAgICB9CiAKLSAgICBsaW5lQm94ZXMoKS5kZWxldGVMaW5lQm94ZXMoKTsKKyAgICBpZiAo
bV9jb21wbGV4TGluZUxheW91dCkKKyAgICAgICAgbV9jb21wbGV4TGluZUxheW91dC0+bGluZUJv
eGVzKCkuZGVsZXRlTGluZUJveGVzKCk7CiAKICAgICBibG9ja1dpbGxCZURlc3Ryb3llZCgpOwog
CkBAIC02NzcsNyArNjc2LDExIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRJbmxpbmVD
aGlsZHIKICAgICB9CiAKICAgICBtX3NpbXBsZUxpbmVMYXlvdXQgPSBudWxscHRyOwotICAgIGNv
bXBsZXhMaW5lTGF5b3V0KCkubGF5b3V0TGluZUJveGVzKHJlbGF5b3V0Q2hpbGRyZW4sIHJlcGFp
bnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbEJvdHRvbSk7CisKKyAgICBpZiAoIW1fY29tcGxl
eExpbmVMYXlvdXQpCisgICAgICAgIG1fY29tcGxleExpbmVMYXlvdXQgPSBzdGQ6Om1ha2VfdW5p
cXVlPENvbXBsZXhMaW5lTGF5b3V0PigqdGhpcyk7CisKKyAgICBtX2NvbXBsZXhMaW5lTGF5b3V0
LT5sYXlvdXRMaW5lQm94ZXMocmVsYXlvdXRDaGlsZHJlbiwgcmVwYWludExvZ2ljYWxUb3AsIHJl
cGFpbnRMb2dpY2FsQm90dG9tKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dEJs
b2NrQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbywgTGF5b3V0
VW5pdCYgcHJldmlvdXNGbG9hdExvZ2ljYWxCb3R0b20sIExheW91dFVuaXQmIG1heEZsb2F0TG9n
aWNhbEJvdHRvbSkKQEAgLTg5OSw3ICs5MDIsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6YWRq
dXN0RmxvYXRpbmdCbG9jCiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6dXBkYXRlU3RhdGljSW5saW5l
UG9zaXRpb25Gb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxUb3As
IEluZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRUZXh0KQogewogICAgIGlmIChjaGlsZC5zdHls
ZSgpLmlzT3JpZ2luYWxEaXNwbGF5SW5saW5lVHlwZSgpKQotICAgICAgICBzZXRTdGF0aWNJbmxp
bmVQb3NpdGlvbkZvckNoaWxkKGNoaWxkLCBsb2dpY2FsVG9wLCBjb21wbGV4TGluZUxheW91dCgp
LnN0YXJ0QWxpZ25lZE9mZnNldEZvckxpbmUobG9naWNhbFRvcCwgc2hvdWxkSW5kZW50VGV4dCkp
OworICAgICAgICBzZXRTdGF0aWNJbmxpbmVQb3NpdGlvbkZvckNoaWxkKGNoaWxkLCBsb2dpY2Fs
VG9wLCBzdGFydEFsaWduZWRPZmZzZXRGb3JMaW5lKGxvZ2ljYWxUb3AsIHNob3VsZEluZGVudFRl
eHQpKTsKICAgICBlbHNlCiAgICAgICAgIHNldFN0YXRpY0lubGluZVBvc2l0aW9uRm9yQ2hpbGQo
Y2hpbGQsIGxvZ2ljYWxUb3AsIHN0YXJ0T2Zmc2V0Rm9yQ29udGVudChsb2dpY2FsVG9wKSk7CiB9
CkBAIC05MTMsNiArOTE2LDQ1IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpzZXRTdGF0aWNJbmxp
bmVQb3MKICAgICBjaGlsZC5sYXllcigpLT5zZXRTdGF0aWNJbmxpbmVQb3NpdGlvbihpbmxpbmVQ
b3NpdGlvbik7CiB9CiAKK0xheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93OjpzdGFydEFsaWduZWRP
ZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIEluZGVudFRleHRPck5vdCBzaG91bGRJ
bmRlbnRUZXh0KQoreworICAgIFRleHRBbGlnbk1vZGUgdGV4dEFsaWduID0gc3R5bGUoKS50ZXh0
QWxpZ24oKTsKKyAgICBib29sIHNob3VsZEFwcGx5SW5kZW50VGV4dCA9IGZhbHNlOworICAgIHN3
aXRjaCAodGV4dEFsaWduKSB7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpMZWZ0OgorICAgIGNh
c2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVmdDoKKyAgICAgICAgc2hvdWxkQXBwbHlJbmRlbnRU
ZXh0ID0gc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpX
ZWJLaXRSaWdodDoKKyAgICAgICAgc2hvdWxkQXBwbHlJbmRlbnRUZXh0ID0gIXN0eWxlKCkuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRleHRBbGln
bk1vZGU6OlN0YXJ0OgorICAgICAgICBzaG91bGRBcHBseUluZGVudFRleHQgPSB0cnVlOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzaG91bGRBcHBseUluZGVudFRleHQg
PSBmYWxzZTsKKyAgICB9CisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzE1NDI3NTcxPgorICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ1MjIKKyAgICAvLyBU
aGlzIHF1aXJrIGlzIGZvciBsZWdhY3kgY29udGVudCB0aGF0IGRvZXNuJ3Qgd29yayBwcm9wZXJs
eSB3aXRoIHRoZSBjZW50ZXIgcG9zaXRpb25pbmcgc2NoZW1lCisgICAgLy8gYmVpbmcgaG9ub3Jl
ZCAoZS5nLiwgZXB1YnMpLgorICAgIGlmIChzaG91bGRBcHBseUluZGVudFRleHQgfHwgc2V0dGlu
Z3MoKS51c2VMZWdhY3lUZXh0QWxpZ25Qb3NpdGlvbmVkRWxlbWVudEJlaGF2aW9yKCkpIC8vIEZJ
WE1FOiBIYW5kbGUgVGV4dEFsaWduTW9kZTo6RW5kIGhlcmUKKyAgICAgICAgcmV0dXJuIHN0YXJ0
T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgc2hvdWxkSW5kZW50VGV4dCk7CisKKyAgICAvLyB1cGRh
dGVMb2dpY2FsV2lkdGhGb3JBbGlnbm1lbnQoKSBoYW5kbGVzIHRoZSBkaXJlY3Rpb24gb2YgdGhl
IGJsb2NrIHNvIG5vIG5lZWQgdG8gY29uc2lkZXIgaXQgaGVyZQorICAgIGZsb2F0IHRvdGFsTG9n
aWNhbFdpZHRoID0gMDsKKyAgICBmbG9hdCBsb2dpY2FsTGVmdCA9IGxvZ2ljYWxMZWZ0T2Zmc2V0
Rm9yTGluZShsb2dpY2FsSGVpZ2h0KCksIERvTm90SW5kZW50VGV4dCk7CisgICAgZmxvYXQgYXZh
aWxhYmxlTG9naWNhbFdpZHRoID0gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShsb2dpY2FsSGVp
Z2h0KCksIERvTm90SW5kZW50VGV4dCkgLSBsb2dpY2FsTGVmdDsKKworICAgIENvbXBsZXhMaW5l
TGF5b3V0Ojp1cGRhdGVMb2dpY2FsV2lkdGhGb3JBbGlnbm1lbnQoKnRoaXMsIHRleHRBbGlnbiwg
bnVsbHB0ciwgbnVsbHB0ciwgbG9naWNhbExlZnQsIHRvdGFsTG9naWNhbFdpZHRoLCBhdmFpbGFi
bGVMb2dpY2FsV2lkdGgsIDApOworCisgICAgaWYgKCFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIExheW91dFVuaXQobG9naWNhbFdpZHRoKCkgLSBsb2dp
Y2FsTGVmdCk7CisKKyAgICByZXR1cm4gTGF5b3V0VW5pdChsb2dpY2FsTGVmdCk7Cit9CisKIFJl
bmRlckJsb2NrRmxvdzo6TWFyZ2luVmFsdWVzIFJlbmRlckJsb2NrRmxvdzo6bWFyZ2luVmFsdWVz
Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKIHsKICAgICBMYXlvdXRVbml0IGNoaWxk
QmVmb3JlUG9zaXRpdmU7CkBAIC0yMDY3LDEwICsyMTA5LDEwIEBAIHZvaWQgUmVuZGVyQmxvY2tG
bG93OjpkZWxldGVMaW5lcygpCiAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5jbGVhckxpbmVC
b3hUcmVlUG9pbnRlcnMoKTsKIAogICAgIGlmIChtX3NpbXBsZUxpbmVMYXlvdXQpIHsKLSAgICAg
ICAgQVNTRVJUKCFsaW5lQm94ZXMoKS5maXJzdExpbmVCb3goKSk7CisgICAgICAgIEFTU0VSVCgh
bV9jb21wbGV4TGluZUxheW91dCk7CiAgICAgICAgIG1fc2ltcGxlTGluZUxheW91dCA9IG51bGxw
dHI7Ci0gICAgfSBlbHNlCi0gICAgICAgIGxpbmVCb3hlcygpLmRlbGV0ZUxpbmVCb3hUcmVlKCk7
CisgICAgfSBlbHNlIGlmIChtX2NvbXBsZXhMaW5lTGF5b3V0KQorICAgICAgICBtX2NvbXBsZXhM
aW5lTGF5b3V0LT5saW5lQm94ZXMoKS5kZWxldGVMaW5lQm94VHJlZSgpOwogCiAgICAgUmVuZGVy
QmxvY2s6OmRlbGV0ZUxpbmVzKCk7CiB9CkBAIC0yOTA3LDcgKzI5NDksNyBAQCBib29sIFJlbmRl
ckJsb2NrRmxvdzo6aGl0VGVzdElubGluZUNoaWxkCiAgICAgaWYgKGF1dG8gc2ltcGxlTGluZUxh
eW91dCA9IHRoaXMtPnNpbXBsZUxpbmVMYXlvdXQoKSkKICAgICAgICAgcmV0dXJuIFNpbXBsZUxp
bmVMYXlvdXQ6OmhpdFRlc3RGbG93KCp0aGlzLCAqc2ltcGxlTGluZUxheW91dCwgcmVxdWVzdCwg
cmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgaGl0VGVzdEFj
dGlvbik7CiAKLSAgICByZXR1cm4gbGluZUJveGVzKCkuaGl0VGVzdCh0aGlzLCByZXF1ZXN0LCBy
ZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0
aW9uKTsKKyAgICByZXR1cm4gbV9jb21wbGV4TGluZUxheW91dCAmJiBtX2NvbXBsZXhMaW5lTGF5
b3V0LT5saW5lQm94ZXMoKS5oaXRUZXN0KHRoaXMsIHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25J
bkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24pOwogfQogCiB2b2lk
IFJlbmRlckJsb2NrRmxvdzo6YWRkT3ZlcmZsb3dGcm9tSW5saW5lQ2hpbGRyZW4oKQpAQCAtMjkx
OCw3ICsyOTYwLDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFkZE92ZXJmbG93RnJvbUlubAog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY29tcGxleExpbmVMYXlvdXQoKS5hZGRPdmVy
Zmxvd0Zyb21JbmxpbmVDaGlsZHJlbigpOworICAgIG1fY29tcGxleExpbmVMYXlvdXQtPmFkZE92
ZXJmbG93RnJvbUlubGluZUNoaWxkcmVuKCk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojph
ZGp1c3RGb3JCb3JkZXJGaXQoTGF5b3V0VW5pdCB4LCBMYXlvdXRVbml0JiBsZWZ0LCBMYXlvdXRV
bml0JiByaWdodCkgY29uc3QKQEAgLTM1MDAsNyArMzU0Miw5IEBAIHZvaWQgUmVuZGVyQmxvY2tG
bG93OjpwYWludElubGluZUNoaWxkcmUKICAgICAgICAgU2ltcGxlTGluZUxheW91dDo6cGFpbnRG
bG93KCp0aGlzLCAqc2ltcGxlTGluZUxheW91dCwgcGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbGluZUJveGVzKCkucGFpbnQodGhpcywgcGFpbnRJ
bmZvLCBwYWludE9mZnNldCk7CisKKyAgICBpZiAobV9jb21wbGV4TGluZUxheW91dCkKKyAgICAg
ICAgbV9jb21wbGV4TGluZUxheW91dC0+bGluZUJveGVzKCkucGFpbnQodGhpcywgcGFpbnRJbmZv
LCBwYWludE9mZnNldCk7CiB9CiAKIGJvb2wgUmVuZGVyQmxvY2tGbG93OjpyZWxheW91dEZvclBh
Z2luYXRpb24oKQpAQCAtMzU1NSw3ICszNTk5LDcgQEAgYm9vbCBSZW5kZXJCbG9ja0Zsb3c6Omhh
c0xpbmVzKCkgY29uc3QKICAgICBpZiAoYXV0byBzaW1wbGVMaW5lTGF5b3V0ID0gdGhpcy0+c2lt
cGxlTGluZUxheW91dCgpKQogICAgICAgICByZXR1cm4gc2ltcGxlTGluZUxheW91dC0+bGluZUNv
dW50KCk7CiAKLSAgICByZXR1cm4gbGluZUJveGVzKCkuZmlyc3RMaW5lQm94KCk7CisgICAgcmV0
dXJuIG1fY29tcGxleExpbmVMYXlvdXQgJiYgbV9jb21wbGV4TGluZUxheW91dC0+bGluZUJveGVz
KCkuZmlyc3RMaW5lQm94KCk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2tGbG93OjppbnZhbGlkYXRl
TGluZUxheW91dFBhdGgoKQpAQCAtMzU5NSw3ICszNjM5LDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zs
b3c6OmxheW91dFNpbXBsZUxpbmVzKAogICAgIH0KICAgICBmb3IgKGF1dG8mIHJlbmRlcmVyIDog
Y2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0PigqdGhpcykpCiAgICAgICAgIHJlbmRlcmVyLmNs
ZWFyTmVlZHNMYXlvdXQoKTsKLSAgICBBU1NFUlQoIWxpbmVCb3hlcygpLmZpcnN0TGluZUJveCgp
KTsKKyAgICBBU1NFUlQoIW1fY29tcGxleExpbmVMYXlvdXQpOwogICAgIExheW91dFVuaXQgbGlu
ZUxheW91dEhlaWdodCA9IFNpbXBsZUxpbmVMYXlvdXQ6OmNvbXB1dGVGbG93SGVpZ2h0KCp0aGlz
LCAqbV9zaW1wbGVMaW5lTGF5b3V0KTsKICAgICBMYXlvdXRVbml0IGxpbmVMYXlvdXRUb3AgPSBi
b3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7CiAgICAgcmVwYWludExvZ2ljYWxUb3AgPSBsaW5lTGF5
b3V0VG9wOwpAQCAtMzYwNiw3ICszNjUwLDEwIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlv
dXRTaW1wbGVMaW5lcygKIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpkZWxldGVMaW5lQm94ZXNCZWZv
cmVTaW1wbGVMaW5lTGF5b3V0KCkKIHsKICAgICBBU1NFUlQobGluZUxheW91dFBhdGgoKSA9PSBT
aW1wbGVMaW5lc1BhdGgpOwotICAgIGxpbmVCb3hlcygpLmRlbGV0ZUxpbmVCb3hlcygpOworCisg
ICAgaWYgKG1fY29tcGxleExpbmVMYXlvdXQpCisgICAgICAgIG1fY29tcGxleExpbmVMYXlvdXQt
PmxpbmVCb3hlcygpLmRlbGV0ZUxpbmVCb3hlcygpOworCiAgICAgZm9yIChhdXRvJiByZW5kZXJl
ciA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4oKnRoaXMpKSB7CiAgICAgICAgIGlmIChp
czxSZW5kZXJUZXh0PihyZW5kZXJlcikpCiAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJUZXh0
PihyZW5kZXJlcikuZGVsZXRlTGluZUJveGVzQmVmb3JlU2ltcGxlTGluZUxheW91dCgpOwpAQCAt
MzYxNSwxNCArMzY2MiwyMCBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6ZGVsZXRlTGluZUJveGVz
QmVmCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
IH0KKworICAgIG1fY29tcGxleExpbmVMYXlvdXQgPSBudWxscHRyOwogfQogCiB2b2lkIFJlbmRl
ckJsb2NrRmxvdzo6ZW5zdXJlTGluZUJveGVzKCkKIHsKICAgICBzZXRMaW5lTGF5b3V0UGF0aChG
b3JjZUxpbmVCb3hlc1BhdGgpOworCiAgICAgaWYgKCFtX3NpbXBsZUxpbmVMYXlvdXQpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIEFTU0VSVCghbV9jb21wbGV4TGluZUxheW91dCk7CisgICAgbV9j
b21wbGV4TGluZUxheW91dCA9IHN0ZDo6bWFrZV91bmlxdWU8Q29tcGxleExpbmVMYXlvdXQ+KCp0
aGlzKTsKKwogICAgIGlmIChTaW1wbGVMaW5lTGF5b3V0OjpjYW5Vc2VGb3JMaW5lQm94VHJlZSgq
dGhpcywgKm1fc2ltcGxlTGluZUxheW91dCkpIHsKICAgICAgICAgU2ltcGxlTGluZUxheW91dDo6
Z2VuZXJhdGVMaW5lQm94VHJlZSgqdGhpcywgKm1fc2ltcGxlTGluZUxheW91dCk7CiAgICAgICAg
IG1fc2ltcGxlTGluZUxheW91dCA9IG51bGxwdHI7CkBAIC0zNjQxLDE0ICszNjk0LDE0IEBAIHZv
aWQgUmVuZGVyQmxvY2tGbG93OjplbnN1cmVMaW5lQm94ZXMoKQogICAgIExheW91dFVuaXQgcmVw
YWludExvZ2ljYWxCb3R0b207CiAgICAgaWYgKGlzUGFnaW5hdGVkKSB7CiAgICAgICAgIFBhZ2lu
YXRlZExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZSgqdGhpcyk7Ci0gICAgICAgIGNvbXBsZXhM
aW5lTGF5b3V0KCkubGF5b3V0TGluZUJveGVzKHJlbGF5b3V0Q2hpbGRyZW4sIHJlcGFpbnRMb2dp
Y2FsVG9wLCByZXBhaW50TG9naWNhbEJvdHRvbSk7CisgICAgICAgIG1fY29tcGxleExpbmVMYXlv
dXQtPmxheW91dExpbmVCb3hlcyhyZWxheW91dENoaWxkcmVuLCByZXBhaW50TG9naWNhbFRvcCwg
cmVwYWludExvZ2ljYWxCb3R0b20pOwogICAgICAgICAvLyBUaGlzIG1hdGNoZXMgcmVsYXlvdXRU
b0F2b2lkV2lkb3dzLgogICAgICAgICBpZiAoc2hvdWxkQnJlYWtBdExpbmVUb0F2b2lkV2lkb3co
KSkKLSAgICAgICAgICAgIGNvbXBsZXhMaW5lTGF5b3V0KCkubGF5b3V0TGluZUJveGVzKHJlbGF5
b3V0Q2hpbGRyZW4sIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbEJvdHRvbSk7Cisg
ICAgICAgICAgICBtX2NvbXBsZXhMaW5lTGF5b3V0LT5sYXlvdXRMaW5lQm94ZXMocmVsYXlvdXRD
aGlsZHJlbiwgcmVwYWludExvZ2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKICAgICAg
ICAgLy8gRklYTUU6IFRoaXMgaXMgbmVlZGVkIGFzIGxvbmcgYXMgc2ltcGxlIGFuZCBub3JtYWwg
bGluZSBsYXlvdXQgcHJvZHVjZSBkaWZmZXJlbnQgbGluZSBicmVha2luZ3MuCiAgICAgICAgIHJl
cGFpbnQoKTsKICAgICB9IGVsc2UKLSAgICAgICAgY29tcGxleExpbmVMYXlvdXQoKS5sYXlvdXRM
aW5lQm94ZXMocmVsYXlvdXRDaGlsZHJlbiwgcmVwYWludExvZ2ljYWxUb3AsIHJlcGFpbnRMb2dp
Y2FsQm90dG9tKTsKKyAgICAgICAgbV9jb21wbGV4TGluZUxheW91dC0+bGF5b3V0TGluZUJveGVz
KHJlbGF5b3V0Q2hpbGRyZW4sIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbEJvdHRv
bSk7CiAKICAgICB1cGRhdGVMb2dpY2FsSGVpZ2h0KCk7CiAgICAgQVNTRVJUKGRpZE5lZWRMYXlv
dXQgfHwgbG9naWNhbEhlaWdodCgpID09IG9sZEhlaWdodCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCShyZXZpc2lvbiAyNDg1MjUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgJKHdvcmtpbmcgY29weSkKQEAg
LTcwLDcgKzcwLDExIEBAIHByb3RlY3RlZDoKICAgICBMYXlvdXRVbml0IGNvbGxhcHNlZE1hcmdp
bkJlZm9yZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1heFBvc2l0aXZlTWFyZ2luQmVmb3JlKCkg
LSBtYXhOZWdhdGl2ZU1hcmdpbkJlZm9yZSgpOyB9CiAgICAgTGF5b3V0VW5pdCBjb2xsYXBzZWRN
YXJnaW5BZnRlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1heFBvc2l0aXZlTWFyZ2luQWZ0ZXIo
KSAtIG1heE5lZ2F0aXZlTWFyZ2luQWZ0ZXIoKTsgfQogCi0gICAgdm9pZCBkaXJ0eUxpbmVzRnJv
bUNoYW5nZWRDaGlsZChSZW5kZXJPYmplY3QmIGNoaWxkKSBmaW5hbCB7IGxpbmVCb3hlcygpLmRp
cnR5TGluZXNGcm9tQ2hhbmdlZENoaWxkKCp0aGlzLCBjaGlsZCk7IH0KKyAgICB2b2lkIGRpcnR5
TGluZXNGcm9tQ2hhbmdlZENoaWxkKFJlbmRlck9iamVjdCYgY2hpbGQpIGZpbmFsCisgICAgewor
ICAgICAgICBpZiAobV9jb21wbGV4TGluZUxheW91dCkKKyAgICAgICAgICAgIG1fY29tcGxleExp
bmVMYXlvdXQtPmxpbmVCb3hlcygpLmRpcnR5TGluZXNGcm9tQ2hhbmdlZENoaWxkKCp0aGlzLCBj
aGlsZCk7CisgICAgfQogCiAgICAgdm9pZCBwYWludENvbHVtblJ1bGVzKFBhaW50SW5mbyYsIGNv
bnN0IExheW91dFBvaW50Jikgb3ZlcnJpZGU7CiAKQEAgLTIzMSw2ICsyMzUsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRTdGF0aWNJbmxpbmVQb3NpdGlvbkZvckNoaWxkKFJlbmRlckJveCYgY2hp
bGQsIExheW91dFVuaXQgYmxvY2tPZmZzZXQsIExheW91dFVuaXQgaW5saW5lUG9zaXRpb24pOwog
ICAgIHZvaWQgdXBkYXRlU3RhdGljSW5saW5lUG9zaXRpb25Gb3JDaGlsZChSZW5kZXJCb3gmIGNo
aWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIEluZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRU
ZXh0KTsKIAorICAgIExheW91dFVuaXQgc3RhcnRBbGlnbmVkT2Zmc2V0Rm9yTGluZShMYXlvdXRV
bml0IHBvc2l0aW9uLCBJbmRlbnRUZXh0T3JOb3QpOworCiAgICAgTGF5b3V0VW5pdCBjb2xsYXBz
ZU1hcmdpbnMoUmVuZGVyQm94JiBjaGlsZCwgTWFyZ2luSW5mbyYpOwogICAgIExheW91dFVuaXQg
Y29sbGFwc2VNYXJnaW5zV2l0aENoaWxkSW5mbyhSZW5kZXJCb3gqIGNoaWxkLCBSZW5kZXJPYmpl
Y3QqIHByZXZTaWJsaW5nLCBNYXJnaW5JbmZvJik7CiAKQEAgLTMyNiwxMSArMzMyLDggQEAgcHVi
bGljOgogCiAgICAgTGF5b3V0UG9pbnQgZmxpcEZsb2F0Rm9yV3JpdGluZ01vZGVGb3JDaGlsZChj
b25zdCBGbG9hdGluZ09iamVjdCYsIGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7CiAKLSAgICBS
ZW5kZXJMaW5lQm94TGlzdCYgbGluZUJveGVzKCkgeyByZXR1cm4gbV9jb21wbGV4TGluZUxheW91
dC5saW5lQm94ZXMoKTsgfQotICAgIGNvbnN0IFJlbmRlckxpbmVCb3hMaXN0JiBsaW5lQm94ZXMo
KSBjb25zdCB7IHJldHVybiBtX2NvbXBsZXhMaW5lTGF5b3V0LmxpbmVCb3hlcygpOyB9Ci0KLSAg
ICBSb290SW5saW5lQm94KiBmaXJzdFJvb3RCb3goKSBjb25zdCB7IHJldHVybiBtX2NvbXBsZXhM
aW5lTGF5b3V0LmZpcnN0Um9vdEJveCgpOyB9Ci0gICAgUm9vdElubGluZUJveCogbGFzdFJvb3RC
b3goKSBjb25zdCB7IHJldHVybiBtX2NvbXBsZXhMaW5lTGF5b3V0Lmxhc3RSb290Qm94KCk7IH0K
KyAgICBSb290SW5saW5lQm94KiBmaXJzdFJvb3RCb3goKSBjb25zdCB7IHJldHVybiBtX2NvbXBs
ZXhMaW5lTGF5b3V0ID8gbV9jb21wbGV4TGluZUxheW91dC0+Zmlyc3RSb290Qm94KCkgOiBudWxs
cHRyOyB9CisgICAgUm9vdElubGluZUJveCogbGFzdFJvb3RCb3goKSBjb25zdCB7IHJldHVybiBt
X2NvbXBsZXhMaW5lTGF5b3V0ID8gbV9jb21wbGV4TGluZUxheW91dC0+bGFzdFJvb3RCb3goKSA6
IG51bGxwdHI7IH0KIAogICAgIGJvb2wgaGFzTGluZXMoKSBjb25zdDsKICAgICB2b2lkIGludmFs
aWRhdGVMaW5lTGF5b3V0UGF0aCgpIGZpbmFsOwpAQCAtNTE4LDcgKzUyMSw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBhZGRGb2N1c1JpbmdSZWN0c0ZvcklubGluZUNoaWxkcmVuKFZlY3RvcjxMYXlv
dXRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0LCBjb25z
dCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Kikgb3ZlcnJpZGU7CiAKIHB1YmxpYzoKLSAgICBDb21w
bGV4TGluZUxheW91dCYgY29tcGxleExpbmVMYXlvdXQoKSB7IHJldHVybiBtX2NvbXBsZXhMaW5l
TGF5b3V0OyB9CisgICAgQ29tcGxleExpbmVMYXlvdXQqIGNvbXBsZXhMaW5lTGF5b3V0KCkgeyBy
ZXR1cm4gbV9jb21wbGV4TGluZUxheW91dC5nZXQoKTsgfQogCiAgICAgdmlydHVhbCBPcHRpb25h
bDxUZXh0QWxpZ25Nb2RlPiBvdmVycmlkZVRleHRBbGlnbm1lbnRGb3JMaW5lKGJvb2wgLyogZW5k
c1dpdGhTb2Z0QnJlYWsgKi8pIGNvbnN0IHsgcmV0dXJuIHsgfTsgfQogICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RJbmxpbmVEaXJlY3Rpb25MaW5lQm91bmRzKGludCAvKiBleHBhbnNpb25PcHBvcnR1
bml0eUNvdW50ICovLCBmbG9hdCYgLyogbG9naWNhbExlZnQgKi8sIGZsb2F0JiAvKiBsb2dpY2Fs
V2lkdGggKi8pIGNvbnN0IHsgfQpAQCAtNTYzLDcgKzU2Niw3IEBAIHByb3RlY3RlZDoKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQmxvY2tGbG93UmFyZURhdGE+IG1fcmFyZUJsb2NrRmxvd0Rh
dGE7CiAKICAgICAvLyBGSVhNRTogT25seSBvbmUgb2YgdGhlc2Ugc2hvdWxkIGJlIG5lZWRlZCBh
dCBhbnkgZ2l2ZW4gdGltZS4KLSAgICBDb21wbGV4TGluZUxheW91dCBtX2NvbXBsZXhMaW5lTGF5
b3V0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxDb21wbGV4TGluZUxheW91dD4gbV9jb21wbGV4TGlu
ZUxheW91dDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2ltcGxlTGluZUxheW91dDo6TGF5b3V0PiBt
X3NpbXBsZUxpbmVMYXlvdXQ7CiAKICAgICBmcmllbmQgY2xhc3MgTGluZUJyZWFrZXI7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiAy
NDg1MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgyOCwxNyArODI4LDE3IEBAIEVsbGlwc2lzQm94KiBSb290SW5saW5l
Qm94OjplbGxpcHNpc0JveCgKIAogdm9pZCBSb290SW5saW5lQm94OjpyZW1vdmVMaW5lQm94RnJv
bVJlbmRlck9iamVjdCgpCiB7Ci0gICAgYmxvY2tGbG93KCkubGluZUJveGVzKCkucmVtb3ZlTGlu
ZUJveCh0aGlzKTsKKyAgICBibG9ja0Zsb3coKS5jb21wbGV4TGluZUxheW91dCgpLT5saW5lQm94
ZXMoKS5yZW1vdmVMaW5lQm94KHRoaXMpOwogfQogCiB2b2lkIFJvb3RJbmxpbmVCb3g6OmV4dHJh
Y3RMaW5lQm94RnJvbVJlbmRlck9iamVjdCgpCiB7Ci0gICAgYmxvY2tGbG93KCkubGluZUJveGVz
KCkuZXh0cmFjdExpbmVCb3godGhpcyk7CisgICAgYmxvY2tGbG93KCkuY29tcGxleExpbmVMYXlv
dXQoKS0+bGluZUJveGVzKCkuZXh0cmFjdExpbmVCb3godGhpcyk7CiB9CiAKIHZvaWQgUm9vdElu
bGluZUJveDo6YXR0YWNoTGluZUJveFRvUmVuZGVyT2JqZWN0KCkKIHsKLSAgICBibG9ja0Zsb3co
KS5saW5lQm94ZXMoKS5hdHRhY2hMaW5lQm94KHRoaXMpOworICAgIGJsb2NrRmxvdygpLmNvbXBs
ZXhMaW5lTGF5b3V0KCktPmxpbmVCb3hlcygpLmF0dGFjaExpbmVCb3godGhpcyk7CiB9CiAKIExh
eW91dFJlY3QgUm9vdElubGluZUJveDo6cGFkZGVkTGF5b3V0T3ZlcmZsb3dSZWN0KExheW91dFVu
aXQgZW5kUGFkZGluZykgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDI0ODUyNSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMxLDcgKzMzMSw3IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxp
emVJbmxpbmVUZXh0Qm94KFJlbmQKIAogdm9pZCBnZW5lcmF0ZUxpbmVCb3hUcmVlKFJlbmRlckJs
b2NrRmxvdyYgZmxvdywgY29uc3QgTGF5b3V0JiBsYXlvdXQpCiB7Ci0gICAgQVNTRVJUKCFmbG93
LmxpbmVCb3hlcygpLmZpcnN0TGluZUJveCgpKTsKKyAgICBBU1NFUlQoIWZsb3cuY29tcGxleExp
bmVMYXlvdXQoKS0+bGluZUJveGVzKCkuZmlyc3RMaW5lQm94KCkpOwogICAgIGlmICghbGF5b3V0
LnJ1bkNvdW50KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzUxLDEyICszNTEsMTIgQEAgdm9p
ZCBnZW5lcmF0ZUxpbmVCb3hUcmVlKFJlbmRlckJsb2NrRmxvdwogICAgICAgICB9CiAKICAgICAg
ICAgTGluZUluZm8gbGluZUluZm87Ci0gICAgICAgIGxpbmVJbmZvLnNldEZpcnN0TGluZSghZmxv
dy5saW5lQm94ZXMoKS5maXJzdExpbmVCb3goKSk7CisgICAgICAgIGxpbmVJbmZvLnNldEZpcnN0
TGluZSghZmxvdy5jb21wbGV4TGluZUxheW91dCgpLT5saW5lQm94ZXMoKS5maXJzdExpbmVCb3go
KSk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5lZWRlZCBmb3IgZmxvdyBib3hlcyAtYnV0
IHdlIGRvbid0IGhhdmUgdGhlbSB5ZXQuCiAgICAgICAgIC8vIGxpbmVJbmZvLnNldExhc3RMaW5l
KGxhc3RMaW5lKTsKICAgICAgICAgbGluZUluZm8uc2V0RW1wdHkoIWJpZGlSdW5zLnJ1bkNvdW50
KCkpOwogICAgICAgICBiaWRpUnVucy5zZXRMb2dpY2FsbHlMYXN0UnVuKGJpZGlSdW5zLmxhc3RS
dW4oKSk7Ci0gICAgICAgIGF1dG8qIHJvb3QgPSBmbG93LmNvbXBsZXhMaW5lTGF5b3V0KCkuY29u
c3RydWN0TGluZShiaWRpUnVucywgbGluZUluZm8pOworICAgICAgICBhdXRvKiByb290ID0gZmxv
dy5jb21wbGV4TGluZUxheW91dCgpLT5jb25zdHJ1Y3RMaW5lKGJpZGlSdW5zLCBsaW5lSW5mbyk7
CiAgICAgICAgIGJpZGlSdW5zLmNsZWFyKCk7CiAgICAgICAgIGlmICghcm9vdCkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUJy
ZWFrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xp
bmVCcmVha2VyLmNwcAkocmV2aXNpb24gMjQ4NTI1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL2xpbmUvTGluZUJyZWFrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBA
IHZvaWQgTGluZUJyZWFrZXI6OnNraXBMZWFkaW5nV2hpdGVzcGFjZSgKICAgICAgICAgICAgICAg
ICBsaW5lSW5mby5pbmNyZW1lbnRSdW5zRnJvbUxlYWRpbmdXaGl0ZXNwYWNlKCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAob2JqZWN0LmlzRmxvYXRpbmcoKSkKLSAgICAgICAg
ICAgIG1fYmxvY2suY29tcGxleExpbmVMYXlvdXQoKS5wb3NpdGlvbk5ld0Zsb2F0T25MaW5lKCpt
X2Jsb2NrLmluc2VydEZsb2F0aW5nT2JqZWN0KGRvd25jYXN0PFJlbmRlckJveD4ob2JqZWN0KSks
IGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIGxpbmVJbmZvLCB3aWR0aCk7CisgICAgICAgICAg
ICBtX2Jsb2NrLmNvbXBsZXhMaW5lTGF5b3V0KCktPnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUoKm1f
YmxvY2suaW5zZXJ0RmxvYXRpbmdPYmplY3QoZG93bmNhc3Q8UmVuZGVyQm94PihvYmplY3QpKSwg
bGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgbGluZUluZm8sIHdpZHRoKTsKICAgICAgICAgZWxz
ZSBpZiAob2JqZWN0LnN0eWxlKCkuaGFzVGV4dENvbWJpbmUoKSAmJiBpczxSZW5kZXJDb21iaW5l
VGV4dD4ob2JqZWN0KSkgewogICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQ29tYmluZVRleHQ+
KG9iamVjdCkuY29tYmluZVRleHRJZk5lZWRlZCgpOwogICAgICAgICAgICAgaWYgKGRvd25jYXN0
PFJlbmRlckNvbWJpbmVUZXh0PihvYmplY3QpLmlzQ29tYmluZWQoKSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVCcmVha2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIuaAkocmV2aXNpb24gMjQ4NTI1KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNjYsNyArNjYsNyBAQCBwcml2YXRlOgogICAgIEZsb2F0aW5nT2JqZWN0KiBpbnNl
cnRGbG9hdGluZ09iamVjdChSZW5kZXJCb3gmIGZsb2F0Qm94KSB7IHJldHVybiBtX2Jsb2NrLmlu
c2VydEZsb2F0aW5nT2JqZWN0KGZsb2F0Qm94KTsgfQogICAgIGJvb2wgcG9zaXRpb25OZXdGbG9h
dE9uTGluZShjb25zdCBGbG9hdGluZ09iamVjdCYgbmV3RmxvYXQsIEZsb2F0aW5nT2JqZWN0KiBs
YXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBMaW5lSW5mbyYgbGluZUluZm8sIExpbmVXaWR0aCYg
d2lkdGgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9ibG9jay5jb21wbGV4TGluZUxheW91dCgp
LnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUobmV3RmxvYXQsIGxhc3RGbG9hdEZyb21QcmV2aW91c0xp
bmUsIGxpbmVJbmZvLCB3aWR0aCk7CisgICAgICAgIHJldHVybiBtX2Jsb2NrLmNvbXBsZXhMaW5l
TGF5b3V0KCktPnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUobmV3RmxvYXQsIGxhc3RGbG9hdEZyb21Q
cmV2aW91c0xpbmUsIGxpbmVJbmZvLCB3aWR0aCk7CiAgICAgfQogCiAgICAgUmVuZGVyQmxvY2tG
bG93JiBtX2Jsb2NrOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUlu
bGluZUhlYWRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGlu
ZS9MaW5lSW5saW5lSGVhZGVycy5oCShyZXZpc2lvbiAyNDg1MjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbGluZS9MaW5lSW5saW5lSGVhZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzAsNyArMTMwLDcgQEAgaW5saW5lIHZvaWQgc2V0U3RhdGljUG9zaXRpb25zKFJlbmRlckJsbwog
ICAgICAgICAvLyBBIHJlbGF0aXZlIHBvc2l0aW9uZWQgaW5saW5lIGVuY2xvc2VzIHVzLiBJbiB0
aGlzIGNhc2UsIHdlIGFsc28gaGF2ZSB0byBkZXRlcm1pbmUgb3VyCiAgICAgICAgIC8vIHBvc2l0
aW9uIGFzIHRob3VnaCB3ZSB3ZXJlIGFuIGlubGluZS4gU2V0IHxzdGF0aWNJbmxpbmVQb3NpdGlv
bnwgYW5kIHxzdGF0aWNCbG9ja1Bvc2l0aW9ufCBvbiB0aGUgcmVsYXRpdmUgcG9zaXRpb25lZAog
ICAgICAgICAvLyBpbmxpbmUgc28gdGhhdCB3ZSBjYW4gb2J0YWluIHRoZSB2YWx1ZSBsYXRlci4K
LSAgICAgICAgZG93bmNhc3Q8UmVuZGVySW5saW5lPigqY29udGFpbmVyQmxvY2spLmxheWVyKCkt
PnNldFN0YXRpY0lubGluZVBvc2l0aW9uKGJsb2NrLmNvbXBsZXhMaW5lTGF5b3V0KCkuc3RhcnRB
bGlnbmVkT2Zmc2V0Rm9yTGluZShibG9ja0hlaWdodCwgRG9Ob3RJbmRlbnRUZXh0KSk7CisgICAg
ICAgIGRvd25jYXN0PFJlbmRlcklubGluZT4oKmNvbnRhaW5lckJsb2NrKS5sYXllcigpLT5zZXRT
dGF0aWNJbmxpbmVQb3NpdGlvbihibG9jay5zdGFydEFsaWduZWRPZmZzZXRGb3JMaW5lKGJsb2Nr
SGVpZ2h0LCBEb05vdEluZGVudFRleHQpKTsKICAgICAgICAgZG93bmNhc3Q8UmVuZGVySW5saW5l
PigqY29udGFpbmVyQmxvY2spLmxheWVyKCktPnNldFN0YXRpY0Jsb2NrUG9zaXRpb24oYmxvY2tI
ZWlnaHQpOwogICAgIH0KICAgICBibG9jay51cGRhdGVTdGF0aWNJbmxpbmVQb3NpdGlvbkZvckNo
aWxkKGNoaWxkLCBibG9ja0hlaWdodCwgc2hvdWxkSW5kZW50VGV4dCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376058</attachid>
            <date>2019-08-12 06:10:43 -0700</date>
            <delta_ts>2019-08-12 08:31:40 -0700</delta_ts>
            <desc>patch</desc>
            <filename>complex-line-layout-on-demand-6.patch</filename>
            <type>text/plain</type>
            <size>33663</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0ODUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDE5LTA4LTEyICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBPbmx5IGNvbnN0cnVjdCBDb21w
bGV4TGluZUxheW91dCB3aGVuIG5lZWRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjAwNjI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiByZW5kZXJpbmcvQ29tcGxleExpbmVMYXlvdXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcGxleExpbmVMYXlvdXQ6OmNyZWF0ZUlubGluZUJveEZvclJlbmRl
cmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhMaW5lTGF5b3V0OjpjcmVhdGVMaW5lQm94
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleExpbmVMYXlvdXQ6OmNvbnN0cnVjdExpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleExpbmVMYXlvdXQ6OnVwZGF0ZUxvZ2ljYWxXaWR0
aEZvckFsaWdubWVudCk6CisKKyAgICAgICAgTWFrZSBzdGF0aWMgc28gdGhpcyBjYW4gYmUgaW52
b2tlZCB3aXRob3V0IGNvbnN0cnVjdGluZyBjb21wbGV4IGxpbmUgbGF5b3V0IChmcm9tIHN0YXJ0
QWxpZ25lZE9mZnNldEZvckxpbmUpLgorCisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4TGluZUxh
eW91dDo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvclNlZ21lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcGxleExpbmVMYXlvdXQ6OmRlbGV0ZUVsbGlwc2lzTGluZUJveGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhMaW5lTGF5b3V0OjpjaGVja0xpbmVzRm9yVGV4dE92
ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhMaW5lTGF5b3V0OjpzdGFydEFsaWdu
ZWRPZmZzZXRGb3JMaW5lKTogRGVsZXRlZC4KKworICAgICAgICBUaGlzIGlzIGFsc28gdXNlZCBp
biBibG9jayBsYXlvdXQgdG8gc2V0IHN0YXRpYyBwb3NpdGlvbnMgb2YgcG9zaXRpb25lZCBvYmpl
Y3RzLgorICAgICAgICBNb3ZlIHRvIFJlbmRlckJsb2NrRmxvdyB3aGVyZSBpdHMgb25seSBjYWxs
ZXIgaXMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvQ29tcGxleExpbmVMYXlvdXQuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrRmxvdzo6UmVuZGVyQmxvY2tGbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrRmxvdzo6d2lsbEJlRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrRmxvdzo6bGF5b3V0SW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2tGbG93Ojp1cGRhdGVTdGF0aWNJbmxpbmVQb3NpdGlvbkZvckNoaWxkKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6c3RhcnRBbGlnbmVkT2Zmc2V0Rm9yTGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmRlbGV0ZUxpbmVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6aGl0VGVzdElubGluZUNoaWxkcmVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6YWRkT3ZlcmZsb3dGcm9tSW5saW5lQ2hpbGRy
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpwYWludElubGluZUNoaWxk
cmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6aGFzTGluZXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRTaW1wbGVMaW5lcyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmRlbGV0ZUxpbmVCb3hlc0JlZm9y
ZVNpbXBsZUxpbmVMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93Ojpl
bnN1cmVMaW5lQm94ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6Zmlyc3RSb290Qm94IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bGFzdFJvb3RCb3ggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93Ojpjb21wbGV4TGluZUxheW91dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxpbmVCb3hlcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxpbmVCb3hlcyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Um9vdElubGluZUJveDo6cmVtb3ZlTGluZUJveEZyb21SZW5kZXJPYmplY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6ZXh0cmFjdExpbmVCb3hGcm9tUmVuZGVyT2Jq
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OmF0dGFjaExpbmVCb3hUb1Jl
bmRlck9iamVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlv
bnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Z2VuZXJhdGVMaW5l
Qm94VHJlZSk6CisKIDIwMTktMDgtMTEgIEFsaWNpYSBCb3lhIEdhcmPDrWEgIDxhYm95YUBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtNU0VdW0dTdHJlYW1lcl0gRG9uJ3QgdXNlIHZvcmJpc3BhcnNl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29tcGxleExpbmVMYXlvdXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db21wbGV4TGluZUxheW91dC5j
cHAJKHJldmlzaW9uIDI0ODUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db21wbGV4
TGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MiwxMCArMTUyLDEwIEBAIFJvb3RJ
bmxpbmVCb3gqIENvbXBsZXhMaW5lTGF5b3V0OjpjcmVhdGUKICAgICByZXR1cm4gcm9vdEJveDsK
IH0KIAotaW5saW5lIElubGluZUJveCogQ29tcGxleExpbmVMYXlvdXQ6OmNyZWF0ZUlubGluZUJv
eEZvclJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGJvb2wgaXNSb290TGluZUJveCwg
Ym9vbCBpc09ubHlSdW4pCitJbmxpbmVCb3gqIENvbXBsZXhMaW5lTGF5b3V0OjpjcmVhdGVJbmxp
bmVCb3hGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBib29sIGlzT25seVJ1bikK
IHsKLSAgICBpZiAoaXNSb290TGluZUJveCkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRl
ckJsb2NrRmxvdz4oKnJlbmRlcmVyKS5jb21wbGV4TGluZUxheW91dCgpLmNyZWF0ZUFuZEFwcGVu
ZFJvb3RJbmxpbmVCb3goKTsKKyAgICBpZiAocmVuZGVyZXIgPT0gJm1fZmxvdykKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZUFuZEFwcGVuZFJvb3RJbmxpbmVCb3goKTsKIAogICAgIGlmIChpczxSZW5k
ZXJUZXh0PigqcmVuZGVyZXIpKQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGV4dD4o
KnJlbmRlcmVyKS5jcmVhdGVJbmxpbmVUZXh0Qm94KCk7CkBAIC0yMjYsNyArMjI2LDcgQEAgSW5s
aW5lRmxvd0JveCogQ29tcGxleExpbmVMYXlvdXQ6OmNyZWF0ZQogICAgICAgICBpZiAoYWxsb3dl
ZFRvQ29uc3RydWN0TmV3Qm94ICYmICFjYW5Vc2VFeGlzdGluZ1BhcmVudEJveCkgewogICAgICAg
ICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIGEgbmV3IGJveCBmb3IgdGhpcyByZW5kZXIgb2JqZWN0
LiBPbmNlCiAgICAgICAgICAgICAvLyBtYWRlLCB3ZSBuZWVkIHRvIHBsYWNlIGl0IGF0IHRoZSBl
bmQgb2YgdGhlIGN1cnJlbnQgbGluZS4KLSAgICAgICAgICAgIElubGluZUJveCogbmV3Qm94ID0g
Y3JlYXRlSW5saW5lQm94Rm9yUmVuZGVyZXIob2JqLCBvYmogPT0gJm1fZmxvdyk7CisgICAgICAg
ICAgICBJbmxpbmVCb3gqIG5ld0JveCA9IGNyZWF0ZUlubGluZUJveEZvclJlbmRlcmVyKG9iaik7
CiAgICAgICAgICAgICBwYXJlbnRCb3ggPSBkb3duY2FzdDxJbmxpbmVGbG93Qm94PihuZXdCb3gp
OwogICAgICAgICAgICAgcGFyZW50Qm94LT5zZXRJc0ZpcnN0TGluZShsaW5lSW5mby5pc0ZpcnN0
TGluZSgpKTsKICAgICAgICAgICAgIHBhcmVudEJveC0+c2V0SXNIb3Jpem9udGFsKG1fZmxvdy5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKQEAgLTMwMSw3ICszMDEsNyBAQCBSb290SW5saW5l
Qm94KiBDb21wbGV4TGluZUxheW91dDo6Y29uc3RyCiAgICAgICAgIGlmIChsaW5lSW5mby5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBJbmxpbmVCb3gqIGJveCA9
IGNyZWF0ZUlubGluZUJveEZvclJlbmRlcmVyKCZyLT5yZW5kZXJlcigpLCBmYWxzZSwgaXNPbmx5
UnVuKTsKKyAgICAgICAgSW5saW5lQm94KiBib3ggPSBjcmVhdGVJbmxpbmVCb3hGb3JSZW5kZXJl
cigmci0+cmVuZGVyZXIoKSwgaXNPbmx5UnVuKTsKICAgICAgICAgci0+c2V0Qm94KGJveCk7CiAK
ICAgICAgICAgaWYgKCFyb290SGFzU2VsZWN0ZWRDaGlsZHJlbiAmJiBib3gtPnJlbmRlcmVyKCku
c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpCkBAIC02MzEs
MTMgKzYzMSwxNSBAQCB2b2lkIENvbXBsZXhMaW5lTGF5b3V0Ojpjb21wdXRlRXhwYW5zaW9uCiAg
ICAgfQogfQogCi12b2lkIENvbXBsZXhMaW5lTGF5b3V0Ojp1cGRhdGVMb2dpY2FsV2lkdGhGb3JB
bGlnbm1lbnQoY29uc3QgVGV4dEFsaWduTW9kZSYgdGV4dEFsaWduLCBjb25zdCBSb290SW5saW5l
Qm94KiByb290SW5saW5lQm94LCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBmbG9hdCYgbG9n
aWNhbExlZnQsIGZsb2F0JiB0b3RhbExvZ2ljYWxXaWR0aCwgZmxvYXQmIGF2YWlsYWJsZUxvZ2lj
YWxXaWR0aCwgaW50IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpCit2b2lkIENvbXBsZXhMaW5l
TGF5b3V0Ojp1cGRhdGVMb2dpY2FsV2lkdGhGb3JBbGlnbm1lbnQoUmVuZGVyQmxvY2tGbG93JiBm
bG93LCBjb25zdCBUZXh0QWxpZ25Nb2RlJiB0ZXh0QWxpZ24sIGNvbnN0IFJvb3RJbmxpbmVCb3gq
IHJvb3RJbmxpbmVCb3gsIEJpZGlSdW4qIHRyYWlsaW5nU3BhY2VSdW4sIGZsb2F0JiBsb2dpY2Fs
TGVmdCwgZmxvYXQmIHRvdGFsTG9naWNhbFdpZHRoLCBmbG9hdCYgYXZhaWxhYmxlTG9naWNhbFdp
ZHRoLCBpbnQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCkKIHsKICAgICBUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbjsKLSAgICBpZiAocm9vdElubGluZUJveCAmJiBzdHlsZSgpLnVuaWNvZGVCaWRp
KCkgPT0gUGxhaW50ZXh0KQorICAgIGlmIChyb290SW5saW5lQm94ICYmIGZsb3cuc3R5bGUoKS51
bmljb2RlQmlkaSgpID09IFBsYWludGV4dCkKICAgICAgICAgZGlyZWN0aW9uID0gcm9vdElubGlu
ZUJveC0+ZGlyZWN0aW9uKCk7CiAgICAgZWxzZQotICAgICAgICBkaXJlY3Rpb24gPSBzdHlsZSgp
LmRpcmVjdGlvbigpOworICAgICAgICBkaXJlY3Rpb24gPSBmbG93LnN0eWxlKCkuZGlyZWN0aW9u
KCk7CisKKyAgICBib29sIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24gPSBmbG93LnN0eWxlKCkuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpOwogCiAgICAgLy8gQXJtZWQgd2l0aCB0aGUgdG90YWwgd2lk
dGggb2YgdGhlIGxpbmUgKHdpdGhvdXQganVzdGlmaWNhdGlvbiksCiAgICAgLy8gd2Ugbm93IGV4
YW1pbmUgb3VyIHRleHQtYWxpZ24gcHJvcGVydHkgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHdoZXJl
IHRvIHBvc2l0aW9uIHRoZQpAQCAtNjQ2LDE4ICs2NDgsMTggQEAgdm9pZCBDb21wbGV4TGluZUxh
eW91dDo6dXBkYXRlTG9naWNhbFdpZAogICAgIHN3aXRjaCAodGV4dEFsaWduKSB7CiAgICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpMZWZ0OgogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVm
dDoKLSAgICAgICAgdXBkYXRlTG9naWNhbFdpZHRoRm9yTGVmdEFsaWduZWRCbG9jayhzdHlsZSgp
LmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSwgdHJhaWxpbmdTcGFjZVJ1biwgbG9naWNhbExlZnQs
IHRvdGFsTG9naWNhbFdpZHRoLCBhdmFpbGFibGVMb2dpY2FsV2lkdGgpOworICAgICAgICB1cGRh
dGVMb2dpY2FsV2lkdGhGb3JMZWZ0QWxpZ25lZEJsb2NrKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24s
IHRyYWlsaW5nU3BhY2VSdW4sIGxvZ2ljYWxMZWZ0LCB0b3RhbExvZ2ljYWxXaWR0aCwgYXZhaWxh
YmxlTG9naWNhbFdpZHRoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUZXh0QWxpZ25Nb2Rl
OjpSaWdodDoKICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0OgotICAgICAgICB1
cGRhdGVMb2dpY2FsV2lkdGhGb3JSaWdodEFsaWduZWRCbG9jayhzdHlsZSgpLmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSwgdHJhaWxpbmdTcGFjZVJ1biwgbG9naWNhbExlZnQsIHRvdGFsTG9naWNh
bFdpZHRoLCBhdmFpbGFibGVMb2dpY2FsV2lkdGgpOworICAgICAgICB1cGRhdGVMb2dpY2FsV2lk
dGhGb3JSaWdodEFsaWduZWRCbG9jayhpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uLCB0cmFpbGluZ1Nw
YWNlUnVuLCBsb2dpY2FsTGVmdCwgdG90YWxMb2dpY2FsV2lkdGgsIGF2YWlsYWJsZUxvZ2ljYWxX
aWR0aCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Q2VudGVyOgog
ICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0Q2VudGVyOgotICAgICAgICB1cGRhdGVMb2dp
Y2FsV2lkdGhGb3JDZW50ZXJBbGlnbmVkQmxvY2soc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCksIHRyYWlsaW5nU3BhY2VSdW4sIGxvZ2ljYWxMZWZ0LCB0b3RhbExvZ2ljYWxXaWR0aCwg
YXZhaWxhYmxlTG9naWNhbFdpZHRoKTsKKyAgICAgICAgdXBkYXRlTG9naWNhbFdpZHRoRm9yQ2Vu
dGVyQWxpZ25lZEJsb2NrKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24sIHRyYWlsaW5nU3BhY2VSdW4s
IGxvZ2ljYWxMZWZ0LCB0b3RhbExvZ2ljYWxXaWR0aCwgYXZhaWxhYmxlTG9naWNhbFdpZHRoKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OgotICAgICAg
ICBtX2Zsb3cuYWRqdXN0SW5saW5lRGlyZWN0aW9uTGluZUJvdW5kcyhleHBhbnNpb25PcHBvcnR1
bml0eUNvdW50LCBsb2dpY2FsTGVmdCwgYXZhaWxhYmxlTG9naWNhbFdpZHRoKTsKKyAgICAgICAg
Zmxvdy5hZGp1c3RJbmxpbmVEaXJlY3Rpb25MaW5lQm91bmRzKGV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnQsIGxvZ2ljYWxMZWZ0LCBhdmFpbGFibGVMb2dpY2FsV2lkdGgpOwogICAgICAgICBpZiAo
ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCkgewogICAgICAgICAgICAgaWYgKHRyYWlsaW5nU3Bh
Y2VSdW4pIHsKICAgICAgICAgICAgICAgICB0b3RhbExvZ2ljYWxXaWR0aCAtPSB0cmFpbGluZ1Nw
YWNlUnVuLT5ib3goKS0+bG9naWNhbFdpZHRoKCk7CkBAIC02NjgsMTUgKzY3MCwxNSBAQCB2b2lk
IENvbXBsZXhMaW5lTGF5b3V0Ojp1cGRhdGVMb2dpY2FsV2lkCiAgICAgICAgIEZBTExUSFJPVUdI
OwogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6U3RhcnQ6CiAgICAgICAgIGlmIChkaXJlY3Rpb24g
PT0gVGV4dERpcmVjdGlvbjo6TFRSKQotICAgICAgICAgICAgdXBkYXRlTG9naWNhbFdpZHRoRm9y
TGVmdEFsaWduZWRCbG9jayhzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSwgdHJhaWxp
bmdTcGFjZVJ1biwgbG9naWNhbExlZnQsIHRvdGFsTG9naWNhbFdpZHRoLCBhdmFpbGFibGVMb2dp
Y2FsV2lkdGgpOworICAgICAgICAgICAgdXBkYXRlTG9naWNhbFdpZHRoRm9yTGVmdEFsaWduZWRC
bG9jayhpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uLCB0cmFpbGluZ1NwYWNlUnVuLCBsb2dpY2FsTGVm
dCwgdG90YWxMb2dpY2FsV2lkdGgsIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aEZvclJpZ2h0QWxpZ25lZEJsb2NrKHN0
eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpLCB0cmFpbGluZ1NwYWNlUnVuLCBsb2dpY2Fs
TGVmdCwgdG90YWxMb2dpY2FsV2lkdGgsIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCk7CisgICAgICAg
ICAgICB1cGRhdGVMb2dpY2FsV2lkdGhGb3JSaWdodEFsaWduZWRCbG9jayhpc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uLCB0cmFpbGluZ1NwYWNlUnVuLCBsb2dpY2FsTGVmdCwgdG90YWxMb2dpY2FsV2lk
dGgsIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVGV4
dEFsaWduTW9kZTo6RW5kOgogICAgICAgICBpZiAoZGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246
OkxUUikKLSAgICAgICAgICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aEZvclJpZ2h0QWxpZ25lZEJsb2Nr
KHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpLCB0cmFpbGluZ1NwYWNlUnVuLCBsb2dp
Y2FsTGVmdCwgdG90YWxMb2dpY2FsV2lkdGgsIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCk7CisgICAg
ICAgICAgICB1cGRhdGVMb2dpY2FsV2lkdGhGb3JSaWdodEFsaWduZWRCbG9jayhpc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uLCB0cmFpbGluZ1NwYWNlUnVuLCBsb2dpY2FsTGVmdCwgdG90YWxMb2dpY2Fs
V2lkdGgsIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHVwZGF0ZUxvZ2ljYWxXaWR0aEZvckxlZnRBbGlnbmVkQmxvY2soc3R5bGUoKS5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCksIHRyYWlsaW5nU3BhY2VSdW4sIGxvZ2ljYWxMZWZ0LCB0b3RhbExvZ2lj
YWxXaWR0aCwgYXZhaWxhYmxlTG9naWNhbFdpZHRoKTsKKyAgICAgICAgICAgIHVwZGF0ZUxvZ2lj
YWxXaWR0aEZvckxlZnRBbGlnbmVkQmxvY2soaXNMZWZ0VG9SaWdodERpcmVjdGlvbiwgdHJhaWxp
bmdTcGFjZVJ1biwgbG9naWNhbExlZnQsIHRvdGFsTG9naWNhbFdpZHRoLCBhdmFpbGFibGVMb2dp
Y2FsV2lkdGgpOwogICAgICAgICBicmVhazsKICAgICB9CiB9CkBAIC05NTksNyArOTYxLDcgQEAg
QmlkaVJ1biogQ29tcGxleExpbmVMYXlvdXQ6OmNvbXB1dGVJbmxpbgogICAgIGlmIChpczxSZW5k
ZXJSdWJ5QmFzZT4obV9mbG93KSAmJiAhZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCkKICAgICAg
ICAgdGV4dEFsaWduID0gVGV4dEFsaWduTW9kZTo6Q2VudGVyOwogCi0gICAgdXBkYXRlTG9naWNh
bFdpZHRoRm9yQWxpZ25tZW50KHRleHRBbGlnbiwgbGluZUJveCwgdHJhaWxpbmdTcGFjZVJ1biwg
bG9naWNhbExlZnQsIHRvdGFsTG9naWNhbFdpZHRoLCBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIGV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpOworICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aEZvckFsaWdu
bWVudChtX2Zsb3csIHRleHRBbGlnbiwgbGluZUJveCwgdHJhaWxpbmdTcGFjZVJ1biwgbG9naWNh
bExlZnQsIHRvdGFsTG9naWNhbFdpZHRoLCBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIGV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnQpOwogCiAgICAgY29tcHV0ZUV4cGFuc2lvbkZvckp1c3RpZmllZFRl
eHQoZmlyc3RSdW4sIHRyYWlsaW5nU3BhY2VSdW4sIGV4cGFuc2lvbk9wcG9ydHVuaXRpZXMsIGV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQsIHRvdGFsTG9naWNhbFdpZHRoLCBhdmFpbGFibGVMb2dp
Y2FsV2lkdGgpOwogCkBAIC0yMTEzLDcgKzIxMTUsNyBAQCB2b2lkIENvbXBsZXhMaW5lTGF5b3V0
OjpkZWxldGVFbGxpcHNpc0xpCiAgICAgICAgICAgICBmbG9hdCBsb2dpY2FsTGVmdCA9IG1fZmxv
dy5sb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoY3Vyci0+bGluZVRvcCgpLCBzaG91bGRJbmRlbnRU
ZXh0KTsKICAgICAgICAgICAgIGZsb2F0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCA9IG1fZmxvdy5s
b2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKGN1cnItPmxpbmVUb3AoKSwgRG9Ob3RJbmRlbnRUZXh0
KSAtIGxvZ2ljYWxMZWZ0OwogICAgICAgICAgICAgZmxvYXQgdG90YWxMb2dpY2FsV2lkdGggPSBj
dXJyLT5sb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aEZvckFs
aWdubWVudCh0ZXh0QWxpZ24sIGN1cnIsIDAsIGxvZ2ljYWxMZWZ0LCB0b3RhbExvZ2ljYWxXaWR0
aCwgYXZhaWxhYmxlTG9naWNhbFdpZHRoLCAwKTsKKyAgICAgICAgICAgIHVwZGF0ZUxvZ2ljYWxX
aWR0aEZvckFsaWdubWVudChtX2Zsb3csIHRleHRBbGlnbiwgY3VyciwgMCwgbG9naWNhbExlZnQs
IHRvdGFsTG9naWNhbFdpZHRoLCBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIDApOwogCiAgICAgICAg
ICAgICBpZiAobHRyKQogICAgICAgICAgICAgICAgIGN1cnItPmFkanVzdExvZ2ljYWxQb3NpdGlv
bigobG9naWNhbExlZnQgLSBjdXJyLT5sb2dpY2FsTGVmdCgpKSwgMCk7CkBAIC0yMTU4LDcgKzIx
NjAsNyBAQCB2b2lkIENvbXBsZXhMaW5lTGF5b3V0OjpjaGVja0xpbmVzRm9yVGV4CiAKICAgICAg
ICAgICAgICAgICBmbG9hdCBsb2dpY2FsTGVmdCA9IDA7IC8vIFdlIGFyZSBvbmx5IGludGVyZXN0
ZWQgaW4gdGhlIGRlbHRhIGZyb20gdGhlIGJhc2UgcG9zaXRpb24uCiAgICAgICAgICAgICAgICAg
ZmxvYXQgdHJ1bmNhdGVkV2lkdGggPSBtX2Zsb3cuYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yTGlu
ZShjdXJyLT5saW5lVG9wKCksIHNob3VsZEluZGVudFRleHQpOwotICAgICAgICAgICAgICAgIHVw
ZGF0ZUxvZ2ljYWxXaWR0aEZvckFsaWdubWVudCh0ZXh0QWxpZ24sIGN1cnIsIG51bGxwdHIsIGxv
Z2ljYWxMZWZ0LCB0b3RhbExvZ2ljYWxXaWR0aCwgdHJ1bmNhdGVkV2lkdGgsIDApOworICAgICAg
ICAgICAgICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aEZvckFsaWdubWVudChtX2Zsb3csIHRleHRBbGln
biwgY3VyciwgbnVsbHB0ciwgbG9naWNhbExlZnQsIHRvdGFsTG9naWNhbFdpZHRoLCB0cnVuY2F0
ZWRXaWR0aCwgMCk7CiAgICAgICAgICAgICAgICAgaWYgKGx0cikKICAgICAgICAgICAgICAgICAg
ICAgY3Vyci0+YWRqdXN0TG9naWNhbFBvc2l0aW9uKGxvZ2ljYWxMZWZ0LCAwKTsKICAgICAgICAg
ICAgICAgICBlbHNlCkBAIC0yMjI1LDQ1ICsyMjI3LDYgQEAgYm9vbCBDb21wbGV4TGluZUxheW91
dDo6cG9zaXRpb25OZXdGbG9hdAogICAgIHJldHVybiB0cnVlOwogfQogCi1MYXlvdXRVbml0IENv
bXBsZXhMaW5lTGF5b3V0OjpzdGFydEFsaWduZWRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9z
aXRpb24sIEluZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRUZXh0KQotewotICAgIFRleHRBbGln
bk1vZGUgdGV4dEFsaWduID0gc3R5bGUoKS50ZXh0QWxpZ24oKTsKLSAgICBib29sIHNob3VsZEFw
cGx5SW5kZW50VGV4dCA9IGZhbHNlOwotICAgIHN3aXRjaCAodGV4dEFsaWduKSB7Ci0gICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpMZWZ0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVm
dDoKLSAgICAgICAgc2hvdWxkQXBwbHlJbmRlbnRUZXh0ID0gc3R5bGUoKS5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Umln
aHQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodDoKLSAgICAgICAgc2hvdWxk
QXBwbHlJbmRlbnRUZXh0ID0gIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlN0YXJ0OgotICAgICAgICBzaG91
bGRBcHBseUluZGVudFRleHQgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBzaG91bGRBcHBseUluZGVudFRleHQgPSBmYWxzZTsKLSAgICB9Ci0gICAgLy8gPHJk
YXI6Ly9wcm9ibGVtLzE1NDI3NTcxPgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjQ1MjIKLSAgICAvLyBUaGlzIHF1aXJrIGlzIGZvciBsZWdhY3kgY29u
dGVudCB0aGF0IGRvZXNuJ3Qgd29yayBwcm9wZXJseSB3aXRoIHRoZSBjZW50ZXIgcG9zaXRpb25p
bmcgc2NoZW1lCi0gICAgLy8gYmVpbmcgaG9ub3JlZCAoZS5nLiwgZXB1YnMpLgotICAgIGlmIChz
aG91bGRBcHBseUluZGVudFRleHQgfHwgbV9mbG93LnNldHRpbmdzKCkudXNlTGVnYWN5VGV4dEFs
aWduUG9zaXRpb25lZEVsZW1lbnRCZWhhdmlvcigpKSAvLyBGSVhNRTogSGFuZGxlIFRleHRBbGln
bk1vZGU6OkVuZCBoZXJlCi0gICAgICAgIHJldHVybiBtX2Zsb3cuc3RhcnRPZmZzZXRGb3JMaW5l
KHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0KTsKLQotICAgIC8vIHVwZGF0ZUxvZ2ljYWxXaWR0
aEZvckFsaWdubWVudCgpIGhhbmRsZXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgYmxvY2sgc28gbm8g
bmVlZCB0byBjb25zaWRlciBpdCBoZXJlCi0gICAgZmxvYXQgdG90YWxMb2dpY2FsV2lkdGggPSAw
OwotICAgIGZsb2F0IGxvZ2ljYWxMZWZ0ID0gbV9mbG93LmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGlu
ZShtX2Zsb3cubG9naWNhbEhlaWdodCgpLCBEb05vdEluZGVudFRleHQpOwotICAgIGZsb2F0IGF2
YWlsYWJsZUxvZ2ljYWxXaWR0aCA9IG1fZmxvdy5sb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKG1f
Zmxvdy5sb2dpY2FsSGVpZ2h0KCksIERvTm90SW5kZW50VGV4dCkgLSBsb2dpY2FsTGVmdDsKLQot
ICAgIC8vIEZJWE1FOiBCdWcgMTI5MzExOiBXZSBuZWVkIHRvIHBhc3MgYSB2YWxpZCBSb290SW5s
aW5lQm94IGhlcmUsIGNvbnNpZGVyaW5nIHRoZSBiaWRpIGxldmVsIHVzZWQgdG8gY29uc3RydWN0
IHRoZSBsaW5lLgotICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aEZvckFsaWdubWVudCh0ZXh0QWxpZ24s
IDAsIDAsIGxvZ2ljYWxMZWZ0LCB0b3RhbExvZ2ljYWxXaWR0aCwgYXZhaWxhYmxlTG9naWNhbFdp
ZHRoLCAwKTsKLQotICAgIGlmICghc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0g
ICAgICAgIHJldHVybiBMYXlvdXRVbml0KG1fZmxvdy5sb2dpY2FsV2lkdGgoKSAtIGxvZ2ljYWxM
ZWZ0KTsKLSAgICByZXR1cm4gTGF5b3V0VW5pdChsb2dpY2FsTGVmdCk7Ci19Ci0KIHZvaWQgQ29t
cGxleExpbmVMYXlvdXQ6OnVwZGF0ZUZyYWdtZW50Rm9yTGluZShSb290SW5saW5lQm94KiBsaW5l
Qm94KSBjb25zdAogewogICAgIEFTU0VSVChsaW5lQm94KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9Db21wbGV4TGluZUxheW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9Db21wbGV4TGluZUxheW91dC5oCShyZXZpc2lvbiAyNDg1MjUpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29tcGxleExpbmVMYXlvdXQuaAkod29ya2luZyBjb3B5
KQpAQCAtNjYsMjMgKzY2LDIyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbGF5b3V0TGluZUJveGVz
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxUb3AsIExh
eW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKIAotICAgIExheW91dFVuaXQgc3RhcnRB
bGlnbmVkT2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IHBvc2l0aW9uLCBJbmRlbnRUZXh0T3JOb3Qg
c2hvdWxkSW5kZW50VGV4dCk7CiAgICAgUm9vdElubGluZUJveCogY29uc3RydWN0TGluZShCaWRp
UnVuTGlzdDxCaWRpUnVuPiYsIGNvbnN0IExpbmVJbmZvJik7CiAgICAgYm9vbCBwb3NpdGlvbk5l
d0Zsb2F0T25MaW5lKGNvbnN0IEZsb2F0aW5nT2JqZWN0JiBuZXdGbG9hdCwgRmxvYXRpbmdPYmpl
Y3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIExpbmVJbmZvJiwgTGluZVdpZHRoJik7CiAg
ICAgdm9pZCBhZGRPdmVyZmxvd0Zyb21JbmxpbmVDaGlsZHJlbigpOwogCiAgICAgc3RhdGljIHZv
aWQgYXBwZW5kUnVuc0Zvck9iamVjdChCaWRpUnVuTGlzdDxCaWRpUnVuPiosIGludCBzdGFydCwg
aW50IGVuZCwgUmVuZGVyT2JqZWN0JiwgSW5saW5lQmlkaVJlc29sdmVyJik7CisgICAgc3RhdGlj
IHZvaWQgdXBkYXRlTG9naWNhbFdpZHRoRm9yQWxpZ25tZW50KFJlbmRlckJsb2NrRmxvdyYsIGNv
bnN0IFRleHRBbGlnbk1vZGUmLCBjb25zdCBSb290SW5saW5lQm94KiwgQmlkaVJ1biogdHJhaWxp
bmdTcGFjZVJ1biwgZmxvYXQmIGxvZ2ljYWxMZWZ0LCBmbG9hdCYgdG90YWxMb2dpY2FsV2lkdGgs
IGZsb2F0JiBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIGludCBleHBhbnNpb25PcHBvcnR1bml0eUNv
dW50KTsKIAogcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Um9vdElubGluZUJveD4gY3Jl
YXRlUm9vdElubGluZUJveCgpOwogICAgIFJvb3RJbmxpbmVCb3gqIGNyZWF0ZUFuZEFwcGVuZFJv
b3RJbmxpbmVCb3goKTsKLSAgICBzdGF0aWMgSW5saW5lQm94KiBjcmVhdGVJbmxpbmVCb3hGb3JS
ZW5kZXJlcihSZW5kZXJPYmplY3QqLCBib29sIGlzUm9vdExpbmVCb3gsIGJvb2wgaXNPbmx5UnVu
ID0gZmFsc2UpOworICAgIElubGluZUJveCogY3JlYXRlSW5saW5lQm94Rm9yUmVuZGVyZXIoUmVu
ZGVyT2JqZWN0KiwgYm9vbCBpc09ubHlSdW4gPSBmYWxzZSk7CiAgICAgSW5saW5lRmxvd0JveCog
Y3JlYXRlTGluZUJveGVzKFJlbmRlck9iamVjdCosIGNvbnN0IExpbmVJbmZvJiwgSW5saW5lQm94
Kik7CiAgICAgVGV4dEFsaWduTW9kZSB0ZXh0QWxpZ25tZW50Rm9yTGluZShib29sIGVuZHNXaXRo
U29mdEJyZWFrKSBjb25zdDsKICAgICB2b2lkIHNldE1hcmdpbnNGb3JSdWJ5UnVuKEJpZGlSdW4q
LCBSZW5kZXJSdWJ5UnVuJiwgUmVuZGVyT2JqZWN0KiBwcmV2aW91c09iamVjdCwgY29uc3QgTGlu
ZUluZm8mKTsKICAgICB2b2lkIHVwZGF0ZVJ1YnlGb3JKdXN0aWZpZWRUZXh0KFJlbmRlclJ1YnlS
dW4mLCBCaWRpUnVuJiwgY29uc3QgVmVjdG9yPHVuc2lnbmVkLCAxNj4mIGV4cGFuc2lvbk9wcG9y
dHVuaXRpZXMsIHVuc2lnbmVkJiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50LCBmbG9hdCYgdG90
YWxMb2dpY2FsV2lkdGgsIGZsb2F0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgc2l6ZV90Jik7CiAg
ICAgdm9pZCBjb21wdXRlRXhwYW5zaW9uRm9ySnVzdGlmaWVkVGV4dChCaWRpUnVuKiBmaXJzdFJ1
biwgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biwgY29uc3QgVmVjdG9yPHVuc2lnbmVkLCAxNj4m
IGV4cGFuc2lvbk9wcG9ydHVuaXRpZXMsIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291
bnQsIGZsb2F0IHRvdGFsTG9naWNhbFdpZHRoLCBmbG9hdCBhdmFpbGFibGVMb2dpY2FsV2lkdGgp
OwotICAgIHZvaWQgdXBkYXRlTG9naWNhbFdpZHRoRm9yQWxpZ25tZW50KGNvbnN0IFRleHRBbGln
bk1vZGUmLCBjb25zdCBSb290SW5saW5lQm94KiwgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biwg
ZmxvYXQmIGxvZ2ljYWxMZWZ0LCBmbG9hdCYgdG90YWxMb2dpY2FsV2lkdGgsIGZsb2F0JiBhdmFp
bGFibGVMb2dpY2FsV2lkdGgsIGludCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KTsKICAgICB2
b2lkIGNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JMaW5lKFJvb3RJbmxpbmVCb3gq
LCBjb25zdCBMaW5lSW5mbyYsIEJpZGlSdW4qIGZpcnN0UnVuLCBCaWRpUnVuKiB0cmFpbGluZ1Nw
YWNlUnVuLCBib29sIHJlYWNoZWRFbmQsIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFw
JiwgVmVydGljYWxQb3NpdGlvbkNhY2hlJiwgV29yZE1lYXN1cmVtZW50cyYpOwogICAgIEJpZGlS
dW4qIGNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JTZWdtZW50KFJvb3RJbmxpbmVC
b3gqLCBjb25zdCBMaW5lSW5mbyYsIFRleHRBbGlnbk1vZGUsIGZsb2F0JiBsb2dpY2FsTGVmdCwg
ZmxvYXQmIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgQmlkaVJ1biogZmlyc3RSdW4sIEJpZGlSdW4q
IHRyYWlsaW5nU3BhY2VSdW4sIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwJiwgVmVy
dGljYWxQb3NpdGlvbkNhY2hlJiwgV29yZE1lYXN1cmVtZW50cyYpOwogICAgIHZvaWQgcmVtb3Zl
SW5saW5lQm94KEJpZGlSdW4mLCBjb25zdCBSb290SW5saW5lQm94JikgY29uc3Q7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkocmV2aXNpb24g
MjQ4NTI1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNiBAQCBSZW5kZXJCbG9ja0Zsb3c6OlJlbmRl
ckJsb2NrRmxvdyhFbGVtZW50CiAgICAgLCBtX3dpZHRoRm9yVGV4dEF1dG9zaXppbmcoLTEpCiAg
ICAgLCBtX2xpbmVDb3VudEZvclRleHRBdXRvc2l6aW5nKE5PVF9TRVQpCiAjZW5kaWYKLSAgICAs
IG1fY29tcGxleExpbmVMYXlvdXQoKnRoaXMpCiB7CiAgICAgc2V0Q2hpbGRyZW5JbmxpbmUodHJ1
ZSk7CiB9CkBAIC0xMjIsNyArMTIxLDYgQEAgUmVuZGVyQmxvY2tGbG93OjpSZW5kZXJCbG9ja0Zs
b3coRG9jdW1lbgogICAgICwgbV93aWR0aEZvclRleHRBdXRvc2l6aW5nKC0xKQogICAgICwgbV9s
aW5lQ291bnRGb3JUZXh0QXV0b3NpemluZyhOT1RfU0VUKQogI2VuZGlmCi0gICAgLCBtX2NvbXBs
ZXhMaW5lTGF5b3V0KCp0aGlzKQogewogICAgIHNldENoaWxkcmVuSW5saW5lKHRydWUpOwogfQpA
QCAtMTU0LDcgKzE1Miw4IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojp3aWxsQmVEZXN0cm95ZWQo
KQogICAgICAgICAgICAgcGFyZW50KCktPmRpcnR5TGluZXNGcm9tQ2hhbmdlZENoaWxkKCp0aGlz
KTsKICAgICB9CiAKLSAgICBsaW5lQm94ZXMoKS5kZWxldGVMaW5lQm94ZXMoKTsKKyAgICBpZiAo
bV9jb21wbGV4TGluZUxheW91dCkKKyAgICAgICAgbV9jb21wbGV4TGluZUxheW91dC0+bGluZUJv
eGVzKCkuZGVsZXRlTGluZUJveGVzKCk7CiAKICAgICBibG9ja1dpbGxCZURlc3Ryb3llZCgpOwog
CkBAIC02NzcsNyArNjc2LDExIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRJbmxpbmVD
aGlsZHIKICAgICB9CiAKICAgICBtX3NpbXBsZUxpbmVMYXlvdXQgPSBudWxscHRyOwotICAgIGNv
bXBsZXhMaW5lTGF5b3V0KCkubGF5b3V0TGluZUJveGVzKHJlbGF5b3V0Q2hpbGRyZW4sIHJlcGFp
bnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbEJvdHRvbSk7CisKKyAgICBpZiAoIW1fY29tcGxl
eExpbmVMYXlvdXQpCisgICAgICAgIG1fY29tcGxleExpbmVMYXlvdXQgPSBzdGQ6Om1ha2VfdW5p
cXVlPENvbXBsZXhMaW5lTGF5b3V0PigqdGhpcyk7CisKKyAgICBtX2NvbXBsZXhMaW5lTGF5b3V0
LT5sYXlvdXRMaW5lQm94ZXMocmVsYXlvdXRDaGlsZHJlbiwgcmVwYWludExvZ2ljYWxUb3AsIHJl
cGFpbnRMb2dpY2FsQm90dG9tKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dEJs
b2NrQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbywgTGF5b3V0
VW5pdCYgcHJldmlvdXNGbG9hdExvZ2ljYWxCb3R0b20sIExheW91dFVuaXQmIG1heEZsb2F0TG9n
aWNhbEJvdHRvbSkKQEAgLTg5OSw3ICs5MDIsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6YWRq
dXN0RmxvYXRpbmdCbG9jCiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6dXBkYXRlU3RhdGljSW5saW5l
UG9zaXRpb25Gb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxUb3As
IEluZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRUZXh0KQogewogICAgIGlmIChjaGlsZC5zdHls
ZSgpLmlzT3JpZ2luYWxEaXNwbGF5SW5saW5lVHlwZSgpKQotICAgICAgICBzZXRTdGF0aWNJbmxp
bmVQb3NpdGlvbkZvckNoaWxkKGNoaWxkLCBsb2dpY2FsVG9wLCBjb21wbGV4TGluZUxheW91dCgp
LnN0YXJ0QWxpZ25lZE9mZnNldEZvckxpbmUobG9naWNhbFRvcCwgc2hvdWxkSW5kZW50VGV4dCkp
OworICAgICAgICBzZXRTdGF0aWNJbmxpbmVQb3NpdGlvbkZvckNoaWxkKGNoaWxkLCBsb2dpY2Fs
VG9wLCBzdGFydEFsaWduZWRPZmZzZXRGb3JMaW5lKGxvZ2ljYWxUb3AsIHNob3VsZEluZGVudFRl
eHQpKTsKICAgICBlbHNlCiAgICAgICAgIHNldFN0YXRpY0lubGluZVBvc2l0aW9uRm9yQ2hpbGQo
Y2hpbGQsIGxvZ2ljYWxUb3AsIHN0YXJ0T2Zmc2V0Rm9yQ29udGVudChsb2dpY2FsVG9wKSk7CiB9
CkBAIC05MTMsNiArOTE2LDQ1IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpzZXRTdGF0aWNJbmxp
bmVQb3MKICAgICBjaGlsZC5sYXllcigpLT5zZXRTdGF0aWNJbmxpbmVQb3NpdGlvbihpbmxpbmVQ
b3NpdGlvbik7CiB9CiAKK0xheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93OjpzdGFydEFsaWduZWRP
ZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIEluZGVudFRleHRPck5vdCBzaG91bGRJ
bmRlbnRUZXh0KQoreworICAgIFRleHRBbGlnbk1vZGUgdGV4dEFsaWduID0gc3R5bGUoKS50ZXh0
QWxpZ24oKTsKKyAgICBib29sIHNob3VsZEFwcGx5SW5kZW50VGV4dCA9IGZhbHNlOworICAgIHN3
aXRjaCAodGV4dEFsaWduKSB7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpMZWZ0OgorICAgIGNh
c2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVmdDoKKyAgICAgICAgc2hvdWxkQXBwbHlJbmRlbnRU
ZXh0ID0gc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpX
ZWJLaXRSaWdodDoKKyAgICAgICAgc2hvdWxkQXBwbHlJbmRlbnRUZXh0ID0gIXN0eWxlKCkuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRleHRBbGln
bk1vZGU6OlN0YXJ0OgorICAgICAgICBzaG91bGRBcHBseUluZGVudFRleHQgPSB0cnVlOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzaG91bGRBcHBseUluZGVudFRleHQg
PSBmYWxzZTsKKyAgICB9CisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzE1NDI3NTcxPgorICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ1MjIKKyAgICAvLyBU
aGlzIHF1aXJrIGlzIGZvciBsZWdhY3kgY29udGVudCB0aGF0IGRvZXNuJ3Qgd29yayBwcm9wZXJs
eSB3aXRoIHRoZSBjZW50ZXIgcG9zaXRpb25pbmcgc2NoZW1lCisgICAgLy8gYmVpbmcgaG9ub3Jl
ZCAoZS5nLiwgZXB1YnMpLgorICAgIGlmIChzaG91bGRBcHBseUluZGVudFRleHQgfHwgc2V0dGlu
Z3MoKS51c2VMZWdhY3lUZXh0QWxpZ25Qb3NpdGlvbmVkRWxlbWVudEJlaGF2aW9yKCkpIC8vIEZJ
WE1FOiBIYW5kbGUgVGV4dEFsaWduTW9kZTo6RW5kIGhlcmUKKyAgICAgICAgcmV0dXJuIHN0YXJ0
T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgc2hvdWxkSW5kZW50VGV4dCk7CisKKyAgICAvLyB1cGRh
dGVMb2dpY2FsV2lkdGhGb3JBbGlnbm1lbnQoKSBoYW5kbGVzIHRoZSBkaXJlY3Rpb24gb2YgdGhl
IGJsb2NrIHNvIG5vIG5lZWQgdG8gY29uc2lkZXIgaXQgaGVyZQorICAgIGZsb2F0IHRvdGFsTG9n
aWNhbFdpZHRoID0gMDsKKyAgICBmbG9hdCBsb2dpY2FsTGVmdCA9IGxvZ2ljYWxMZWZ0T2Zmc2V0
Rm9yTGluZShsb2dpY2FsSGVpZ2h0KCksIERvTm90SW5kZW50VGV4dCk7CisgICAgZmxvYXQgYXZh
aWxhYmxlTG9naWNhbFdpZHRoID0gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShsb2dpY2FsSGVp
Z2h0KCksIERvTm90SW5kZW50VGV4dCkgLSBsb2dpY2FsTGVmdDsKKworICAgIENvbXBsZXhMaW5l
TGF5b3V0Ojp1cGRhdGVMb2dpY2FsV2lkdGhGb3JBbGlnbm1lbnQoKnRoaXMsIHRleHRBbGlnbiwg
bnVsbHB0ciwgbnVsbHB0ciwgbG9naWNhbExlZnQsIHRvdGFsTG9naWNhbFdpZHRoLCBhdmFpbGFi
bGVMb2dpY2FsV2lkdGgsIDApOworCisgICAgaWYgKCFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIExheW91dFVuaXQobG9naWNhbFdpZHRoKCkgLSBsb2dp
Y2FsTGVmdCk7CisKKyAgICByZXR1cm4gTGF5b3V0VW5pdChsb2dpY2FsTGVmdCk7Cit9CisKIFJl
bmRlckJsb2NrRmxvdzo6TWFyZ2luVmFsdWVzIFJlbmRlckJsb2NrRmxvdzo6bWFyZ2luVmFsdWVz
Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKIHsKICAgICBMYXlvdXRVbml0IGNoaWxk
QmVmb3JlUG9zaXRpdmU7CkBAIC0yMDY3LDEwICsyMTA5LDEwIEBAIHZvaWQgUmVuZGVyQmxvY2tG
bG93OjpkZWxldGVMaW5lcygpCiAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5jbGVhckxpbmVC
b3hUcmVlUG9pbnRlcnMoKTsKIAogICAgIGlmIChtX3NpbXBsZUxpbmVMYXlvdXQpIHsKLSAgICAg
ICAgQVNTRVJUKCFsaW5lQm94ZXMoKS5maXJzdExpbmVCb3goKSk7CisgICAgICAgIEFTU0VSVCgh
bV9jb21wbGV4TGluZUxheW91dCk7CiAgICAgICAgIG1fc2ltcGxlTGluZUxheW91dCA9IG51bGxw
dHI7Ci0gICAgfSBlbHNlCi0gICAgICAgIGxpbmVCb3hlcygpLmRlbGV0ZUxpbmVCb3hUcmVlKCk7
CisgICAgfSBlbHNlIGlmIChtX2NvbXBsZXhMaW5lTGF5b3V0KQorICAgICAgICBtX2NvbXBsZXhM
aW5lTGF5b3V0LT5saW5lQm94ZXMoKS5kZWxldGVMaW5lQm94VHJlZSgpOwogCiAgICAgUmVuZGVy
QmxvY2s6OmRlbGV0ZUxpbmVzKCk7CiB9CkBAIC0yOTA3LDcgKzI5NDksNyBAQCBib29sIFJlbmRl
ckJsb2NrRmxvdzo6aGl0VGVzdElubGluZUNoaWxkCiAgICAgaWYgKGF1dG8gc2ltcGxlTGluZUxh
eW91dCA9IHRoaXMtPnNpbXBsZUxpbmVMYXlvdXQoKSkKICAgICAgICAgcmV0dXJuIFNpbXBsZUxp
bmVMYXlvdXQ6OmhpdFRlc3RGbG93KCp0aGlzLCAqc2ltcGxlTGluZUxheW91dCwgcmVxdWVzdCwg
cmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgaGl0VGVzdEFj
dGlvbik7CiAKLSAgICByZXR1cm4gbGluZUJveGVzKCkuaGl0VGVzdCh0aGlzLCByZXF1ZXN0LCBy
ZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0
aW9uKTsKKyAgICByZXR1cm4gbV9jb21wbGV4TGluZUxheW91dCAmJiBtX2NvbXBsZXhMaW5lTGF5
b3V0LT5saW5lQm94ZXMoKS5oaXRUZXN0KHRoaXMsIHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25J
bkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24pOwogfQogCiB2b2lk
IFJlbmRlckJsb2NrRmxvdzo6YWRkT3ZlcmZsb3dGcm9tSW5saW5lQ2hpbGRyZW4oKQpAQCAtMjkx
OCw3ICsyOTYwLDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFkZE92ZXJmbG93RnJvbUlubAog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY29tcGxleExpbmVMYXlvdXQoKS5hZGRPdmVy
Zmxvd0Zyb21JbmxpbmVDaGlsZHJlbigpOworICAgIG1fY29tcGxleExpbmVMYXlvdXQtPmFkZE92
ZXJmbG93RnJvbUlubGluZUNoaWxkcmVuKCk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojph
ZGp1c3RGb3JCb3JkZXJGaXQoTGF5b3V0VW5pdCB4LCBMYXlvdXRVbml0JiBsZWZ0LCBMYXlvdXRV
bml0JiByaWdodCkgY29uc3QKQEAgLTM1MDAsNyArMzU0Miw5IEBAIHZvaWQgUmVuZGVyQmxvY2tG
bG93OjpwYWludElubGluZUNoaWxkcmUKICAgICAgICAgU2ltcGxlTGluZUxheW91dDo6cGFpbnRG
bG93KCp0aGlzLCAqc2ltcGxlTGluZUxheW91dCwgcGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbGluZUJveGVzKCkucGFpbnQodGhpcywgcGFpbnRJ
bmZvLCBwYWludE9mZnNldCk7CisKKyAgICBpZiAobV9jb21wbGV4TGluZUxheW91dCkKKyAgICAg
ICAgbV9jb21wbGV4TGluZUxheW91dC0+bGluZUJveGVzKCkucGFpbnQodGhpcywgcGFpbnRJbmZv
LCBwYWludE9mZnNldCk7CiB9CiAKIGJvb2wgUmVuZGVyQmxvY2tGbG93OjpyZWxheW91dEZvclBh
Z2luYXRpb24oKQpAQCAtMzU1NSw3ICszNTk5LDcgQEAgYm9vbCBSZW5kZXJCbG9ja0Zsb3c6Omhh
c0xpbmVzKCkgY29uc3QKICAgICBpZiAoYXV0byBzaW1wbGVMaW5lTGF5b3V0ID0gdGhpcy0+c2lt
cGxlTGluZUxheW91dCgpKQogICAgICAgICByZXR1cm4gc2ltcGxlTGluZUxheW91dC0+bGluZUNv
dW50KCk7CiAKLSAgICByZXR1cm4gbGluZUJveGVzKCkuZmlyc3RMaW5lQm94KCk7CisgICAgcmV0
dXJuIG1fY29tcGxleExpbmVMYXlvdXQgJiYgbV9jb21wbGV4TGluZUxheW91dC0+bGluZUJveGVz
KCkuZmlyc3RMaW5lQm94KCk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2tGbG93OjppbnZhbGlkYXRl
TGluZUxheW91dFBhdGgoKQpAQCAtMzU5NSw3ICszNjM5LDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zs
b3c6OmxheW91dFNpbXBsZUxpbmVzKAogICAgIH0KICAgICBmb3IgKGF1dG8mIHJlbmRlcmVyIDog
Y2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0PigqdGhpcykpCiAgICAgICAgIHJlbmRlcmVyLmNs
ZWFyTmVlZHNMYXlvdXQoKTsKLSAgICBBU1NFUlQoIWxpbmVCb3hlcygpLmZpcnN0TGluZUJveCgp
KTsKKyAgICBBU1NFUlQoIW1fY29tcGxleExpbmVMYXlvdXQpOwogICAgIExheW91dFVuaXQgbGlu
ZUxheW91dEhlaWdodCA9IFNpbXBsZUxpbmVMYXlvdXQ6OmNvbXB1dGVGbG93SGVpZ2h0KCp0aGlz
LCAqbV9zaW1wbGVMaW5lTGF5b3V0KTsKICAgICBMYXlvdXRVbml0IGxpbmVMYXlvdXRUb3AgPSBi
b3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7CiAgICAgcmVwYWludExvZ2ljYWxUb3AgPSBsaW5lTGF5
b3V0VG9wOwpAQCAtMzYwNiw3ICszNjUwLDEwIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlv
dXRTaW1wbGVMaW5lcygKIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpkZWxldGVMaW5lQm94ZXNCZWZv
cmVTaW1wbGVMaW5lTGF5b3V0KCkKIHsKICAgICBBU1NFUlQobGluZUxheW91dFBhdGgoKSA9PSBT
aW1wbGVMaW5lc1BhdGgpOwotICAgIGxpbmVCb3hlcygpLmRlbGV0ZUxpbmVCb3hlcygpOworCisg
ICAgaWYgKG1fY29tcGxleExpbmVMYXlvdXQpCisgICAgICAgIG1fY29tcGxleExpbmVMYXlvdXQt
PmxpbmVCb3hlcygpLmRlbGV0ZUxpbmVCb3hlcygpOworCiAgICAgZm9yIChhdXRvJiByZW5kZXJl
ciA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4oKnRoaXMpKSB7CiAgICAgICAgIGlmIChp
czxSZW5kZXJUZXh0PihyZW5kZXJlcikpCiAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJUZXh0
PihyZW5kZXJlcikuZGVsZXRlTGluZUJveGVzQmVmb3JlU2ltcGxlTGluZUxheW91dCgpOwpAQCAt
MzYxNSwxNCArMzY2MiwyMyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6ZGVsZXRlTGluZUJveGVz
QmVmCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
IH0KKworICAgIG1fY29tcGxleExpbmVMYXlvdXQgPSBudWxscHRyOwogfQogCiB2b2lkIFJlbmRl
ckJsb2NrRmxvdzo6ZW5zdXJlTGluZUJveGVzKCkKIHsKKyAgICBpZiAoIWNoaWxkcmVuSW5saW5l
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIHNldExpbmVMYXlvdXRQYXRoKEZvcmNlTGluZUJv
eGVzUGF0aCk7CisKICAgICBpZiAoIW1fc2ltcGxlTGluZUxheW91dCkKICAgICAgICAgcmV0dXJu
OwogCisgICAgQVNTRVJUKCFtX2NvbXBsZXhMaW5lTGF5b3V0KTsKKyAgICBtX2NvbXBsZXhMaW5l
TGF5b3V0ID0gc3RkOjptYWtlX3VuaXF1ZTxDb21wbGV4TGluZUxheW91dD4oKnRoaXMpOworCiAg
ICAgaWYgKFNpbXBsZUxpbmVMYXlvdXQ6OmNhblVzZUZvckxpbmVCb3hUcmVlKCp0aGlzLCAqbV9z
aW1wbGVMaW5lTGF5b3V0KSkgewogICAgICAgICBTaW1wbGVMaW5lTGF5b3V0OjpnZW5lcmF0ZUxp
bmVCb3hUcmVlKCp0aGlzLCAqbV9zaW1wbGVMaW5lTGF5b3V0KTsKICAgICAgICAgbV9zaW1wbGVM
aW5lTGF5b3V0ID0gbnVsbHB0cjsKQEAgLTM2NDEsMTQgKzM2OTcsMTQgQEAgdm9pZCBSZW5kZXJC
bG9ja0Zsb3c6OmVuc3VyZUxpbmVCb3hlcygpCiAgICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNh
bEJvdHRvbTsKICAgICBpZiAoaXNQYWdpbmF0ZWQpIHsKICAgICAgICAgUGFnaW5hdGVkTGF5b3V0
U3RhdGVNYWludGFpbmVyIHN0YXRlKCp0aGlzKTsKLSAgICAgICAgY29tcGxleExpbmVMYXlvdXQo
KS5sYXlvdXRMaW5lQm94ZXMocmVsYXlvdXRDaGlsZHJlbiwgcmVwYWludExvZ2ljYWxUb3AsIHJl
cGFpbnRMb2dpY2FsQm90dG9tKTsKKyAgICAgICAgbV9jb21wbGV4TGluZUxheW91dC0+bGF5b3V0
TGluZUJveGVzKHJlbGF5b3V0Q2hpbGRyZW4sIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9n
aWNhbEJvdHRvbSk7CiAgICAgICAgIC8vIFRoaXMgbWF0Y2hlcyByZWxheW91dFRvQXZvaWRXaWRv
d3MuCiAgICAgICAgIGlmIChzaG91bGRCcmVha0F0TGluZVRvQXZvaWRXaWRvdygpKQotICAgICAg
ICAgICAgY29tcGxleExpbmVMYXlvdXQoKS5sYXlvdXRMaW5lQm94ZXMocmVsYXlvdXRDaGlsZHJl
biwgcmVwYWludExvZ2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKKyAgICAgICAgICAg
IG1fY29tcGxleExpbmVMYXlvdXQtPmxheW91dExpbmVCb3hlcyhyZWxheW91dENoaWxkcmVuLCBy
ZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxCb3R0b20pOwogICAgICAgICAvLyBGSVhN
RTogVGhpcyBpcyBuZWVkZWQgYXMgbG9uZyBhcyBzaW1wbGUgYW5kIG5vcm1hbCBsaW5lIGxheW91
dCBwcm9kdWNlIGRpZmZlcmVudCBsaW5lIGJyZWFraW5ncy4KICAgICAgICAgcmVwYWludCgpOwog
ICAgIH0gZWxzZQotICAgICAgICBjb21wbGV4TGluZUxheW91dCgpLmxheW91dExpbmVCb3hlcyhy
ZWxheW91dENoaWxkcmVuLCByZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxCb3R0b20p
OworICAgICAgICBtX2NvbXBsZXhMaW5lTGF5b3V0LT5sYXlvdXRMaW5lQm94ZXMocmVsYXlvdXRD
aGlsZHJlbiwgcmVwYWludExvZ2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKIAogICAg
IHVwZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKICAgICBBU1NFUlQoZGlkTmVlZExheW91dCB8fCBsb2dp
Y2FsSGVpZ2h0KCkgPT0gb2xkSGVpZ2h0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9ja0Zsb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2tGbG93LmgJKHJldmlzaW9uIDI0ODUyNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAs
MTEgQEAgcHJvdGVjdGVkOgogICAgIExheW91dFVuaXQgY29sbGFwc2VkTWFyZ2luQmVmb3JlKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbWF4UG9zaXRpdmVNYXJnaW5CZWZvcmUoKSAtIG1heE5lZ2F0
aXZlTWFyZ2luQmVmb3JlKCk7IH0KICAgICBMYXlvdXRVbml0IGNvbGxhcHNlZE1hcmdpbkFmdGVy
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbWF4UG9zaXRpdmVNYXJnaW5BZnRlcigpIC0gbWF4TmVn
YXRpdmVNYXJnaW5BZnRlcigpOyB9CiAKLSAgICB2b2lkIGRpcnR5TGluZXNGcm9tQ2hhbmdlZENo
aWxkKFJlbmRlck9iamVjdCYgY2hpbGQpIGZpbmFsIHsgbGluZUJveGVzKCkuZGlydHlMaW5lc0Zy
b21DaGFuZ2VkQ2hpbGQoKnRoaXMsIGNoaWxkKTsgfQorICAgIHZvaWQgZGlydHlMaW5lc0Zyb21D
aGFuZ2VkQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkgZmluYWwKKyAgICB7CisgICAgICAgIGlm
IChtX2NvbXBsZXhMaW5lTGF5b3V0KQorICAgICAgICAgICAgbV9jb21wbGV4TGluZUxheW91dC0+
bGluZUJveGVzKCkuZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQoKnRoaXMsIGNoaWxkKTsKKyAg
ICB9CiAKICAgICB2b2lkIHBhaW50Q29sdW1uUnVsZXMoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0
UG9pbnQmKSBvdmVycmlkZTsKIApAQCAtMjMxLDYgKzIzNSw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFN0YXRpY0lubGluZVBvc2l0aW9uRm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgTGF5b3V0
VW5pdCBibG9ja09mZnNldCwgTGF5b3V0VW5pdCBpbmxpbmVQb3NpdGlvbik7CiAgICAgdm9pZCB1
cGRhdGVTdGF0aWNJbmxpbmVQb3NpdGlvbkZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQsIExheW91
dFVuaXQgbG9naWNhbFRvcCwgSW5kZW50VGV4dE9yTm90IHNob3VsZEluZGVudFRleHQpOwogCisg
ICAgTGF5b3V0VW5pdCBzdGFydEFsaWduZWRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRp
b24sIEluZGVudFRleHRPck5vdCk7CisKICAgICBMYXlvdXRVbml0IGNvbGxhcHNlTWFyZ2lucyhS
ZW5kZXJCb3gmIGNoaWxkLCBNYXJnaW5JbmZvJik7CiAgICAgTGF5b3V0VW5pdCBjb2xsYXBzZU1h
cmdpbnNXaXRoQ2hpbGRJbmZvKFJlbmRlckJveCogY2hpbGQsIFJlbmRlck9iamVjdCogcHJldlNp
YmxpbmcsIE1hcmdpbkluZm8mKTsKIApAQCAtMzI2LDExICszMzIsOCBAQCBwdWJsaWM6CiAKICAg
ICBMYXlvdXRQb2ludCBmbGlwRmxvYXRGb3JXcml0aW5nTW9kZUZvckNoaWxkKGNvbnN0IEZsb2F0
aW5nT2JqZWN0JiwgY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKIAotICAgIFJlbmRlckxpbmVC
b3hMaXN0JiBsaW5lQm94ZXMoKSB7IHJldHVybiBtX2NvbXBsZXhMaW5lTGF5b3V0LmxpbmVCb3hl
cygpOyB9Ci0gICAgY29uc3QgUmVuZGVyTGluZUJveExpc3QmIGxpbmVCb3hlcygpIGNvbnN0IHsg
cmV0dXJuIG1fY29tcGxleExpbmVMYXlvdXQubGluZUJveGVzKCk7IH0KLQotICAgIFJvb3RJbmxp
bmVCb3gqIGZpcnN0Um9vdEJveCgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGxleExpbmVMYXlvdXQu
Zmlyc3RSb290Qm94KCk7IH0KLSAgICBSb290SW5saW5lQm94KiBsYXN0Um9vdEJveCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29tcGxleExpbmVMYXlvdXQubGFzdFJvb3RCb3goKTsgfQorICAgIFJvb3RJ
bmxpbmVCb3gqIGZpcnN0Um9vdEJveCgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGxleExpbmVMYXlv
dXQgPyBtX2NvbXBsZXhMaW5lTGF5b3V0LT5maXJzdFJvb3RCb3goKSA6IG51bGxwdHI7IH0KKyAg
ICBSb290SW5saW5lQm94KiBsYXN0Um9vdEJveCgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGxleExp
bmVMYXlvdXQgPyBtX2NvbXBsZXhMaW5lTGF5b3V0LT5sYXN0Um9vdEJveCgpIDogbnVsbHB0cjsg
fQogCiAgICAgYm9vbCBoYXNMaW5lcygpIGNvbnN0OwogICAgIHZvaWQgaW52YWxpZGF0ZUxpbmVM
YXlvdXRQYXRoKCkgZmluYWw7CkBAIC01MTgsNyArNTIxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGFkZEZvY3VzUmluZ1JlY3RzRm9ySW5saW5lQ2hpbGRyZW4oVmVjdG9yPExheW91dFJlY3Q+JiBy
ZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFkZGl0aW9uYWxPZmZzZXQsIGNvbnN0IFJlbmRlckxh
eWVyTW9kZWxPYmplY3QqKSBvdmVycmlkZTsKIAogcHVibGljOgotICAgIENvbXBsZXhMaW5lTGF5
b3V0JiBjb21wbGV4TGluZUxheW91dCgpIHsgcmV0dXJuIG1fY29tcGxleExpbmVMYXlvdXQ7IH0K
KyAgICBDb21wbGV4TGluZUxheW91dCogY29tcGxleExpbmVMYXlvdXQoKSB7IHJldHVybiBtX2Nv
bXBsZXhMaW5lTGF5b3V0LmdldCgpOyB9CiAKICAgICB2aXJ0dWFsIE9wdGlvbmFsPFRleHRBbGln
bk1vZGU+IG92ZXJyaWRlVGV4dEFsaWdubWVudEZvckxpbmUoYm9vbCAvKiBlbmRzV2l0aFNvZnRC
cmVhayAqLykgY29uc3QgeyByZXR1cm4geyB9OyB9CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdElu
bGluZURpcmVjdGlvbkxpbmVCb3VuZHMoaW50IC8qIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQg
Ki8sIGZsb2F0JiAvKiBsb2dpY2FsTGVmdCAqLywgZmxvYXQmIC8qIGxvZ2ljYWxXaWR0aCAqLykg
Y29uc3QgeyB9CkBAIC01NjMsNyArNTY2LDcgQEAgcHJvdGVjdGVkOgogICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YT4gbV9yYXJlQmxvY2tGbG93RGF0YTsKIAogICAg
IC8vIEZJWE1FOiBPbmx5IG9uZSBvZiB0aGVzZSBzaG91bGQgYmUgbmVlZGVkIGF0IGFueSBnaXZl
biB0aW1lLgotICAgIENvbXBsZXhMaW5lTGF5b3V0IG1fY29tcGxleExpbmVMYXlvdXQ7CisgICAg
c3RkOjp1bmlxdWVfcHRyPENvbXBsZXhMaW5lTGF5b3V0PiBtX2NvbXBsZXhMaW5lTGF5b3V0Owog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTaW1wbGVMaW5lTGF5b3V0OjpMYXlvdXQ+IG1fc2ltcGxlTGlu
ZUxheW91dDsKIAogICAgIGZyaWVuZCBjbGFzcyBMaW5lQnJlYWtlcjsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHJldmlzaW9uIDI0ODUyNSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODI4LDE3ICs4MjgsMTcgQEAgRWxsaXBzaXNCb3gqIFJvb3RJbmxpbmVCb3g6OmVsbGlw
c2lzQm94KAogCiB2b2lkIFJvb3RJbmxpbmVCb3g6OnJlbW92ZUxpbmVCb3hGcm9tUmVuZGVyT2Jq
ZWN0KCkKIHsKLSAgICBibG9ja0Zsb3coKS5saW5lQm94ZXMoKS5yZW1vdmVMaW5lQm94KHRoaXMp
OworICAgIGJsb2NrRmxvdygpLmNvbXBsZXhMaW5lTGF5b3V0KCktPmxpbmVCb3hlcygpLnJlbW92
ZUxpbmVCb3godGhpcyk7CiB9CiAKIHZvaWQgUm9vdElubGluZUJveDo6ZXh0cmFjdExpbmVCb3hG
cm9tUmVuZGVyT2JqZWN0KCkKIHsKLSAgICBibG9ja0Zsb3coKS5saW5lQm94ZXMoKS5leHRyYWN0
TGluZUJveCh0aGlzKTsKKyAgICBibG9ja0Zsb3coKS5jb21wbGV4TGluZUxheW91dCgpLT5saW5l
Qm94ZXMoKS5leHRyYWN0TGluZUJveCh0aGlzKTsKIH0KIAogdm9pZCBSb290SW5saW5lQm94Ojph
dHRhY2hMaW5lQm94VG9SZW5kZXJPYmplY3QoKQogewotICAgIGJsb2NrRmxvdygpLmxpbmVCb3hl
cygpLmF0dGFjaExpbmVCb3godGhpcyk7CisgICAgYmxvY2tGbG93KCkuY29tcGxleExpbmVMYXlv
dXQoKS0+bGluZUJveGVzKCkuYXR0YWNoTGluZUJveCh0aGlzKTsKIH0KIAogTGF5b3V0UmVjdCBS
b290SW5saW5lQm94OjpwYWRkZWRMYXlvdXRPdmVyZmxvd1JlY3QoTGF5b3V0VW5pdCBlbmRQYWRk
aW5nKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXRGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9T
aW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMjQ4NTI1KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMzEsNyArMzMxLDcgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUlubGluZVRl
eHRCb3goUmVuZAogCiB2b2lkIGdlbmVyYXRlTGluZUJveFRyZWUoUmVuZGVyQmxvY2tGbG93JiBm
bG93LCBjb25zdCBMYXlvdXQmIGxheW91dCkKIHsKLSAgICBBU1NFUlQoIWZsb3cubGluZUJveGVz
KCkuZmlyc3RMaW5lQm94KCkpOworICAgIEFTU0VSVCghZmxvdy5jb21wbGV4TGluZUxheW91dCgp
LT5saW5lQm94ZXMoKS5maXJzdExpbmVCb3goKSk7CiAgICAgaWYgKCFsYXlvdXQucnVuQ291bnQo
KSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zNTEsMTIgKzM1MSwxMiBAQCB2b2lkIGdlbmVyYXRl
TGluZUJveFRyZWUoUmVuZGVyQmxvY2tGbG93CiAgICAgICAgIH0KIAogICAgICAgICBMaW5lSW5m
byBsaW5lSW5mbzsKLSAgICAgICAgbGluZUluZm8uc2V0Rmlyc3RMaW5lKCFmbG93LmxpbmVCb3hl
cygpLmZpcnN0TGluZUJveCgpKTsKKyAgICAgICAgbGluZUluZm8uc2V0Rmlyc3RMaW5lKCFmbG93
LmNvbXBsZXhMaW5lTGF5b3V0KCktPmxpbmVCb3hlcygpLmZpcnN0TGluZUJveCgpKTsKICAgICAg
ICAgLy8gRklYTUU6IFRoaXMgaXMgbmVlZGVkIGZvciBmbG93IGJveGVzIC1idXQgd2UgZG9uJ3Qg
aGF2ZSB0aGVtIHlldC4KICAgICAgICAgLy8gbGluZUluZm8uc2V0TGFzdExpbmUobGFzdExpbmUp
OwogICAgICAgICBsaW5lSW5mby5zZXRFbXB0eSghYmlkaVJ1bnMucnVuQ291bnQoKSk7CiAgICAg
ICAgIGJpZGlSdW5zLnNldExvZ2ljYWxseUxhc3RSdW4oYmlkaVJ1bnMubGFzdFJ1bigpKTsKLSAg
ICAgICAgYXV0byogcm9vdCA9IGZsb3cuY29tcGxleExpbmVMYXlvdXQoKS5jb25zdHJ1Y3RMaW5l
KGJpZGlSdW5zLCBsaW5lSW5mbyk7CisgICAgICAgIGF1dG8qIHJvb3QgPSBmbG93LmNvbXBsZXhM
aW5lTGF5b3V0KCktPmNvbnN0cnVjdExpbmUoYmlkaVJ1bnMsIGxpbmVJbmZvKTsKICAgICAgICAg
YmlkaVJ1bnMuY2xlYXIoKTsKICAgICAgICAgaWYgKCFyb290KQogICAgICAgICAgICAgY29udGlu
dWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIu
Y3BwCShyZXZpc2lvbiAyNDg1MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9M
aW5lQnJlYWtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBMaW5l
QnJlYWtlcjo6c2tpcExlYWRpbmdXaGl0ZXNwYWNlKAogICAgICAgICAgICAgICAgIGxpbmVJbmZv
LmluY3JlbWVudFJ1bnNGcm9tTGVhZGluZ1doaXRlc3BhY2UoKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlIGlmIChvYmplY3QuaXNGbG9hdGluZygpKQotICAgICAgICAgICAgbV9ibG9j
ay5jb21wbGV4TGluZUxheW91dCgpLnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUoKm1fYmxvY2suaW5z
ZXJ0RmxvYXRpbmdPYmplY3QoZG93bmNhc3Q8UmVuZGVyQm94PihvYmplY3QpKSwgbGFzdEZsb2F0
RnJvbVByZXZpb3VzTGluZSwgbGluZUluZm8sIHdpZHRoKTsKKyAgICAgICAgICAgIG1fYmxvY2su
Y29tcGxleExpbmVMYXlvdXQoKS0+cG9zaXRpb25OZXdGbG9hdE9uTGluZSgqbV9ibG9jay5pbnNl
cnRGbG9hdGluZ09iamVjdChkb3duY2FzdDxSZW5kZXJCb3g+KG9iamVjdCkpLCBsYXN0RmxvYXRG
cm9tUHJldmlvdXNMaW5lLCBsaW5lSW5mbywgd2lkdGgpOwogICAgICAgICBlbHNlIGlmIChvYmpl
Y3Quc3R5bGUoKS5oYXNUZXh0Q29tYmluZSgpICYmIGlzPFJlbmRlckNvbWJpbmVUZXh0PihvYmpl
Y3QpKSB7CiAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJDb21iaW5lVGV4dD4ob2JqZWN0KS5j
b21iaW5lVGV4dElmTmVlZGVkKCk7CiAgICAgICAgICAgICBpZiAoZG93bmNhc3Q8UmVuZGVyQ29t
YmluZVRleHQ+KG9iamVjdCkuaXNDb21iaW5lZCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5oCShyZXZpc2lvbiAyNDg1MjUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02
Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAgICAgRmxvYXRpbmdPYmplY3QqIGluc2VydEZsb2F0aW5n
T2JqZWN0KFJlbmRlckJveCYgZmxvYXRCb3gpIHsgcmV0dXJuIG1fYmxvY2suaW5zZXJ0RmxvYXRp
bmdPYmplY3QoZmxvYXRCb3gpOyB9CiAgICAgYm9vbCBwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKGNv
bnN0IEZsb2F0aW5nT2JqZWN0JiBuZXdGbG9hdCwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZy
b21QcmV2aW91c0xpbmUsIExpbmVJbmZvJiBsaW5lSW5mbywgTGluZVdpZHRoJiB3aWR0aCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2Jsb2NrLmNvbXBsZXhMaW5lTGF5b3V0KCkucG9zaXRpb25O
ZXdGbG9hdE9uTGluZShuZXdGbG9hdCwgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgbGluZUlu
Zm8sIHdpZHRoKTsKKyAgICAgICAgcmV0dXJuIG1fYmxvY2suY29tcGxleExpbmVMYXlvdXQoKS0+
cG9zaXRpb25OZXdGbG9hdE9uTGluZShuZXdGbG9hdCwgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGlu
ZSwgbGluZUluZm8sIHdpZHRoKTsKICAgICB9CiAKICAgICBSZW5kZXJCbG9ja0Zsb3cmIG1fYmxv
Y2s7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lSW5saW5lSGVhZGVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVJbmxp
bmVIZWFkZXJzLmgJKHJldmlzaW9uIDI0ODUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9saW5lL0xpbmVJbmxpbmVIZWFkZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAs
NyBAQCBpbmxpbmUgdm9pZCBzZXRTdGF0aWNQb3NpdGlvbnMoUmVuZGVyQmxvCiAgICAgICAgIC8v
IEEgcmVsYXRpdmUgcG9zaXRpb25lZCBpbmxpbmUgZW5jbG9zZXMgdXMuIEluIHRoaXMgY2FzZSwg
d2UgYWxzbyBoYXZlIHRvIGRldGVybWluZSBvdXIKICAgICAgICAgLy8gcG9zaXRpb24gYXMgdGhv
dWdoIHdlIHdlcmUgYW4gaW5saW5lLiBTZXQgfHN0YXRpY0lubGluZVBvc2l0aW9ufCBhbmQgfHN0
YXRpY0Jsb2NrUG9zaXRpb258IG9uIHRoZSByZWxhdGl2ZSBwb3NpdGlvbmVkCiAgICAgICAgIC8v
IGlubGluZSBzbyB0aGF0IHdlIGNhbiBvYnRhaW4gdGhlIHZhbHVlIGxhdGVyLgotICAgICAgICBk
b3duY2FzdDxSZW5kZXJJbmxpbmU+KCpjb250YWluZXJCbG9jaykubGF5ZXIoKS0+c2V0U3RhdGlj
SW5saW5lUG9zaXRpb24oYmxvY2suY29tcGxleExpbmVMYXlvdXQoKS5zdGFydEFsaWduZWRPZmZz
ZXRGb3JMaW5lKGJsb2NrSGVpZ2h0LCBEb05vdEluZGVudFRleHQpKTsKKyAgICAgICAgZG93bmNh
c3Q8UmVuZGVySW5saW5lPigqY29udGFpbmVyQmxvY2spLmxheWVyKCktPnNldFN0YXRpY0lubGlu
ZVBvc2l0aW9uKGJsb2NrLnN0YXJ0QWxpZ25lZE9mZnNldEZvckxpbmUoYmxvY2tIZWlnaHQsIERv
Tm90SW5kZW50VGV4dCkpOwogICAgICAgICBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KCpjb250YWlu
ZXJCbG9jaykubGF5ZXIoKS0+c2V0U3RhdGljQmxvY2tQb3NpdGlvbihibG9ja0hlaWdodCk7CiAg
ICAgfQogICAgIGJsb2NrLnVwZGF0ZVN0YXRpY0lubGluZVBvc2l0aW9uRm9yQ2hpbGQoY2hpbGQs
IGJsb2NrSGVpZ2h0LCBzaG91bGRJbmRlbnRUZXh0KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>