<?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>181336</bug_id>
          
          <creation_ts>2018-01-05 12:58:18 -0800</creation_ts>
          <short_desc>[RenderTreeBuilder] Move RenderInline addChild logic to RenderTreeBuilder</short_desc>
          <delta_ts>2018-01-08 10:38:37 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</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>1386219</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-01-05 12:58:18 -0800</bug_when>
    <thetext>ssia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386220</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-01-05 12:58:39 -0800</bug_when>
    <thetext>&lt;rdar://problem/36324693&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386221</commentid>
    <comment_count>2</comment_count>
      <attachid>330569</attachid>
    <who name="alan">zalan</who>
    <bug_when>2018-01-05 13:01:43 -0800</bug_when>
    <thetext>Created attachment 330569
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386782</commentid>
    <comment_count>3</comment_count>
      <attachid>330711</attachid>
    <who name="alan">zalan</who>
    <bug_when>2018-01-08 10:06:34 -0800</bug_when>
    <thetext>Created attachment 330711
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386800</commentid>
    <comment_count>4</comment_count>
      <attachid>330711</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-08 10:38:35 -0800</bug_when>
    <thetext>Comment on attachment 330711
Patch

Clearing flags on attachment: 330711

Committed r226520: &lt;https://trac.webkit.org/changeset/226520&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386801</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-08 10:38:37 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330569</attachid>
            <date>2018-01-05 13:01:43 -0800</date>
            <delta_ts>2018-01-08 10:06:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181336-20180105130142.patch</filename>
            <type>text/plain</type>
            <size>52806</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2NDM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWY2Y2VlODg0ZDY3OTUy
MmYxZjYyYzZmYWI1NTdiMTI3NGM0NGZkMy4uZGU4YTVlZDMxYTYyZGNjZWRjZTBhZmM0MDlhOTRl
YzFhYWQxMWM5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDE4LTAxLTA1ICBaYWxh
biBCdWp0YXMgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbUmVuZGVyVHJlZUJ1aWxkZXJd
IE1vdmUgUmVuZGVySW5saW5lIGFkZENoaWxkIGxvZ2ljIHRvIFJlbmRlclRyZWVCdWlsZGVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODEzMzYKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM2MzI0NjkzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYWJvdXQgbW92aW5nIHRoZSBjb2RlLCBu
byBjbGVhbnVwIGFuZC9vciBub3JtYWxpemF0aW9uICh1bmZvcnR1bmF0ZWx5IGl0IGFsc28gbWVh
bnMKKyAgICAgICAgc29tZSB0ZW1wb3JhcnkgY2hhbmdlcykuICAKKworICAgICAgICBObyBjaGFu
Z2UgaW4gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6YWRkQ2hp
bGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjphZGRDaGlsZElnbm9yaW5nQ29u
dGludWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6Y2hpbGRCZWNhbWVO
b25JbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6bmV4dENvbnRpbnVhdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmNvbnRpbnVhdGlvbkJlZm9yZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpuZXdDaGlsZElzSW5saW5lKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6Y2xvbmVBc0NvbnRpbnVhdGlvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnNwbGl0SW5saW5lcyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnNwbGl0Rmxvdyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjYW5Vc2VBc1BhcmVudEZvckNvbnRpbnVhdGlvbik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmFkZENoaWxkVG9Db250
aW51YXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZUJ1aWxkZXI6OlJlbmRlclRyZWVCdWlsZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjppbnNlcnRDaGlsZFRvUmVuZGVySW5s
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjppbnNlcnRDaGlsZFRv
UmVuZGVySW5saW5lSWdub3JpbmdDb250aW51YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVHJlZUJ1aWxkZXI6OnNwbGl0Rmxvdyk6CisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0aW5n
L1JlbmRlclRyZWVCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRl
cjo6aW5saW5lQnVpbGRlcik6CisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRy
ZWVCdWlsZGVySW5saW5lLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjYW5Vc2VBc1Bh
cmVudEZvckNvbnRpbnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpuZXh0Q29udGludWF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRpbnVhdGlvbkJlZm9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpjbG9uZUFzQ29udGludWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Om5ld0NoaWxkSXNJ
bmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6aW5GbG93UG9zaXRpb25lZElubGluZUFuY2VzdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjpJbmxpbmU6OklubGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRlcjo6SW5saW5lOjppbnNlcnRDaGls
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRlcjo6SW5saW5lOjppbnNlcnRD
aGlsZFRvQ29udGludWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWlsZGVy
OjpJbmxpbmU6Omluc2VydENoaWxkSWdub3JpbmdDb250aW51YXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVHJlZUJ1aWxkZXI6OklubGluZTo6c3BsaXRGbG93KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjpJbmxpbmU6OnNwbGl0SW5saW5lcyk6CisgICAgICAg
ICogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVySW5saW5lLmg6IEFkZGVkLgor
CiAyMDE4LTAxLTA0ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAg
ICAgICAgQVg6IEltcGxlbWVudCB1cGRhdGVkIENTUzMgU3BlZWNoIGZvciAnc3BlYWsnIGFuZCAn
c3BlYWstYXMnIHByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggYTRiYWY1OTE0ZjEyYjJjNjk3
NWQ2M2I1ODZiODZkMDFiN2RiYjhjYi4uNGEyNWQ4M2U5NWZkNjY4Nzg1NTM1MzYzNTI4YjU4MTQz
YTZjZDczMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE5ODYsNiArMTk4Niw3IEBAIHJlbmRlcmluZy9z
dmcvU1ZHVGV4dFF1ZXJ5LmNwcAogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVy
LmNwcAogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyRmlyc3RMZXR0ZXIuY3Bw
CiByZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJGb3JtQ29udHJvbHMuY3BwCity
ZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJJbmxpbmUuY3BwCiByZW5kZXJpbmcv
dXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJMaXN0LmNwcAogcmVuZGVyaW5nL3VwZGF0aW5nL1Jl
bmRlclRyZWVCdWlsZGVyTXVsdGlDb2x1bW4uY3BwCiByZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVy
VHJlZUJ1aWxkZXJSdWJ5LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGRlMTkwYTEyZjFlMDMwOWVjMjViYmFlYmEzNTYxMjBj
OWEzZjdiN2EuLmU4NTNjMDA1YzNkZTJlMTdkNTRlMGI1YTI4ZmQyNmVlYWYyMWU1YmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTM5Myw2ICszOTMsNyBAQAogCQkxMTkzNDA3OTFGRThCOTIzMDA5MzVGMUUgLyogUmVuZGVyVHJl
ZUJ1aWxkZXJUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTE5MzQwNzcxRkU4QjkyMzAwOTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVyVGFibGUu
aCAqLzsgfTsKIAkJMTE5MzQwOEExRkVCMzU1RDAwOTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVy
UnVieS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTE5
MzQwODgxRkVCMzU1RDAwOTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVyUnVieS5oICovOyB9Owog
CQkxMTkzNDA5NzFGRUQ3MTU1MDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJGb3JtQ29udHJv
bHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExOTM0
MDk1MUZFRDcxNTUwMDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRlckZvcm1Db250cm9scy5oICov
OyB9OworCQkxMUM1RjEwMjFGRkZFRjgyMDAwMUFFNjAgLyogUmVuZGVyVHJlZUJ1aWxkZXJJbmxp
bmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExQzVG
MTAwMUZGRkVGODIwMDAxQUU2MCAvKiBSZW5kZXJUcmVlQnVpbGRlcklubGluZS5oICovOyB9Owog
CQkxMUUwNjdFRTFFNjI0NkU1MDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMUUwNjdFRDFF
NjI0NkU1MDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwMEQ3QTgxNzEzNkVBNzAw
NzdDRTA1IC8qIFNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDBEN0E3MTcxMzZFQTcwMDc3Q0UwNSAvKiBTY3Jp
cHRXcmFwcGFibGVJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTQwM0I5OTcwOUVCMTNBRjAwNzk3QzdGIC8qIERPTVdpbmRvdy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwM0I5OTUwOUVC
MTNBRjAwNzk3QzdGIC8qIERPTVdpbmRvdy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC01NTgzLDYgKzU1ODQsOCBAQAogCQkxMTkzNDA4ODFGRUIz
NTVEMDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJSdWJ5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlclRyZWVCdWlsZGVyUnVieS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxMTkz
NDA5NDFGRUQ3MTU1MDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJGb3JtQ29udHJvbHMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxkZXJGb3JtQ29udHJvbHMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxMTkzNDA5NTFGRUQ3MTU1MDA5MzVGMUUgLyog
UmVuZGVyVHJlZUJ1aWxkZXJGb3JtQ29udHJvbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVHJl
ZUJ1aWxkZXJGb3JtQ29udHJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTFD
NUYwRkYxRkZGRUY4MjAwMDFBRTYwIC8qIFJlbmRlclRyZWVCdWlsZGVySW5saW5lLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJlbmRlclRyZWVCdWlsZGVySW5saW5lLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMTFDNUYxMDAxRkZGRUY4MjAwMDFBRTYwIC8qIFJlbmRlclRyZWVC
dWlsZGVySW5saW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRyZWVCdWlsZGVySW5saW5lLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExRTA2N0VCMUU2MjQ2MTMwMDE2MkQxNiAv
KiBTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMTFFMDY3RUQxRTYyNDZFNTAwMTYyRDE2IC8qIFNpbXBsZUxpbmVMYXlv
dXRDb3ZlcmFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVMaW5l
TGF5b3V0Q292ZXJhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMEQ3QTcx
NzEzNkVBNzAwNzdDRTA1IC8qIFNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjQ2MTMsNiArMjQ2MTYsOCBAQAogCQkJCUU0N0MzOTI2MUZF
NkUwREMwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlckZpcnN0TGV0dGVyLmggKi8sCiAJCQkJ
MTE5MzQwOTQxRkVENzE1NTAwOTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVyRm9ybUNvbnRyb2xz
LmNwcCAqLywKIAkJCQkxMTkzNDA5NTFGRUQ3MTU1MDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxk
ZXJGb3JtQ29udHJvbHMuaCAqLywKKwkJCQkxMUM1RjBGRjFGRkZFRjgyMDAwMUFFNjAgLyogUmVu
ZGVyVHJlZUJ1aWxkZXJJbmxpbmUuY3BwICovLAorCQkJCTExQzVGMTAwMUZGRkVGODIwMDAxQUU2
MCAvKiBSZW5kZXJUcmVlQnVpbGRlcklubGluZS5oICovLAogCQkJCUU0N0MzOTJCMUZFNkUwREYw
MEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlckxpc3QuY3BwICovLAogCQkJCUU0N0MzOTI4MUZF
NkUwREQwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlckxpc3QuaCAqLywKIAkJCQlFNDdDMzky
MzFGRTZFMERBMDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXJNdWx0aUNvbHVtbi5jcHAgKi8s
CkBAIC0yOTAzNyw2ICsyOTA0Miw3IEBACiAJCQkJRTQ3QzM5MkQxRkU2RTBGMzAwQkJCQzZCIC8q
IFJlbmRlclRyZWVCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDdDMzkzMDFGRTZFMEZE
MDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTE5MzQwOTcxRkVENzE1NTAwOTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVyRm9ybUNv
bnRyb2xzLmggaW4gSGVhZGVycyAqLywKKwkJCQkxMUM1RjEwMjFGRkZFRjgyMDAwMUFFNjAgLyog
UmVuZGVyVHJlZUJ1aWxkZXJJbmxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0N0MzOTMyMUZF
NkUxMDUwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlckxpc3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCUU0N0MzOTMzMUZFNkUxMDgwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlck11bHRpQ29s
dW1uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxMTkzNDA4QTFGRUIzNTVEMDA5MzVGMUUgLyogUmVu
ZGVyVHJlZUJ1aWxkZXJSdWJ5LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcklubGluZS5jcHAKaW5kZXggOTQ0YTg5YWU0NWRkNDQ5ZjZlNjlkYzRiNzQ3MjRh
YTFmMjQyZWU0OC4uMWE2ZDJkNGI0NDA0Y2MwZTk5NTgyY2UwMDdmYTMwZDQ0NTg0MjdjZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKQEAgLTI1NywzMzQgKzI1
NywxMiBAQCBMYXlvdXRSZWN0IFJlbmRlcklubGluZTo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94
KiBpbmxpbmVCb3gsIHVuc2lnbmVkLCBMYXlvdXRVbgogCiB2b2lkIFJlbmRlcklubGluZTo6YWRk
Q2hpbGQoUmVuZGVyVHJlZUJ1aWxkZXImIGJ1aWxkZXIsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+
IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewotICAgIGF1dG8qIGJlZm9y
ZUNoaWxkT3JQbGFjZWhvbGRlciA9IGJlZm9yZUNoaWxkOwotICAgIGlmIChhdXRvKiBmcmFnbWVu
dGVkRmxvdyA9IGVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93KCkpCi0gICAgICAgIGJlZm9yZUNoaWxk
T3JQbGFjZWhvbGRlciA9IGZyYWdtZW50ZWRGbG93LT5yZXNvbHZlTW92ZWRDaGlsZChiZWZvcmVD
aGlsZCk7Ci0gICAgaWYgKGNvbnRpbnVhdGlvbigpKSB7Ci0gICAgICAgIGFkZENoaWxkVG9Db250
aW51YXRpb24oYnVpbGRlciwgV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxkT3JQbGFjZWhv
bGRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYWRkQ2hpbGRJZ25vcmluZ0NvbnRp
bnVhdGlvbihidWlsZGVyLCBXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGRPclBsYWNlaG9s
ZGVyKTsKLX0KLQotc3RhdGljIFJlbmRlckJveE1vZGVsT2JqZWN0KiBuZXh0Q29udGludWF0aW9u
KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCi17Ci0gICAgaWYgKGlzPFJlbmRlcklubGluZT4oKnJl
bmRlcmVyKSAmJiAhcmVuZGVyZXItPmlzUmVwbGFjZWQoKSkKLSAgICAgICAgcmV0dXJuIGRvd25j
YXN0PFJlbmRlcklubGluZT4oKnJlbmRlcmVyKS5jb250aW51YXRpb24oKTsKLSAgICByZXR1cm4g
ZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpyZW5kZXJlcikuaW5saW5lQ29udGludWF0aW9uKCk7Ci19
Ci0KLVJlbmRlckJveE1vZGVsT2JqZWN0KiBSZW5kZXJJbmxpbmU6OmNvbnRpbnVhdGlvbkJlZm9y
ZShSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQotewotICAgIGlmIChiZWZvcmVDaGlsZCAmJiBi
ZWZvcmVDaGlsZC0+cGFyZW50KCkgPT0gdGhpcykKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0KLSAg
ICBSZW5kZXJCb3hNb2RlbE9iamVjdCogY3VyciA9IG5leHRDb250aW51YXRpb24odGhpcyk7Ci0g
ICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIG5leHRUb0xhc3QgPSB0aGlzOwotICAgIFJlbmRlckJv
eE1vZGVsT2JqZWN0KiBsYXN0ID0gdGhpczsKLSAgICB3aGlsZSAoY3VycikgewotICAgICAgICBp
ZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09IGN1cnIpIHsKLSAgICAg
ICAgICAgIGlmIChjdXJyLT5maXJzdENoaWxkKCkgPT0gYmVmb3JlQ2hpbGQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGxhc3Q7Ci0gICAgICAgICAgICByZXR1cm4gY3VycjsKLSAgICAgICAgfQot
Ci0gICAgICAgIG5leHRUb0xhc3QgPSBsYXN0OwotICAgICAgICBsYXN0ID0gY3VycjsKLSAgICAg
ICAgY3VyciA9IG5leHRDb250aW51YXRpb24oY3Vycik7Ci0gICAgfQotCi0gICAgaWYgKCFiZWZv
cmVDaGlsZCAmJiAhbGFzdC0+Zmlyc3RDaGlsZCgpKQotICAgICAgICByZXR1cm4gbmV4dFRvTGFz
dDsKLSAgICByZXR1cm4gbGFzdDsKLX0KLQotc3RhdGljIGJvb2wgbmV3Q2hpbGRJc0lubGluZShj
b25zdCBSZW5kZXJPYmplY3QmIG5ld0NoaWxkLCBjb25zdCBSZW5kZXJJbmxpbmUmIHBhcmVudCkK
LXsKLSAgICAvLyBpbmxpbmUgcGFyZW50IGdlbmVyYXRlcyBpbmxpbmUtdGFibGUuCi0gICAgcmV0
dXJuIG5ld0NoaWxkLmlzSW5saW5lKCkgfCAocGFyZW50LmNoaWxkUmVxdWlyZXNUYWJsZShuZXdD
aGlsZCkgJiYgcGFyZW50LnN0eWxlKCkuZGlzcGxheSgpID09IElOTElORSk7CisgICAgYnVpbGRl
ci5pbnNlcnRDaGlsZFRvUmVuZGVySW5saW5lKCp0aGlzLCBXVEZNb3ZlKG5ld0NoaWxkKSwgYmVm
b3JlQ2hpbGQpOwogfQogCiB2b2lkIFJlbmRlcklubGluZTo6YWRkQ2hpbGRJZ25vcmluZ0NvbnRp
bnVhdGlvbihSZW5kZXJUcmVlQnVpbGRlciYgYnVpbGRlciwgUmVuZGVyUHRyPFJlbmRlck9iamVj
dD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7Ci0gICAgLy8gTWFrZSBz
dXJlIHdlIGRvbid0IGFwcGVuZCB0aGluZ3MgYWZ0ZXIgOmFmdGVyLWdlbmVyYXRlZCBjb250ZW50
IGlmIHdlIGhhdmUgaXQuCi0gICAgaWYgKCFiZWZvcmVDaGlsZCAmJiBpc0FmdGVyQ29udGVudChs
YXN0Q2hpbGQoKSkpCi0gICAgICAgIGJlZm9yZUNoaWxkID0gbGFzdENoaWxkKCk7Ci0gICAgCi0g
ICAgYm9vbCBjaGlsZElubGluZSA9IG5ld0NoaWxkSXNJbmxpbmUoKm5ld0NoaWxkLCAqdGhpcyk7
Ci0gICAgLy8gVGhpcyBjb2RlIGlzIGZvciB0aGUgb2xkIGJsb2NrLWluc2lkZS1pbmxpbmUgbW9k
ZWwgdGhhdCB1c2VzIGNvbnRpbnVhdGlvbnMuCi0gICAgaWYgKCFjaGlsZElubGluZSAmJiAhbmV3
Q2hpbGQtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewotICAgICAgICAvLyBX
ZSBhcmUgcGxhY2luZyBhIGJsb2NrIGluc2lkZSBhbiBpbmxpbmUuIFdlIGhhdmUgdG8gcGVyZm9y
bSBhIHNwbGl0IG9mIHRoaXMKLSAgICAgICAgLy8gaW5saW5lIGludG8gY29udGludWF0aW9ucy4g
IFRoaXMgaW52b2x2ZXMgY3JlYXRpbmcgYW4gYW5vbnltb3VzIGJsb2NrIGJveCB0byBob2xkCi0g
ICAgICAgIC8vIHxuZXdDaGlsZHwuICBXZSB0aGVuIG1ha2UgdGhhdCBibG9jayBib3ggYSBjb250
aW51YXRpb24gb2YgdGhpcyBpbmxpbmUuICBXZSB0YWtlIGFsbCBvZgotICAgICAgICAvLyB0aGUg
Y2hpbGRyZW4gYWZ0ZXIgfGJlZm9yZUNoaWxkfCBhbmQgcHV0IHRoZW0gaW4gYSBjbG9uZSBvZiB0
aGlzIG9iamVjdC4KLSAgICAgICAgYXV0byBuZXdTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGVB
bm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0eWxlKCksIEJMT0NLKTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIElmIGluc2lkZSBhbiBpbmxpbmUgYWZmZWN0ZWQgYnkgaW4tZmxvdyBwb3NpdGlvbmlu
ZyB0aGUgYmxvY2sgbmVlZHMgdG8gYmUgYWZmZWN0ZWQgYnkgaXQgdG9vLgotICAgICAgICAvLyBH
aXZpbmcgdGhlIGJsb2NrIGEgbGF5ZXIgbGlrZSB0aGlzIGFsbG93cyBpdCB0byBjb2xsZWN0IHRo
ZSB4L3kgb2Zmc2V0cyBmcm9tIGlubGluZSBwYXJlbnRzIGxhdGVyLgotICAgICAgICBpZiAoYXV0
byBwb3NpdGlvbmVkQW5jZXN0b3IgPSBpbkZsb3dQb3NpdGlvbmVkSW5saW5lQW5jZXN0b3IodGhp
cykpCi0gICAgICAgICAgICBuZXdTdHlsZS5zZXRQb3NpdGlvbihwb3NpdGlvbmVkQW5jZXN0b3It
PnN0eWxlKCkucG9zaXRpb24oKSk7Ci0KLSAgICAgICAgYXV0byBuZXdCb3ggPSBjcmVhdGVSZW5k
ZXJlcjxSZW5kZXJCbG9ja0Zsb3c+KGRvY3VtZW50KCksIFdURk1vdmUobmV3U3R5bGUpKTsKLSAg
ICAgICAgbmV3Qm94LT5pbml0aWFsaXplU3R5bGUoKTsKLSAgICAgICAgbmV3Qm94LT5zZXRJc0Nv
bnRpbnVhdGlvbigpOwotICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogb2xkQ29udGludWF0
aW9uID0gY29udGludWF0aW9uKCk7Ci0gICAgICAgIGlmIChvbGRDb250aW51YXRpb24pCi0gICAg
ICAgICAgICBvbGRDb250aW51YXRpb24tPnJlbW92ZUZyb21Db250aW51YXRpb25DaGFpbigpOwot
ICAgICAgICBuZXdCb3gtPmluc2VydEludG9Db250aW51YXRpb25DaGFpbkFmdGVyKCp0aGlzKTsK
LQotICAgICAgICBzcGxpdEZsb3coYnVpbGRlciwgYmVmb3JlQ2hpbGQsIFdURk1vdmUobmV3Qm94
KSwgV1RGTW92ZShuZXdDaGlsZCksIG9sZENvbnRpbnVhdGlvbik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBhdXRvJiBjaGlsZCA9ICpuZXdDaGlsZDsKLSAgICBSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6YWRkQ2hpbGQoYnVpbGRlciwgV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxk
KTsKLSAgICBjaGlsZC5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKLX0KLQot
UmVuZGVyUHRyPFJlbmRlcklubGluZT4gUmVuZGVySW5saW5lOjpjbG9uZUFzQ29udGludWF0aW9u
KCkgY29uc3QKLXsKLSAgICBSZW5kZXJQdHI8UmVuZGVySW5saW5lPiBjbG9uZUlubGluZSA9IGNy
ZWF0ZVJlbmRlcmVyPFJlbmRlcklubGluZT4oKmVsZW1lbnQoKSwgUmVuZGVyU3R5bGU6OmNsb25l
KHN0eWxlKCkpKTsKLSAgICBjbG9uZUlubGluZS0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgY2xv
bmVJbmxpbmUtPnNldEZyYWdtZW50ZWRGbG93U3RhdGUoZnJhZ21lbnRlZEZsb3dTdGF0ZSgpKTsK
LSAgICBjbG9uZUlubGluZS0+c2V0SGFzT3V0bGluZUF1dG9BbmNlc3RvcihoYXNPdXRsaW5lQXV0
b0FuY2VzdG9yKCkpOwotICAgIGNsb25lSW5saW5lLT5zZXRJc0NvbnRpbnVhdGlvbigpOwotICAg
IHJldHVybiBjbG9uZUlubGluZTsKLX0KLQotdm9pZCBSZW5kZXJJbmxpbmU6OnNwbGl0SW5saW5l
cyhSZW5kZXJUcmVlQnVpbGRlciYgYnVpbGRlciwgUmVuZGVyQmxvY2sqIGZyb21CbG9jaywgUmVu
ZGVyQmxvY2sqIHRvQmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRl
ckJsb2NrKiBtaWRkbGVCbG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIG9sZENvbnQpCi17
Ci0gICAgLy8gQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBpbmxpbmUuCi0gICAgUmVuZGVyUHRyPFJl
bmRlcklubGluZT4gY2xvbmVJbmxpbmUgPSBjbG9uZUFzQ29udGludWF0aW9uKCk7Ci0jaWYgRU5B
QkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIC8vIElmIHdlJ3JlIHNwbGl0dGluZyB0aGUgaW5saW5l
IGNvbnRhaW5pbmcgdGhlIGZ1bGxzY3JlZW5lZCBlbGVtZW50LAotICAgIC8vIHxiZWZvcmVDaGls
ZHwgbWF5IGJlIHRoZSByZW5kZXJlciBmb3IgdGhlIGZ1bGxzY3JlZW5lZCBlbGVtZW50LiBIb3dl
dmVyLAotICAgIC8vIHRoYXQgcmVuZGVyZXIgaXMgd3JhcHBlZCBpbiBhIFJlbmRlckZ1bGxTY3Jl
ZW4sIHNvIHx0aGlzfCBpcyBub3QgaXRzCi0gICAgLy8gcGFyZW50LiBTaW5jZSB0aGUgc3BsaXR0
aW5nIGxvZ2ljIGV4cGVjdHMgfHRoaXN8IHRvIGJlIHRoZSBwYXJlbnQsIHNldAotICAgIC8vIHxi
ZWZvcmVDaGlsZHwgdG8gYmUgdGhlIFJlbmRlckZ1bGxTY3JlZW4uCi0gICAgY29uc3QgRWxlbWVu
dCogZnVsbFNjcmVlbkVsZW1lbnQgPSBkb2N1bWVudCgpLndlYmtpdEN1cnJlbnRGdWxsU2NyZWVu
RWxlbWVudCgpOwotICAgIGlmIChmdWxsU2NyZWVuRWxlbWVudCAmJiBiZWZvcmVDaGlsZCAmJiBi
ZWZvcmVDaGlsZC0+bm9kZSgpID09IGZ1bGxTY3JlZW5FbGVtZW50KQotICAgICAgICBiZWZvcmVD
aGlsZCA9IGRvY3VtZW50KCkuZnVsbFNjcmVlblJlbmRlcmVyKCk7Ci0jZW5kaWYKLSAgICAvLyBO
b3cgdGFrZSBhbGwgb2YgdGhlIGNoaWxkcmVuIGZyb20gYmVmb3JlQ2hpbGQgdG8gdGhlIGVuZCBh
bmQgcmVtb3ZlCi0gICAgLy8gdGhlbSBmcm9tIHx0aGlzfCBhbmQgcGxhY2UgdGhlbSBpbiB0aGUg
Y2xvbmUuCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyVG9Nb3ZlID0gYmVmb3JlQ2hp
bGQ7IHJlbmRlcmVyVG9Nb3ZlOykgewotICAgICAgICBSZW5kZXJPYmplY3QqIG5leHRTaWJsaW5n
ID0gcmVuZGVyZXJUb01vdmUtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIC8vIFdoZW4gYW5vbnlt
b3VzIHdyYXBwZXIgaXMgcHJlc2VudCwgd2UgbWlnaHQgbmVlZCB0byBtb3ZlIHRoZSB3aG9sZSBz
dWJ0cmVlIGluc3RlYWQuCi0gICAgICAgIGlmIChyZW5kZXJlclRvTW92ZS0+cGFyZW50KCkgIT0g
dGhpcykgewotICAgICAgICAgICAgYXV0byogYW5vbnltb3VzUGFyZW50ID0gcmVuZGVyZXJUb01v
dmUtPnBhcmVudCgpOwotICAgICAgICAgICAgd2hpbGUgKGFub255bW91c1BhcmVudCAmJiBhbm9u
eW1vdXNQYXJlbnQtPnBhcmVudCgpICE9IHRoaXMpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
YW5vbnltb3VzUGFyZW50LT5pc0Fub255bW91cygpKTsKLSAgICAgICAgICAgICAgICBhbm9ueW1v
dXNQYXJlbnQgPSBhbm9ueW1vdXNQYXJlbnQtPnBhcmVudCgpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKCFhbm9ueW1vdXNQYXJlbnQpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIC8vIElmIGJlZm9yZUNoaWxkIGlzIHRoZSBmaXJzdCBjaGlsZCBpbiB0aGUgc3Vi
dHJlZSwgd2UgY291bGQganVzdCBtb3ZlIHRoZSB3aG9sZSBzdWJ0cmVlLgotICAgICAgICAgICAg
aWYgKCFyZW5kZXJlclRvTW92ZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsKLSAgICAgICAgICAgICAg
ICAvLyBSZXBhcmVudCB0aGUgd2hvbGUgYW5vbnltb3VzIHdyYXBwZXIgdHJlZS4KLSAgICAgICAg
ICAgICAgICByZW5kZXJlclRvTW92ZSA9IGFub255bW91c1BhcmVudDsKLSAgICAgICAgICAgICAg
ICAvLyBTa2lwIHRvIHRoZSBuZXh0IHNpYmxpbmcgdGhhdCBpcyBub3QgaW4gdGhpcyBzdWJ0cmVl
LgotICAgICAgICAgICAgICAgIG5leHRTaWJsaW5nID0gYW5vbnltb3VzUGFyZW50LT5uZXh0U2li
bGluZygpOwotICAgICAgICAgICAgfSBlbHNlIGlmICghcmVuZGVyZXJUb01vdmUtPm5leHRTaWJs
aW5nKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBsYXN0IHJlbmRlcmVyIGlu
IHRoZSBzdWJ0cmVlLiBXZSBuZWVkIHRvIGp1bXAgb3V0IG9mIHRoZSB3cmFwcGVyIHN1YnRyZWUs
IHNvIHRoYXQKLSAgICAgICAgICAgICAgICAvLyB0aGUgc2libGluZ3MgYXJlIGdldHRpbmcgcmVw
YXJlbnRlZCB0b28uCi0gICAgICAgICAgICAgICAgbmV4dFNpYmxpbmcgPSBhbm9ueW1vdXNQYXJl
bnQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBPdGhlcndp
c2UganVzdCBtb3ZlIHRoZSByZW5kZXJlciB0byB0aGUgaW5saW5lIGNsb25lLiBTaG91bGQgdGhl
IHJlbmRlcmVyIG5lZWQgYW4gYW5vbgotICAgICAgICAgICAgLy8gd3JhcHBlciwgdGhlIGFkZENo
aWxkKCkgd2lsbCBnZW5lcmF0ZSBvbmUgZm9yIGl0LgotICAgICAgICAgICAgLy8gRklYTUU6IFdo
ZW4gdGhlIGFub255bW91cyB3cmFwcGVyIGhhcyBtdWx0aXBsZSBjaGlsZHJlbiwgd2UgZW5kIHVw
IHRyYXZlcnNpbmcgdXAgdG8gdGhlIHRvcG1vc3Qgd3JhcHBlcgotICAgICAgICAgICAgLy8gZXZl
cnkgdGltZSwgd2hpY2ggaXMgYSBiaXQgd2FzdGVmdWwuCi0gICAgICAgIH0KLSAgICAgICAgYXV0
byBjaGlsZFRvTW92ZSA9IHJlbmRlcmVyVG9Nb3ZlLT5wYXJlbnQoKS0+dGFrZUNoaWxkSW50ZXJu
YWwoKnJlbmRlcmVyVG9Nb3ZlKTsKLSAgICAgICAgY2xvbmVJbmxpbmUtPmFkZENoaWxkSWdub3Jp
bmdDb250aW51YXRpb24oYnVpbGRlciwgV1RGTW92ZShjaGlsZFRvTW92ZSkpOwotICAgICAgICBy
ZW5kZXJlclRvTW92ZS0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Ci0gICAg
ICAgIHJlbmRlcmVyVG9Nb3ZlID0gbmV4dFNpYmxpbmc7Ci0gICAgfQotICAgIC8vIEhvb2sgfGNs
b25lfCB1cCBhcyB0aGUgY29udGludWF0aW9uIG9mIHRoZSBtaWRkbGUgYmxvY2suCi0gICAgY2xv
bmVJbmxpbmUtPmluc2VydEludG9Db250aW51YXRpb25DaGFpbkFmdGVyKCptaWRkbGVCbG9jayk7
Ci0gICAgaWYgKG9sZENvbnQpCi0gICAgICAgIG9sZENvbnQtPmluc2VydEludG9Db250aW51YXRp
b25DaGFpbkFmdGVyKCpjbG9uZUlubGluZSk7Ci0KLSAgICAvLyBXZSBoYXZlIGJlZW4gcmVwYXJl
bnRlZCBhbmQgYXJlIG5vdyB1bmRlciB0aGUgZnJvbUJsb2NrLiAgV2UgbmVlZAotICAgIC8vIHRv
IHdhbGsgdXAgb3VyIGlubGluZSBwYXJlbnQgY2hhaW4gdW50aWwgd2UgaGl0IHRoZSBjb250YWlu
aW5nIGJsb2NrLgotICAgIC8vIE9uY2Ugd2UgaGl0IHRoZSBjb250YWluaW5nIGJsb2NrIHdlJ3Jl
IGRvbmUuCi0gICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGN1cnJlbnQgPSBkb3duY2FzdDxSZW5k
ZXJCb3hNb2RlbE9iamVjdD4ocGFyZW50KCkpOwotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBj
dXJyZW50Q2hpbGQgPSB0aGlzOwotICAgIAotICAgIC8vIEZJWE1FOiBCZWNhdXNlIHNwbGl0dGlu
ZyBpcyBPKG5eMikgYXMgdGFncyBuZXN0IHBhdGhvbG9naWNhbGx5LCB3ZSBjYXAgdGhlIGRlcHRo
IGF0IHdoaWNoIHdlJ3JlIHdpbGxpbmcgdG8gY2xvbmUuCi0gICAgLy8gVGhlcmUgd2lsbCBldmVu
dHVhbGx5IGJlIGEgYmV0dGVyIGFwcHJvYWNoIHRvIHRoaXMgcHJvYmxlbSB0aGF0IHdpbGwgbGV0
IHVzIG5lc3QgdG8gYSBtdWNoCi0gICAgLy8gZ3JlYXRlciBkZXB0aCAoc2VlIGJ1Z3ppbGxhIGJ1
ZyAxMzQzMCkgYnV0IGZvciBub3cgd2UgaGF2ZSBhIGxpbWl0LiAgVGhpcyAqd2lsbCogcmVzdWx0
IGluCi0gICAgLy8gaW5jb3JyZWN0IHJlbmRlcmluZywgYnV0IHRoZSBhbHRlcm5hdGl2ZSBpcyB0
byBoYW5nIGZvcmV2ZXIuCi0gICAgdW5zaWduZWQgc3BsaXREZXB0aCA9IDE7Ci0gICAgY29uc3Qg
dW5zaWduZWQgY01heFNwbGl0RGVwdGggPSAyMDA7IAotICAgIHdoaWxlIChjdXJyZW50ICYmIGN1
cnJlbnQgIT0gZnJvbUJsb2NrKSB7Ci0gICAgICAgIGlmIChzcGxpdERlcHRoIDwgY01heFNwbGl0
RGVwdGgpIHsKLSAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBjbG9uZS4KLSAgICAgICAgICAg
IFJlbmRlclB0cjxSZW5kZXJJbmxpbmU+IGNsb25lQ2hpbGQgPSBXVEZNb3ZlKGNsb25lSW5saW5l
KTsKLSAgICAgICAgICAgIGNsb25lSW5saW5lID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPigqY3Vy
cmVudCkuY2xvbmVBc0NvbnRpbnVhdGlvbigpOwotCi0gICAgICAgICAgICAvLyBJbnNlcnQgb3Vy
IGNoaWxkIGNsb25lIGFzIHRoZSBmaXJzdCBjaGlsZC4KLSAgICAgICAgICAgIGNsb25lSW5saW5l
LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKGJ1aWxkZXIsIFdURk1vdmUoY2xvbmVDaGls
ZCkpOwotCi0gICAgICAgICAgICAvLyBIb29rIHRoZSBjbG9uZSB1cCBhcyBhIGNvbnRpbnVhdGlv
biBvZiB8Y3VycnwuCi0gICAgICAgICAgICBjbG9uZUlubGluZS0+aW5zZXJ0SW50b0NvbnRpbnVh
dGlvbkNoYWluQWZ0ZXIoKmN1cnJlbnQpOwotCi0gICAgICAgICAgICAvLyBOb3cgd2UgbmVlZCB0
byB0YWtlIGFsbCBvZiB0aGUgY2hpbGRyZW4gc3RhcnRpbmcgZnJvbSB0aGUgZmlyc3QgY2hpbGQK
LSAgICAgICAgICAgIC8vICphZnRlciogY3VycmVudENoaWxkIGFuZCBhcHBlbmQgdGhlbSBhbGwg
dG8gdGhlIGNsb25lLgotICAgICAgICAgICAgZm9yIChhdXRvKiBzaWJsaW5nID0gY3VycmVudENo
aWxkLT5uZXh0U2libGluZygpOyBzaWJsaW5nOykgewotICAgICAgICAgICAgICAgIGF1dG8qIG5l
eHQgPSBzaWJsaW5nLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgIGF1dG8gY2hpbGRU
b01vdmUgPSBjdXJyZW50LT50YWtlQ2hpbGRJbnRlcm5hbCgqc2libGluZyk7Ci0gICAgICAgICAg
ICAgICAgY2xvbmVJbmxpbmUtPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oYnVpbGRlciwg
V1RGTW92ZShjaGlsZFRvTW92ZSkpOwotICAgICAgICAgICAgICAgIHNpYmxpbmctPnNldE5lZWRz
TGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwotICAgICAgICAgICAgICAgIHNpYmxpbmcgPSBu
ZXh0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBLZWVw
IHdhbGtpbmcgdXAgdGhlIGNoYWluLgotICAgICAgICBjdXJyZW50Q2hpbGQgPSBjdXJyZW50Owot
ICAgICAgICBjdXJyZW50ID0gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KGN1cnJlbnQt
PnBhcmVudCgpKTsKLSAgICAgICAgKytzcGxpdERlcHRoOwotICAgIH0KLQotICAgIC8vIENsZWFy
IHRoZSBmbG93IHRocmVhZCBjb250YWluaW5nIGJsb2NrcyBjYWNoZWQgZHVyaW5nIHRoZSBkZXRh
Y2hlZCBzdGF0ZSBpbnNlcnRpb25zLgotICAgIGZvciAoYXV0byYgY2xvbmVCbG9ja0NoaWxkIDog
Y2hpbGRyZW5PZlR5cGU8UmVuZGVyQmxvY2s+KCpjbG9uZUlubGluZSkpCi0gICAgICAgIGNsb25l
QmxvY2tDaGlsZC5yZXNldEVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93QW5kQ2hpbGRJbmZvSW5jbHVk
aW5nRGVzY2VuZGFudHMoKTsKLQotICAgIC8vIE5vdyB3ZSBhcmUgYXQgdGhlIGJsb2NrIGxldmVs
LiBXZSBuZWVkIHRvIHB1dCB0aGUgY2xvbmUgaW50byB0aGUgdG9CbG9jay4KLSAgICB0b0Jsb2Nr
LT5pbnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUoY2xvbmVJbmxpbmUpLCBudWxscHRyKTsKLQot
ICAgIC8vIE5vdyB0YWtlIGFsbCB0aGUgY2hpbGRyZW4gYWZ0ZXIgY3VycmVudENoaWxkIGFuZCBy
ZW1vdmUgdGhlbSBmcm9tIHRoZSBmcm9tQmxvY2sKLSAgICAvLyBhbmQgcHV0IHRoZW0gaW4gdGhl
IHRvQmxvY2suCi0gICAgZm9yIChhdXRvKiBjdXJyZW50ID0gY3VycmVudENoaWxkLT5uZXh0U2li
bGluZygpOyBjdXJyZW50OykgewotICAgICAgICBhdXRvKiBuZXh0ID0gY3VycmVudC0+bmV4dFNp
YmxpbmcoKTsKLSAgICAgICAgYXV0byBjaGlsZFRvTW92ZSA9IGZyb21CbG9jay0+dGFrZUNoaWxk
SW50ZXJuYWwoKmN1cnJlbnQpOwotICAgICAgICB0b0Jsb2NrLT5pbnNlcnRDaGlsZEludGVybmFs
KFdURk1vdmUoY2hpbGRUb01vdmUpLCBudWxscHRyKTsKLSAgICAgICAgY3VycmVudCA9IG5leHQ7
Ci0gICAgfQotfQotCi12b2lkIFJlbmRlcklubGluZTo6c3BsaXRGbG93KFJlbmRlclRyZWVCdWls
ZGVyJiBidWlsZGVyLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBSZW5kZXJQdHI8UmVuZGVy
QmxvY2s+IG5ld0Jsb2NrQm94LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVu
ZGVyQm94TW9kZWxPYmplY3QqIG9sZENvbnQpCi17Ci0gICAgYXV0byYgYWRkZWRCbG9ja0JveCA9
ICpuZXdCbG9ja0JveDsKLSAgICBSZW5kZXJCbG9jayogcHJlID0gbnVsbHB0cjsKLSAgICBSZW5k
ZXJCbG9jayogYmxvY2sgPSBjb250YWluaW5nQmxvY2soKTsKLQotICAgIC8vIERlbGV0ZSBvdXIg
bGluZSBib3hlcyBiZWZvcmUgd2UgZG8gdGhlIGlubGluZSBzcGxpdCBpbnRvIGNvbnRpbnVhdGlv
bnMuCi0gICAgYmxvY2stPmRlbGV0ZUxpbmVzKCk7Ci0KLSAgICBSZW5kZXJQdHI8UmVuZGVyQmxv
Y2s+IGNyZWF0ZWRQcmU7Ci0gICAgYm9vbCBtYWRlTmV3QmVmb3JlQmxvY2sgPSBmYWxzZTsKLSAg
ICBpZiAoYmxvY2stPmlzQW5vbnltb3VzQmxvY2soKSAmJiAoIWJsb2NrLT5wYXJlbnQoKSB8fCAh
YmxvY2stPnBhcmVudCgpLT5jcmVhdGVzQW5vbnltb3VzV3JhcHBlcigpKSkgewotICAgICAgICAv
LyBXZSBjYW4gcmV1c2UgdGhpcyBibG9jayBhbmQgbWFrZSBpdCB0aGUgcHJlQmxvY2sgb2YgdGhl
IG5leHQgY29udGludWF0aW9uLgotICAgICAgICBwcmUgPSBibG9jazsKLSAgICAgICAgcHJlLT5y
ZW1vdmVQb3NpdGlvbmVkT2JqZWN0cyhudWxscHRyKTsKLSAgICAgICAgLy8gRklYTUUtQkxPQ0tG
TE9XOiBUaGUgZW5jbG9zaW5nIG1ldGhvZCBzaG91bGQgbGlrZWx5IGJlIHN3aXRjaGVkIG92ZXIK
LSAgICAgICAgLy8gdG8gb25seSB3b3JrIG9uIFJlbmRlckJsb2NrRmxvdywgaW4gd2hpY2ggY2Fz
ZSB0aGlzIGNvbnZlcnNpb24gY2FuIGJlCi0gICAgICAgIC8vIHJlbW92ZWQuCi0gICAgICAgIGlm
IChpczxSZW5kZXJCbG9ja0Zsb3c+KCpwcmUpKQotICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVy
QmxvY2tGbG93PigqcHJlKS5yZW1vdmVGbG9hdGluZ09iamVjdHMoKTsKLSAgICAgICAgYmxvY2sg
PSBibG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gTm8g
YW5vbnltb3VzIGJsb2NrIGF2YWlsYWJsZSBmb3IgdXNlLiAgTWFrZSBvbmUuCi0gICAgICAgIGNy
ZWF0ZWRQcmUgPSBibG9jay0+Y3JlYXRlQW5vbnltb3VzQmxvY2soKTsKLSAgICAgICAgcHJlID0g
Y3JlYXRlZFByZS5nZXQoKTsKLSAgICAgICAgbWFkZU5ld0JlZm9yZUJsb2NrID0gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBhdXRvIGNyZWF0ZWRQb3N0ID0gcHJlLT5jcmVhdGVBbm9ueW1vdXNCb3hXaXRo
U2FtZVR5cGVBcygqYmxvY2spOwotICAgIGF1dG8mIHBvc3QgPSBkb3duY2FzdDxSZW5kZXJCbG9j
az4oKmNyZWF0ZWRQb3N0KTsKLQotICAgIFJlbmRlck9iamVjdCogYm94Rmlyc3QgPSBtYWRlTmV3
QmVmb3JlQmxvY2sgPyBibG9jay0+Zmlyc3RDaGlsZCgpIDogcHJlLT5uZXh0U2libGluZygpOwot
ICAgIGlmIChjcmVhdGVkUHJlKQotICAgICAgICBibG9jay0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChX
VEZNb3ZlKGNyZWF0ZWRQcmUpLCBib3hGaXJzdCk7Ci0gICAgYmxvY2stPmluc2VydENoaWxkSW50
ZXJuYWwoV1RGTW92ZShuZXdCbG9ja0JveCksIGJveEZpcnN0KTsKLSAgICBibG9jay0+aW5zZXJ0
Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKGNyZWF0ZWRQb3N0KSwgYm94Rmlyc3QpOwotICAgIGJsb2Nr
LT5zZXRDaGlsZHJlbklubGluZShmYWxzZSk7Ci0gICAgCi0gICAgaWYgKG1hZGVOZXdCZWZvcmVC
bG9jaykgewotICAgICAgICBSZW5kZXJPYmplY3QqIG8gPSBib3hGaXJzdDsKLSAgICAgICAgd2hp
bGUgKG8pIHsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogbm8gPSBvOwotICAgICAgICAgICAg
byA9IG5vLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgYXV0byBjaGlsZFRvTW92ZSA9IGJs
b2NrLT50YWtlQ2hpbGRJbnRlcm5hbCgqbm8pOwotICAgICAgICAgICAgcHJlLT5pbnNlcnRDaGls
ZEludGVybmFsKFdURk1vdmUoY2hpbGRUb01vdmUpLCBudWxscHRyKTsKLSAgICAgICAgICAgIG5v
LT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHNwbGl0SW5saW5lcyhidWlsZGVyLCBwcmUsICZwb3N0LCAmYWRkZWRCbG9ja0JveCwg
YmVmb3JlQ2hpbGQsIG9sZENvbnQpOwotCi0gICAgLy8gV2UgYWxyZWFkeSBrbm93IHRoZSBuZXdC
bG9ja0JveCBpc24ndCBnb2luZyB0byBjb250YWluIGlubGluZSBraWRzLCBzbyBhdm9pZCB3YXN0
aW5nCi0gICAgLy8gdGltZSBpbiBtYWtlQ2hpbGRyZW5Ob25JbmxpbmUgYnkganVzdCBzZXR0aW5n
IHRoaXMgZXhwbGljaXRseSB1cCBmcm9udC4KLSAgICBhZGRlZEJsb2NrQm94LnNldENoaWxkcmVu
SW5saW5lKGZhbHNlKTsKLQotICAgIC8vIFdlIGRlbGF5ZWQgYWRkaW5nIHRoZSBuZXdDaGlsZCB1
bnRpbCBub3cgc28gdGhhdCB0aGUgfG5ld0Jsb2NrQm94fCB3b3VsZCBiZSBmdWxseQotICAgIC8v
IGNvbm5lY3RlZCwgdGh1cyBhbGxvd2luZyBuZXdDaGlsZCBhY2Nlc3MgdG8gYSByZW5kZXJBcmVu
YSBzaG91bGQgaXQgbmVlZAotICAgIC8vIHRvIHdyYXAgaXRzZWxmIGluIGFkZGl0aW9uYWwgYm94
ZXMgKGUuZy4sIHRhYmxlIGNvbnN0cnVjdGlvbikuCi0gICAgYnVpbGRlci5pbnNlcnRDaGlsZChh
ZGRlZEJsb2NrQm94LCBXVEZNb3ZlKG5ld0NoaWxkKSk7Ci0KLSAgICAvLyBBbHdheXMganVzdCBk
byBhIGZ1bGwgbGF5b3V0IGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IGxpbmUgYm94ZXMgKGVzcGVj
aWFsbHkgd3JhcHBlcnMgZm9yIGltYWdlcykKLSAgICAvLyBnZXQgZGVsZXRlZCBwcm9wZXJseS4g
IEJlY2F1c2Ugb2JqZWN0cyBtb3ZlcyBmcm9tIHRoZSBwcmUgYmxvY2sgaW50byB0aGUgcG9zdCBi
bG9jaywgd2Ugd2FudCB0bwotICAgIC8vIG1ha2UgbmV3IGxpbmUgYm94ZXMgaW5zdGVhZCBvZiBs
ZWF2aW5nIHRoZSBvbGQgbGluZSBib3hlcyBhcm91bmQuCi0gICAgcHJlLT5zZXROZWVkc0xheW91
dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKLSAgICBibG9jay0+c2V0TmVlZHNMYXlvdXRBbmRQcmVm
V2lkdGhzUmVjYWxjKCk7Ci0gICAgcG9zdC5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNh
bGMoKTsKLX0KLQotc3RhdGljIGJvb2wgY2FuVXNlQXNQYXJlbnRGb3JDb250aW51YXRpb24oY29u
c3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKLXsKLSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpICYmIHJl
bmRlcmVyLT5pc0Fub255bW91cygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGlz
PFJlbmRlclRhYmxlPihyZW5kZXJlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZW5kZXJJbmxpbmU6OmFkZENoaWxkVG9Db250aW51YXRpb24o
UmVuZGVyVHJlZUJ1aWxkZXImIGJ1aWxkZXIsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0No
aWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQotewotICAgIGF1dG8qIGZsb3cgPSBjb250
aW51YXRpb25CZWZvcmUoYmVmb3JlQ2hpbGQpOwotICAgIC8vIEl0IG1heSBvciBtYXkgbm90IGJl
IHRoZSBkaXJlY3QgcGFyZW50IG9mIHRoZSBiZWZvcmVDaGlsZC4KLSAgICBSZW5kZXJCb3hNb2Rl
bE9iamVjdCogYmVmb3JlQ2hpbGRBbmNlc3RvciA9IG51bGxwdHI7Ci0gICAgaWYgKCFiZWZvcmVD
aGlsZCkgewotICAgICAgICBhdXRvKiBjb250aW51YXRpb24gPSBuZXh0Q29udGludWF0aW9uKGZs
b3cpOwotICAgICAgICBiZWZvcmVDaGlsZEFuY2VzdG9yID0gY29udGludWF0aW9uID8gY29udGlu
dWF0aW9uIDogZmxvdzsKLSAgICB9IGVsc2UgaWYgKGNhblVzZUFzUGFyZW50Rm9yQ29udGludWF0
aW9uKGJlZm9yZUNoaWxkLT5wYXJlbnQoKSkpCi0gICAgICAgIGJlZm9yZUNoaWxkQW5jZXN0b3Ig
PSBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oYmVmb3JlQ2hpbGQtPnBhcmVudCgpKTsK
LSAgICBlbHNlIGlmIChiZWZvcmVDaGlsZC0+cGFyZW50KCkpIHsKLSAgICAgICAgLy8gSW4gY2Fz
ZSBvZiBhbm9ueW1vdXMgd3JhcHBlcnMsIHRoZSBwYXJlbnQgb2YgdGhlIGJlZm9yZUNoaWxkIGlz
IG1vc3RseSBpcnJlbGV2YW50LiBXaGF0IHdlIG5lZWQgaXMgdGhlIHRvcG1vc3Qgd3JhcHBlci4K
LSAgICAgICAgYXV0byogcGFyZW50ID0gYmVmb3JlQ2hpbGQtPnBhcmVudCgpOwotICAgICAgICB3
aGlsZSAocGFyZW50ICYmIHBhcmVudC0+cGFyZW50KCkgJiYgcGFyZW50LT5wYXJlbnQoKS0+aXNB
bm9ueW1vdXMoKSkgewotICAgICAgICAgICAgLy8gVGhlIGFuY2VzdG9yIGNhbmRpZGF0ZSBuZWVk
cyB0byBiZSBpbnNpZGUgdGhlIGNvbnRpbnVhdGlvbi4KLSAgICAgICAgICAgIGlmIChwYXJlbnQt
PmlzQ29udGludWF0aW9uKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBw
YXJlbnQgPSBwYXJlbnQtPnBhcmVudCgpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChwYXJl
bnQgJiYgcGFyZW50LT5wYXJlbnQoKSk7Ci0gICAgICAgIGJlZm9yZUNoaWxkQW5jZXN0b3IgPSBk
b3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4ocGFyZW50LT5wYXJlbnQoKSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgaWYgKG5ld0NoaWxkLT5p
c0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCi0gICAgICAgIHJldHVybiBiZWZvcmVD
aGlsZEFuY2VzdG9yLT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKGJ1aWxkZXIsIFdURk1v
dmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7Ci0KLSAgICBpZiAoZmxvdyA9PSBiZWZvcmVDaGls
ZEFuY2VzdG9yKQotICAgICAgICByZXR1cm4gZmxvdy0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVh
dGlvbihidWlsZGVyLCBXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwotICAgIC8vIEEg
Y29udGludWF0aW9uIGFsd2F5cyBjb25zaXN0cyBvZiB0d28gcG90ZW50aWFsIGNhbmRpZGF0ZXM6
IGFuIGlubGluZSBvciBhbiBhbm9ueW1vdXMKLSAgICAvLyBibG9jayBib3ggaG9sZGluZyBibG9j
ayBjaGlsZHJlbi4KLSAgICBib29sIGNoaWxkSW5saW5lID0gbmV3Q2hpbGRJc0lubGluZSgqbmV3
Q2hpbGQsICp0aGlzKTsKLSAgICAvLyBUaGUgZ29hbCBoZXJlIGlzIHRvIG1hdGNoIHVwIGlmIHdl
IGNhbiwgc28gdGhhdCB3ZSBjYW4gY29hbGVzY2UgYW5kIGNyZWF0ZSB0aGUKLSAgICAvLyBtaW5p
bWFsICMgb2YgY29udGludWF0aW9ucyBuZWVkZWQgZm9yIHRoZSBpbmxpbmUuCi0gICAgaWYgKGNo
aWxkSW5saW5lID09IGJlZm9yZUNoaWxkQW5jZXN0b3ItPmlzSW5saW5lKCkpCi0gICAgICAgIHJl
dHVybiBiZWZvcmVDaGlsZEFuY2VzdG9yLT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKGJ1
aWxkZXIsIFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7Ci0gICAgaWYgKGZsb3ctPmlz
SW5saW5lKCkgPT0gY2hpbGRJbmxpbmUpCi0gICAgICAgIHJldHVybiBmbG93LT5hZGRDaGlsZEln
bm9yaW5nQ29udGludWF0aW9uKGJ1aWxkZXIsIFdURk1vdmUobmV3Q2hpbGQpKTsgLy8gSnVzdCB0
cmVhdCBsaWtlIGFuIGFwcGVuZC4KLSAgICByZXR1cm4gYmVmb3JlQ2hpbGRBbmNlc3Rvci0+YWRk
Q2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihidWlsZGVyLCBXVEZNb3ZlKG5ld0NoaWxkKSwgYmVm
b3JlQ2hpbGQpOworICAgIGJ1aWxkZXIuaW5zZXJ0Q2hpbGRUb1JlbmRlcklubGluZUlnbm9yaW5n
Q29udGludWF0aW9uKCp0aGlzLCBXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogfQog
CiB2b2lkIFJlbmRlcklubGluZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExh
eW91dFBvaW50JiBwYWludE9mZnNldCkKQEAgLTEzNjksNyArMTA0Nyw3IEBAIHZvaWQgUmVuZGVy
SW5saW5lOjpjaGlsZEJlY2FtZU5vbklubGluZShSZW5kZXJFbGVtZW50JiBjaGlsZCkKICAgICBu
ZXdCb3gtPmluc2VydEludG9Db250aW51YXRpb25DaGFpbkFmdGVyKCp0aGlzKTsKICAgICBSZW5k
ZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gY2hpbGQubmV4dFNpYmxpbmcoKTsKICAgICBhdXRvIHJl
bW92ZWRDaGlsZCA9IHRha2VDaGlsZEludGVybmFsKGNoaWxkKTsKLSAgICBzcGxpdEZsb3coKlJl
bmRlclRyZWVCdWlsZGVyOjpjdXJyZW50KCksIGJlZm9yZUNoaWxkLCBXVEZNb3ZlKG5ld0JveCks
IFdURk1vdmUocmVtb3ZlZENoaWxkKSwgb2xkQ29udGludWF0aW9uKTsKKyAgICBSZW5kZXJUcmVl
QnVpbGRlcjo6Y3VycmVudCgpLT5zcGxpdEZsb3coKnRoaXMsIGJlZm9yZUNoaWxkLCBXVEZNb3Zl
KG5ld0JveCksIFdURk1vdmUocmVtb3ZlZENoaWxkKSwgb2xkQ29udGludWF0aW9uKTsKIH0KIAog
dm9pZCBSZW5kZXJJbmxpbmU6OnVwZGF0ZUhpdFRlc3RSZXN1bHQoSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW5saW5lLmgKaW5kZXggODI3ZjZlNjM1MTU0MTM1NzIxNWIyNzcxM2YyYTg5NjE0Y2VmMjg5
OS4uNzkxOGVkOWE2ZWM2ZWNjNGRiNzNlMTkyYTEzOTE0MzMyNDg2YzA3NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaApAQCAtOTQsNiArOTQsOCBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGhpdFRlc3RDdWxsZWRJbmxpbmUoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBj
b25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpOwogCisgICAgdm9pZCBhZGRDaGls
ZElnbm9yaW5nQ29udGludWF0aW9uKFJlbmRlclRyZWVCdWlsZGVyJiwgUmVuZGVyUHRyPFJlbmRl
ck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSBudWxscHRyKSBm
aW5hbDsKKwogcHJvdGVjdGVkOgogICAgIHZvaWQgd2lsbEJlRGVzdHJveWVkKCkgb3ZlcnJpZGU7
CiAKQEAgLTExNiwxMiArMTE4LDYgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBH
ZW5lcmF0b3JDb250ZXh0PgogICAgIHZvaWQgZ2VuZXJhdGVDdWxsZWRMaW5lQm94UmVjdHMoR2Vu
ZXJhdG9yQ29udGV4dCYgeWllbGQsIGNvbnN0IFJlbmRlcklubGluZSogY29udGFpbmVyKSBjb25z
dDsKIAotICAgIHZvaWQgYWRkQ2hpbGRUb0NvbnRpbnVhdGlvbihSZW5kZXJUcmVlQnVpbGRlciYs
IFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNo
aWxkKTsKLSAgICB2b2lkIGFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oUmVuZGVyVHJlZUJ1
aWxkZXImLCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBi
ZWZvcmVDaGlsZCA9IG51bGxwdHIpIGZpbmFsOwotCi0gICAgdm9pZCBzcGxpdElubGluZXMoUmVu
ZGVyVHJlZUJ1aWxkZXImLCBSZW5kZXJCbG9jayogZnJvbUJsb2NrLCBSZW5kZXJCbG9jayogdG9C
bG9jaywgUmVuZGVyQmxvY2sqIG1pZGRsZUJsb2NrLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxk
LCBSZW5kZXJCb3hNb2RlbE9iamVjdCogb2xkQ29udCk7Ci0gICAgdm9pZCBzcGxpdEZsb3coUmVu
ZGVyVHJlZUJ1aWxkZXImLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBSZW5kZXJQdHI8UmVu
ZGVyQmxvY2s+IG5ld0Jsb2NrQm94LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwg
UmVuZGVyQm94TW9kZWxPYmplY3QqIG9sZENvbnQpOwotCiAgICAgdm9pZCBsYXlvdXQoKSBmaW5h
bCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9IC8vIERvIG5vdGhpbmcgZm9yIGxheW91dCgpCiAK
ICAgICB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JikgZmluYWw7CkBA
IC0xNjIsMTEgKzE1OCw4IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JU
KQogICAgIHZvaWQgYWRkQW5ub3RhdGVkUmVnaW9ucyhWZWN0b3I8QW5ub3RhdGVkUmVnaW9uVmFs
dWU+JikgZmluYWw7CiAjZW5kaWYKLSAgICAKLSAgICBSZW5kZXJQdHI8UmVuZGVySW5saW5lPiBj
bG9uZUFzQ29udGludWF0aW9uKCkgY29uc3Q7CiAKICAgICB2b2lkIHBhaW50T3V0bGluZUZvckxp
bmUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0
JiBwcmV2TGluZSwgY29uc3QgTGF5b3V0UmVjdCYgdGhpc0xpbmUsIGNvbnN0IExheW91dFJlY3Qm
IG5leHRMaW5lLCBjb25zdCBDb2xvciYpOwotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250
aW51YXRpb25CZWZvcmUoUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CiAKICAgICBib29sIHdp
bGxDaGFuZ2VDcmVhdGVzU3RhY2tpbmdDb250ZXh0KCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmNw
cAppbmRleCAzMTkyZDRhNzI5ZDE1YTUzMGE0ZTIyZmI0MWRkODMzOWE2NWIzNTY5Li5iOWJlNDFm
NDM4NGQ2NWRmNDE4YWVhODJlZGRhMThhMDQxYzkwNmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5jcHAKQEAgLTM1
LDYgKzM1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJl
ZUJ1aWxkZXJGaXJzdExldHRlci5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVyRm9ybUNv
bnRyb2xzLmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxkZXJJbmxpbmUuaCIKICNpbmNsdWRl
ICJSZW5kZXJUcmVlQnVpbGRlckxpc3QuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQnVpbGRlck11
bHRpQ29sdW1uLmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxkZXJSdWJ5LmgiCkBAIC01Miw2
ICs1Myw3IEBAIFJlbmRlclRyZWVCdWlsZGVyOjpSZW5kZXJUcmVlQnVpbGRlcihSZW5kZXJWaWV3
JiB2aWV3KQogICAgICwgbV90YWJsZUJ1aWxkZXIoc3RkOjptYWtlX3VuaXF1ZTxUYWJsZT4oKnRo
aXMpKQogICAgICwgbV9ydWJ5QnVpbGRlcihzdGQ6Om1ha2VfdW5pcXVlPFJ1Ynk+KCp0aGlzKSkK
ICAgICAsIG1fZm9ybUNvbnRyb2xzQnVpbGRlcihzdGQ6Om1ha2VfdW5pcXVlPEZvcm1Db250cm9s
cz4oKnRoaXMpKQorICAgICwgbV9pbmxpbmVCdWlsZGVyKHN0ZDo6bWFrZV91bmlxdWU8SW5saW5l
PigqdGhpcykpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXNfY3VycmVudCB8fCAmbV92aWV3ICE9
ICZzX2N1cnJlbnQtPm1fdmlldyk7CiAgICAgbV9wcmV2aW91cyA9IHNfY3VycmVudDsKQEAgLTEy
OCw2ICsxMzAsMjEgQEAgdm9pZCBSZW5kZXJUcmVlQnVpbGRlcjo6aW5zZXJ0Q2hpbGQoUmVuZGVy
VHJlZVBvc2l0aW9uJiBwb3NpdGlvbiwgUmVuZGVyUHRyPFJlbmQKICAgICBpbnNlcnRDaGlsZChw
b3NpdGlvbi5wYXJlbnQoKSwgV1RGTW92ZShjaGlsZCksIHBvc2l0aW9uLm5leHRTaWJsaW5nKCkp
OwogfQogCit2b2lkIFJlbmRlclRyZWVCdWlsZGVyOjppbnNlcnRDaGlsZFRvUmVuZGVySW5saW5l
KFJlbmRlcklubGluZSYgcGFyZW50LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVu
ZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3sKKyAgICBpbmxpbmVCdWlsZGVyKCkuaW5zZXJ0Q2hp
bGQocGFyZW50LCBXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hpbGQpOworfQorCit2b2lkIFJlbmRl
clRyZWVCdWlsZGVyOjppbnNlcnRDaGlsZFRvUmVuZGVySW5saW5lSWdub3JpbmdDb250aW51YXRp
b24oUmVuZGVySW5saW5lJiBwYXJlbnQsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQoreworICAgIGlubGluZUJ1aWxkZXIoKS5pbnNlcnRD
aGlsZElnbm9yaW5nQ29udGludWF0aW9uKHBhcmVudCwgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNo
aWxkKTsKK30KKwordm9pZCBSZW5kZXJUcmVlQnVpbGRlcjo6c3BsaXRGbG93KFJlbmRlcklubGlu
ZSYgcGFyZW50LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBSZW5kZXJQdHI8UmVuZGVyQmxv
Y2s+IG5ld0Jsb2NrQm94LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyQm94
TW9kZWxPYmplY3QqIG9sZENvbnQpCit7CisgICAgaW5saW5lQnVpbGRlcigpLnNwbGl0Rmxvdyhw
YXJlbnQsIGJlZm9yZUNoaWxkLCBXVEZNb3ZlKG5ld0Jsb2NrQm94KSwgV1RGTW92ZShjaGlsZCks
IG9sZENvbnQpOworfQorCiB2b2lkIFJlbmRlclRyZWVCdWlsZGVyOjp1cGRhdGVBZnRlckRlc2Nl
bmRhbnRzKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQogewogICAgIGlmIChpczxSZW5kZXJCbG9j
az4ocmVuZGVyZXIpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0
aW5nL1JlbmRlclRyZWVCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRp
bmcvUmVuZGVyVHJlZUJ1aWxkZXIuaAppbmRleCBiMDVmZDFmZjlhNTE0ZmVlZWU1MmQwOTBkNmYz
Nzg3NjI0ZmI3ZTZmLi4zMmExNDAxNTNiM2RmOGFjYTBmYzg0YTAyODI2NzNhNTc3ZjE2ZTg4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1
aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJl
ZUJ1aWxkZXIuaApAQCAtNDYsNiArNDYsMTEgQEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBSZW1v
dmUuCiAgICAgc3RhdGljIFJlbmRlclRyZWVCdWlsZGVyKiBjdXJyZW50KCkgeyByZXR1cm4gc19j
dXJyZW50OyB9CiAKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHRlbXBvcmFyeSB1bnRpbCBh
ZnRlciBhbGwgYmxvY2svaW5saW5lL2NvbnRpbnVhdGlvbiBjb2RlIGlzIG1vdmVkIG92ZXIuCisg
ICAgdm9pZCBpbnNlcnRDaGlsZFRvUmVuZGVySW5saW5lKFJlbmRlcklubGluZSYgcGFyZW50LCBS
ZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IG51bGxw
dHIpOworICAgIHZvaWQgaW5zZXJ0Q2hpbGRUb1JlbmRlcklubGluZUlnbm9yaW5nQ29udGludWF0
aW9uKFJlbmRlcklubGluZSYgcGFyZW50LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiwgUmVuZGVy
T2JqZWN0KiBiZWZvcmVDaGlsZCA9IG51bGxwdHIpOworICAgIHZvaWQgc3BsaXRGbG93KFJlbmRl
cklubGluZSYgcGFyZW50LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBSZW5kZXJQdHI8UmVu
ZGVyQmxvY2s+IG5ld0Jsb2NrQm94LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVu
ZGVyQm94TW9kZWxPYmplY3QqIG9sZENvbnQpOworCiBwcml2YXRlOgogICAgIGNsYXNzIEZpcnN0
TGV0dGVyOwogICAgIGNsYXNzIExpc3Q7CkBAIC01Myw2ICs1OCw3IEBAIHByaXZhdGU6CiAgICAg
Y2xhc3MgVGFibGU7CiAgICAgY2xhc3MgUnVieTsKICAgICBjbGFzcyBGb3JtQ29udHJvbHM7Cisg
ICAgY2xhc3MgSW5saW5lOwogCiAgICAgRmlyc3RMZXR0ZXImIGZpcnN0TGV0dGVyQnVpbGRlcigp
IHsgcmV0dXJuICptX2ZpcnN0TGV0dGVyQnVpbGRlcjsgfQogICAgIExpc3QmIGxpc3RCdWlsZGVy
KCkgeyByZXR1cm4gKm1fbGlzdEJ1aWxkZXI7IH0KQEAgLTYwLDYgKzY2LDcgQEAgcHJpdmF0ZToK
ICAgICBUYWJsZSYgdGFibGVCdWlsZGVyKCkgeyByZXR1cm4gKm1fdGFibGVCdWlsZGVyOyB9CiAg
ICAgUnVieSYgcnVieUJ1aWxkZXIoKSB7IHJldHVybiAqbV9ydWJ5QnVpbGRlcjsgfQogICAgIEZv
cm1Db250cm9scyYgZm9ybUNvbnRyb2xzQnVpbGRlcigpIHsgcmV0dXJuICptX2Zvcm1Db250cm9s
c0J1aWxkZXI7IH0KKyAgICBJbmxpbmUmIGlubGluZUJ1aWxkZXIoKSB7IHJldHVybiAqbV9pbmxp
bmVCdWlsZGVyOyB9CiAKICAgICBSZW5kZXJWaWV3JiBtX3ZpZXc7CiAKQEAgLTcyLDYgKzc5LDcg
QEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+IG1fdGFibGVCdWlsZGVyOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSdWJ5PiBtX3J1YnlCdWlsZGVyOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxGb3JtQ29udHJvbHM+IG1fZm9ybUNvbnRyb2xzQnVpbGRlcjsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW5saW5lPiBtX2lubGluZUJ1aWxkZXI7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJJbmxpbmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVySW5s
aW5lLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zM2VjMDM3OWM5ZDE1ZTY2NzdhNTFjNzllMGI0NjU5ZGI0MGU4
ODM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5n
L1JlbmRlclRyZWVCdWlsZGVySW5saW5lLmNwcApAQCAtMCwwICsxLDM4MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJUcmVlQnVpbGRlcklubGlu
ZS5oIgorCisjaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgorI2luY2x1ZGUgIlJlbmRl
ckZ1bGxTY3JlZW4uaCIKKyNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKKyNpbmNsdWRlICJSZW5k
ZXJUYWJsZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBib29sIGNhblVzZUFz
UGFyZW50Rm9yQ29udGludWF0aW9uKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7Cisg
ICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghaXM8UmVu
ZGVyQmxvY2s+KHJlbmRlcmVyKSAmJiByZW5kZXJlci0+aXNBbm9ueW1vdXMoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmIChpczxSZW5kZXJUYWJsZT4ocmVuZGVyZXIpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBSZW5kZXJCb3hN
b2RlbE9iamVjdCogbmV4dENvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQorewor
ICAgIGlmIChpczxSZW5kZXJJbmxpbmU+KCpyZW5kZXJlcikgJiYgIXJlbmRlcmVyLT5pc1JlcGxh
Y2VkKCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KCpyZW5kZXJlciku
Y29udGludWF0aW9uKCk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJsb2NrPigqcmVuZGVy
ZXIpLmlubGluZUNvbnRpbnVhdGlvbigpOworfQorCitzdGF0aWMgUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIGNvbnRpbnVhdGlvbkJlZm9yZShSZW5kZXJJbmxpbmUmIHBhcmVudCwgUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCkKK3sKKyAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBh
cmVudCgpID09ICZwYXJlbnQpCisgICAgICAgIHJldHVybiAmcGFyZW50OworCisgICAgUmVuZGVy
Qm94TW9kZWxPYmplY3QqIGN1cnIgPSBuZXh0Q29udGludWF0aW9uKCZwYXJlbnQpOworICAgIFJl
bmRlckJveE1vZGVsT2JqZWN0KiBuZXh0VG9MYXN0ID0gJnBhcmVudDsKKyAgICBSZW5kZXJCb3hN
b2RlbE9iamVjdCogbGFzdCA9ICZwYXJlbnQ7CisgICAgd2hpbGUgKGN1cnIpIHsKKyAgICAgICAg
aWYgKGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSA9PSBjdXJyKSB7CisgICAg
ICAgICAgICBpZiAoY3Vyci0+Zmlyc3RDaGlsZCgpID09IGJlZm9yZUNoaWxkKQorICAgICAgICAg
ICAgICAgIHJldHVybiBsYXN0OworICAgICAgICAgICAgcmV0dXJuIGN1cnI7CisgICAgICAgIH0K
KworICAgICAgICBuZXh0VG9MYXN0ID0gbGFzdDsKKyAgICAgICAgbGFzdCA9IGN1cnI7CisgICAg
ICAgIGN1cnIgPSBuZXh0Q29udGludWF0aW9uKGN1cnIpOworICAgIH0KKworICAgIGlmICghYmVm
b3JlQ2hpbGQgJiYgIWxhc3QtPmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIG5leHRUb0xh
c3Q7CisgICAgcmV0dXJuIGxhc3Q7Cit9CisKK3N0YXRpYyBSZW5kZXJQdHI8UmVuZGVySW5saW5l
PiBjbG9uZUFzQ29udGludWF0aW9uKFJlbmRlcklubGluZSYgcmVuZGVyZXIpCit7CisgICAgUmVu
ZGVyUHRyPFJlbmRlcklubGluZT4gY2xvbmVJbmxpbmUgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJJ
bmxpbmU+KCpyZW5kZXJlci5lbGVtZW50KCksIFJlbmRlclN0eWxlOjpjbG9uZShyZW5kZXJlci5z
dHlsZSgpKSk7CisgICAgY2xvbmVJbmxpbmUtPmluaXRpYWxpemVTdHlsZSgpOworICAgIGNsb25l
SW5saW5lLT5zZXRGcmFnbWVudGVkRmxvd1N0YXRlKHJlbmRlcmVyLmZyYWdtZW50ZWRGbG93U3Rh
dGUoKSk7CisgICAgY2xvbmVJbmxpbmUtPnNldEhhc091dGxpbmVBdXRvQW5jZXN0b3IocmVuZGVy
ZXIuaGFzT3V0bGluZUF1dG9BbmNlc3RvcigpKTsKKyAgICBjbG9uZUlubGluZS0+c2V0SXNDb250
aW51YXRpb24oKTsKKyAgICByZXR1cm4gY2xvbmVJbmxpbmU7Cit9CisKK3N0YXRpYyBib29sIG5l
d0NoaWxkSXNJbmxpbmUoY29uc3QgUmVuZGVyT2JqZWN0JiBjaGlsZCwgY29uc3QgUmVuZGVySW5s
aW5lJiBwYXJlbnQpCit7CisgICAgLy8gaW5saW5lIHBhcmVudCBnZW5lcmF0ZXMgaW5saW5lLXRh
YmxlLgorICAgIHJldHVybiBjaGlsZC5pc0lubGluZSgpIHwgKHBhcmVudC5jaGlsZFJlcXVpcmVz
VGFibGUoY2hpbGQpICYmIHBhcmVudC5zdHlsZSgpLmRpc3BsYXkoKSA9PSBJTkxJTkUpOworfQor
CitzdGF0aWMgUmVuZGVyRWxlbWVudCogaW5GbG93UG9zaXRpb25lZElubGluZUFuY2VzdG9yKFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyKQoreworICAgIGF1dG8qIGFuY2VzdG9yID0gJnJlbmRlcmVy
OworICAgIHdoaWxlIChhbmNlc3RvciAmJiBhbmNlc3Rvci0+aXNSZW5kZXJJbmxpbmUoKSkgewor
ICAgICAgICBpZiAoYW5jZXN0b3ItPmlzSW5GbG93UG9zaXRpb25lZCgpKQorICAgICAgICAgICAg
cmV0dXJuIGFuY2VzdG9yOworICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnQoKTsK
KyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1JlbmRlclRyZWVCdWlsZGVyOjpJbmxp
bmU6OklubGluZShSZW5kZXJUcmVlQnVpbGRlciYgYnVpbGRlcikKKyAgICA6IG1fYnVpbGRlcihi
dWlsZGVyKQoreworfQorCit2b2lkIFJlbmRlclRyZWVCdWlsZGVyOjpJbmxpbmU6Omluc2VydENo
aWxkKFJlbmRlcklubGluZSYgcGFyZW50LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwg
UmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3sKKyAgICBhdXRvKiBiZWZvcmVDaGlsZE9yUGxh
Y2Vob2xkZXIgPSBiZWZvcmVDaGlsZDsKKyAgICBpZiAoYXV0byogZnJhZ21lbnRlZEZsb3cgPSBw
YXJlbnQuZW5jbG9zaW5nRnJhZ21lbnRlZEZsb3coKSkKKyAgICAgICAgYmVmb3JlQ2hpbGRPclBs
YWNlaG9sZGVyID0gZnJhZ21lbnRlZEZsb3ctPnJlc29sdmVNb3ZlZENoaWxkKGJlZm9yZUNoaWxk
KTsKKyAgICBpZiAocGFyZW50LmNvbnRpbnVhdGlvbigpKSB7CisgICAgICAgIGluc2VydENoaWxk
VG9Db250aW51YXRpb24ocGFyZW50LCBXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hpbGRPclBsYWNl
aG9sZGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnNlcnRDaGlsZElnbm9yaW5n
Q29udGludWF0aW9uKHBhcmVudCwgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkT3JQbGFjZWhv
bGRlcik7Cit9CisKK3ZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6OklubGluZTo6aW5zZXJ0Q2hpbGRU
b0NvbnRpbnVhdGlvbihSZW5kZXJJbmxpbmUmIHBhcmVudCwgUmVuZGVyUHRyPFJlbmRlck9iamVj
dD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCit7CisgICAgYXV0byogZmxvdyA9
IGNvbnRpbnVhdGlvbkJlZm9yZShwYXJlbnQsIGJlZm9yZUNoaWxkKTsKKyAgICAvLyBJdCBtYXkg
b3IgbWF5IG5vdCBiZSB0aGUgZGlyZWN0IHBhcmVudCBvZiB0aGUgYmVmb3JlQ2hpbGQuCisgICAg
UmVuZGVyQm94TW9kZWxPYmplY3QqIGJlZm9yZUNoaWxkQW5jZXN0b3IgPSBudWxscHRyOworICAg
IGlmICghYmVmb3JlQ2hpbGQpIHsKKyAgICAgICAgYXV0byogY29udGludWF0aW9uID0gbmV4dENv
bnRpbnVhdGlvbihmbG93KTsKKyAgICAgICAgYmVmb3JlQ2hpbGRBbmNlc3RvciA9IGNvbnRpbnVh
dGlvbiA/IGNvbnRpbnVhdGlvbiA6IGZsb3c7CisgICAgfSBlbHNlIGlmIChjYW5Vc2VBc1BhcmVu
dEZvckNvbnRpbnVhdGlvbihiZWZvcmVDaGlsZC0+cGFyZW50KCkpKQorICAgICAgICBiZWZvcmVD
aGlsZEFuY2VzdG9yID0gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KGJlZm9yZUNoaWxk
LT5wYXJlbnQoKSk7CisgICAgZWxzZSBpZiAoYmVmb3JlQ2hpbGQtPnBhcmVudCgpKSB7CisgICAg
ICAgIC8vIEluIGNhc2Ugb2YgYW5vbnltb3VzIHdyYXBwZXJzLCB0aGUgcGFyZW50IG9mIHRoZSBi
ZWZvcmVDaGlsZCBpcyBtb3N0bHkgaXJyZWxldmFudC4gV2hhdCB3ZSBuZWVkIGlzIHRoZSB0b3Bt
b3N0IHdyYXBwZXIuCisgICAgICAgIGF1dG8qIHBhcmVudCA9IGJlZm9yZUNoaWxkLT5wYXJlbnQo
KTsKKyAgICAgICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQtPnBhcmVudCgpICYmIHBhcmVudC0+
cGFyZW50KCktPmlzQW5vbnltb3VzKCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBhbmNlc3RvciBj
YW5kaWRhdGUgbmVlZHMgdG8gYmUgaW5zaWRlIHRoZSBjb250aW51YXRpb24uCisgICAgICAgICAg
ICBpZiAocGFyZW50LT5pc0NvbnRpbnVhdGlvbigpKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnQoKTsKKyAgICAgICAgfQorICAgICAg
ICBBU1NFUlQocGFyZW50ICYmIHBhcmVudC0+cGFyZW50KCkpOworICAgICAgICBiZWZvcmVDaGls
ZEFuY2VzdG9yID0gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KHBhcmVudC0+cGFyZW50
KCkpOworICAgIH0gZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIGlm
IChjaGlsZC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQorICAgICAgICByZXR1
cm4gYmVmb3JlQ2hpbGRBbmNlc3Rvci0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihtX2J1
aWxkZXIsIFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CisKKyAgICBpZiAoZmxvdyA9PSBi
ZWZvcmVDaGlsZEFuY2VzdG9yKQorICAgICAgICByZXR1cm4gZmxvdy0+YWRkQ2hpbGRJZ25vcmlu
Z0NvbnRpbnVhdGlvbihtX2J1aWxkZXIsIFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7Cisg
ICAgLy8gQSBjb250aW51YXRpb24gYWx3YXlzIGNvbnNpc3RzIG9mIHR3byBwb3RlbnRpYWwgY2Fu
ZGlkYXRlczogYW4gaW5saW5lIG9yIGFuIGFub255bW91cworICAgIC8vIGJsb2NrIGJveCBob2xk
aW5nIGJsb2NrIGNoaWxkcmVuLgorICAgIGJvb2wgY2hpbGRJbmxpbmUgPSBuZXdDaGlsZElzSW5s
aW5lKCpjaGlsZCwgcGFyZW50KTsKKyAgICAvLyBUaGUgZ29hbCBoZXJlIGlzIHRvIG1hdGNoIHVw
IGlmIHdlIGNhbiwgc28gdGhhdCB3ZSBjYW4gY29hbGVzY2UgYW5kIGNyZWF0ZSB0aGUKKyAgICAv
LyBtaW5pbWFsICMgb2YgY29udGludWF0aW9ucyBuZWVkZWQgZm9yIHRoZSBpbmxpbmUuCisgICAg
aWYgKGNoaWxkSW5saW5lID09IGJlZm9yZUNoaWxkQW5jZXN0b3ItPmlzSW5saW5lKCkpCisgICAg
ICAgIHJldHVybiBiZWZvcmVDaGlsZEFuY2VzdG9yLT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0
aW9uKG1fYnVpbGRlciwgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKKyAgICBpZiAoZmxv
dy0+aXNJbmxpbmUoKSA9PSBjaGlsZElubGluZSkKKyAgICAgICAgcmV0dXJuIGZsb3ctPmFkZENo
aWxkSWdub3JpbmdDb250aW51YXRpb24obV9idWlsZGVyLCBXVEZNb3ZlKGNoaWxkKSk7IC8vIEp1
c3QgdHJlYXQgbGlrZSBhbiBhcHBlbmQuCisgICAgcmV0dXJuIGJlZm9yZUNoaWxkQW5jZXN0b3It
PmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24obV9idWlsZGVyLCBXVEZNb3ZlKGNoaWxkKSwg
YmVmb3JlQ2hpbGQpOworfQorCit2b2lkIFJlbmRlclRyZWVCdWlsZGVyOjpJbmxpbmU6Omluc2Vy
dENoaWxkSWdub3JpbmdDb250aW51YXRpb24oUmVuZGVySW5saW5lJiBwYXJlbnQsIFJlbmRlclB0
cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQoreworICAg
IC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBhcHBlbmQgdGhpbmdzIGFmdGVyIDphZnRlci1nZW5lcmF0
ZWQgY29udGVudCBpZiB3ZSBoYXZlIGl0LgorICAgIGlmICghYmVmb3JlQ2hpbGQgJiYgcGFyZW50
LmlzQWZ0ZXJDb250ZW50KHBhcmVudC5sYXN0Q2hpbGQoKSkpCisgICAgICAgIGJlZm9yZUNoaWxk
ID0gcGFyZW50Lmxhc3RDaGlsZCgpOworCisgICAgYm9vbCBjaGlsZElubGluZSA9IG5ld0NoaWxk
SXNJbmxpbmUoKmNoaWxkLCBwYXJlbnQpOworICAgIC8vIFRoaXMgY29kZSBpcyBmb3IgdGhlIG9s
ZCBibG9jay1pbnNpZGUtaW5saW5lIG1vZGVsIHRoYXQgdXNlcyBjb250aW51YXRpb25zLgorICAg
IGlmICghY2hpbGRJbmxpbmUgJiYgIWNoaWxkLT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlv
bmVkKCkpIHsKKyAgICAgICAgLy8gV2UgYXJlIHBsYWNpbmcgYSBibG9jayBpbnNpZGUgYW4gaW5s
aW5lLiBXZSBoYXZlIHRvIHBlcmZvcm0gYSBzcGxpdCBvZiB0aGlzCisgICAgICAgIC8vIGlubGlu
ZSBpbnRvIGNvbnRpbnVhdGlvbnMuIFRoaXMgaW52b2x2ZXMgY3JlYXRpbmcgYW4gYW5vbnltb3Vz
IGJsb2NrIGJveCB0byBob2xkCisgICAgICAgIC8vIHxuZXdDaGlsZHwuIFdlIHRoZW4gbWFrZSB0
aGF0IGJsb2NrIGJveCBhIGNvbnRpbnVhdGlvbiBvZiB0aGlzIGlubGluZS4gV2UgdGFrZSBhbGwg
b2YKKyAgICAgICAgLy8gdGhlIGNoaWxkcmVuIGFmdGVyIHxiZWZvcmVDaGlsZHwgYW5kIHB1dCB0
aGVtIGluIGEgY2xvbmUgb2YgdGhpcyBvYmplY3QuCisgICAgICAgIGF1dG8gbmV3U3R5bGUgPSBS
ZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShwYXJlbnQuc3R5bGUo
KSwgQkxPQ0spOworCisgICAgICAgIC8vIElmIGluc2lkZSBhbiBpbmxpbmUgYWZmZWN0ZWQgYnkg
aW4tZmxvdyBwb3NpdGlvbmluZyB0aGUgYmxvY2sgbmVlZHMgdG8gYmUgYWZmZWN0ZWQgYnkgaXQg
dG9vLgorICAgICAgICAvLyBHaXZpbmcgdGhlIGJsb2NrIGEgbGF5ZXIgbGlrZSB0aGlzIGFsbG93
cyBpdCB0byBjb2xsZWN0IHRoZSB4L3kgb2Zmc2V0cyBmcm9tIGlubGluZSBwYXJlbnRzIGxhdGVy
LgorICAgICAgICBpZiAoYXV0byBwb3NpdGlvbmVkQW5jZXN0b3IgPSBpbkZsb3dQb3NpdGlvbmVk
SW5saW5lQW5jZXN0b3IocGFyZW50KSkKKyAgICAgICAgICAgIG5ld1N0eWxlLnNldFBvc2l0aW9u
KHBvc2l0aW9uZWRBbmNlc3Rvci0+c3R5bGUoKS5wb3NpdGlvbigpKTsKKworICAgICAgICBhdXRv
IG5ld0JveCA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlckJsb2NrRmxvdz4ocGFyZW50LmRvY3VtZW50
KCksIFdURk1vdmUobmV3U3R5bGUpKTsKKyAgICAgICAgbmV3Qm94LT5pbml0aWFsaXplU3R5bGUo
KTsKKyAgICAgICAgbmV3Qm94LT5zZXRJc0NvbnRpbnVhdGlvbigpOworICAgICAgICBSZW5kZXJC
b3hNb2RlbE9iamVjdCogb2xkQ29udGludWF0aW9uID0gcGFyZW50LmNvbnRpbnVhdGlvbigpOwor
ICAgICAgICBpZiAob2xkQ29udGludWF0aW9uKQorICAgICAgICAgICAgb2xkQ29udGludWF0aW9u
LT5yZW1vdmVGcm9tQ29udGludWF0aW9uQ2hhaW4oKTsKKyAgICAgICAgbmV3Qm94LT5pbnNlcnRJ
bnRvQ29udGludWF0aW9uQ2hhaW5BZnRlcihwYXJlbnQpOworCisgICAgICAgIHNwbGl0Rmxvdyhw
YXJlbnQsIGJlZm9yZUNoaWxkLCBXVEZNb3ZlKG5ld0JveCksIFdURk1vdmUoY2hpbGQpLCBvbGRD
b250aW51YXRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byYgY2hpbGRU
b0FkZCA9ICpjaGlsZDsKKyAgICBwYXJlbnQuUmVuZGVyQm94TW9kZWxPYmplY3Q6OmFkZENoaWxk
KG1fYnVpbGRlciwgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKKyAgICBjaGlsZFRvQWRk
LnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOworfQorCit2b2lkIFJlbmRlclRy
ZWVCdWlsZGVyOjpJbmxpbmU6OnNwbGl0RmxvdyhSZW5kZXJJbmxpbmUmIHBhcmVudCwgUmVuZGVy
T2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyUHRyPFJlbmRlckJsb2NrPiBuZXdCbG9ja0JveCwg
UmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlckJveE1vZGVsT2JqZWN0KiBvbGRD
b250KQoreworICAgIGF1dG8mIGFkZGVkQmxvY2tCb3ggPSAqbmV3QmxvY2tCb3g7CisgICAgUmVu
ZGVyQmxvY2sqIHByZSA9IG51bGxwdHI7CisgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gcGFyZW50
LmNvbnRhaW5pbmdCbG9jaygpOworCisgICAgLy8gRGVsZXRlIG91ciBsaW5lIGJveGVzIGJlZm9y
ZSB3ZSBkbyB0aGUgaW5saW5lIHNwbGl0IGludG8gY29udGludWF0aW9ucy4KKyAgICBibG9jay0+
ZGVsZXRlTGluZXMoKTsKKworICAgIFJlbmRlclB0cjxSZW5kZXJCbG9jaz4gY3JlYXRlZFByZTsK
KyAgICBib29sIG1hZGVOZXdCZWZvcmVCbG9jayA9IGZhbHNlOworICAgIGlmIChibG9jay0+aXNB
bm9ueW1vdXNCbG9jaygpICYmICghYmxvY2stPnBhcmVudCgpIHx8ICFibG9jay0+cGFyZW50KCkt
PmNyZWF0ZXNBbm9ueW1vdXNXcmFwcGVyKCkpKSB7CisgICAgICAgIC8vIFdlIGNhbiByZXVzZSB0
aGlzIGJsb2NrIGFuZCBtYWtlIGl0IHRoZSBwcmVCbG9jayBvZiB0aGUgbmV4dCBjb250aW51YXRp
b24uCisgICAgICAgIHByZSA9IGJsb2NrOworICAgICAgICBwcmUtPnJlbW92ZVBvc2l0aW9uZWRP
YmplY3RzKG51bGxwdHIpOworICAgICAgICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFRoZSBlbmNsb3Np
bmcgbWV0aG9kIHNob3VsZCBsaWtlbHkgYmUgc3dpdGNoZWQgb3ZlcgorICAgICAgICAvLyB0byBv
bmx5IHdvcmsgb24gUmVuZGVyQmxvY2tGbG93LCBpbiB3aGljaCBjYXNlIHRoaXMgY29udmVyc2lv
biBjYW4gYmUKKyAgICAgICAgLy8gcmVtb3ZlZC4KKyAgICAgICAgaWYgKGlzPFJlbmRlckJsb2Nr
Rmxvdz4oKnByZSkpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpwcmUp
LnJlbW92ZUZsb2F0aW5nT2JqZWN0cygpOworICAgICAgICBibG9jayA9IGJsb2NrLT5jb250YWlu
aW5nQmxvY2soKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBObyBhbm9ueW1vdXMgYmxvY2sg
YXZhaWxhYmxlIGZvciB1c2UuIE1ha2Ugb25lLgorICAgICAgICBjcmVhdGVkUHJlID0gYmxvY2st
PmNyZWF0ZUFub255bW91c0Jsb2NrKCk7CisgICAgICAgIHByZSA9IGNyZWF0ZWRQcmUuZ2V0KCk7
CisgICAgICAgIG1hZGVOZXdCZWZvcmVCbG9jayA9IHRydWU7CisgICAgfQorCisgICAgYXV0byBj
cmVhdGVkUG9zdCA9IHByZS0+Y3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoKmJsb2Nr
KTsKKyAgICBhdXRvJiBwb3N0ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjcmVhdGVkUG9zdCk7
CisKKyAgICBSZW5kZXJPYmplY3QqIGJveEZpcnN0ID0gbWFkZU5ld0JlZm9yZUJsb2NrID8gYmxv
Y2stPmZpcnN0Q2hpbGQoKSA6IHByZS0+bmV4dFNpYmxpbmcoKTsKKyAgICBpZiAoY3JlYXRlZFBy
ZSkKKyAgICAgICAgYmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwoV1RGTW92ZShjcmVhdGVkUHJl
KSwgYm94Rmlyc3QpOworICAgIGJsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUobmV3
QmxvY2tCb3gpLCBib3hGaXJzdCk7CisgICAgYmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwoV1RG
TW92ZShjcmVhdGVkUG9zdCksIGJveEZpcnN0KTsKKyAgICBibG9jay0+c2V0Q2hpbGRyZW5Jbmxp
bmUoZmFsc2UpOworCisgICAgaWYgKG1hZGVOZXdCZWZvcmVCbG9jaykgeworICAgICAgICBSZW5k
ZXJPYmplY3QqIG8gPSBib3hGaXJzdDsKKyAgICAgICAgd2hpbGUgKG8pIHsKKyAgICAgICAgICAg
IFJlbmRlck9iamVjdCogbm8gPSBvOworICAgICAgICAgICAgbyA9IG5vLT5uZXh0U2libGluZygp
OworICAgICAgICAgICAgYXV0byBjaGlsZFRvTW92ZSA9IGJsb2NrLT50YWtlQ2hpbGRJbnRlcm5h
bCgqbm8pOworICAgICAgICAgICAgcHJlLT5pbnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUoY2hp
bGRUb01vdmUpLCBudWxscHRyKTsKKyAgICAgICAgICAgIG5vLT5zZXROZWVkc0xheW91dEFuZFBy
ZWZXaWR0aHNSZWNhbGMoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNwbGl0SW5saW5lcyhw
YXJlbnQsIHByZSwgJnBvc3QsICZhZGRlZEJsb2NrQm94LCBiZWZvcmVDaGlsZCwgb2xkQ29udCk7
CisKKyAgICAvLyBXZSBhbHJlYWR5IGtub3cgdGhlIG5ld0Jsb2NrQm94IGlzbid0IGdvaW5nIHRv
IGNvbnRhaW4gaW5saW5lIGtpZHMsIHNvIGF2b2lkIHdhc3RpbmcKKyAgICAvLyB0aW1lIGluIG1h
a2VDaGlsZHJlbk5vbklubGluZSBieSBqdXN0IHNldHRpbmcgdGhpcyBleHBsaWNpdGx5IHVwIGZy
b250LgorICAgIGFkZGVkQmxvY2tCb3guc2V0Q2hpbGRyZW5JbmxpbmUoZmFsc2UpOworCisgICAg
Ly8gV2UgZGVsYXllZCBhZGRpbmcgdGhlIG5ld0NoaWxkIHVudGlsIG5vdyBzbyB0aGF0IHRoZSB8
bmV3QmxvY2tCb3h8IHdvdWxkIGJlIGZ1bGx5CisgICAgLy8gY29ubmVjdGVkLCB0aHVzIGFsbG93
aW5nIG5ld0NoaWxkIGFjY2VzcyB0byBhIHJlbmRlckFyZW5hIHNob3VsZCBpdCBuZWVkCisgICAg
Ly8gdG8gd3JhcCBpdHNlbGYgaW4gYWRkaXRpb25hbCBib3hlcyAoZS5nLiwgdGFibGUgY29uc3Ry
dWN0aW9uKS4KKyAgICBtX2J1aWxkZXIuaW5zZXJ0Q2hpbGQoYWRkZWRCbG9ja0JveCwgV1RGTW92
ZShjaGlsZCkpOworCisgICAgLy8gQWx3YXlzIGp1c3QgZG8gYSBmdWxsIGxheW91dCBpbiBvcmRl
ciB0byBlbnN1cmUgdGhhdCBsaW5lIGJveGVzIChlc3BlY2lhbGx5IHdyYXBwZXJzIGZvciBpbWFn
ZXMpCisgICAgLy8gZ2V0IGRlbGV0ZWQgcHJvcGVybHkuIEJlY2F1c2Ugb2JqZWN0cyBtb3ZlcyBm
cm9tIHRoZSBwcmUgYmxvY2sgaW50byB0aGUgcG9zdCBibG9jaywgd2Ugd2FudCB0bworICAgIC8v
IG1ha2UgbmV3IGxpbmUgYm94ZXMgaW5zdGVhZCBvZiBsZWF2aW5nIHRoZSBvbGQgbGluZSBib3hl
cyBhcm91bmQuCisgICAgcHJlLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsK
KyAgICBibG9jay0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAgcG9z
dC5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKK30KKwordm9pZCBSZW5kZXJU
cmVlQnVpbGRlcjo6SW5saW5lOjpzcGxpdElubGluZXMoUmVuZGVySW5saW5lJiBwYXJlbnQsIFJl
bmRlckJsb2NrKiBmcm9tQmxvY2ssIFJlbmRlckJsb2NrKiB0b0Jsb2NrLCBSZW5kZXJCbG9jayog
bWlkZGxlQmxvY2ssIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiBvbGRDb250KQoreworICAgIC8vIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgaW5saW5lLgor
ICAgIFJlbmRlclB0cjxSZW5kZXJJbmxpbmU+IGNsb25lSW5saW5lID0gY2xvbmVBc0NvbnRpbnVh
dGlvbihwYXJlbnQpOworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICAvLyBJZiB3ZSdy
ZSBzcGxpdHRpbmcgdGhlIGlubGluZSBjb250YWluaW5nIHRoZSBmdWxsc2NyZWVuZWQgZWxlbWVu
dCwKKyAgICAvLyB8YmVmb3JlQ2hpbGR8IG1heSBiZSB0aGUgcmVuZGVyZXIgZm9yIHRoZSBmdWxs
c2NyZWVuZWQgZWxlbWVudC4gSG93ZXZlciwKKyAgICAvLyB0aGF0IHJlbmRlcmVyIGlzIHdyYXBw
ZWQgaW4gYSBSZW5kZXJGdWxsU2NyZWVuLCBzbyB8dGhpc3wgaXMgbm90IGl0cworICAgIC8vIHBh
cmVudC4gU2luY2UgdGhlIHNwbGl0dGluZyBsb2dpYyBleHBlY3RzIHx0aGlzfCB0byBiZSB0aGUg
cGFyZW50LCBzZXQKKyAgICAvLyB8YmVmb3JlQ2hpbGR8IHRvIGJlIHRoZSBSZW5kZXJGdWxsU2Ny
ZWVuLgorICAgIGNvbnN0IEVsZW1lbnQqIGZ1bGxTY3JlZW5FbGVtZW50ID0gcGFyZW50LmRvY3Vt
ZW50KCkud2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCk7CisgICAgaWYgKGZ1bGxTY3Jl
ZW5FbGVtZW50ICYmIGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5ub2RlKCkgPT0gZnVsbFNj
cmVlbkVsZW1lbnQpCisgICAgICAgIGJlZm9yZUNoaWxkID0gcGFyZW50LmRvY3VtZW50KCkuZnVs
bFNjcmVlblJlbmRlcmVyKCk7CisjZW5kaWYKKyAgICAvLyBOb3cgdGFrZSBhbGwgb2YgdGhlIGNo
aWxkcmVuIGZyb20gYmVmb3JlQ2hpbGQgdG8gdGhlIGVuZCBhbmQgcmVtb3ZlCisgICAgLy8gdGhl
bSBmcm9tIHx0aGlzfCBhbmQgcGxhY2UgdGhlbSBpbiB0aGUgY2xvbmUuCisgICAgZm9yIChSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyVG9Nb3ZlID0gYmVmb3JlQ2hpbGQ7IHJlbmRlcmVyVG9Nb3ZlOykg
eworICAgICAgICBSZW5kZXJPYmplY3QqIG5leHRTaWJsaW5nID0gcmVuZGVyZXJUb01vdmUtPm5l
eHRTaWJsaW5nKCk7CisgICAgICAgIC8vIFdoZW4gYW5vbnltb3VzIHdyYXBwZXIgaXMgcHJlc2Vu
dCwgd2UgbWlnaHQgbmVlZCB0byBtb3ZlIHRoZSB3aG9sZSBzdWJ0cmVlIGluc3RlYWQuCisgICAg
ICAgIGlmIChyZW5kZXJlclRvTW92ZS0+cGFyZW50KCkgIT0gJnBhcmVudCkgeworICAgICAgICAg
ICAgYXV0byogYW5vbnltb3VzUGFyZW50ID0gcmVuZGVyZXJUb01vdmUtPnBhcmVudCgpOworICAg
ICAgICAgICAgd2hpbGUgKGFub255bW91c1BhcmVudCAmJiBhbm9ueW1vdXNQYXJlbnQtPnBhcmVu
dCgpICE9ICZwYXJlbnQpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoYW5vbnltb3VzUGFyZW50
LT5pc0Fub255bW91cygpKTsKKyAgICAgICAgICAgICAgICBhbm9ueW1vdXNQYXJlbnQgPSBhbm9u
eW1vdXNQYXJlbnQtPnBhcmVudCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFh
bm9ueW1vdXNQYXJlbnQpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIElm
IGJlZm9yZUNoaWxkIGlzIHRoZSBmaXJzdCBjaGlsZCBpbiB0aGUgc3VidHJlZSwgd2UgY291bGQg
anVzdCBtb3ZlIHRoZSB3aG9sZSBzdWJ0cmVlLgorICAgICAgICAgICAgaWYgKCFyZW5kZXJlclRv
TW92ZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBSZXBhcmVudCB0
aGUgd2hvbGUgYW5vbnltb3VzIHdyYXBwZXIgdHJlZS4KKyAgICAgICAgICAgICAgICByZW5kZXJl
clRvTW92ZSA9IGFub255bW91c1BhcmVudDsKKyAgICAgICAgICAgICAgICAvLyBTa2lwIHRvIHRo
ZSBuZXh0IHNpYmxpbmcgdGhhdCBpcyBub3QgaW4gdGhpcyBzdWJ0cmVlLgorICAgICAgICAgICAg
ICAgIG5leHRTaWJsaW5nID0gYW5vbnltb3VzUGFyZW50LT5uZXh0U2libGluZygpOworICAgICAg
ICAgICAgfSBlbHNlIGlmICghcmVuZGVyZXJUb01vdmUtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBsYXN0IHJlbmRlcmVyIGluIHRoZSBzdWJ0cmVlLiBX
ZSBuZWVkIHRvIGp1bXAgb3V0IG9mIHRoZSB3cmFwcGVyIHN1YnRyZWUsIHNvIHRoYXQKKyAgICAg
ICAgICAgICAgICAvLyB0aGUgc2libGluZ3MgYXJlIGdldHRpbmcgcmVwYXJlbnRlZCB0b28uCisg
ICAgICAgICAgICAgICAgbmV4dFNpYmxpbmcgPSBhbm9ueW1vdXNQYXJlbnQtPm5leHRTaWJsaW5n
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBPdGhlcndpc2UganVzdCBtb3ZlIHRo
ZSByZW5kZXJlciB0byB0aGUgaW5saW5lIGNsb25lLiBTaG91bGQgdGhlIHJlbmRlcmVyIG5lZWQg
YW4gYW5vbgorICAgICAgICAgICAgLy8gd3JhcHBlciwgdGhlIGFkZENoaWxkKCkgd2lsbCBnZW5l
cmF0ZSBvbmUgZm9yIGl0LgorICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhlIGFub255bW91
cyB3cmFwcGVyIGhhcyBtdWx0aXBsZSBjaGlsZHJlbiwgd2UgZW5kIHVwIHRyYXZlcnNpbmcgdXAg
dG8gdGhlIHRvcG1vc3Qgd3JhcHBlcgorICAgICAgICAgICAgLy8gZXZlcnkgdGltZSwgd2hpY2gg
aXMgYSBiaXQgd2FzdGVmdWwuCisgICAgICAgIH0KKyAgICAgICAgYXV0byBjaGlsZFRvTW92ZSA9
IHJlbmRlcmVyVG9Nb3ZlLT5wYXJlbnQoKS0+dGFrZUNoaWxkSW50ZXJuYWwoKnJlbmRlcmVyVG9N
b3ZlKTsKKyAgICAgICAgY2xvbmVJbmxpbmUtPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24o
bV9idWlsZGVyLCBXVEZNb3ZlKGNoaWxkVG9Nb3ZlKSk7CisgICAgICAgIHJlbmRlcmVyVG9Nb3Zl
LT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKKyAgICAgICAgcmVuZGVyZXJU
b01vdmUgPSBuZXh0U2libGluZzsKKyAgICB9CisgICAgLy8gSG9vayB8Y2xvbmV8IHVwIGFzIHRo
ZSBjb250aW51YXRpb24gb2YgdGhlIG1pZGRsZSBibG9jay4KKyAgICBjbG9uZUlubGluZS0+aW5z
ZXJ0SW50b0NvbnRpbnVhdGlvbkNoYWluQWZ0ZXIoKm1pZGRsZUJsb2NrKTsKKyAgICBpZiAob2xk
Q29udCkKKyAgICAgICAgb2xkQ29udC0+aW5zZXJ0SW50b0NvbnRpbnVhdGlvbkNoYWluQWZ0ZXIo
KmNsb25lSW5saW5lKTsKKworICAgIC8vIFdlIGhhdmUgYmVlbiByZXBhcmVudGVkIGFuZCBhcmUg
bm93IHVuZGVyIHRoZSBmcm9tQmxvY2suIFdlIG5lZWQKKyAgICAvLyB0byB3YWxrIHVwIG91ciBp
bmxpbmUgcGFyZW50IGNoYWluIHVudGlsIHdlIGhpdCB0aGUgY29udGFpbmluZyBibG9jay4KKyAg
ICAvLyBPbmNlIHdlIGhpdCB0aGUgY29udGFpbmluZyBibG9jayB3ZSdyZSBkb25lLgorICAgIFJl
bmRlckJveE1vZGVsT2JqZWN0KiBjdXJyZW50ID0gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmpl
Y3Q+KHBhcmVudC5wYXJlbnQoKSk7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGN1cnJlbnRD
aGlsZCA9ICZwYXJlbnQ7CisKKyAgICAvLyBGSVhNRTogQmVjYXVzZSBzcGxpdHRpbmcgaXMgTyhu
XjIpIGFzIHRhZ3MgbmVzdCBwYXRob2xvZ2ljYWxseSwgd2UgY2FwIHRoZSBkZXB0aCBhdCB3aGlj
aCB3ZSdyZSB3aWxsaW5nIHRvIGNsb25lLgorICAgIC8vIFRoZXJlIHdpbGwgZXZlbnR1YWxseSBi
ZSBhIGJldHRlciBhcHByb2FjaCB0byB0aGlzIHByb2JsZW0gdGhhdCB3aWxsIGxldCB1cyBuZXN0
IHRvIGEgbXVjaAorICAgIC8vIGdyZWF0ZXIgZGVwdGggKHNlZSBidWd6aWxsYSBidWcgMTM0MzAp
IGJ1dCBmb3Igbm93IHdlIGhhdmUgYSBsaW1pdC4gVGhpcyAqd2lsbCogcmVzdWx0IGluCisgICAg
Ly8gaW5jb3JyZWN0IHJlbmRlcmluZywgYnV0IHRoZSBhbHRlcm5hdGl2ZSBpcyB0byBoYW5nIGZv
cmV2ZXIuCisgICAgdW5zaWduZWQgc3BsaXREZXB0aCA9IDE7CisgICAgY29uc3QgdW5zaWduZWQg
Y01heFNwbGl0RGVwdGggPSAyMDA7CisgICAgd2hpbGUgKGN1cnJlbnQgJiYgY3VycmVudCAhPSBm
cm9tQmxvY2spIHsKKyAgICAgICAgaWYgKHNwbGl0RGVwdGggPCBjTWF4U3BsaXREZXB0aCkgewor
ICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGNsb25lLgorICAgICAgICAgICAgUmVuZGVyUHRy
PFJlbmRlcklubGluZT4gY2xvbmVDaGlsZCA9IFdURk1vdmUoY2xvbmVJbmxpbmUpOworICAgICAg
ICAgICAgY2xvbmVJbmxpbmUgPSBjbG9uZUFzQ29udGludWF0aW9uKGRvd25jYXN0PFJlbmRlcklu
bGluZT4oKmN1cnJlbnQpKTsKKworICAgICAgICAgICAgLy8gSW5zZXJ0IG91ciBjaGlsZCBjbG9u
ZSBhcyB0aGUgZmlyc3QgY2hpbGQuCisgICAgICAgICAgICBjbG9uZUlubGluZS0+YWRkQ2hpbGRJ
Z25vcmluZ0NvbnRpbnVhdGlvbihtX2J1aWxkZXIsIFdURk1vdmUoY2xvbmVDaGlsZCkpOworCisg
ICAgICAgICAgICAvLyBIb29rIHRoZSBjbG9uZSB1cCBhcyBhIGNvbnRpbnVhdGlvbiBvZiB8Y3Vy
cnwuCisgICAgICAgICAgICBjbG9uZUlubGluZS0+aW5zZXJ0SW50b0NvbnRpbnVhdGlvbkNoYWlu
QWZ0ZXIoKmN1cnJlbnQpOworCisgICAgICAgICAgICAvLyBOb3cgd2UgbmVlZCB0byB0YWtlIGFs
bCBvZiB0aGUgY2hpbGRyZW4gc3RhcnRpbmcgZnJvbSB0aGUgZmlyc3QgY2hpbGQKKyAgICAgICAg
ICAgIC8vICphZnRlciogY3VycmVudENoaWxkIGFuZCBhcHBlbmQgdGhlbSBhbGwgdG8gdGhlIGNs
b25lLgorICAgICAgICAgICAgZm9yIChhdXRvKiBzaWJsaW5nID0gY3VycmVudENoaWxkLT5uZXh0
U2libGluZygpOyBzaWJsaW5nOykgeworICAgICAgICAgICAgICAgIGF1dG8qIG5leHQgPSBzaWJs
aW5nLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgICAgIGF1dG8gY2hpbGRUb01vdmUgPSBj
dXJyZW50LT50YWtlQ2hpbGRJbnRlcm5hbCgqc2libGluZyk7CisgICAgICAgICAgICAgICAgY2xv
bmVJbmxpbmUtPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24obV9idWlsZGVyLCBXVEZNb3Zl
KGNoaWxkVG9Nb3ZlKSk7CisgICAgICAgICAgICAgICAgc2libGluZy0+c2V0TmVlZHNMYXlvdXRB
bmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAgICAgICAgICAgICAgc2libGluZyA9IG5leHQ7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBLZWVwIHdhbGtpbmcgdXAgdGhl
IGNoYWluLgorICAgICAgICBjdXJyZW50Q2hpbGQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50
ID0gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KGN1cnJlbnQtPnBhcmVudCgpKTsKKyAg
ICAgICAgKytzcGxpdERlcHRoOworICAgIH0KKworICAgIC8vIENsZWFyIHRoZSBmbG93IHRocmVh
ZCBjb250YWluaW5nIGJsb2NrcyBjYWNoZWQgZHVyaW5nIHRoZSBkZXRhY2hlZCBzdGF0ZSBpbnNl
cnRpb25zLgorICAgIGZvciAoYXV0byYgY2xvbmVCbG9ja0NoaWxkIDogY2hpbGRyZW5PZlR5cGU8
UmVuZGVyQmxvY2s+KCpjbG9uZUlubGluZSkpCisgICAgICAgIGNsb25lQmxvY2tDaGlsZC5yZXNl
dEVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93QW5kQ2hpbGRJbmZvSW5jbHVkaW5nRGVzY2VuZGFudHMo
KTsKKworICAgIC8vIE5vdyB3ZSBhcmUgYXQgdGhlIGJsb2NrIGxldmVsLiBXZSBuZWVkIHRvIHB1
dCB0aGUgY2xvbmUgaW50byB0aGUgdG9CbG9jay4KKyAgICB0b0Jsb2NrLT5pbnNlcnRDaGlsZElu
dGVybmFsKFdURk1vdmUoY2xvbmVJbmxpbmUpLCBudWxscHRyKTsKKworICAgIC8vIE5vdyB0YWtl
IGFsbCB0aGUgY2hpbGRyZW4gYWZ0ZXIgY3VycmVudENoaWxkIGFuZCByZW1vdmUgdGhlbSBmcm9t
IHRoZSBmcm9tQmxvY2sKKyAgICAvLyBhbmQgcHV0IHRoZW0gaW4gdGhlIHRvQmxvY2suCisgICAg
Zm9yIChhdXRvKiBjdXJyZW50ID0gY3VycmVudENoaWxkLT5uZXh0U2libGluZygpOyBjdXJyZW50
OykgeworICAgICAgICBhdXRvKiBuZXh0ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKKyAgICAg
ICAgYXV0byBjaGlsZFRvTW92ZSA9IGZyb21CbG9jay0+dGFrZUNoaWxkSW50ZXJuYWwoKmN1cnJl
bnQpOworICAgICAgICB0b0Jsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUoY2hpbGRU
b01vdmUpLCBudWxscHRyKTsKKyAgICAgICAgY3VycmVudCA9IG5leHQ7CisgICAgfQorfQorCit9
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJU
cmVlQnVpbGRlcklubGluZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1Jl
bmRlclRyZWVCdWlsZGVySW5saW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODhmMzhhOTRhNjhhYzBiZjJmMjUy
YWE3YWRmYWVkY2IwMjlmMzMyMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlcklubGluZS5oCkBAIC0wLDAgKzEsNDkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlbmRlclRyZWVCdWls
ZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyVHJlZUJ1aWxkZXI6
OklubGluZSB7CitwdWJsaWM6CisgICAgSW5saW5lKFJlbmRlclRyZWVCdWlsZGVyJik7CisKKyAg
ICB2b2lkIGluc2VydENoaWxkKFJlbmRlcklubGluZSYgcGFyZW50LCBSZW5kZXJQdHI8UmVuZGVy
T2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CisgICAgdm9pZCBpbnNl
cnRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFJlbmRlcklubGluZSYgcGFyZW50LCBSZW5kZXJQ
dHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CisKKyAg
ICAvLyBNYWtlIHRoaXMgcHJpdmF0ZSBvbmNlIGFsbCB0aGUgbXV0YXRpb24gY29kZSBpcyBpbiBS
ZW5kZXJUcmVlQnVpbGRlci4KKyAgICB2b2lkIHNwbGl0RmxvdyhSZW5kZXJJbmxpbmUmIHBhcmVu
dCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyUHRyPFJlbmRlckJsb2NrPiBuZXdC
bG9ja0JveCwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiBvbGRDb250KTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGluc2VydENoaWxkVG9Db250aW51
YXRpb24oUmVuZGVySW5saW5lJiBwYXJlbnQsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxk
LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKTsKKyAgICB2b2lkIHNwbGl0SW5saW5lcyhSZW5k
ZXJJbmxpbmUmIHBhcmVudCwgUmVuZGVyQmxvY2sqIGZyb21CbG9jaywgUmVuZGVyQmxvY2sqIHRv
QmxvY2ssIFJlbmRlckJsb2NrKiBtaWRkbGVCbG9jaywgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGls
ZCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIG9sZENvbnQpOworCisgICAgUmVuZGVyVHJlZUJ1aWxk
ZXImIG1fYnVpbGRlcjsKK307CisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330711</attachid>
            <date>2018-01-08 10:06:34 -0800</date>
            <delta_ts>2018-01-08 10:38:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181336-20180108100633.patch</filename>
            <type>text/plain</type>
            <size>57894</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2NTE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDk5MTA0MDFkOWE3ZmE4
NjQ5M2VmODQxMTQxYzkzN2Y4ZTZjN2FmNy4uNWRhNWY2YzZlMTI5OTg3NWY1OWVlOTEyYTk1YzI3
M2Y3ZDA2MzBmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDE4LTAxLTA4ICBaYWxh
biBCdWp0YXMgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbUmVuZGVyVHJlZUJ1aWxkZXJd
IE1vdmUgUmVuZGVySW5saW5lIGFkZENoaWxkIGxvZ2ljIHRvIFJlbmRlclRyZWVCdWlsZGVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODEzMzYKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM2MzI0NjkzPgorCisgICAgICAgIFJldmlld2VkIGJ5IEFu
dHRpIEtvaXZpc3RvLgorCisgICAgICAgIFRoaXMgaXMgYWJvdXQgbW92aW5nIHRoZSBjb2RlLCBu
byBjbGVhbnVwIGFuZC9vciBub3JtYWxpemF0aW9uICh1bmZvcnR1bmF0ZWx5IGl0IGFsc28gbWVh
bnMKKyAgICAgICAgc29tZSB0ZW1wb3JhcnkgY2hhbmdlcykuICAKKworICAgICAgICBObyBjaGFu
Z2UgaW4gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6YWRkQ2hp
bGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjphZGRDaGlsZElnbm9yaW5nQ29u
dGludWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6Y2hpbGRCZWNhbWVO
b25JbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6bmV4dENvbnRpbnVhdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmNvbnRpbnVhdGlvbkJlZm9yZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpuZXdDaGlsZElzSW5saW5lKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6Y2xvbmVBc0NvbnRpbnVhdGlvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnNwbGl0SW5saW5lcyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnNwbGl0Rmxvdyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjYW5Vc2VBc1BhcmVudEZvckNvbnRpbnVhdGlvbik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmFkZENoaWxkVG9Db250
aW51YXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZUJ1aWxkZXI6OlJlbmRlclRyZWVCdWlsZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjppbnNlcnRDaGlsZFRvUmVuZGVySW5s
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjppbnNlcnRDaGlsZFRv
UmVuZGVySW5saW5lSWdub3JpbmdDb250aW51YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVHJlZUJ1aWxkZXI6OnNwbGl0Rmxvdyk6CisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0aW5n
L1JlbmRlclRyZWVCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRl
cjo6aW5saW5lQnVpbGRlcik6CisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRy
ZWVCdWlsZGVySW5saW5lLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjYW5Vc2VBc1Bh
cmVudEZvckNvbnRpbnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpuZXh0Q29udGludWF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRpbnVhdGlvbkJlZm9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpjbG9uZUFzQ29udGludWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Om5ld0NoaWxkSXNJ
bmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6aW5GbG93UG9zaXRpb25lZElubGluZUFuY2VzdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjpJbmxpbmU6OklubGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRlcjo6SW5saW5lOjppbnNlcnRDaGls
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRlcjo6SW5saW5lOjppbnNlcnRD
aGlsZFRvQ29udGludWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWlsZGVy
OjpJbmxpbmU6Omluc2VydENoaWxkSWdub3JpbmdDb250aW51YXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVHJlZUJ1aWxkZXI6OklubGluZTo6c3BsaXRGbG93KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjpJbmxpbmU6OnNwbGl0SW5saW5lcyk6CisgICAgICAg
ICogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVySW5saW5lLmg6IEFkZGVkLgor
CiAyMDE4LTAxLTA4ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAg
W1JlbmRlclRyZWVCdWlsZGVyXSBNb3ZlIFJlbmRlckJsb2NrIGFkZENoaWxkIGxvZ2ljIHRvIFJl
bmRlclRyZWVCdWlsZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDA4NGU3NTI1NTQzYzRmOWJmZjA5ZTgw
ZTFjNzE1Y2RkYmEzZDlmNmIuLjdmODJhMjIzNWZiOWU2MzFjOTkyYjFkZjhhYzdhMjRlMmQ4NTk3
MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xOTg3LDYgKzE5ODcsNyBAQCByZW5kZXJpbmcvdXBkYXRp
bmcvUmVuZGVyVHJlZUJ1aWxkZXIuY3BwCiByZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1
aWxkZXJCbG9jay5jcHAKIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlckZpcnN0
TGV0dGVyLmNwcAogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyRm9ybUNvbnRy
b2xzLmNwcAorcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVySW5saW5lLmNwcAog
cmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyTGlzdC5jcHAKIHJlbmRlcmluZy91
cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlck11bHRpQ29sdW1uLmNwcAogcmVuZGVyaW5nL3VwZGF0
aW5nL1JlbmRlclRyZWVCdWlsZGVyUnVieS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkNzgyYTI5MTY4NTI0ZWMzNDFlNTdl
MmU0NTk5N2JmNDIwOTAwNzAyLi40NjJlMTQ1YzllYmNkOWJmNTE1NzkyYWQ5MmUwYzcyZDIyNDYx
NmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0xMDI1LDkgKzEwMjUsNyBAQAogCQk0MTdEQTZEOTEzNzM0RTZFMDA3QzU3RkIg
LyogSW50ZXJuYWxzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxN0RBNENGMTM3MzQzMjYwMDdDNTdGQiAvKiBJbnRlcm5hbHMuY3BwICovOyB9Owog
CQk0MTdEQTZEQTEzNzM0RTZFMDA3QzU3RkIgLyogSW50ZXJuYWxzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTdEQTRDRTEzNzM0MzI2MDA3QzU3RkIg
LyogSW50ZXJuYWxzLmggKi87IH07CiAJCTQxN0RBNzFEMTM3MzVERkEwMDdDNTdGQiAvKiBKU0lu
dGVybmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MTdEQTcxQjEzNzM1REZBMDA3QzU3RkIgLyogSlNJbnRlcm5hbHMuY3BwICovOyB9OwotCQk0
MjdEQTcxRDEzNzM1REZBMDA3QzU3RkIgLyogSlNTZXJ2aWNlV29ya2VySW50ZXJuYWxzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQyN0RBNzFCMTM3
MzVERkEwMDdDNTdGQiAvKiBKU1NlcnZpY2VXb3JrZXJJbnRlcm5hbHMuY3BwICovOyB9OwogCQk0
MTdEQTcxRTEzNzM1REZBMDA3QzU3RkIgLyogSlNJbnRlcm5hbHMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxN0RBNzFDMTM3MzVERkEwMDdDNTdGQiAv
KiBKU0ludGVybmFscy5oICovOyB9OwotCQk0MjdEQTcxRTEzNzM1REZBMDA3QzU3RkIgLyogSlNT
ZXJ2aWNlV29ya2VySW50ZXJuYWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0MjdEQTcxQzEzNzM1REZBMDA3QzU3RkIgLyogSlNTZXJ2aWNlV29ya2Vy
SW50ZXJuYWxzLmggKi87IH07CiAJCTQxN0YwRDgyMUZGRUU5NzkwMDhFRjMwMyAvKiBTZXJ2aWNl
V29ya2VySW50ZXJuYWxzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQxN0YwRDgwMUZGRUUxNEYwMDhFRjMwMyAvKiBTZXJ2aWNlV29ya2VySW50ZXJu
YWxzLmNwcCAqLzsgfTsKIAkJNDE4MTVDMUUxMzgzMTk4MzAwNTdBQUE0IC8qIFdlYkNvcmVUZXN0
U3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MTgxNUMxQzEzODMxOTgzMDA1N0FBQTQgLyogV2ViQ29yZVRlc3RTdXBwb3J0LmNwcCAqLzsg
fTsKIAkJNDE4MTVDMUYxMzgzMTk4MzAwNTdBQUE0IC8qIFdlYkNvcmVUZXN0U3VwcG9ydC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE4MTVDMUQxMzgz
MTk4MzAwNTdBQUE0IC8qIFdlYkNvcmVUZXN0U3VwcG9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMDY0LDYgKzEwNjIsOCBAQAogCQk0MUYw
NjIxNDBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMDYyMTIwRjVGMTky
NjAwQTA3RUFDIC8qIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCAqLzsgfTsKIAkJNDFGMUQy
MUYwRUYzNUMyQTAwREE4NzUzIC8qIFNjcmlwdENhY2hlZEZyYW1lRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMUQyMUQwRUYzNUMyQTAwREE4
NzUzIC8qIFNjcmlwdENhY2hlZEZyYW1lRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxRkFCRDJEMUY0REZFNEEwMDZBNkM5NyAvKiBET01D
YWNoZUVuZ2luZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDFGQUJEMkIxRjRERkU0MjAwNkE2Qzk3IC8qIERPTUNhY2hlRW5naW5lLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNDI3REE3MUQxMzczNURG
QTAwN0M1N0ZCIC8qIEpTU2VydmljZVdvcmtlckludGVybmFscy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MjdEQTcxQjEzNzM1REZBMDA3QzU3RkIg
LyogSlNTZXJ2aWNlV29ya2VySW50ZXJuYWxzLmNwcCAqLzsgfTsKKwkJNDI3REE3MUUxMzczNURG
QTAwN0M1N0ZCIC8qIEpTU2VydmljZVdvcmtlckludGVybmFscy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDI3REE3MUMxMzczNURGQTAwN0M1N0ZCIC8q
IEpTU2VydmljZVdvcmtlckludGVybmFscy5oICovOyB9OwogCQk0MzEwN0JFMjE4Q0MxOURFMDBD
QzE4RTggLyogU2VsZWN0b3JQc2V1ZG9UeXBlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzEwN0JFMTE4Q0MxOURFMDBDQzE4RTggLyogU2VsZWN0
b3JQc2V1ZG9UeXBlTWFwLmggKi87IH07CiAJCTQzMUEyRjlDMTNCNkYyQjAwMDc3OTFFNCAvKiBT
VkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzFBMkY5QTEzQjZGMkIwMDA3NzkxRTQgLyogU1ZHQW5p
bWF0ZWROdW1iZXJPcHRpb25hbE51bWJlci5oICovOyB9OwogCQk0MzJEM0ZFODE4QTg2NTg0MDBE
N0RDMDMgLyogU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDMyRDNGRTcxOEE4NjU4NDAwRDdEQzAzIC8q
IFNlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaCAqLzsgfTsKQEAgLTU1OTEsNiArNTU5MSw4
IEBACiAJCTExOTM0MDk1MUZFRDcxNTUwMDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRlckZvcm1D
b250cm9scy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUcmVlQnVpbGRlckZvcm1Db250cm9scy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxMTkzNDBBMDFGRUUwMjQwMDA5MzVGMUUg
LyogUmVuZGVyVHJlZUJ1aWxkZXJCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJU
cmVlQnVpbGRlckJsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTE5MzQw
QTExRkVFMDI0MDAwOTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVyQmxvY2suaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVuZGVyVHJlZUJ1aWxkZXJCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxMUM1RjExNjIwMDNFNzc1MDAwMUFFNjAgLyogUmVuZGVyVHJlZUJ1aWxkZXJJbmxpbmUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxk
ZXJJbmxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxMUM1RjExODIwMDNF
Nzc2MDAwMUFFNjAgLyogUmVuZGVyVHJlZUJ1aWxkZXJJbmxpbmUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxkZXJJbmxpbmUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMTFFMDY3RUIxRTYyNDYxMzAwMTYyRDE2IC8qIFNpbXBsZUxpbmVM
YXlvdXRDb3ZlcmFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
aW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxMUUwNjdFRDFFNjI0NkU1MDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRDb3ZlcmFn
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwRDdBNzE3MTM2RUE3MDA3N0NF
MDUgLyogU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTY3JpcHRXcmFwcGFibGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC03MDMxLDkgKzcwMzMsNyBAQAogCQk0MTdEQTRDRjEzNzM0MzI2MDA3QzU3RkIgLyog
SW50ZXJuYWxzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVy
bmFscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxN0RBNkQwMTM3MzRFMDIw
MDdDNTdGQiAvKiBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWIgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBp
bmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWI7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTQxN0RBNzFCMTM3MzVERkEwMDdD
NTdGQiAvKiBKU0ludGVybmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0ludGVybmFscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQyN0RB
NzFCMTM3MzVERkEwMDdDNTdGQiAvKiBKU1NlcnZpY2VXb3JrZXJJbnRlcm5hbHMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTZXJ2aWNlV29ya2VySW50ZXJuYWxz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE3REE3MUMxMzczNURGQTAwN0M1
N0ZCIC8qIEpTSW50ZXJuYWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
SW50ZXJuYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQyN0RBNzFDMTM3MzVE
RkEwMDdDNTdGQiAvKiBKU1NlcnZpY2VXb3JrZXJJbnRlcm5hbHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNTZXJ2aWNlV29ya2VySW50ZXJuYWxzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQxN0YwRDdFMUZGRUUxNEUwMDhFRjMwMyAvKiBTZXJ2aWNlV29y
a2VySW50ZXJuYWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlcnZpY2VX
b3JrZXJJbnRlcm5hbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE3RjBEODAx
RkZFRTE0RjAwOEVGMzAzIC8qIFNlcnZpY2VXb3JrZXJJbnRlcm5hbHMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VydmljZVdvcmtlckludGVybmFscy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxN0YwRDgxMUZGRUUxNTAwMDhFRjMwMyAvKiBT
ZXJ2aWNlV29ya2VySW50ZXJuYWxzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTZXJ2aWNl
V29ya2VySW50ZXJuYWxzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcxNDUs
NiArNzE0NSw4IEBACiAJCTQxRkIyNzhGMUYzNEMyODIwMDc5NTQ4NyAvKiBXb3JrZXJHbG9iYWxT
Y29wZUNhY2hlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXb3JrZXJHbG9iYWxTY29wZUNhY2hl
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRkIyNzk5MUYzNENFOUMwMDc5
NTQ4NyAvKiBDYWNoZVF1ZXJ5T3B0aW9ucy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ2FjaGVRdWVyeU9wdGlvbnMuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUZCMjc5QjFGMzRDRUYwMDA3OTU0ODcg
LyogQ2FjaGVRdWVyeU9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FjaGVRdWVyeU9wdGlvbnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDI3REE3MUIxMzczNURGQTAwN0M1N0ZC
IC8qIEpTU2VydmljZVdvcmtlckludGVybmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU1NlcnZpY2VXb3JrZXJJbnRlcm5hbHMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0MjdEQTcxQzEzNzM1REZBMDA3QzU3RkIgLyogSlNTZXJ2aWNlV29y
a2VySW50ZXJuYWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU2Vydmlj
ZVdvcmtlckludGVybmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzEwN0JF
MTE4Q0MxOURFMDBDQzE4RTggLyogU2VsZWN0b3JQc2V1ZG9UeXBlTWFwLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlbGVjdG9yUHNldWRvVHlwZU1hcC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MzE0MkU3OTEzQjFFOTc3MDBGMUM4NzEgLyogU1ZHQW5pbWF0
ZWRSZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0FuaW1h
dGVkUmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzMUEyRjlBMTNCNkYy
QjAwMDc3OTFFNCAvKiBTVkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0NjM1LDYgKzI0NjM3LDggQEAKIAkJ
CQlFNDdDMzkyNjFGRTZFMERDMDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRl
ci5oICovLAogCQkJCTExOTM0MDk0MUZFRDcxNTUwMDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRl
ckZvcm1Db250cm9scy5jcHAgKi8sCiAJCQkJMTE5MzQwOTUxRkVENzE1NTAwOTM1RjFFIC8qIFJl
bmRlclRyZWVCdWlsZGVyRm9ybUNvbnRyb2xzLmggKi8sCisJCQkJMTFDNUYxMTYyMDAzRTc3NTAw
MDFBRTYwIC8qIFJlbmRlclRyZWVCdWlsZGVySW5saW5lLmNwcCAqLywKKwkJCQkxMUM1RjExODIw
MDNFNzc2MDAwMUFFNjAgLyogUmVuZGVyVHJlZUJ1aWxkZXJJbmxpbmUuaCAqLywKIAkJCQlFNDdD
MzkyQjFGRTZFMERGMDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXJMaXN0LmNwcCAqLywKIAkJ
CQlFNDdDMzkyODFGRTZFMEREMDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXJMaXN0LmggKi8s
CiAJCQkJRTQ3QzM5MjMxRkU2RTBEQTAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyTXVsdGlD
b2x1bW4uY3BwICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cklubGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcApp
bmRleCA5NDRhODlhZTQ1ZGQ0NDlmNmU2OWRjNGI3NDcyNGFhMWYyNDJlZTQ4Li4xYTZkMmQ0YjQ0
MDRjYzBlOTk1ODJjZTAwN2ZhMzBkNDQ1ODQyN2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW5saW5lLmNwcApAQCAtMjU3LDMzNCArMjU3LDEyIEBAIExheW91dFJlY3QgUmVu
ZGVySW5saW5lOjpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgdW5zaWduZWQs
IExheW91dFVuCiAKIHZvaWQgUmVuZGVySW5saW5lOjphZGRDaGlsZChSZW5kZXJUcmVlQnVpbGRl
ciYgYnVpbGRlciwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVj
dCogYmVmb3JlQ2hpbGQpCiB7Ci0gICAgYXV0byogYmVmb3JlQ2hpbGRPclBsYWNlaG9sZGVyID0g
YmVmb3JlQ2hpbGQ7Ci0gICAgaWYgKGF1dG8qIGZyYWdtZW50ZWRGbG93ID0gZW5jbG9zaW5nRnJh
Z21lbnRlZEZsb3coKSkKLSAgICAgICAgYmVmb3JlQ2hpbGRPclBsYWNlaG9sZGVyID0gZnJhZ21l
bnRlZEZsb3ctPnJlc29sdmVNb3ZlZENoaWxkKGJlZm9yZUNoaWxkKTsKLSAgICBpZiAoY29udGlu
dWF0aW9uKCkpIHsKLSAgICAgICAgYWRkQ2hpbGRUb0NvbnRpbnVhdGlvbihidWlsZGVyLCBXVEZN
b3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGRPclBsYWNlaG9sZGVyKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBhZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKGJ1aWxkZXIsIFdURk1v
dmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZE9yUGxhY2Vob2xkZXIpOwotfQotCi1zdGF0aWMgUmVu
ZGVyQm94TW9kZWxPYmplY3QqIG5leHRDb250aW51YXRpb24oUmVuZGVyT2JqZWN0KiByZW5kZXJl
cikKLXsKLSAgICBpZiAoaXM8UmVuZGVySW5saW5lPigqcmVuZGVyZXIpICYmICFyZW5kZXJlci0+
aXNSZXBsYWNlZCgpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVySW5saW5lPigqcmVu
ZGVyZXIpLmNvbnRpbnVhdGlvbigpOwotICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCbG9jaz4o
KnJlbmRlcmVyKS5pbmxpbmVDb250aW51YXRpb24oKTsKLX0KLQotUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIFJlbmRlcklubGluZTo6Y29udGludWF0aW9uQmVmb3JlKFJlbmRlck9iamVjdCogYmVmb3Jl
Q2hpbGQpCi17Ci0gICAgaWYgKGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSA9
PSB0aGlzKQotICAgICAgICByZXR1cm4gdGhpczsKLQotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0
KiBjdXJyID0gbmV4dENvbnRpbnVhdGlvbih0aGlzKTsKLSAgICBSZW5kZXJCb3hNb2RlbE9iamVj
dCogbmV4dFRvTGFzdCA9IHRoaXM7Ci0gICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGxhc3QgPSB0
aGlzOwotICAgIHdoaWxlIChjdXJyKSB7Ci0gICAgICAgIGlmIChiZWZvcmVDaGlsZCAmJiBiZWZv
cmVDaGlsZC0+cGFyZW50KCkgPT0gY3VycikgewotICAgICAgICAgICAgaWYgKGN1cnItPmZpcnN0
Q2hpbGQoKSA9PSBiZWZvcmVDaGlsZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbGFzdDsKLSAg
ICAgICAgICAgIHJldHVybiBjdXJyOwotICAgICAgICB9Ci0KLSAgICAgICAgbmV4dFRvTGFzdCA9
IGxhc3Q7Ci0gICAgICAgIGxhc3QgPSBjdXJyOwotICAgICAgICBjdXJyID0gbmV4dENvbnRpbnVh
dGlvbihjdXJyKTsKLSAgICB9Ci0KLSAgICBpZiAoIWJlZm9yZUNoaWxkICYmICFsYXN0LT5maXJz
dENoaWxkKCkpCi0gICAgICAgIHJldHVybiBuZXh0VG9MYXN0OwotICAgIHJldHVybiBsYXN0Owot
fQotCi1zdGF0aWMgYm9vbCBuZXdDaGlsZElzSW5saW5lKGNvbnN0IFJlbmRlck9iamVjdCYgbmV3
Q2hpbGQsIGNvbnN0IFJlbmRlcklubGluZSYgcGFyZW50KQotewotICAgIC8vIGlubGluZSBwYXJl
bnQgZ2VuZXJhdGVzIGlubGluZS10YWJsZS4KLSAgICByZXR1cm4gbmV3Q2hpbGQuaXNJbmxpbmUo
KSB8IChwYXJlbnQuY2hpbGRSZXF1aXJlc1RhYmxlKG5ld0NoaWxkKSAmJiBwYXJlbnQuc3R5bGUo
KS5kaXNwbGF5KCkgPT0gSU5MSU5FKTsKKyAgICBidWlsZGVyLmluc2VydENoaWxkVG9SZW5kZXJJ
bmxpbmUoKnRoaXMsIFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CiB9CiAKIHZvaWQg
UmVuZGVySW5saW5lOjphZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFJlbmRlclRyZWVCdWls
ZGVyJiBidWlsZGVyLCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2Jq
ZWN0KiBiZWZvcmVDaGlsZCkKIHsKLSAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3QgYXBwZW5kIHRo
aW5ncyBhZnRlciA6YWZ0ZXItZ2VuZXJhdGVkIGNvbnRlbnQgaWYgd2UgaGF2ZSBpdC4KLSAgICBp
ZiAoIWJlZm9yZUNoaWxkICYmIGlzQWZ0ZXJDb250ZW50KGxhc3RDaGlsZCgpKSkKLSAgICAgICAg
YmVmb3JlQ2hpbGQgPSBsYXN0Q2hpbGQoKTsKLSAgICAKLSAgICBib29sIGNoaWxkSW5saW5lID0g
bmV3Q2hpbGRJc0lubGluZSgqbmV3Q2hpbGQsICp0aGlzKTsKLSAgICAvLyBUaGlzIGNvZGUgaXMg
Zm9yIHRoZSBvbGQgYmxvY2staW5zaWRlLWlubGluZSBtb2RlbCB0aGF0IHVzZXMgY29udGludWF0
aW9ucy4KLSAgICBpZiAoIWNoaWxkSW5saW5lICYmICFuZXdDaGlsZC0+aXNGbG9hdGluZ09yT3V0
T2ZGbG93UG9zaXRpb25lZCgpKSB7Ci0gICAgICAgIC8vIFdlIGFyZSBwbGFjaW5nIGEgYmxvY2sg
aW5zaWRlIGFuIGlubGluZS4gV2UgaGF2ZSB0byBwZXJmb3JtIGEgc3BsaXQgb2YgdGhpcwotICAg
ICAgICAvLyBpbmxpbmUgaW50byBjb250aW51YXRpb25zLiAgVGhpcyBpbnZvbHZlcyBjcmVhdGlu
ZyBhbiBhbm9ueW1vdXMgYmxvY2sgYm94IHRvIGhvbGQKLSAgICAgICAgLy8gfG5ld0NoaWxkfC4g
IFdlIHRoZW4gbWFrZSB0aGF0IGJsb2NrIGJveCBhIGNvbnRpbnVhdGlvbiBvZiB0aGlzIGlubGlu
ZS4gIFdlIHRha2UgYWxsIG9mCi0gICAgICAgIC8vIHRoZSBjaGlsZHJlbiBhZnRlciB8YmVmb3Jl
Q2hpbGR8IGFuZCBwdXQgdGhlbSBpbiBhIGNsb25lIG9mIHRoaXMgb2JqZWN0LgotICAgICAgICBh
dXRvIG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3Bs
YXkoc3R5bGUoKSwgQkxPQ0spOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgaW5zaWRlIGFuIGlu
bGluZSBhZmZlY3RlZCBieSBpbi1mbG93IHBvc2l0aW9uaW5nIHRoZSBibG9jayBuZWVkcyB0byBi
ZSBhZmZlY3RlZCBieSBpdCB0b28uCi0gICAgICAgIC8vIEdpdmluZyB0aGUgYmxvY2sgYSBsYXll
ciBsaWtlIHRoaXMgYWxsb3dzIGl0IHRvIGNvbGxlY3QgdGhlIHgveSBvZmZzZXRzIGZyb20gaW5s
aW5lIHBhcmVudHMgbGF0ZXIuCi0gICAgICAgIGlmIChhdXRvIHBvc2l0aW9uZWRBbmNlc3RvciA9
IGluRmxvd1Bvc2l0aW9uZWRJbmxpbmVBbmNlc3Rvcih0aGlzKSkKLSAgICAgICAgICAgIG5ld1N0
eWxlLnNldFBvc2l0aW9uKHBvc2l0aW9uZWRBbmNlc3Rvci0+c3R5bGUoKS5wb3NpdGlvbigpKTsK
LQotICAgICAgICBhdXRvIG5ld0JveCA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlckJsb2NrRmxvdz4o
ZG9jdW1lbnQoKSwgV1RGTW92ZShuZXdTdHlsZSkpOwotICAgICAgICBuZXdCb3gtPmluaXRpYWxp
emVTdHlsZSgpOwotICAgICAgICBuZXdCb3gtPnNldElzQ29udGludWF0aW9uKCk7Ci0gICAgICAg
IFJlbmRlckJveE1vZGVsT2JqZWN0KiBvbGRDb250aW51YXRpb24gPSBjb250aW51YXRpb24oKTsK
LSAgICAgICAgaWYgKG9sZENvbnRpbnVhdGlvbikKLSAgICAgICAgICAgIG9sZENvbnRpbnVhdGlv
bi0+cmVtb3ZlRnJvbUNvbnRpbnVhdGlvbkNoYWluKCk7Ci0gICAgICAgIG5ld0JveC0+aW5zZXJ0
SW50b0NvbnRpbnVhdGlvbkNoYWluQWZ0ZXIoKnRoaXMpOwotCi0gICAgICAgIHNwbGl0Rmxvdyhi
dWlsZGVyLCBiZWZvcmVDaGlsZCwgV1RGTW92ZShuZXdCb3gpLCBXVEZNb3ZlKG5ld0NoaWxkKSwg
b2xkQ29udGludWF0aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8mIGNo
aWxkID0gKm5ld0NoaWxkOwotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0OjphZGRDaGlsZChidWls
ZGVyLCBXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwotICAgIGNoaWxkLnNldE5lZWRz
TGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwotfQotCi1SZW5kZXJQdHI8UmVuZGVySW5saW5l
PiBSZW5kZXJJbmxpbmU6OmNsb25lQXNDb250aW51YXRpb24oKSBjb25zdAotewotICAgIFJlbmRl
clB0cjxSZW5kZXJJbmxpbmU+IGNsb25lSW5saW5lID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVySW5s
aW5lPigqZWxlbWVudCgpLCBSZW5kZXJTdHlsZTo6Y2xvbmUoc3R5bGUoKSkpOwotICAgIGNsb25l
SW5saW5lLT5pbml0aWFsaXplU3R5bGUoKTsKLSAgICBjbG9uZUlubGluZS0+c2V0RnJhZ21lbnRl
ZEZsb3dTdGF0ZShmcmFnbWVudGVkRmxvd1N0YXRlKCkpOwotICAgIGNsb25lSW5saW5lLT5zZXRI
YXNPdXRsaW5lQXV0b0FuY2VzdG9yKGhhc091dGxpbmVBdXRvQW5jZXN0b3IoKSk7Ci0gICAgY2xv
bmVJbmxpbmUtPnNldElzQ29udGludWF0aW9uKCk7Ci0gICAgcmV0dXJuIGNsb25lSW5saW5lOwot
fQotCi12b2lkIFJlbmRlcklubGluZTo6c3BsaXRJbmxpbmVzKFJlbmRlclRyZWVCdWlsZGVyJiBi
dWlsZGVyLCBSZW5kZXJCbG9jayogZnJvbUJsb2NrLCBSZW5kZXJCbG9jayogdG9CbG9jaywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sqIG1pZGRsZUJsb2NrLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxk
LCBSZW5kZXJCb3hNb2RlbE9iamVjdCogb2xkQ29udCkKLXsKLSAgICAvLyBDcmVhdGUgYSBjbG9u
ZSBvZiB0aGlzIGlubGluZS4KLSAgICBSZW5kZXJQdHI8UmVuZGVySW5saW5lPiBjbG9uZUlubGlu
ZSA9IGNsb25lQXNDb250aW51YXRpb24oKTsKLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0g
ICAgLy8gSWYgd2UncmUgc3BsaXR0aW5nIHRoZSBpbmxpbmUgY29udGFpbmluZyB0aGUgZnVsbHNj
cmVlbmVkIGVsZW1lbnQsCi0gICAgLy8gfGJlZm9yZUNoaWxkfCBtYXkgYmUgdGhlIHJlbmRlcmVy
IGZvciB0aGUgZnVsbHNjcmVlbmVkIGVsZW1lbnQuIEhvd2V2ZXIsCi0gICAgLy8gdGhhdCByZW5k
ZXJlciBpcyB3cmFwcGVkIGluIGEgUmVuZGVyRnVsbFNjcmVlbiwgc28gfHRoaXN8IGlzIG5vdCBp
dHMKLSAgICAvLyBwYXJlbnQuIFNpbmNlIHRoZSBzcGxpdHRpbmcgbG9naWMgZXhwZWN0cyB8dGhp
c3wgdG8gYmUgdGhlIHBhcmVudCwgc2V0Ci0gICAgLy8gfGJlZm9yZUNoaWxkfCB0byBiZSB0aGUg
UmVuZGVyRnVsbFNjcmVlbi4KLSAgICBjb25zdCBFbGVtZW50KiBmdWxsU2NyZWVuRWxlbWVudCA9
IGRvY3VtZW50KCkud2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCk7Ci0gICAgaWYgKGZ1
bGxTY3JlZW5FbGVtZW50ICYmIGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5ub2RlKCkgPT0g
ZnVsbFNjcmVlbkVsZW1lbnQpCi0gICAgICAgIGJlZm9yZUNoaWxkID0gZG9jdW1lbnQoKS5mdWxs
U2NyZWVuUmVuZGVyZXIoKTsKLSNlbmRpZgotICAgIC8vIE5vdyB0YWtlIGFsbCBvZiB0aGUgY2hp
bGRyZW4gZnJvbSBiZWZvcmVDaGlsZCB0byB0aGUgZW5kIGFuZCByZW1vdmUKLSAgICAvLyB0aGVt
IGZyb20gfHRoaXN8IGFuZCBwbGFjZSB0aGVtIGluIHRoZSBjbG9uZS4KLSAgICBmb3IgKFJlbmRl
ck9iamVjdCogcmVuZGVyZXJUb01vdmUgPSBiZWZvcmVDaGlsZDsgcmVuZGVyZXJUb01vdmU7KSB7
Ci0gICAgICAgIFJlbmRlck9iamVjdCogbmV4dFNpYmxpbmcgPSByZW5kZXJlclRvTW92ZS0+bmV4
dFNpYmxpbmcoKTsKLSAgICAgICAgLy8gV2hlbiBhbm9ueW1vdXMgd3JhcHBlciBpcyBwcmVzZW50
LCB3ZSBtaWdodCBuZWVkIHRvIG1vdmUgdGhlIHdob2xlIHN1YnRyZWUgaW5zdGVhZC4KLSAgICAg
ICAgaWYgKHJlbmRlcmVyVG9Nb3ZlLT5wYXJlbnQoKSAhPSB0aGlzKSB7Ci0gICAgICAgICAgICBh
dXRvKiBhbm9ueW1vdXNQYXJlbnQgPSByZW5kZXJlclRvTW92ZS0+cGFyZW50KCk7Ci0gICAgICAg
ICAgICB3aGlsZSAoYW5vbnltb3VzUGFyZW50ICYmIGFub255bW91c1BhcmVudC0+cGFyZW50KCkg
IT0gdGhpcykgewotICAgICAgICAgICAgICAgIEFTU0VSVChhbm9ueW1vdXNQYXJlbnQtPmlzQW5v
bnltb3VzKCkpOwotICAgICAgICAgICAgICAgIGFub255bW91c1BhcmVudCA9IGFub255bW91c1Bh
cmVudC0+cGFyZW50KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWFub255bW91
c1BhcmVudCkgewotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gSWYgYmVmb3Jl
Q2hpbGQgaXMgdGhlIGZpcnN0IGNoaWxkIGluIHRoZSBzdWJ0cmVlLCB3ZSBjb3VsZCBqdXN0IG1v
dmUgdGhlIHdob2xlIHN1YnRyZWUuCi0gICAgICAgICAgICBpZiAoIXJlbmRlcmVyVG9Nb3ZlLT5w
cmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICAgICAgICAgIC8vIFJlcGFyZW50IHRoZSB3aG9s
ZSBhbm9ueW1vdXMgd3JhcHBlciB0cmVlLgotICAgICAgICAgICAgICAgIHJlbmRlcmVyVG9Nb3Zl
ID0gYW5vbnltb3VzUGFyZW50OwotICAgICAgICAgICAgICAgIC8vIFNraXAgdG8gdGhlIG5leHQg
c2libGluZyB0aGF0IGlzIG5vdCBpbiB0aGlzIHN1YnRyZWUuCi0gICAgICAgICAgICAgICAgbmV4
dFNpYmxpbmcgPSBhbm9ueW1vdXNQYXJlbnQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKCFyZW5kZXJlclRvTW92ZS0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaXMgdGhlIGxhc3QgcmVuZGVyZXIgaW4gdGhlIHN1YnRyZWUuIFdlIG5lZWQg
dG8ganVtcCBvdXQgb2YgdGhlIHdyYXBwZXIgc3VidHJlZSwgc28gdGhhdAotICAgICAgICAgICAg
ICAgIC8vIHRoZSBzaWJsaW5ncyBhcmUgZ2V0dGluZyByZXBhcmVudGVkIHRvby4KLSAgICAgICAg
ICAgICAgICBuZXh0U2libGluZyA9IGFub255bW91c1BhcmVudC0+bmV4dFNpYmxpbmcoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIE90aGVyd2lzZSBqdXN0IG1vdmUgdGhlIHJlbmRl
cmVyIHRvIHRoZSBpbmxpbmUgY2xvbmUuIFNob3VsZCB0aGUgcmVuZGVyZXIgbmVlZCBhbiBhbm9u
Ci0gICAgICAgICAgICAvLyB3cmFwcGVyLCB0aGUgYWRkQ2hpbGQoKSB3aWxsIGdlbmVyYXRlIG9u
ZSBmb3IgaXQuCi0gICAgICAgICAgICAvLyBGSVhNRTogV2hlbiB0aGUgYW5vbnltb3VzIHdyYXBw
ZXIgaGFzIG11bHRpcGxlIGNoaWxkcmVuLCB3ZSBlbmQgdXAgdHJhdmVyc2luZyB1cCB0byB0aGUg
dG9wbW9zdCB3cmFwcGVyCi0gICAgICAgICAgICAvLyBldmVyeSB0aW1lLCB3aGljaCBpcyBhIGJp
dCB3YXN0ZWZ1bC4KLSAgICAgICAgfQotICAgICAgICBhdXRvIGNoaWxkVG9Nb3ZlID0gcmVuZGVy
ZXJUb01vdmUtPnBhcmVudCgpLT50YWtlQ2hpbGRJbnRlcm5hbCgqcmVuZGVyZXJUb01vdmUpOwot
ICAgICAgICBjbG9uZUlubGluZS0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihidWlsZGVy
LCBXVEZNb3ZlKGNoaWxkVG9Nb3ZlKSk7Ci0gICAgICAgIHJlbmRlcmVyVG9Nb3ZlLT5zZXROZWVk
c0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKLSAgICAgICAgcmVuZGVyZXJUb01vdmUgPSBu
ZXh0U2libGluZzsKLSAgICB9Ci0gICAgLy8gSG9vayB8Y2xvbmV8IHVwIGFzIHRoZSBjb250aW51
YXRpb24gb2YgdGhlIG1pZGRsZSBibG9jay4KLSAgICBjbG9uZUlubGluZS0+aW5zZXJ0SW50b0Nv
bnRpbnVhdGlvbkNoYWluQWZ0ZXIoKm1pZGRsZUJsb2NrKTsKLSAgICBpZiAob2xkQ29udCkKLSAg
ICAgICAgb2xkQ29udC0+aW5zZXJ0SW50b0NvbnRpbnVhdGlvbkNoYWluQWZ0ZXIoKmNsb25lSW5s
aW5lKTsKLQotICAgIC8vIFdlIGhhdmUgYmVlbiByZXBhcmVudGVkIGFuZCBhcmUgbm93IHVuZGVy
IHRoZSBmcm9tQmxvY2suICBXZSBuZWVkCi0gICAgLy8gdG8gd2FsayB1cCBvdXIgaW5saW5lIHBh
cmVudCBjaGFpbiB1bnRpbCB3ZSBoaXQgdGhlIGNvbnRhaW5pbmcgYmxvY2suCi0gICAgLy8gT25j
ZSB3ZSBoaXQgdGhlIGNvbnRhaW5pbmcgYmxvY2sgd2UncmUgZG9uZS4KLSAgICBSZW5kZXJCb3hN
b2RlbE9iamVjdCogY3VycmVudCA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PihwYXJl
bnQoKSk7Ci0gICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGN1cnJlbnRDaGlsZCA9IHRoaXM7Ci0g
ICAgCi0gICAgLy8gRklYTUU6IEJlY2F1c2Ugc3BsaXR0aW5nIGlzIE8obl4yKSBhcyB0YWdzIG5l
c3QgcGF0aG9sb2dpY2FsbHksIHdlIGNhcCB0aGUgZGVwdGggYXQgd2hpY2ggd2UncmUgd2lsbGlu
ZyB0byBjbG9uZS4KLSAgICAvLyBUaGVyZSB3aWxsIGV2ZW50dWFsbHkgYmUgYSBiZXR0ZXIgYXBw
cm9hY2ggdG8gdGhpcyBwcm9ibGVtIHRoYXQgd2lsbCBsZXQgdXMgbmVzdCB0byBhIG11Y2gKLSAg
ICAvLyBncmVhdGVyIGRlcHRoIChzZWUgYnVnemlsbGEgYnVnIDEzNDMwKSBidXQgZm9yIG5vdyB3
ZSBoYXZlIGEgbGltaXQuICBUaGlzICp3aWxsKiByZXN1bHQgaW4KLSAgICAvLyBpbmNvcnJlY3Qg
cmVuZGVyaW5nLCBidXQgdGhlIGFsdGVybmF0aXZlIGlzIHRvIGhhbmcgZm9yZXZlci4KLSAgICB1
bnNpZ25lZCBzcGxpdERlcHRoID0gMTsKLSAgICBjb25zdCB1bnNpZ25lZCBjTWF4U3BsaXREZXB0
aCA9IDIwMDsgCi0gICAgd2hpbGUgKGN1cnJlbnQgJiYgY3VycmVudCAhPSBmcm9tQmxvY2spIHsK
LSAgICAgICAgaWYgKHNwbGl0RGVwdGggPCBjTWF4U3BsaXREZXB0aCkgewotICAgICAgICAgICAg
Ly8gQ3JlYXRlIGEgbmV3IGNsb25lLgotICAgICAgICAgICAgUmVuZGVyUHRyPFJlbmRlcklubGlu
ZT4gY2xvbmVDaGlsZCA9IFdURk1vdmUoY2xvbmVJbmxpbmUpOwotICAgICAgICAgICAgY2xvbmVJ
bmxpbmUgPSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KCpjdXJyZW50KS5jbG9uZUFzQ29udGludWF0
aW9uKCk7Ci0KLSAgICAgICAgICAgIC8vIEluc2VydCBvdXIgY2hpbGQgY2xvbmUgYXMgdGhlIGZp
cnN0IGNoaWxkLgotICAgICAgICAgICAgY2xvbmVJbmxpbmUtPmFkZENoaWxkSWdub3JpbmdDb250
aW51YXRpb24oYnVpbGRlciwgV1RGTW92ZShjbG9uZUNoaWxkKSk7Ci0KLSAgICAgICAgICAgIC8v
IEhvb2sgdGhlIGNsb25lIHVwIGFzIGEgY29udGludWF0aW9uIG9mIHxjdXJyfC4KLSAgICAgICAg
ICAgIGNsb25lSW5saW5lLT5pbnNlcnRJbnRvQ29udGludWF0aW9uQ2hhaW5BZnRlcigqY3VycmVu
dCk7Ci0KLSAgICAgICAgICAgIC8vIE5vdyB3ZSBuZWVkIHRvIHRha2UgYWxsIG9mIHRoZSBjaGls
ZHJlbiBzdGFydGluZyBmcm9tIHRoZSBmaXJzdCBjaGlsZAotICAgICAgICAgICAgLy8gKmFmdGVy
KiBjdXJyZW50Q2hpbGQgYW5kIGFwcGVuZCB0aGVtIGFsbCB0byB0aGUgY2xvbmUuCi0gICAgICAg
ICAgICBmb3IgKGF1dG8qIHNpYmxpbmcgPSBjdXJyZW50Q2hpbGQtPm5leHRTaWJsaW5nKCk7IHNp
Ymxpbmc7KSB7Ci0gICAgICAgICAgICAgICAgYXV0byogbmV4dCA9IHNpYmxpbmctPm5leHRTaWJs
aW5nKCk7Ci0gICAgICAgICAgICAgICAgYXV0byBjaGlsZFRvTW92ZSA9IGN1cnJlbnQtPnRha2VD
aGlsZEludGVybmFsKCpzaWJsaW5nKTsKLSAgICAgICAgICAgICAgICBjbG9uZUlubGluZS0+YWRk
Q2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihidWlsZGVyLCBXVEZNb3ZlKGNoaWxkVG9Nb3ZlKSk7
Ci0gICAgICAgICAgICAgICAgc2libGluZy0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVj
YWxjKCk7Ci0gICAgICAgICAgICAgICAgc2libGluZyA9IG5leHQ7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEtlZXAgd2Fsa2luZyB1cCB0aGUgY2hhaW4u
Ci0gICAgICAgIGN1cnJlbnRDaGlsZCA9IGN1cnJlbnQ7Ci0gICAgICAgIGN1cnJlbnQgPSBkb3du
Y2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oY3VycmVudC0+cGFyZW50KCkpOwotICAgICAgICAr
K3NwbGl0RGVwdGg7Ci0gICAgfQotCi0gICAgLy8gQ2xlYXIgdGhlIGZsb3cgdGhyZWFkIGNvbnRh
aW5pbmcgYmxvY2tzIGNhY2hlZCBkdXJpbmcgdGhlIGRldGFjaGVkIHN0YXRlIGluc2VydGlvbnMu
Ci0gICAgZm9yIChhdXRvJiBjbG9uZUJsb2NrQ2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJC
bG9jaz4oKmNsb25lSW5saW5lKSkKLSAgICAgICAgY2xvbmVCbG9ja0NoaWxkLnJlc2V0RW5jbG9z
aW5nRnJhZ21lbnRlZEZsb3dBbmRDaGlsZEluZm9JbmNsdWRpbmdEZXNjZW5kYW50cygpOwotCi0g
ICAgLy8gTm93IHdlIGFyZSBhdCB0aGUgYmxvY2sgbGV2ZWwuIFdlIG5lZWQgdG8gcHV0IHRoZSBj
bG9uZSBpbnRvIHRoZSB0b0Jsb2NrLgotICAgIHRvQmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwo
V1RGTW92ZShjbG9uZUlubGluZSksIG51bGxwdHIpOwotCi0gICAgLy8gTm93IHRha2UgYWxsIHRo
ZSBjaGlsZHJlbiBhZnRlciBjdXJyZW50Q2hpbGQgYW5kIHJlbW92ZSB0aGVtIGZyb20gdGhlIGZy
b21CbG9jawotICAgIC8vIGFuZCBwdXQgdGhlbSBpbiB0aGUgdG9CbG9jay4KLSAgICBmb3IgKGF1
dG8qIGN1cnJlbnQgPSBjdXJyZW50Q2hpbGQtPm5leHRTaWJsaW5nKCk7IGN1cnJlbnQ7KSB7Ci0g
ICAgICAgIGF1dG8qIG5leHQgPSBjdXJyZW50LT5uZXh0U2libGluZygpOwotICAgICAgICBhdXRv
IGNoaWxkVG9Nb3ZlID0gZnJvbUJsb2NrLT50YWtlQ2hpbGRJbnRlcm5hbCgqY3VycmVudCk7Ci0g
ICAgICAgIHRvQmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwoV1RGTW92ZShjaGlsZFRvTW92ZSks
IG51bGxwdHIpOwotICAgICAgICBjdXJyZW50ID0gbmV4dDsKLSAgICB9Ci19Ci0KLXZvaWQgUmVu
ZGVySW5saW5lOjpzcGxpdEZsb3coUmVuZGVyVHJlZUJ1aWxkZXImIGJ1aWxkZXIsIFJlbmRlck9i
amVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlclB0cjxSZW5kZXJCbG9jaz4gbmV3QmxvY2tCb3gsIFJl
bmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJCb3hNb2RlbE9iamVjdCogb2xk
Q29udCkKLXsKLSAgICBhdXRvJiBhZGRlZEJsb2NrQm94ID0gKm5ld0Jsb2NrQm94OwotICAgIFJl
bmRlckJsb2NrKiBwcmUgPSBudWxscHRyOwotICAgIFJlbmRlckJsb2NrKiBibG9jayA9IGNvbnRh
aW5pbmdCbG9jaygpOwotCi0gICAgLy8gRGVsZXRlIG91ciBsaW5lIGJveGVzIGJlZm9yZSB3ZSBk
byB0aGUgaW5saW5lIHNwbGl0IGludG8gY29udGludWF0aW9ucy4KLSAgICBibG9jay0+ZGVsZXRl
TGluZXMoKTsKLQotICAgIFJlbmRlclB0cjxSZW5kZXJCbG9jaz4gY3JlYXRlZFByZTsKLSAgICBi
b29sIG1hZGVOZXdCZWZvcmVCbG9jayA9IGZhbHNlOwotICAgIGlmIChibG9jay0+aXNBbm9ueW1v
dXNCbG9jaygpICYmICghYmxvY2stPnBhcmVudCgpIHx8ICFibG9jay0+cGFyZW50KCktPmNyZWF0
ZXNBbm9ueW1vdXNXcmFwcGVyKCkpKSB7Ci0gICAgICAgIC8vIFdlIGNhbiByZXVzZSB0aGlzIGJs
b2NrIGFuZCBtYWtlIGl0IHRoZSBwcmVCbG9jayBvZiB0aGUgbmV4dCBjb250aW51YXRpb24uCi0g
ICAgICAgIHByZSA9IGJsb2NrOwotICAgICAgICBwcmUtPnJlbW92ZVBvc2l0aW9uZWRPYmplY3Rz
KG51bGxwdHIpOwotICAgICAgICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFRoZSBlbmNsb3NpbmcgbWV0
aG9kIHNob3VsZCBsaWtlbHkgYmUgc3dpdGNoZWQgb3ZlcgotICAgICAgICAvLyB0byBvbmx5IHdv
cmsgb24gUmVuZGVyQmxvY2tGbG93LCBpbiB3aGljaCBjYXNlIHRoaXMgY29udmVyc2lvbiBjYW4g
YmUKLSAgICAgICAgLy8gcmVtb3ZlZC4KLSAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrRmxvdz4o
KnByZSkpCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpwcmUpLnJlbW92
ZUZsb2F0aW5nT2JqZWN0cygpOwotICAgICAgICBibG9jayA9IGJsb2NrLT5jb250YWluaW5nQmxv
Y2soKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBObyBhbm9ueW1vdXMgYmxvY2sgYXZhaWxh
YmxlIGZvciB1c2UuICBNYWtlIG9uZS4KLSAgICAgICAgY3JlYXRlZFByZSA9IGJsb2NrLT5jcmVh
dGVBbm9ueW1vdXNCbG9jaygpOwotICAgICAgICBwcmUgPSBjcmVhdGVkUHJlLmdldCgpOwotICAg
ICAgICBtYWRlTmV3QmVmb3JlQmxvY2sgPSB0cnVlOwotICAgIH0KLQotICAgIGF1dG8gY3JlYXRl
ZFBvc3QgPSBwcmUtPmNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKCpibG9jayk7Ci0g
ICAgYXV0byYgcG9zdCA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqY3JlYXRlZFBvc3QpOwotCi0g
ICAgUmVuZGVyT2JqZWN0KiBib3hGaXJzdCA9IG1hZGVOZXdCZWZvcmVCbG9jayA/IGJsb2NrLT5m
aXJzdENoaWxkKCkgOiBwcmUtPm5leHRTaWJsaW5nKCk7Ci0gICAgaWYgKGNyZWF0ZWRQcmUpCi0g
ICAgICAgIGJsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUoY3JlYXRlZFByZSksIGJv
eEZpcnN0KTsKLSAgICBibG9jay0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKG5ld0Jsb2Nr
Qm94KSwgYm94Rmlyc3QpOwotICAgIGJsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUo
Y3JlYXRlZFBvc3QpLCBib3hGaXJzdCk7Ci0gICAgYmxvY2stPnNldENoaWxkcmVuSW5saW5lKGZh
bHNlKTsKLSAgICAKLSAgICBpZiAobWFkZU5ld0JlZm9yZUJsb2NrKSB7Ci0gICAgICAgIFJlbmRl
ck9iamVjdCogbyA9IGJveEZpcnN0OwotICAgICAgICB3aGlsZSAobykgewotICAgICAgICAgICAg
UmVuZGVyT2JqZWN0KiBubyA9IG87Ci0gICAgICAgICAgICBvID0gbm8tPm5leHRTaWJsaW5nKCk7
Ci0gICAgICAgICAgICBhdXRvIGNoaWxkVG9Nb3ZlID0gYmxvY2stPnRha2VDaGlsZEludGVybmFs
KCpubyk7Ci0gICAgICAgICAgICBwcmUtPmluc2VydENoaWxkSW50ZXJuYWwoV1RGTW92ZShjaGls
ZFRvTW92ZSksIG51bGxwdHIpOwotICAgICAgICAgICAgbm8tPnNldE5lZWRzTGF5b3V0QW5kUHJl
ZldpZHRoc1JlY2FsYygpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3BsaXRJbmxpbmVzKGJ1
aWxkZXIsIHByZSwgJnBvc3QsICZhZGRlZEJsb2NrQm94LCBiZWZvcmVDaGlsZCwgb2xkQ29udCk7
Ci0KLSAgICAvLyBXZSBhbHJlYWR5IGtub3cgdGhlIG5ld0Jsb2NrQm94IGlzbid0IGdvaW5nIHRv
IGNvbnRhaW4gaW5saW5lIGtpZHMsIHNvIGF2b2lkIHdhc3RpbmcKLSAgICAvLyB0aW1lIGluIG1h
a2VDaGlsZHJlbk5vbklubGluZSBieSBqdXN0IHNldHRpbmcgdGhpcyBleHBsaWNpdGx5IHVwIGZy
b250LgotICAgIGFkZGVkQmxvY2tCb3guc2V0Q2hpbGRyZW5JbmxpbmUoZmFsc2UpOwotCi0gICAg
Ly8gV2UgZGVsYXllZCBhZGRpbmcgdGhlIG5ld0NoaWxkIHVudGlsIG5vdyBzbyB0aGF0IHRoZSB8
bmV3QmxvY2tCb3h8IHdvdWxkIGJlIGZ1bGx5Ci0gICAgLy8gY29ubmVjdGVkLCB0aHVzIGFsbG93
aW5nIG5ld0NoaWxkIGFjY2VzcyB0byBhIHJlbmRlckFyZW5hIHNob3VsZCBpdCBuZWVkCi0gICAg
Ly8gdG8gd3JhcCBpdHNlbGYgaW4gYWRkaXRpb25hbCBib3hlcyAoZS5nLiwgdGFibGUgY29uc3Ry
dWN0aW9uKS4KLSAgICBidWlsZGVyLmluc2VydENoaWxkKGFkZGVkQmxvY2tCb3gsIFdURk1vdmUo
bmV3Q2hpbGQpKTsKLQotICAgIC8vIEFsd2F5cyBqdXN0IGRvIGEgZnVsbCBsYXlvdXQgaW4gb3Jk
ZXIgdG8gZW5zdXJlIHRoYXQgbGluZSBib3hlcyAoZXNwZWNpYWxseSB3cmFwcGVycyBmb3IgaW1h
Z2VzKQotICAgIC8vIGdldCBkZWxldGVkIHByb3Blcmx5LiAgQmVjYXVzZSBvYmplY3RzIG1vdmVz
IGZyb20gdGhlIHByZSBibG9jayBpbnRvIHRoZSBwb3N0IGJsb2NrLCB3ZSB3YW50IHRvCi0gICAg
Ly8gbWFrZSBuZXcgbGluZSBib3hlcyBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlIG9sZCBsaW5lIGJv
eGVzIGFyb3VuZC4KLSAgICBwcmUtPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygp
OwotICAgIGJsb2NrLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKLSAgICBw
b3N0LnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwotfQotCi1zdGF0aWMgYm9v
bCBjYW5Vc2VBc1BhcmVudEZvckNvbnRpbnVhdGlvbihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQotewotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoIWlzPFJlbmRlckJsb2NrPihyZW5kZXJlcikgJiYgcmVuZGVyZXItPmlzQW5vbnltb3VzKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoaXM8UmVuZGVyVGFibGU+KHJlbmRlcmVy
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJl
bmRlcklubGluZTo6YWRkQ2hpbGRUb0NvbnRpbnVhdGlvbihSZW5kZXJUcmVlQnVpbGRlciYgYnVp
bGRlciwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVm
b3JlQ2hpbGQpCi17Ci0gICAgYXV0byogZmxvdyA9IGNvbnRpbnVhdGlvbkJlZm9yZShiZWZvcmVD
aGlsZCk7Ci0gICAgLy8gSXQgbWF5IG9yIG1heSBub3QgYmUgdGhlIGRpcmVjdCBwYXJlbnQgb2Yg
dGhlIGJlZm9yZUNoaWxkLgotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBiZWZvcmVDaGlsZEFu
Y2VzdG9yID0gbnVsbHB0cjsKLSAgICBpZiAoIWJlZm9yZUNoaWxkKSB7Ci0gICAgICAgIGF1dG8q
IGNvbnRpbnVhdGlvbiA9IG5leHRDb250aW51YXRpb24oZmxvdyk7Ci0gICAgICAgIGJlZm9yZUNo
aWxkQW5jZXN0b3IgPSBjb250aW51YXRpb24gPyBjb250aW51YXRpb24gOiBmbG93OwotICAgIH0g
ZWxzZSBpZiAoY2FuVXNlQXNQYXJlbnRGb3JDb250aW51YXRpb24oYmVmb3JlQ2hpbGQtPnBhcmVu
dCgpKSkKLSAgICAgICAgYmVmb3JlQ2hpbGRBbmNlc3RvciA9IGRvd25jYXN0PFJlbmRlckJveE1v
ZGVsT2JqZWN0PihiZWZvcmVDaGlsZC0+cGFyZW50KCkpOwotICAgIGVsc2UgaWYgKGJlZm9yZUNo
aWxkLT5wYXJlbnQoKSkgewotICAgICAgICAvLyBJbiBjYXNlIG9mIGFub255bW91cyB3cmFwcGVy
cywgdGhlIHBhcmVudCBvZiB0aGUgYmVmb3JlQ2hpbGQgaXMgbW9zdGx5IGlycmVsZXZhbnQuIFdo
YXQgd2UgbmVlZCBpcyB0aGUgdG9wbW9zdCB3cmFwcGVyLgotICAgICAgICBhdXRvKiBwYXJlbnQg
PSBiZWZvcmVDaGlsZC0+cGFyZW50KCk7Ci0gICAgICAgIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50
LT5wYXJlbnQoKSAmJiBwYXJlbnQtPnBhcmVudCgpLT5pc0Fub255bW91cygpKSB7Ci0gICAgICAg
ICAgICAvLyBUaGUgYW5jZXN0b3IgY2FuZGlkYXRlIG5lZWRzIHRvIGJlIGluc2lkZSB0aGUgY29u
dGludWF0aW9uLgotICAgICAgICAgICAgaWYgKHBhcmVudC0+aXNDb250aW51YXRpb24oKSkKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC0+cGFyZW50
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKHBhcmVudCAmJiBwYXJlbnQtPnBhcmVudCgp
KTsKLSAgICAgICAgYmVmb3JlQ2hpbGRBbmNlc3RvciA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVs
T2JqZWN0PihwYXJlbnQtPnBhcmVudCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0KLSAgICBpZiAobmV3Q2hpbGQtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bv
c2l0aW9uZWQoKSkKLSAgICAgICAgcmV0dXJuIGJlZm9yZUNoaWxkQW5jZXN0b3ItPmFkZENoaWxk
SWdub3JpbmdDb250aW51YXRpb24oYnVpbGRlciwgV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNo
aWxkKTsKLQotICAgIGlmIChmbG93ID09IGJlZm9yZUNoaWxkQW5jZXN0b3IpCi0gICAgICAgIHJl
dHVybiBmbG93LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKGJ1aWxkZXIsIFdURk1vdmUo
bmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7Ci0gICAgLy8gQSBjb250aW51YXRpb24gYWx3YXlzIGNv
bnNpc3RzIG9mIHR3byBwb3RlbnRpYWwgY2FuZGlkYXRlczogYW4gaW5saW5lIG9yIGFuIGFub255
bW91cwotICAgIC8vIGJsb2NrIGJveCBob2xkaW5nIGJsb2NrIGNoaWxkcmVuLgotICAgIGJvb2wg
Y2hpbGRJbmxpbmUgPSBuZXdDaGlsZElzSW5saW5lKCpuZXdDaGlsZCwgKnRoaXMpOwotICAgIC8v
IFRoZSBnb2FsIGhlcmUgaXMgdG8gbWF0Y2ggdXAgaWYgd2UgY2FuLCBzbyB0aGF0IHdlIGNhbiBj
b2FsZXNjZSBhbmQgY3JlYXRlIHRoZQotICAgIC8vIG1pbmltYWwgIyBvZiBjb250aW51YXRpb25z
IG5lZWRlZCBmb3IgdGhlIGlubGluZS4KLSAgICBpZiAoY2hpbGRJbmxpbmUgPT0gYmVmb3JlQ2hp
bGRBbmNlc3Rvci0+aXNJbmxpbmUoKSkKLSAgICAgICAgcmV0dXJuIGJlZm9yZUNoaWxkQW5jZXN0
b3ItPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oYnVpbGRlciwgV1RGTW92ZShuZXdDaGls
ZCksIGJlZm9yZUNoaWxkKTsKLSAgICBpZiAoZmxvdy0+aXNJbmxpbmUoKSA9PSBjaGlsZElubGlu
ZSkKLSAgICAgICAgcmV0dXJuIGZsb3ctPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oYnVp
bGRlciwgV1RGTW92ZShuZXdDaGlsZCkpOyAvLyBKdXN0IHRyZWF0IGxpa2UgYW4gYXBwZW5kLgot
ICAgIHJldHVybiBiZWZvcmVDaGlsZEFuY2VzdG9yLT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0
aW9uKGJ1aWxkZXIsIFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CisgICAgYnVpbGRl
ci5pbnNlcnRDaGlsZFRvUmVuZGVySW5saW5lSWdub3JpbmdDb250aW51YXRpb24oKnRoaXMsIFdU
Rk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CiB9CiAKIHZvaWQgUmVuZGVySW5saW5lOjpw
YWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0
KQpAQCAtMTM2OSw3ICsxMDQ3LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmNoaWxkQmVjYW1lTm9u
SW5saW5lKFJlbmRlckVsZW1lbnQmIGNoaWxkKQogICAgIG5ld0JveC0+aW5zZXJ0SW50b0NvbnRp
bnVhdGlvbkNoYWluQWZ0ZXIoKnRoaXMpOwogICAgIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQg
PSBjaGlsZC5uZXh0U2libGluZygpOwogICAgIGF1dG8gcmVtb3ZlZENoaWxkID0gdGFrZUNoaWxk
SW50ZXJuYWwoY2hpbGQpOwotICAgIHNwbGl0RmxvdygqUmVuZGVyVHJlZUJ1aWxkZXI6OmN1cnJl
bnQoKSwgYmVmb3JlQ2hpbGQsIFdURk1vdmUobmV3Qm94KSwgV1RGTW92ZShyZW1vdmVkQ2hpbGQp
LCBvbGRDb250aW51YXRpb24pOworICAgIFJlbmRlclRyZWVCdWlsZGVyOjpjdXJyZW50KCktPnNw
bGl0RmxvdygqdGhpcywgYmVmb3JlQ2hpbGQsIFdURk1vdmUobmV3Qm94KSwgV1RGTW92ZShyZW1v
dmVkQ2hpbGQpLCBvbGRDb250aW51YXRpb24pOwogfQogCiB2b2lkIFJlbmRlcklubGluZTo6dXBk
YXRlSGl0VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50
JiBwb2ludCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAppbmRleCA4Mjdm
NmU2MzUxNTQxMzU3MjE1YjI3NzEzZjJhODk2MTRjZWYyODk5Li43OTE4ZWQ5YTZlYzZlY2M0ZGI3
M2UxOTJhMTM5MTQzMzI0ODZjMDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW5saW5lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklu
bGluZS5oCkBAIC05NCw2ICs5NCw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGl0VGVzdEN1bGxl
ZElubGluZShjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRU
ZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCk7CiAKKyAgICB2b2lkIGFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24o
UmVuZGVyVHJlZUJ1aWxkZXImLCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVu
ZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IG51bGxwdHIpIGZpbmFsOworCiBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKSBvdmVycmlkZTsKIApAQCAtMTE2LDEyICsxMTgsNiBA
QCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEdlbmVyYXRvckNvbnRleHQ+CiAgICAg
dm9pZCBnZW5lcmF0ZUN1bGxlZExpbmVCb3hSZWN0cyhHZW5lcmF0b3JDb250ZXh0JiB5aWVsZCwg
Y29uc3QgUmVuZGVySW5saW5lKiBjb250YWluZXIpIGNvbnN0OwogCi0gICAgdm9pZCBhZGRDaGls
ZFRvQ29udGludWF0aW9uKFJlbmRlclRyZWVCdWlsZGVyJiwgUmVuZGVyUHRyPFJlbmRlck9iamVj
dD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOwotICAgIHZvaWQgYWRkQ2hp
bGRJZ25vcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJUcmVlQnVpbGRlciYsIFJlbmRlclB0cjxSZW5k
ZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cikg
ZmluYWw7Ci0KLSAgICB2b2lkIHNwbGl0SW5saW5lcyhSZW5kZXJUcmVlQnVpbGRlciYsIFJlbmRl
ckJsb2NrKiBmcm9tQmxvY2ssIFJlbmRlckJsb2NrKiB0b0Jsb2NrLCBSZW5kZXJCbG9jayogbWlk
ZGxlQmxvY2ssIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckJveE1vZGVsT2JqZWN0
KiBvbGRDb250KTsKLSAgICB2b2lkIHNwbGl0RmxvdyhSZW5kZXJUcmVlQnVpbGRlciYsIFJlbmRl
ck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlclB0cjxSZW5kZXJCbG9jaz4gbmV3QmxvY2tCb3gs
IFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJCb3hNb2RlbE9iamVjdCog
b2xkQ29udCk7Ci0KICAgICB2b2lkIGxheW91dCgpIGZpbmFsIHsgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IH0gLy8gRG8gbm90aGluZyBmb3IgbGF5b3V0KCkKIAogICAgIHZvaWQgcGFpbnQoUGFpbnRJ
bmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBmaW5hbDsKQEAgLTE2MiwxMSArMTU4LDggQEAgcHJp
dmF0ZToKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiAgICAgdm9pZCBhZGRBbm5vdGF0
ZWRSZWdpb25zKFZlY3RvcjxBbm5vdGF0ZWRSZWdpb25WYWx1ZT4mKSBmaW5hbDsKICNlbmRpZgot
ICAgIAotICAgIFJlbmRlclB0cjxSZW5kZXJJbmxpbmU+IGNsb25lQXNDb250aW51YXRpb24oKSBj
b25zdDsKIAogICAgIHZvaWQgcGFpbnRPdXRsaW5lRm9yTGluZShHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IExheW91dFJlY3QmIHByZXZMaW5lLCBjb25zdCBMYXlv
dXRSZWN0JiB0aGlzTGluZSwgY29uc3QgTGF5b3V0UmVjdCYgbmV4dExpbmUsIGNvbnN0IENvbG9y
Jik7Ci0gICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRpbnVhdGlvbkJlZm9yZShSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkKTsKIAogICAgIGJvb2wgd2lsbENoYW5nZUNyZWF0ZXNTdGFja2lu
Z0NvbnRleHQoKSBjb25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuY3BwCmluZGV4IDU5MTkxMzcxNzM1Nzkw
N2IzNTNiNjEzYjQ0NjZiYTcxNmY3YTMyMTIuLjE4NWE4ZTBkNmMwOGUxMmFmMjUxZjg5ODk3NzNi
N2UwODFkYzczOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGlu
Zy9SZW5kZXJUcmVlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3Vw
ZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUg
IlJlbmRlclRyZWVCdWlsZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQnVpbGRlckZp
cnN0TGV0dGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxkZXJGb3JtQ29udHJvbHMuaCIK
KyNpbmNsdWRlICJSZW5kZXJUcmVlQnVpbGRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlclRy
ZWVCdWlsZGVyTGlzdC5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVyTXVsdGlDb2x1bW4u
aCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQnVpbGRlclJ1YnkuaCIKQEAgLTEwNyw2ICsxMDgsNyBA
QCBSZW5kZXJUcmVlQnVpbGRlcjo6UmVuZGVyVHJlZUJ1aWxkZXIoUmVuZGVyVmlldyYgdmlldykK
ICAgICAsIG1fcnVieUJ1aWxkZXIoc3RkOjptYWtlX3VuaXF1ZTxSdWJ5PigqdGhpcykpCiAgICAg
LCBtX2Zvcm1Db250cm9sc0J1aWxkZXIoc3RkOjptYWtlX3VuaXF1ZTxGb3JtQ29udHJvbHM+KCp0
aGlzKSkKICAgICAsIG1fYmxvY2tCdWlsZGVyKHN0ZDo6bWFrZV91bmlxdWU8QmxvY2s+KCp0aGlz
KSkKKyAgICAsIG1faW5saW5lQnVpbGRlcihzdGQ6Om1ha2VfdW5pcXVlPElubGluZT4oKnRoaXMp
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFzX2N1cnJlbnQgfHwgJm1fdmlldyAhPSAmc19jdXJy
ZW50LT5tX3ZpZXcpOwogICAgIG1fcHJldmlvdXMgPSBzX2N1cnJlbnQ7CkBAIC0yNzIsNiArMjc0
LDIxIEBAIFJlbmRlck9iamVjdCogUmVuZGVyVHJlZUJ1aWxkZXI6OnNwbGl0QW5vbnltb3VzQm94
ZXNBcm91bmRDaGlsZChSZW5kZXJCb3gmIHBhcmVuCiAgICAgcmV0dXJuIGJlZm9yZUNoaWxkOwog
fQogCit2b2lkIFJlbmRlclRyZWVCdWlsZGVyOjppbnNlcnRDaGlsZFRvUmVuZGVySW5saW5lKFJl
bmRlcklubGluZSYgcGFyZW50LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVy
T2JqZWN0KiBiZWZvcmVDaGlsZCkKK3sKKyAgICBpbmxpbmVCdWlsZGVyKCkuaW5zZXJ0Q2hpbGQo
cGFyZW50LCBXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hpbGQpOworfQorCit2b2lkIFJlbmRlclRy
ZWVCdWlsZGVyOjppbnNlcnRDaGlsZFRvUmVuZGVySW5saW5lSWdub3JpbmdDb250aW51YXRpb24o
UmVuZGVySW5saW5lJiBwYXJlbnQsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5k
ZXJPYmplY3QqIGJlZm9yZUNoaWxkKQoreworICAgIGlubGluZUJ1aWxkZXIoKS5pbnNlcnRDaGls
ZElnbm9yaW5nQ29udGludWF0aW9uKHBhcmVudCwgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxk
KTsKK30KKwordm9pZCBSZW5kZXJUcmVlQnVpbGRlcjo6c3BsaXRGbG93KFJlbmRlcklubGluZSYg
cGFyZW50LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBSZW5kZXJQdHI8UmVuZGVyQmxvY2s+
IG5ld0Jsb2NrQm94LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIG9sZENvbnQpCit7CisgICAgaW5saW5lQnVpbGRlcigpLnNwbGl0RmxvdyhwYXJl
bnQsIGJlZm9yZUNoaWxkLCBXVEZNb3ZlKG5ld0Jsb2NrQm94KSwgV1RGTW92ZShjaGlsZCksIG9s
ZENvbnQpOworfQorCiB2b2lkIFJlbmRlclRyZWVCdWlsZGVyOjp1cGRhdGVBZnRlckRlc2NlbmRh
bnRzKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQogewogICAgIGlmIChpczxSZW5kZXJCbG9jaz4o
cmVuZGVyZXIpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5n
L1JlbmRlclRyZWVCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcv
UmVuZGVyVHJlZUJ1aWxkZXIuaAppbmRleCBlOTdiNDJlNmZkYmY5YTk2NTA3ZTU1MzNiYzBkNzI5
NTg5ZmJlZjJlLi40M2RiY2ZhOGMyMWQyZTkzNjY4MWNlZDdmODBmZTliM2I2OTU0MDIzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxk
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1
aWxkZXIuaApAQCAtNTIsNiArNTIsMTEgQEAgcHVibGljOgogICAgIHZvaWQgbWFrZUNoaWxkcmVu
Tm9uSW5saW5lKFJlbmRlckJsb2NrJiBwYXJlbnQsIFJlbmRlck9iamVjdCogaW5zZXJ0aW9uUG9p
bnQgPSBudWxscHRyKTsKICAgICBSZW5kZXJPYmplY3QqIHNwbGl0QW5vbnltb3VzQm94ZXNBcm91
bmRDaGlsZChSZW5kZXJCb3gmIHBhcmVudCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CiAK
KyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHRlbXBvcmFyeSB1bnRpbCBhZnRlciBhbGwgYmxv
Y2svaW5saW5lL2NvbnRpbnVhdGlvbiBjb2RlIGlzIG1vdmVkIG92ZXIuCisgICAgdm9pZCBpbnNl
cnRDaGlsZFRvUmVuZGVySW5saW5lKFJlbmRlcklubGluZSYgcGFyZW50LCBSZW5kZXJQdHI8UmVu
ZGVyT2JqZWN0PiwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IG51bGxwdHIpOworICAgIHZv
aWQgaW5zZXJ0Q2hpbGRUb1JlbmRlcklubGluZUlnbm9yaW5nQ29udGludWF0aW9uKFJlbmRlcklu
bGluZSYgcGFyZW50LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiwgUmVuZGVyT2JqZWN0KiBiZWZv
cmVDaGlsZCA9IG51bGxwdHIpOworICAgIHZvaWQgc3BsaXRGbG93KFJlbmRlcklubGluZSYgcGFy
ZW50LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBSZW5kZXJQdHI8UmVuZGVyQmxvY2s+IG5l
d0Jsb2NrQm94LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyQm94TW9kZWxP
YmplY3QqIG9sZENvbnQpOworCiBwcml2YXRlOgogICAgIGNsYXNzIEZpcnN0TGV0dGVyOwogICAg
IGNsYXNzIExpc3Q7CkBAIC02MCw2ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgUnVieTsK
ICAgICBjbGFzcyBGb3JtQ29udHJvbHM7CiAgICAgY2xhc3MgQmxvY2s7CisgICAgY2xhc3MgSW5s
aW5lOwogCiAgICAgRmlyc3RMZXR0ZXImIGZpcnN0TGV0dGVyQnVpbGRlcigpIHsgcmV0dXJuICpt
X2ZpcnN0TGV0dGVyQnVpbGRlcjsgfQogICAgIExpc3QmIGxpc3RCdWlsZGVyKCkgeyByZXR1cm4g
Km1fbGlzdEJ1aWxkZXI7IH0KQEAgLTY4LDYgKzc0LDcgQEAgcHJpdmF0ZToKICAgICBSdWJ5JiBy
dWJ5QnVpbGRlcigpIHsgcmV0dXJuICptX3J1YnlCdWlsZGVyOyB9CiAgICAgRm9ybUNvbnRyb2xz
JiBmb3JtQ29udHJvbHNCdWlsZGVyKCkgeyByZXR1cm4gKm1fZm9ybUNvbnRyb2xzQnVpbGRlcjsg
fQogICAgIEJsb2NrJiBibG9ja0J1aWxkZXIoKSB7IHJldHVybiAqbV9ibG9ja0J1aWxkZXI7IH0K
KyAgICBJbmxpbmUmIGlubGluZUJ1aWxkZXIoKSB7IHJldHVybiAqbV9pbmxpbmVCdWlsZGVyOyB9
CiAKICAgICBSZW5kZXJWaWV3JiBtX3ZpZXc7CiAKQEAgLTgxLDYgKzg4LDcgQEAgcHJpdmF0ZToK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVieT4gbV9ydWJ5QnVpbGRlcjsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Rm9ybUNvbnRyb2xzPiBtX2Zvcm1Db250cm9sc0J1aWxkZXI7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPEJsb2NrPiBtX2Jsb2NrQnVpbGRlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5saW5l
PiBtX2lubGluZUJ1aWxkZXI7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJJbmxpbmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVySW5saW5lLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zM2VjMDM3OWM5ZDE1ZTY2NzdhNTFjNzllMGI0NjU5ZGI0MGU4ODM4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVC
dWlsZGVySW5saW5lLmNwcApAQCAtMCwwICsxLDM4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJUcmVlQnVpbGRlcklubGluZS5oIgorCisjaW5j
bHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckZ1bGxTY3JlZW4u
aCIKKyNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKKyNpbmNsdWRlICJSZW5kZXJUYWJsZS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBib29sIGNhblVzZUFzUGFyZW50Rm9yQ29u
dGludWF0aW9uKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgaWYgKCFyZW5k
ZXJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghaXM8UmVuZGVyQmxvY2s+KHJl
bmRlcmVyKSAmJiByZW5kZXJlci0+aXNBbm9ueW1vdXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChpczxSZW5kZXJUYWJsZT4ocmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBSZW5kZXJCb3hNb2RlbE9iamVjdCog
bmV4dENvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIGlmIChpczxS
ZW5kZXJJbmxpbmU+KCpyZW5kZXJlcikgJiYgIXJlbmRlcmVyLT5pc1JlcGxhY2VkKCkpCisgICAg
ICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KCpyZW5kZXJlcikuY29udGludWF0aW9u
KCk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJsb2NrPigqcmVuZGVyZXIpLmlubGluZUNv
bnRpbnVhdGlvbigpOworfQorCitzdGF0aWMgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRpbnVh
dGlvbkJlZm9yZShSZW5kZXJJbmxpbmUmIHBhcmVudCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGls
ZCkKK3sKKyAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09ICZw
YXJlbnQpCisgICAgICAgIHJldHVybiAmcGFyZW50OworCisgICAgUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIGN1cnIgPSBuZXh0Q29udGludWF0aW9uKCZwYXJlbnQpOworICAgIFJlbmRlckJveE1vZGVs
T2JqZWN0KiBuZXh0VG9MYXN0ID0gJnBhcmVudDsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCog
bGFzdCA9ICZwYXJlbnQ7CisgICAgd2hpbGUgKGN1cnIpIHsKKyAgICAgICAgaWYgKGJlZm9yZUNo
aWxkICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSA9PSBjdXJyKSB7CisgICAgICAgICAgICBpZiAo
Y3Vyci0+Zmlyc3RDaGlsZCgpID09IGJlZm9yZUNoaWxkKQorICAgICAgICAgICAgICAgIHJldHVy
biBsYXN0OworICAgICAgICAgICAgcmV0dXJuIGN1cnI7CisgICAgICAgIH0KKworICAgICAgICBu
ZXh0VG9MYXN0ID0gbGFzdDsKKyAgICAgICAgbGFzdCA9IGN1cnI7CisgICAgICAgIGN1cnIgPSBu
ZXh0Q29udGludWF0aW9uKGN1cnIpOworICAgIH0KKworICAgIGlmICghYmVmb3JlQ2hpbGQgJiYg
IWxhc3QtPmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIG5leHRUb0xhc3Q7CisgICAgcmV0
dXJuIGxhc3Q7Cit9CisKK3N0YXRpYyBSZW5kZXJQdHI8UmVuZGVySW5saW5lPiBjbG9uZUFzQ29u
dGludWF0aW9uKFJlbmRlcklubGluZSYgcmVuZGVyZXIpCit7CisgICAgUmVuZGVyUHRyPFJlbmRl
cklubGluZT4gY2xvbmVJbmxpbmUgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJJbmxpbmU+KCpyZW5k
ZXJlci5lbGVtZW50KCksIFJlbmRlclN0eWxlOjpjbG9uZShyZW5kZXJlci5zdHlsZSgpKSk7Cisg
ICAgY2xvbmVJbmxpbmUtPmluaXRpYWxpemVTdHlsZSgpOworICAgIGNsb25lSW5saW5lLT5zZXRG
cmFnbWVudGVkRmxvd1N0YXRlKHJlbmRlcmVyLmZyYWdtZW50ZWRGbG93U3RhdGUoKSk7CisgICAg
Y2xvbmVJbmxpbmUtPnNldEhhc091dGxpbmVBdXRvQW5jZXN0b3IocmVuZGVyZXIuaGFzT3V0bGlu
ZUF1dG9BbmNlc3RvcigpKTsKKyAgICBjbG9uZUlubGluZS0+c2V0SXNDb250aW51YXRpb24oKTsK
KyAgICByZXR1cm4gY2xvbmVJbmxpbmU7Cit9CisKK3N0YXRpYyBib29sIG5ld0NoaWxkSXNJbmxp
bmUoY29uc3QgUmVuZGVyT2JqZWN0JiBjaGlsZCwgY29uc3QgUmVuZGVySW5saW5lJiBwYXJlbnQp
Cit7CisgICAgLy8gaW5saW5lIHBhcmVudCBnZW5lcmF0ZXMgaW5saW5lLXRhYmxlLgorICAgIHJl
dHVybiBjaGlsZC5pc0lubGluZSgpIHwgKHBhcmVudC5jaGlsZFJlcXVpcmVzVGFibGUoY2hpbGQp
ICYmIHBhcmVudC5zdHlsZSgpLmRpc3BsYXkoKSA9PSBJTkxJTkUpOworfQorCitzdGF0aWMgUmVu
ZGVyRWxlbWVudCogaW5GbG93UG9zaXRpb25lZElubGluZUFuY2VzdG9yKFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyKQoreworICAgIGF1dG8qIGFuY2VzdG9yID0gJnJlbmRlcmVyOworICAgIHdoaWxl
IChhbmNlc3RvciAmJiBhbmNlc3Rvci0+aXNSZW5kZXJJbmxpbmUoKSkgeworICAgICAgICBpZiAo
YW5jZXN0b3ItPmlzSW5GbG93UG9zaXRpb25lZCgpKQorICAgICAgICAgICAgcmV0dXJuIGFuY2Vz
dG9yOworICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnQoKTsKKyAgICB9CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK1JlbmRlclRyZWVCdWlsZGVyOjpJbmxpbmU6OklubGluZShS
ZW5kZXJUcmVlQnVpbGRlciYgYnVpbGRlcikKKyAgICA6IG1fYnVpbGRlcihidWlsZGVyKQorewor
fQorCit2b2lkIFJlbmRlclRyZWVCdWlsZGVyOjpJbmxpbmU6Omluc2VydENoaWxkKFJlbmRlcklu
bGluZSYgcGFyZW50LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCkKK3sKKyAgICBhdXRvKiBiZWZvcmVDaGlsZE9yUGxhY2Vob2xkZXIgPSBi
ZWZvcmVDaGlsZDsKKyAgICBpZiAoYXV0byogZnJhZ21lbnRlZEZsb3cgPSBwYXJlbnQuZW5jbG9z
aW5nRnJhZ21lbnRlZEZsb3coKSkKKyAgICAgICAgYmVmb3JlQ2hpbGRPclBsYWNlaG9sZGVyID0g
ZnJhZ21lbnRlZEZsb3ctPnJlc29sdmVNb3ZlZENoaWxkKGJlZm9yZUNoaWxkKTsKKyAgICBpZiAo
cGFyZW50LmNvbnRpbnVhdGlvbigpKSB7CisgICAgICAgIGluc2VydENoaWxkVG9Db250aW51YXRp
b24ocGFyZW50LCBXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hpbGRPclBsYWNlaG9sZGVyKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnNlcnRDaGlsZElnbm9yaW5nQ29udGludWF0aW9u
KHBhcmVudCwgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkT3JQbGFjZWhvbGRlcik7Cit9CisK
K3ZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6OklubGluZTo6aW5zZXJ0Q2hpbGRUb0NvbnRpbnVhdGlv
bihSZW5kZXJJbmxpbmUmIHBhcmVudCwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCit7CisgICAgYXV0byogZmxvdyA9IGNvbnRpbnVhdGlv
bkJlZm9yZShwYXJlbnQsIGJlZm9yZUNoaWxkKTsKKyAgICAvLyBJdCBtYXkgb3IgbWF5IG5vdCBi
ZSB0aGUgZGlyZWN0IHBhcmVudCBvZiB0aGUgYmVmb3JlQ2hpbGQuCisgICAgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIGJlZm9yZUNoaWxkQW5jZXN0b3IgPSBudWxscHRyOworICAgIGlmICghYmVmb3Jl
Q2hpbGQpIHsKKyAgICAgICAgYXV0byogY29udGludWF0aW9uID0gbmV4dENvbnRpbnVhdGlvbihm
bG93KTsKKyAgICAgICAgYmVmb3JlQ2hpbGRBbmNlc3RvciA9IGNvbnRpbnVhdGlvbiA/IGNvbnRp
bnVhdGlvbiA6IGZsb3c7CisgICAgfSBlbHNlIGlmIChjYW5Vc2VBc1BhcmVudEZvckNvbnRpbnVh
dGlvbihiZWZvcmVDaGlsZC0+cGFyZW50KCkpKQorICAgICAgICBiZWZvcmVDaGlsZEFuY2VzdG9y
ID0gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KGJlZm9yZUNoaWxkLT5wYXJlbnQoKSk7
CisgICAgZWxzZSBpZiAoYmVmb3JlQ2hpbGQtPnBhcmVudCgpKSB7CisgICAgICAgIC8vIEluIGNh
c2Ugb2YgYW5vbnltb3VzIHdyYXBwZXJzLCB0aGUgcGFyZW50IG9mIHRoZSBiZWZvcmVDaGlsZCBp
cyBtb3N0bHkgaXJyZWxldmFudC4gV2hhdCB3ZSBuZWVkIGlzIHRoZSB0b3Btb3N0IHdyYXBwZXIu
CisgICAgICAgIGF1dG8qIHBhcmVudCA9IGJlZm9yZUNoaWxkLT5wYXJlbnQoKTsKKyAgICAgICAg
d2hpbGUgKHBhcmVudCAmJiBwYXJlbnQtPnBhcmVudCgpICYmIHBhcmVudC0+cGFyZW50KCktPmlz
QW5vbnltb3VzKCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBhbmNlc3RvciBjYW5kaWRhdGUgbmVl
ZHMgdG8gYmUgaW5zaWRlIHRoZSBjb250aW51YXRpb24uCisgICAgICAgICAgICBpZiAocGFyZW50
LT5pc0NvbnRpbnVhdGlvbigpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
cGFyZW50ID0gcGFyZW50LT5wYXJlbnQoKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQocGFy
ZW50ICYmIHBhcmVudC0+cGFyZW50KCkpOworICAgICAgICBiZWZvcmVDaGlsZEFuY2VzdG9yID0g
ZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KHBhcmVudC0+cGFyZW50KCkpOworICAgIH0g
ZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIGlmIChjaGlsZC0+aXNG
bG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQorICAgICAgICByZXR1cm4gYmVmb3JlQ2hp
bGRBbmNlc3Rvci0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihtX2J1aWxkZXIsIFdURk1v
dmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CisKKyAgICBpZiAoZmxvdyA9PSBiZWZvcmVDaGlsZEFu
Y2VzdG9yKQorICAgICAgICByZXR1cm4gZmxvdy0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlv
bihtX2J1aWxkZXIsIFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CisgICAgLy8gQSBjb250
aW51YXRpb24gYWx3YXlzIGNvbnNpc3RzIG9mIHR3byBwb3RlbnRpYWwgY2FuZGlkYXRlczogYW4g
aW5saW5lIG9yIGFuIGFub255bW91cworICAgIC8vIGJsb2NrIGJveCBob2xkaW5nIGJsb2NrIGNo
aWxkcmVuLgorICAgIGJvb2wgY2hpbGRJbmxpbmUgPSBuZXdDaGlsZElzSW5saW5lKCpjaGlsZCwg
cGFyZW50KTsKKyAgICAvLyBUaGUgZ29hbCBoZXJlIGlzIHRvIG1hdGNoIHVwIGlmIHdlIGNhbiwg
c28gdGhhdCB3ZSBjYW4gY29hbGVzY2UgYW5kIGNyZWF0ZSB0aGUKKyAgICAvLyBtaW5pbWFsICMg
b2YgY29udGludWF0aW9ucyBuZWVkZWQgZm9yIHRoZSBpbmxpbmUuCisgICAgaWYgKGNoaWxkSW5s
aW5lID09IGJlZm9yZUNoaWxkQW5jZXN0b3ItPmlzSW5saW5lKCkpCisgICAgICAgIHJldHVybiBi
ZWZvcmVDaGlsZEFuY2VzdG9yLT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG1fYnVpbGRl
ciwgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKKyAgICBpZiAoZmxvdy0+aXNJbmxpbmUo
KSA9PSBjaGlsZElubGluZSkKKyAgICAgICAgcmV0dXJuIGZsb3ctPmFkZENoaWxkSWdub3JpbmdD
b250aW51YXRpb24obV9idWlsZGVyLCBXVEZNb3ZlKGNoaWxkKSk7IC8vIEp1c3QgdHJlYXQgbGlr
ZSBhbiBhcHBlbmQuCisgICAgcmV0dXJuIGJlZm9yZUNoaWxkQW5jZXN0b3ItPmFkZENoaWxkSWdu
b3JpbmdDb250aW51YXRpb24obV9idWlsZGVyLCBXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hpbGQp
OworfQorCit2b2lkIFJlbmRlclRyZWVCdWlsZGVyOjpJbmxpbmU6Omluc2VydENoaWxkSWdub3Jp
bmdDb250aW51YXRpb24oUmVuZGVySW5saW5lJiBwYXJlbnQsIFJlbmRlclB0cjxSZW5kZXJPYmpl
Y3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQoreworICAgIC8vIE1ha2Ugc3Vy
ZSB3ZSBkb24ndCBhcHBlbmQgdGhpbmdzIGFmdGVyIDphZnRlci1nZW5lcmF0ZWQgY29udGVudCBp
ZiB3ZSBoYXZlIGl0LgorICAgIGlmICghYmVmb3JlQ2hpbGQgJiYgcGFyZW50LmlzQWZ0ZXJDb250
ZW50KHBhcmVudC5sYXN0Q2hpbGQoKSkpCisgICAgICAgIGJlZm9yZUNoaWxkID0gcGFyZW50Lmxh
c3RDaGlsZCgpOworCisgICAgYm9vbCBjaGlsZElubGluZSA9IG5ld0NoaWxkSXNJbmxpbmUoKmNo
aWxkLCBwYXJlbnQpOworICAgIC8vIFRoaXMgY29kZSBpcyBmb3IgdGhlIG9sZCBibG9jay1pbnNp
ZGUtaW5saW5lIG1vZGVsIHRoYXQgdXNlcyBjb250aW51YXRpb25zLgorICAgIGlmICghY2hpbGRJ
bmxpbmUgJiYgIWNoaWxkLT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKKyAg
ICAgICAgLy8gV2UgYXJlIHBsYWNpbmcgYSBibG9jayBpbnNpZGUgYW4gaW5saW5lLiBXZSBoYXZl
IHRvIHBlcmZvcm0gYSBzcGxpdCBvZiB0aGlzCisgICAgICAgIC8vIGlubGluZSBpbnRvIGNvbnRp
bnVhdGlvbnMuIFRoaXMgaW52b2x2ZXMgY3JlYXRpbmcgYW4gYW5vbnltb3VzIGJsb2NrIGJveCB0
byBob2xkCisgICAgICAgIC8vIHxuZXdDaGlsZHwuIFdlIHRoZW4gbWFrZSB0aGF0IGJsb2NrIGJv
eCBhIGNvbnRpbnVhdGlvbiBvZiB0aGlzIGlubGluZS4gV2UgdGFrZSBhbGwgb2YKKyAgICAgICAg
Ly8gdGhlIGNoaWxkcmVuIGFmdGVyIHxiZWZvcmVDaGlsZHwgYW5kIHB1dCB0aGVtIGluIGEgY2xv
bmUgb2YgdGhpcyBvYmplY3QuCisgICAgICAgIGF1dG8gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6
Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShwYXJlbnQuc3R5bGUoKSwgQkxPQ0spOwor
CisgICAgICAgIC8vIElmIGluc2lkZSBhbiBpbmxpbmUgYWZmZWN0ZWQgYnkgaW4tZmxvdyBwb3Np
dGlvbmluZyB0aGUgYmxvY2sgbmVlZHMgdG8gYmUgYWZmZWN0ZWQgYnkgaXQgdG9vLgorICAgICAg
ICAvLyBHaXZpbmcgdGhlIGJsb2NrIGEgbGF5ZXIgbGlrZSB0aGlzIGFsbG93cyBpdCB0byBjb2xs
ZWN0IHRoZSB4L3kgb2Zmc2V0cyBmcm9tIGlubGluZSBwYXJlbnRzIGxhdGVyLgorICAgICAgICBp
ZiAoYXV0byBwb3NpdGlvbmVkQW5jZXN0b3IgPSBpbkZsb3dQb3NpdGlvbmVkSW5saW5lQW5jZXN0
b3IocGFyZW50KSkKKyAgICAgICAgICAgIG5ld1N0eWxlLnNldFBvc2l0aW9uKHBvc2l0aW9uZWRB
bmNlc3Rvci0+c3R5bGUoKS5wb3NpdGlvbigpKTsKKworICAgICAgICBhdXRvIG5ld0JveCA9IGNy
ZWF0ZVJlbmRlcmVyPFJlbmRlckJsb2NrRmxvdz4ocGFyZW50LmRvY3VtZW50KCksIFdURk1vdmUo
bmV3U3R5bGUpKTsKKyAgICAgICAgbmV3Qm94LT5pbml0aWFsaXplU3R5bGUoKTsKKyAgICAgICAg
bmV3Qm94LT5zZXRJc0NvbnRpbnVhdGlvbigpOworICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVj
dCogb2xkQ29udGludWF0aW9uID0gcGFyZW50LmNvbnRpbnVhdGlvbigpOworICAgICAgICBpZiAo
b2xkQ29udGludWF0aW9uKQorICAgICAgICAgICAgb2xkQ29udGludWF0aW9uLT5yZW1vdmVGcm9t
Q29udGludWF0aW9uQ2hhaW4oKTsKKyAgICAgICAgbmV3Qm94LT5pbnNlcnRJbnRvQ29udGludWF0
aW9uQ2hhaW5BZnRlcihwYXJlbnQpOworCisgICAgICAgIHNwbGl0RmxvdyhwYXJlbnQsIGJlZm9y
ZUNoaWxkLCBXVEZNb3ZlKG5ld0JveCksIFdURk1vdmUoY2hpbGQpLCBvbGRDb250aW51YXRpb24p
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byYgY2hpbGRUb0FkZCA9ICpjaGls
ZDsKKyAgICBwYXJlbnQuUmVuZGVyQm94TW9kZWxPYmplY3Q6OmFkZENoaWxkKG1fYnVpbGRlciwg
V1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKKyAgICBjaGlsZFRvQWRkLnNldE5lZWRzTGF5
b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOworfQorCit2b2lkIFJlbmRlclRyZWVCdWlsZGVyOjpJ
bmxpbmU6OnNwbGl0RmxvdyhSZW5kZXJJbmxpbmUmIHBhcmVudCwgUmVuZGVyT2JqZWN0KiBiZWZv
cmVDaGlsZCwgUmVuZGVyUHRyPFJlbmRlckJsb2NrPiBuZXdCbG9ja0JveCwgUmVuZGVyUHRyPFJl
bmRlck9iamVjdD4gY2hpbGQsIFJlbmRlckJveE1vZGVsT2JqZWN0KiBvbGRDb250KQoreworICAg
IGF1dG8mIGFkZGVkQmxvY2tCb3ggPSAqbmV3QmxvY2tCb3g7CisgICAgUmVuZGVyQmxvY2sqIHBy
ZSA9IG51bGxwdHI7CisgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gcGFyZW50LmNvbnRhaW5pbmdC
bG9jaygpOworCisgICAgLy8gRGVsZXRlIG91ciBsaW5lIGJveGVzIGJlZm9yZSB3ZSBkbyB0aGUg
aW5saW5lIHNwbGl0IGludG8gY29udGludWF0aW9ucy4KKyAgICBibG9jay0+ZGVsZXRlTGluZXMo
KTsKKworICAgIFJlbmRlclB0cjxSZW5kZXJCbG9jaz4gY3JlYXRlZFByZTsKKyAgICBib29sIG1h
ZGVOZXdCZWZvcmVCbG9jayA9IGZhbHNlOworICAgIGlmIChibG9jay0+aXNBbm9ueW1vdXNCbG9j
aygpICYmICghYmxvY2stPnBhcmVudCgpIHx8ICFibG9jay0+cGFyZW50KCktPmNyZWF0ZXNBbm9u
eW1vdXNXcmFwcGVyKCkpKSB7CisgICAgICAgIC8vIFdlIGNhbiByZXVzZSB0aGlzIGJsb2NrIGFu
ZCBtYWtlIGl0IHRoZSBwcmVCbG9jayBvZiB0aGUgbmV4dCBjb250aW51YXRpb24uCisgICAgICAg
IHByZSA9IGJsb2NrOworICAgICAgICBwcmUtPnJlbW92ZVBvc2l0aW9uZWRPYmplY3RzKG51bGxw
dHIpOworICAgICAgICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFRoZSBlbmNsb3NpbmcgbWV0aG9kIHNo
b3VsZCBsaWtlbHkgYmUgc3dpdGNoZWQgb3ZlcgorICAgICAgICAvLyB0byBvbmx5IHdvcmsgb24g
UmVuZGVyQmxvY2tGbG93LCBpbiB3aGljaCBjYXNlIHRoaXMgY29udmVyc2lvbiBjYW4gYmUKKyAg
ICAgICAgLy8gcmVtb3ZlZC4KKyAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrRmxvdz4oKnByZSkp
CisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpwcmUpLnJlbW92ZUZsb2F0
aW5nT2JqZWN0cygpOworICAgICAgICBibG9jayA9IGJsb2NrLT5jb250YWluaW5nQmxvY2soKTsK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBObyBhbm9ueW1vdXMgYmxvY2sgYXZhaWxhYmxlIGZv
ciB1c2UuIE1ha2Ugb25lLgorICAgICAgICBjcmVhdGVkUHJlID0gYmxvY2stPmNyZWF0ZUFub255
bW91c0Jsb2NrKCk7CisgICAgICAgIHByZSA9IGNyZWF0ZWRQcmUuZ2V0KCk7CisgICAgICAgIG1h
ZGVOZXdCZWZvcmVCbG9jayA9IHRydWU7CisgICAgfQorCisgICAgYXV0byBjcmVhdGVkUG9zdCA9
IHByZS0+Y3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoKmJsb2NrKTsKKyAgICBhdXRv
JiBwb3N0ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjcmVhdGVkUG9zdCk7CisKKyAgICBSZW5k
ZXJPYmplY3QqIGJveEZpcnN0ID0gbWFkZU5ld0JlZm9yZUJsb2NrID8gYmxvY2stPmZpcnN0Q2hp
bGQoKSA6IHByZS0+bmV4dFNpYmxpbmcoKTsKKyAgICBpZiAoY3JlYXRlZFByZSkKKyAgICAgICAg
YmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwoV1RGTW92ZShjcmVhdGVkUHJlKSwgYm94Rmlyc3Qp
OworICAgIGJsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUobmV3QmxvY2tCb3gpLCBi
b3hGaXJzdCk7CisgICAgYmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwoV1RGTW92ZShjcmVhdGVk
UG9zdCksIGJveEZpcnN0KTsKKyAgICBibG9jay0+c2V0Q2hpbGRyZW5JbmxpbmUoZmFsc2UpOwor
CisgICAgaWYgKG1hZGVOZXdCZWZvcmVCbG9jaykgeworICAgICAgICBSZW5kZXJPYmplY3QqIG8g
PSBib3hGaXJzdDsKKyAgICAgICAgd2hpbGUgKG8pIHsKKyAgICAgICAgICAgIFJlbmRlck9iamVj
dCogbm8gPSBvOworICAgICAgICAgICAgbyA9IG5vLT5uZXh0U2libGluZygpOworICAgICAgICAg
ICAgYXV0byBjaGlsZFRvTW92ZSA9IGJsb2NrLT50YWtlQ2hpbGRJbnRlcm5hbCgqbm8pOworICAg
ICAgICAgICAgcHJlLT5pbnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUoY2hpbGRUb01vdmUpLCBu
dWxscHRyKTsKKyAgICAgICAgICAgIG5vLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNh
bGMoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNwbGl0SW5saW5lcyhwYXJlbnQsIHByZSwg
JnBvc3QsICZhZGRlZEJsb2NrQm94LCBiZWZvcmVDaGlsZCwgb2xkQ29udCk7CisKKyAgICAvLyBX
ZSBhbHJlYWR5IGtub3cgdGhlIG5ld0Jsb2NrQm94IGlzbid0IGdvaW5nIHRvIGNvbnRhaW4gaW5s
aW5lIGtpZHMsIHNvIGF2b2lkIHdhc3RpbmcKKyAgICAvLyB0aW1lIGluIG1ha2VDaGlsZHJlbk5v
bklubGluZSBieSBqdXN0IHNldHRpbmcgdGhpcyBleHBsaWNpdGx5IHVwIGZyb250LgorICAgIGFk
ZGVkQmxvY2tCb3guc2V0Q2hpbGRyZW5JbmxpbmUoZmFsc2UpOworCisgICAgLy8gV2UgZGVsYXll
ZCBhZGRpbmcgdGhlIG5ld0NoaWxkIHVudGlsIG5vdyBzbyB0aGF0IHRoZSB8bmV3QmxvY2tCb3h8
IHdvdWxkIGJlIGZ1bGx5CisgICAgLy8gY29ubmVjdGVkLCB0aHVzIGFsbG93aW5nIG5ld0NoaWxk
IGFjY2VzcyB0byBhIHJlbmRlckFyZW5hIHNob3VsZCBpdCBuZWVkCisgICAgLy8gdG8gd3JhcCBp
dHNlbGYgaW4gYWRkaXRpb25hbCBib3hlcyAoZS5nLiwgdGFibGUgY29uc3RydWN0aW9uKS4KKyAg
ICBtX2J1aWxkZXIuaW5zZXJ0Q2hpbGQoYWRkZWRCbG9ja0JveCwgV1RGTW92ZShjaGlsZCkpOwor
CisgICAgLy8gQWx3YXlzIGp1c3QgZG8gYSBmdWxsIGxheW91dCBpbiBvcmRlciB0byBlbnN1cmUg
dGhhdCBsaW5lIGJveGVzIChlc3BlY2lhbGx5IHdyYXBwZXJzIGZvciBpbWFnZXMpCisgICAgLy8g
Z2V0IGRlbGV0ZWQgcHJvcGVybHkuIEJlY2F1c2Ugb2JqZWN0cyBtb3ZlcyBmcm9tIHRoZSBwcmUg
YmxvY2sgaW50byB0aGUgcG9zdCBibG9jaywgd2Ugd2FudCB0bworICAgIC8vIG1ha2UgbmV3IGxp
bmUgYm94ZXMgaW5zdGVhZCBvZiBsZWF2aW5nIHRoZSBvbGQgbGluZSBib3hlcyBhcm91bmQuCisg
ICAgcHJlLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKKyAgICBibG9jay0+
c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAgcG9zdC5zZXROZWVkc0xh
eW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKK30KKwordm9pZCBSZW5kZXJUcmVlQnVpbGRlcjo6
SW5saW5lOjpzcGxpdElubGluZXMoUmVuZGVySW5saW5lJiBwYXJlbnQsIFJlbmRlckJsb2NrKiBm
cm9tQmxvY2ssIFJlbmRlckJsb2NrKiB0b0Jsb2NrLCBSZW5kZXJCbG9jayogbWlkZGxlQmxvY2ss
IFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckJveE1vZGVsT2JqZWN0KiBvbGRDb250
KQoreworICAgIC8vIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgaW5saW5lLgorICAgIFJlbmRlclB0
cjxSZW5kZXJJbmxpbmU+IGNsb25lSW5saW5lID0gY2xvbmVBc0NvbnRpbnVhdGlvbihwYXJlbnQp
OworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICAvLyBJZiB3ZSdyZSBzcGxpdHRpbmcg
dGhlIGlubGluZSBjb250YWluaW5nIHRoZSBmdWxsc2NyZWVuZWQgZWxlbWVudCwKKyAgICAvLyB8
YmVmb3JlQ2hpbGR8IG1heSBiZSB0aGUgcmVuZGVyZXIgZm9yIHRoZSBmdWxsc2NyZWVuZWQgZWxl
bWVudC4gSG93ZXZlciwKKyAgICAvLyB0aGF0IHJlbmRlcmVyIGlzIHdyYXBwZWQgaW4gYSBSZW5k
ZXJGdWxsU2NyZWVuLCBzbyB8dGhpc3wgaXMgbm90IGl0cworICAgIC8vIHBhcmVudC4gU2luY2Ug
dGhlIHNwbGl0dGluZyBsb2dpYyBleHBlY3RzIHx0aGlzfCB0byBiZSB0aGUgcGFyZW50LCBzZXQK
KyAgICAvLyB8YmVmb3JlQ2hpbGR8IHRvIGJlIHRoZSBSZW5kZXJGdWxsU2NyZWVuLgorICAgIGNv
bnN0IEVsZW1lbnQqIGZ1bGxTY3JlZW5FbGVtZW50ID0gcGFyZW50LmRvY3VtZW50KCkud2Via2l0
Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCk7CisgICAgaWYgKGZ1bGxTY3JlZW5FbGVtZW50ICYm
IGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5ub2RlKCkgPT0gZnVsbFNjcmVlbkVsZW1lbnQp
CisgICAgICAgIGJlZm9yZUNoaWxkID0gcGFyZW50LmRvY3VtZW50KCkuZnVsbFNjcmVlblJlbmRl
cmVyKCk7CisjZW5kaWYKKyAgICAvLyBOb3cgdGFrZSBhbGwgb2YgdGhlIGNoaWxkcmVuIGZyb20g
YmVmb3JlQ2hpbGQgdG8gdGhlIGVuZCBhbmQgcmVtb3ZlCisgICAgLy8gdGhlbSBmcm9tIHx0aGlz
fCBhbmQgcGxhY2UgdGhlbSBpbiB0aGUgY2xvbmUuCisgICAgZm9yIChSZW5kZXJPYmplY3QqIHJl
bmRlcmVyVG9Nb3ZlID0gYmVmb3JlQ2hpbGQ7IHJlbmRlcmVyVG9Nb3ZlOykgeworICAgICAgICBS
ZW5kZXJPYmplY3QqIG5leHRTaWJsaW5nID0gcmVuZGVyZXJUb01vdmUtPm5leHRTaWJsaW5nKCk7
CisgICAgICAgIC8vIFdoZW4gYW5vbnltb3VzIHdyYXBwZXIgaXMgcHJlc2VudCwgd2UgbWlnaHQg
bmVlZCB0byBtb3ZlIHRoZSB3aG9sZSBzdWJ0cmVlIGluc3RlYWQuCisgICAgICAgIGlmIChyZW5k
ZXJlclRvTW92ZS0+cGFyZW50KCkgIT0gJnBhcmVudCkgeworICAgICAgICAgICAgYXV0byogYW5v
bnltb3VzUGFyZW50ID0gcmVuZGVyZXJUb01vdmUtPnBhcmVudCgpOworICAgICAgICAgICAgd2hp
bGUgKGFub255bW91c1BhcmVudCAmJiBhbm9ueW1vdXNQYXJlbnQtPnBhcmVudCgpICE9ICZwYXJl
bnQpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoYW5vbnltb3VzUGFyZW50LT5pc0Fub255bW91
cygpKTsKKyAgICAgICAgICAgICAgICBhbm9ueW1vdXNQYXJlbnQgPSBhbm9ueW1vdXNQYXJlbnQt
PnBhcmVudCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFhbm9ueW1vdXNQYXJl
bnQpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIElmIGJlZm9yZUNoaWxk
IGlzIHRoZSBmaXJzdCBjaGlsZCBpbiB0aGUgc3VidHJlZSwgd2UgY291bGQganVzdCBtb3ZlIHRo
ZSB3aG9sZSBzdWJ0cmVlLgorICAgICAgICAgICAgaWYgKCFyZW5kZXJlclRvTW92ZS0+cHJldmlv
dXNTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBSZXBhcmVudCB0aGUgd2hvbGUgYW5v
bnltb3VzIHdyYXBwZXIgdHJlZS4KKyAgICAgICAgICAgICAgICByZW5kZXJlclRvTW92ZSA9IGFu
b255bW91c1BhcmVudDsKKyAgICAgICAgICAgICAgICAvLyBTa2lwIHRvIHRoZSBuZXh0IHNpYmxp
bmcgdGhhdCBpcyBub3QgaW4gdGhpcyBzdWJ0cmVlLgorICAgICAgICAgICAgICAgIG5leHRTaWJs
aW5nID0gYW5vbnltb3VzUGFyZW50LT5uZXh0U2libGluZygpOworICAgICAgICAgICAgfSBlbHNl
IGlmICghcmVuZGVyZXJUb01vdmUtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBUaGlzIGlzIHRoZSBsYXN0IHJlbmRlcmVyIGluIHRoZSBzdWJ0cmVlLiBXZSBuZWVkIHRvIGp1
bXAgb3V0IG9mIHRoZSB3cmFwcGVyIHN1YnRyZWUsIHNvIHRoYXQKKyAgICAgICAgICAgICAgICAv
LyB0aGUgc2libGluZ3MgYXJlIGdldHRpbmcgcmVwYXJlbnRlZCB0b28uCisgICAgICAgICAgICAg
ICAgbmV4dFNpYmxpbmcgPSBhbm9ueW1vdXNQYXJlbnQtPm5leHRTaWJsaW5nKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAvLyBPdGhlcndpc2UganVzdCBtb3ZlIHRoZSByZW5kZXJlciB0
byB0aGUgaW5saW5lIGNsb25lLiBTaG91bGQgdGhlIHJlbmRlcmVyIG5lZWQgYW4gYW5vbgorICAg
ICAgICAgICAgLy8gd3JhcHBlciwgdGhlIGFkZENoaWxkKCkgd2lsbCBnZW5lcmF0ZSBvbmUgZm9y
IGl0LgorICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhlIGFub255bW91cyB3cmFwcGVyIGhh
cyBtdWx0aXBsZSBjaGlsZHJlbiwgd2UgZW5kIHVwIHRyYXZlcnNpbmcgdXAgdG8gdGhlIHRvcG1v
c3Qgd3JhcHBlcgorICAgICAgICAgICAgLy8gZXZlcnkgdGltZSwgd2hpY2ggaXMgYSBiaXQgd2Fz
dGVmdWwuCisgICAgICAgIH0KKyAgICAgICAgYXV0byBjaGlsZFRvTW92ZSA9IHJlbmRlcmVyVG9N
b3ZlLT5wYXJlbnQoKS0+dGFrZUNoaWxkSW50ZXJuYWwoKnJlbmRlcmVyVG9Nb3ZlKTsKKyAgICAg
ICAgY2xvbmVJbmxpbmUtPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24obV9idWlsZGVyLCBX
VEZNb3ZlKGNoaWxkVG9Nb3ZlKSk7CisgICAgICAgIHJlbmRlcmVyVG9Nb3ZlLT5zZXROZWVkc0xh
eW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKKyAgICAgICAgcmVuZGVyZXJUb01vdmUgPSBuZXh0
U2libGluZzsKKyAgICB9CisgICAgLy8gSG9vayB8Y2xvbmV8IHVwIGFzIHRoZSBjb250aW51YXRp
b24gb2YgdGhlIG1pZGRsZSBibG9jay4KKyAgICBjbG9uZUlubGluZS0+aW5zZXJ0SW50b0NvbnRp
bnVhdGlvbkNoYWluQWZ0ZXIoKm1pZGRsZUJsb2NrKTsKKyAgICBpZiAob2xkQ29udCkKKyAgICAg
ICAgb2xkQ29udC0+aW5zZXJ0SW50b0NvbnRpbnVhdGlvbkNoYWluQWZ0ZXIoKmNsb25lSW5saW5l
KTsKKworICAgIC8vIFdlIGhhdmUgYmVlbiByZXBhcmVudGVkIGFuZCBhcmUgbm93IHVuZGVyIHRo
ZSBmcm9tQmxvY2suIFdlIG5lZWQKKyAgICAvLyB0byB3YWxrIHVwIG91ciBpbmxpbmUgcGFyZW50
IGNoYWluIHVudGlsIHdlIGhpdCB0aGUgY29udGFpbmluZyBibG9jay4KKyAgICAvLyBPbmNlIHdl
IGhpdCB0aGUgY29udGFpbmluZyBibG9jayB3ZSdyZSBkb25lLgorICAgIFJlbmRlckJveE1vZGVs
T2JqZWN0KiBjdXJyZW50ID0gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KHBhcmVudC5w
YXJlbnQoKSk7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGN1cnJlbnRDaGlsZCA9ICZwYXJl
bnQ7CisKKyAgICAvLyBGSVhNRTogQmVjYXVzZSBzcGxpdHRpbmcgaXMgTyhuXjIpIGFzIHRhZ3Mg
bmVzdCBwYXRob2xvZ2ljYWxseSwgd2UgY2FwIHRoZSBkZXB0aCBhdCB3aGljaCB3ZSdyZSB3aWxs
aW5nIHRvIGNsb25lLgorICAgIC8vIFRoZXJlIHdpbGwgZXZlbnR1YWxseSBiZSBhIGJldHRlciBh
cHByb2FjaCB0byB0aGlzIHByb2JsZW0gdGhhdCB3aWxsIGxldCB1cyBuZXN0IHRvIGEgbXVjaAor
ICAgIC8vIGdyZWF0ZXIgZGVwdGggKHNlZSBidWd6aWxsYSBidWcgMTM0MzApIGJ1dCBmb3Igbm93
IHdlIGhhdmUgYSBsaW1pdC4gVGhpcyAqd2lsbCogcmVzdWx0IGluCisgICAgLy8gaW5jb3JyZWN0
IHJlbmRlcmluZywgYnV0IHRoZSBhbHRlcm5hdGl2ZSBpcyB0byBoYW5nIGZvcmV2ZXIuCisgICAg
dW5zaWduZWQgc3BsaXREZXB0aCA9IDE7CisgICAgY29uc3QgdW5zaWduZWQgY01heFNwbGl0RGVw
dGggPSAyMDA7CisgICAgd2hpbGUgKGN1cnJlbnQgJiYgY3VycmVudCAhPSBmcm9tQmxvY2spIHsK
KyAgICAgICAgaWYgKHNwbGl0RGVwdGggPCBjTWF4U3BsaXREZXB0aCkgeworICAgICAgICAgICAg
Ly8gQ3JlYXRlIGEgbmV3IGNsb25lLgorICAgICAgICAgICAgUmVuZGVyUHRyPFJlbmRlcklubGlu
ZT4gY2xvbmVDaGlsZCA9IFdURk1vdmUoY2xvbmVJbmxpbmUpOworICAgICAgICAgICAgY2xvbmVJ
bmxpbmUgPSBjbG9uZUFzQ29udGludWF0aW9uKGRvd25jYXN0PFJlbmRlcklubGluZT4oKmN1cnJl
bnQpKTsKKworICAgICAgICAgICAgLy8gSW5zZXJ0IG91ciBjaGlsZCBjbG9uZSBhcyB0aGUgZmly
c3QgY2hpbGQuCisgICAgICAgICAgICBjbG9uZUlubGluZS0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRp
bnVhdGlvbihtX2J1aWxkZXIsIFdURk1vdmUoY2xvbmVDaGlsZCkpOworCisgICAgICAgICAgICAv
LyBIb29rIHRoZSBjbG9uZSB1cCBhcyBhIGNvbnRpbnVhdGlvbiBvZiB8Y3VycnwuCisgICAgICAg
ICAgICBjbG9uZUlubGluZS0+aW5zZXJ0SW50b0NvbnRpbnVhdGlvbkNoYWluQWZ0ZXIoKmN1cnJl
bnQpOworCisgICAgICAgICAgICAvLyBOb3cgd2UgbmVlZCB0byB0YWtlIGFsbCBvZiB0aGUgY2hp
bGRyZW4gc3RhcnRpbmcgZnJvbSB0aGUgZmlyc3QgY2hpbGQKKyAgICAgICAgICAgIC8vICphZnRl
ciogY3VycmVudENoaWxkIGFuZCBhcHBlbmQgdGhlbSBhbGwgdG8gdGhlIGNsb25lLgorICAgICAg
ICAgICAgZm9yIChhdXRvKiBzaWJsaW5nID0gY3VycmVudENoaWxkLT5uZXh0U2libGluZygpOyBz
aWJsaW5nOykgeworICAgICAgICAgICAgICAgIGF1dG8qIG5leHQgPSBzaWJsaW5nLT5uZXh0U2li
bGluZygpOworICAgICAgICAgICAgICAgIGF1dG8gY2hpbGRUb01vdmUgPSBjdXJyZW50LT50YWtl
Q2hpbGRJbnRlcm5hbCgqc2libGluZyk7CisgICAgICAgICAgICAgICAgY2xvbmVJbmxpbmUtPmFk
ZENoaWxkSWdub3JpbmdDb250aW51YXRpb24obV9idWlsZGVyLCBXVEZNb3ZlKGNoaWxkVG9Nb3Zl
KSk7CisgICAgICAgICAgICAgICAgc2libGluZy0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhz
UmVjYWxjKCk7CisgICAgICAgICAgICAgICAgc2libGluZyA9IG5leHQ7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICAvLyBLZWVwIHdhbGtpbmcgdXAgdGhlIGNoYWluLgorICAg
ICAgICBjdXJyZW50Q2hpbGQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50ID0gZG93bmNhc3Q8
UmVuZGVyQm94TW9kZWxPYmplY3Q+KGN1cnJlbnQtPnBhcmVudCgpKTsKKyAgICAgICAgKytzcGxp
dERlcHRoOworICAgIH0KKworICAgIC8vIENsZWFyIHRoZSBmbG93IHRocmVhZCBjb250YWluaW5n
IGJsb2NrcyBjYWNoZWQgZHVyaW5nIHRoZSBkZXRhY2hlZCBzdGF0ZSBpbnNlcnRpb25zLgorICAg
IGZvciAoYXV0byYgY2xvbmVCbG9ja0NoaWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyQmxvY2s+
KCpjbG9uZUlubGluZSkpCisgICAgICAgIGNsb25lQmxvY2tDaGlsZC5yZXNldEVuY2xvc2luZ0Zy
YWdtZW50ZWRGbG93QW5kQ2hpbGRJbmZvSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKKworICAgIC8v
IE5vdyB3ZSBhcmUgYXQgdGhlIGJsb2NrIGxldmVsLiBXZSBuZWVkIHRvIHB1dCB0aGUgY2xvbmUg
aW50byB0aGUgdG9CbG9jay4KKyAgICB0b0Jsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKFdURk1v
dmUoY2xvbmVJbmxpbmUpLCBudWxscHRyKTsKKworICAgIC8vIE5vdyB0YWtlIGFsbCB0aGUgY2hp
bGRyZW4gYWZ0ZXIgY3VycmVudENoaWxkIGFuZCByZW1vdmUgdGhlbSBmcm9tIHRoZSBmcm9tQmxv
Y2sKKyAgICAvLyBhbmQgcHV0IHRoZW0gaW4gdGhlIHRvQmxvY2suCisgICAgZm9yIChhdXRvKiBj
dXJyZW50ID0gY3VycmVudENoaWxkLT5uZXh0U2libGluZygpOyBjdXJyZW50OykgeworICAgICAg
ICBhdXRvKiBuZXh0ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgYXV0byBjaGls
ZFRvTW92ZSA9IGZyb21CbG9jay0+dGFrZUNoaWxkSW50ZXJuYWwoKmN1cnJlbnQpOworICAgICAg
ICB0b0Jsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUoY2hpbGRUb01vdmUpLCBudWxs
cHRyKTsKKyAgICAgICAgY3VycmVudCA9IG5leHQ7CisgICAgfQorfQorCit9CisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlcklu
bGluZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWls
ZGVySW5saW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODhmMzhhOTRhNjhhYzBiZjJmMjUyYWE3YWRmYWVkY2Iw
MjlmMzMyMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRh
dGluZy9SZW5kZXJUcmVlQnVpbGRlcklubGluZS5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyVHJlZUJ1aWxkZXI6OklubGluZSB7Citw
dWJsaWM6CisgICAgSW5saW5lKFJlbmRlclRyZWVCdWlsZGVyJik7CisKKyAgICB2b2lkIGluc2Vy
dENoaWxkKFJlbmRlcklubGluZSYgcGFyZW50LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGls
ZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CisgICAgdm9pZCBpbnNlcnRDaGlsZElnbm9y
aW5nQ29udGludWF0aW9uKFJlbmRlcklubGluZSYgcGFyZW50LCBSZW5kZXJQdHI8UmVuZGVyT2Jq
ZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CisKKyAgICAvLyBNYWtlIHRo
aXMgcHJpdmF0ZSBvbmNlIGFsbCB0aGUgbXV0YXRpb24gY29kZSBpcyBpbiBSZW5kZXJUcmVlQnVp
bGRlci4KKyAgICB2b2lkIHNwbGl0RmxvdyhSZW5kZXJJbmxpbmUmIHBhcmVudCwgUmVuZGVyT2Jq
ZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyUHRyPFJlbmRlckJsb2NrPiBuZXdCbG9ja0JveCwgUmVu
ZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlckJveE1vZGVsT2JqZWN0KiBvbGRDb250
KTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGluc2VydENoaWxkVG9Db250aW51YXRpb24oUmVuZGVy
SW5saW5lJiBwYXJlbnQsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkKTsKKyAgICB2b2lkIHNwbGl0SW5saW5lcyhSZW5kZXJJbmxpbmUmIHBh
cmVudCwgUmVuZGVyQmxvY2sqIGZyb21CbG9jaywgUmVuZGVyQmxvY2sqIHRvQmxvY2ssIFJlbmRl
ckJsb2NrKiBtaWRkbGVCbG9jaywgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyQm94
TW9kZWxPYmplY3QqIG9sZENvbnQpOworCisgICAgUmVuZGVyVHJlZUJ1aWxkZXImIG1fYnVpbGRl
cjsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGlu
Zy9SZW5kZXJUcmVlQnVpbGRlclRhYmxlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBk
YXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJUYWJsZS5oCmluZGV4IDU3YmVlZDZjOGVhZDQ2Mjg2YjA1
ODhiMWZmYzNjMzVlMWRlOGFhY2EuLmY2M2ZmMWI2MGU1NTJkMzVmZTRlMzBjMTU3NWEyOTQwMjI4
ZDBjN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5k
ZXJUcmVlQnVpbGRlclRhYmxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0
aW5nL1JlbmRlclRyZWVCdWlsZGVyVGFibGUuaApAQCAtMzEsNiArMzEsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFJlbmRlckVsZW1lbnQ7CiBjbGFzcyBSZW5kZXJPYmplY3Q7Citj
bGFzcyBSZW5kZXJUYWJsZTsKK2NsYXNzIFJlbmRlclRhYmxlU2VjdGlvbjsKIGNsYXNzIFJlbmRl
clRhYmxlUm93OwogY2xhc3MgUmVuZGVyVHJlZUJ1aWxkZXI7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>