<?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>98469</bug_id>
          
          <creation_ts>2012-10-04 17:38:31 -0700</creation_ts>
          <short_desc>[Refactoring] Some classes in StyleResolver.cpp/h could have its own file.</short_desc>
          <delta_ts>2012-10-04 23:15:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>98244</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hajime Morrita">morrita</reporter>
          <assigned_to name="Hajime Morrita">morrita</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>rakuco</cc>
    
    <cc>webcomponents-bugzilla</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>735181</commentid>
    <comment_count>0</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-04 17:38:31 -0700</bug_when>
    <thetext>This spinned out from Bug 98244.
RuleSet, RuleData, RuleFeature and Features can own its own file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735247</commentid>
    <comment_count>1</comment_count>
      <attachid>167230</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-04 19:23:05 -0700</bug_when>
    <thetext>Created attachment 167230
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735269</commentid>
    <comment_count>2</comment_count>
      <attachid>167237</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-04 19:56:33 -0700</bug_when>
    <thetext>Created attachment 167237
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735272</commentid>
    <comment_count>3</comment_count>
      <attachid>167237</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-04 20:16:00 -0700</bug_when>
    <thetext>Comment on attachment 167237
Patch

Attachment 167237 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14168571</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735296</commentid>
    <comment_count>4</comment_count>
      <attachid>167242</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-04 21:17:11 -0700</bug_when>
    <thetext>Created attachment 167242
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735299</commentid>
    <comment_count>5</comment_count>
      <attachid>167242</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-10-04 21:22:06 -0700</bug_when>
    <thetext>Comment on attachment 167242
Patch

please make sure it builds before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735305</commentid>
    <comment_count>6</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-04 21:25:35 -0700</bug_when>
    <thetext>&gt; (From update of attachment 167242 [details])
&gt; please make sure it builds before landing.
Thanks for quick r+. I&apos;m waiting for the greenness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735380</commentid>
    <comment_count>7</comment_count>
      <attachid>167242</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-04 23:15:12 -0700</bug_when>
    <thetext>Comment on attachment 167242
Patch

Clearing flags on attachment: 167242

Committed r130465: &lt;http://trac.webkit.org/changeset/130465&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735381</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-04 23:15:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167230</attachid>
            <date>2012-10-04 19:23:05 -0700</date>
            <delta_ts>2012-10-04 19:56:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98469-20121005112214.patch</filename>
            <type>text/plain</type>
            <size>57759</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNDQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDI1NDk0
YzBiOGI0MTY1NDc1NGU4ZWI2ZmI5YTQ3ZGM4NTIzZDA4NTUuLjZmZDUxMDljNzhiOWU3ZGFjZTUx
ZmY2ZDA4MTY5MzM1MjEwYWY4MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMDY3LDYgKzEw
NjcsMTAgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGNzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5j
cHAKICAgICBjc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcAogICAgIGNzcy9S
R0JDb2xvci5jcHAKKyAgICBjc3MvUnVsZUZlYXR1cmUuaAorICAgIGNzcy9SdWxlRmVhdHVyZS5j
cHAKKyAgICBjc3MvUnVsZVNldC5oCisgICAgY3NzL1J1bGVTZXQuY3BwCiAgICAgY3NzL1NlbGVj
dG9yQ2hlY2tlci5jcHAKICAgICBjc3MvU2hhZG93VmFsdWUuY3BwCiAgICAgY3NzL1N0eWxlQnVp
bGRlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0g
Yi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDM0NjFkYmJlZjU5OTUw
Yzg5NzAwMzNlNzJkNzg1NjA2NGM4ZjJiZGIuLmQwZGVjYzNlZWZmYWY5MjkyN2Q1MGE1ZDg0MzI4
NTU2YmU1ZjFlZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMjYxMCw2ICsy
NjEwLDEwIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1JlY3Qu
aCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1JHQkNvbG9yLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
Y3NzL1JHQkNvbG9yLmggXAorCVNvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlRmVhdHVyZS5jcHAgXAor
CVNvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlRmVhdHVyZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9jc3Mv
UnVsZVNldC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmggXAogCVNvdXJjZS9X
ZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU2Vs
ZWN0b3JDaGVja2VyLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TaGFkb3dWYWx1ZS5jcHAgXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkKaW5kZXggYTRkODc1NDdhNGE5ZDBhNTA5ZTEzZjk0ZmIwZGU1M2IyZDhkZjE0OC4u
NjdmNWJjYTEyY2E2NDgxYmQ2ZDc2MjFiZWJhYzM1YmE2ZTdmYjY1NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBA
IC0zMTMsNiArMzEzLDggQEAgU09VUkNFUyArPSBcCiAgICAgY3NzL01lZGlhUXVlcnlNYXRjaGVy
LmNwcCBcCiAgICAgY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgXAogICAg
IGNzcy9SR0JDb2xvci5jcHAgXAorICAgIGNzcy9SdWxlRmVhdHVyZS5jcHAgXAorICAgIGNzcy9S
dWxlU2V0Y3BwIFwKICAgICBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcCBcCiAgICAgY3NzL1NoYWRv
d1ZhbHVlLmNwcCBcCiAgICAgY3NzL1N0eWxlQnVpbGRlci5jcHAgXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmlu
ZGV4IDdjMTFlNzY3N2E3NWY0MDFlMjQ1NDJhZTQyNjA2NmVmMmU4OGFkNWYuLjNmMjJhZDFkNTNm
ZGJlNDMxNzE5NjBkZDJhODAyZTAxNDg5ZTU1YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTI2MDks
NiArMjYwOSwxMCBAQAogICAgICAgICAgICAgJ2Nzcy9SR0JDb2xvci5jcHAnLAogICAgICAgICAg
ICAgJ2Nzcy9SR0JDb2xvci5oJywKICAgICAgICAgICAgICdjc3MvUmVjdC5oJywKKyAgICAgICAg
ICAgICdjc3MvUnVsZUZlYXR1cmUuY3BwJywKKyAgICAgICAgICAgICdjc3MvUnVsZUZlYXR1cmUu
aCcsCisgICAgICAgICAgICAnY3NzL1J1bGVTZXQuY3BwJywKKyAgICAgICAgICAgICdjc3MvUnVs
ZVNldC5oJywKICAgICAgICAgICAgICdjc3MvU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcCcsCiAgICAgICAgICAgICAnY3NzL1NWR0NTU1BhcnNlci5jcHAnLAogICAgICAgICAgICAg
J2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQWxsSW5PbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0FsbEluT25lLmNw
cAppbmRleCAxOTNiN2FmYzQ4YWUwMTgzNWY0OTViMGFjMzBlMDVkZWFlNGM2NzNhLi4wMWRkYjJk
NzE2MTk4ZDEzNDZjZmY1MjI4Mjk0YTBmYzEwOTQ4OTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJ
bk9uZS5jcHAKQEAgLTY2LDYgKzY2LDggQEAKICNpbmNsdWRlICJDU1NWYWx1ZS5jcHAiCiAjaW5j
bHVkZSAiQ1NTVmFsdWVMaXN0LmNwcCIKICNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuY3BwIgorI2lu
Y2x1ZGUgIlJ1bGVGZWF0dXJlLmNwcCIKKyNpbmNsdWRlICJSdWxlU2V0LmNwcCIKICNpbmNsdWRl
ICJTdHlsZUJ1aWxkZXIuY3BwIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuY3BwIgogI2lu
Y2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1J1bGVGZWF0dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlRmVhdHVy
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNjYzYjk0NjEzYWM4N2RhYjA3YmY1NWZmNGUwMGNkNzE2MjI0NTU2
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlRmVhdHVyZS5jcHAK
QEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChr
bm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDA0LTIwMDUgQWxsYW4gU2FuZGZlbGQg
SmVuc2VuIChrZGVAY2FyZXdvbGYuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IE5p
Y2hvbGFzIFNoYW5rcyAod2Via2l0QG5pY2tzaGFua3MuY29tKQorICogQ29weXJpZ2h0IChDKSAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1
cnlha292IDxhcEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9y
Y2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2Jp
bGUuY29tLykKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlJ1bGVGZWF0dXJlLmgiCisKKyNpbmNsdWRlICJXZWJDb3JlTWVtb3J5SW5zdHJ1bWVudGF0
aW9uLmgiCisjaW5jbHVkZSA8d3RmL01lbW9yeUluc3RydW1lbnRhdGlvbkhhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit2b2lkIFJ1bGVGZWF0dXJlU2V0OjphZGQoY29uc3QgUnVsZUZlYXR1cmVTZXQmIG90aGVyKQor
eworICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+OjppdGVyYXRvciBlbmQgPSBvdGhlci5p
ZHNJblJ1bGVzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj46Oml0
ZXJhdG9yIGl0ID0gb3RoZXIuaWRzSW5SdWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisg
ICAgICAgIGlkc0luUnVsZXMuYWRkKCppdCk7CisgICAgZW5kID0gb3RoZXIuYXR0cnNJblJ1bGVz
LmVuZCgpOworICAgIGZvciAoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0
ID0gb3RoZXIuYXR0cnNJblJ1bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAg
YXR0cnNJblJ1bGVzLmFkZCgqaXQpOworICAgIHNpYmxpbmdSdWxlcy5hcHBlbmQob3RoZXIuc2li
bGluZ1J1bGVzKTsKKyAgICB1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmFwcGVuZChvdGhlci51bmNv
bW1vbkF0dHJpYnV0ZVJ1bGVzKTsKKyAgICB1c2VzRmlyc3RMaW5lUnVsZXMgPSB1c2VzRmlyc3RM
aW5lUnVsZXMgfHwgb3RoZXIudXNlc0ZpcnN0TGluZVJ1bGVzOworICAgIHVzZXNCZWZvcmVBZnRl
clJ1bGVzID0gdXNlc0JlZm9yZUFmdGVyUnVsZXMgfHwgb3RoZXIudXNlc0JlZm9yZUFmdGVyUnVs
ZXM7Cit9CisKK3ZvaWQgUnVsZUZlYXR1cmVTZXQ6OmNsZWFyKCkKK3sKKyAgICBpZHNJblJ1bGVz
LmNsZWFyKCk7CisgICAgYXR0cnNJblJ1bGVzLmNsZWFyKCk7CisgICAgc2libGluZ1J1bGVzLmNs
ZWFyKCk7CisgICAgdW5jb21tb25BdHRyaWJ1dGVSdWxlcy5jbGVhcigpOworICAgIHVzZXNGaXJz
dExpbmVSdWxlcyA9IGZhbHNlOworICAgIHVzZXNCZWZvcmVBZnRlclJ1bGVzID0gZmFsc2U7Cit9
CisKK3ZvaWQgUnVsZUZlYXR1cmVTZXQ6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdElu
Zm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0Cit7CisgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8o
bWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOworICAgIGlu
Zm8uYWRkTWVtYmVyKGlkc0luUnVsZXMpOworICAgIGluZm8uYWRkTWVtYmVyKGF0dHJzSW5SdWxl
cyk7CisgICAgaW5mby5hZGRNZW1iZXIoc2libGluZ1J1bGVzKTsKKyAgICBpbmZvLmFkZE1lbWJl
cih1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVGZWF0dXJlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvUnVsZUZlYXR1cmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZjE2Mjg4YzA1ZTFkYzRmYTFmMTE5
MzlhMDY0Mzc1OWJlYjMyYzg0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1J1bGVGZWF0dXJlLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5
OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgUnVsZUZlYXR1cmVfaAorI2RlZmluZSBSdWxl
RmVhdHVyZV9oCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9t
aWNTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTdHlsZVJ1bGU7CisK
K2NsYXNzIFJ1bGVGZWF0dXJlIHsKK3B1YmxpYzoKKyAgICBSdWxlRmVhdHVyZShTdHlsZVJ1bGUq
IHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9y
aWdpbikKKyAgICAgICAgOiBydWxlKHJ1bGUpCisgICAgICAgICwgc2VsZWN0b3JJbmRleChzZWxl
Y3RvckluZGV4KQorICAgICAgICAsIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oaGFzRG9jdW1l
bnRTZWN1cml0eU9yaWdpbikgCisgICAgeyAKKyAgICB9CisgICAgU3R5bGVSdWxlKiBydWxlOwor
ICAgIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXg7CisgICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5
T3JpZ2luOworfTsKKworY2xhc3MgUnVsZUZlYXR1cmVTZXQgeworcHVibGljOgorICAgIFJ1bGVG
ZWF0dXJlU2V0KCkKKyAgICAgICAgOiB1c2VzRmlyc3RMaW5lUnVsZXMoZmFsc2UpCisgICAgICAg
ICwgdXNlc0JlZm9yZUFmdGVyUnVsZXMoZmFsc2UpCisgICAgeyB9CisKKyAgICB2b2lkIGFkZChj
b25zdCBSdWxlRmVhdHVyZVNldCYpOworICAgIHZvaWQgY2xlYXIoKTsKKyAgICB2b2lkIHJlcG9y
dE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKKyAgICBIYXNoU2V0PEF0b21p
Y1N0cmluZ0ltcGwqPiBpZHNJblJ1bGVzOworICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+
IGF0dHJzSW5SdWxlczsKKyAgICBWZWN0b3I8UnVsZUZlYXR1cmU+IHNpYmxpbmdSdWxlczsKKyAg
ICBWZWN0b3I8UnVsZUZlYXR1cmU+IHVuY29tbW9uQXR0cmlidXRlUnVsZXM7CisgICAgYm9vbCB1
c2VzRmlyc3RMaW5lUnVsZXM7CisgICAgYm9vbCB1c2VzQmVmb3JlQWZ0ZXJSdWxlczsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFJ1bGVGZWF0dXJlX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9SdWxlU2V0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NTRlMDA4YzRmZmQzMTNlZWIyMDhiNTc4NDk5YjAx
Y2ExMmMyZWJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQu
Y3BwCkBAIC0wLDAgKzEsMzgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25v
bGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDQtMjAwNSBBbGxhbiBTYW5k
ZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgTmljaG9sYXMgU2hhbmtzICh3ZWJraXRAbmlja3NoYW5rcy5jb20pCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFsZXhleSBQ
cm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAw
OSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3Jj
aG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChjKSAyMDExLCBDb2RlIEF1cm9yYSBGb3J1bS4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUnVsZVNldC5oIgorCisjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCisjaW5j
bHVkZSAiQ1NTU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIKKyNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCisjaW5j
bHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKKyNp
bmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCisjaW5jbHVk
ZSAiU3R5bGVSdWxlSW1wb3J0LmgiCisjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCisj
aW5jbHVkZSAiV2ViQ29yZU1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIldlYktp
dENTU0tleWZyYW1lc1J1bGUuaCIKKyNpbmNsdWRlIDx3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9u
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL01lbW9yeUluc3RydW1lbnRhdGlvblZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKKy8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1NlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVI
YXNoKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAgICBjb25zdCBBdG9taWNTdHJp
bmcmIHNlbGVjdG9yTmFtZXNwYWNlID0gc2VsZWN0b3ItPnRhZygpLm5hbWVzcGFjZVVSSSgpOwor
ICAgIGlmIChzZWxlY3Rvck5hbWVzcGFjZSAhPSBzdGFyQXRvbSAmJiBzZWxlY3Rvck5hbWVzcGFj
ZSAhPSB4aHRtbE5hbWVzcGFjZVVSSSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChz
ZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Tm9uZSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgaWYgKHNlbGVjdG9yLT50YWcoKSAhPSBzdGFyQXRvbSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChTZWxlY3RvckNoZWNrZXI6OmlzQ29tbW9uUHNldWRvQ2xhc3NTZWxl
Y3RvcihzZWxlY3RvcikpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzZWxlY3Rv
ci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQgfHwgc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NT
U2VsZWN0b3I6OkNsYXNzOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2VsZWN0b3JMaXN0Q29u
dGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3Rv
cikKK3sKKyAgICBDU1NTZWxlY3Rvckxpc3QqIHNlbGVjdG9yTGlzdCA9IHNlbGVjdG9yLT5zZWxl
Y3Rvckxpc3QoKTsKKyAgICBpZiAoIXNlbGVjdG9yTGlzdCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGZvciAoQ1NTU2VsZWN0b3IqIHN1YlNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJz
dCgpOyBzdWJTZWxlY3Rvcjsgc3ViU2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3Vi
U2VsZWN0b3IpKSB7CisgICAgICAgIGlmIChzdWJTZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3Rv
cigpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKworc3RhdGljIGlubGluZSBib29sIGlzQ29tbW9uQXR0cmlidXRlU2VsZWN0b3JBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKQoreworICAgIC8vIFRoZXNlIGFyZSBl
eHBsaWNpdGx5IHRlc3RlZCBmb3IgZXF1YWxpdHkgaW4gY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50
LgorICAgIHJldHVybiBhdHRyaWJ1dGUgPT0gdHlwZUF0dHIgfHwgYXR0cmlidXRlID09IHJlYWRv
bmx5QXR0cjsKK30KKworc3RhdGljIGlubGluZSBib29sIGNvbnRhaW5zVW5jb21tb25BdHRyaWJ1
dGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAgZm9yICg7IHNl
bGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKKyAgICAgICAgLy8g
QWxsb3cgY2VydGFpbiBjb21tb24gYXR0cmlidXRlcyAodXNlZCBpbiB0aGUgZGVmYXVsdCBzdHls
ZSkgaW4gdGhlIHNlbGVjdG9ycyB0aGF0IG1hdGNoIHRoZSBjdXJyZW50IGVsZW1lbnQuCisgICAg
ICAgIGlmIChzZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpICYmICFpc0NvbW1vbkF0dHJp
YnV0ZVNlbGVjdG9yQXR0cmlidXRlKHNlbGVjdG9yLT5hdHRyaWJ1dGUoKSkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKHNlbGVjdG9yTGlzdENvbnRhaW5zVW5jb21tb25B
dHRyaWJ1dGVTZWxlY3RvcihzZWxlY3RvcikpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3Rv
cikgeworICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKDsgc2VsZWN0b3I7
IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgeworICAgICAgICBpZiAoc2VsZWN0
b3ItPmlzQXR0cmlidXRlU2VsZWN0b3IoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBpZiAoc2VsZWN0b3JMaXN0Q29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKHNl
bGVjdG9yKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK1J1bGVEYXRhOjpSdWxlRGF0YShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNl
bGVjdG9ySW5kZXgsIHVuc2lnbmVkIHBvc2l0aW9uLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaW5SZWdpb25SdWxlKQor
ICAgIDogbV9ydWxlKHJ1bGUpCisgICAgLCBtX3NlbGVjdG9ySW5kZXgoc2VsZWN0b3JJbmRleCkK
KyAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24pCisgICAgLCBtX3NwZWNpZmljaXR5KHNlbGVjdG9y
KCktPnNwZWNpZmljaXR5KCkpCisgICAgLCBtX2hhc0Zhc3RDaGVja2FibGVTZWxlY3RvcihjYW5V
c2VGYXN0Q2hlY2tTZWxlY3RvciAmJiBTZWxlY3RvckNoZWNrZXI6OmlzRmFzdENoZWNrYWJsZVNl
bGVjdG9yKHNlbGVjdG9yKCkpKQorICAgICwgbV9oYXNNdWx0aXBhcnRTZWxlY3RvcighIXNlbGVj
dG9yKCktPnRhZ0hpc3RvcnkoKSkKKyAgICAsIG1faGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGlu
Z0hUTUxCYXNlZE9uUnVsZUhhc2goaXNTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFz
aChzZWxlY3RvcigpKSkKKyAgICAsIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9y
KFdlYkNvcmU6OmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcihzZWxlY3RvcigpKSkK
KyAgICAsIG1fbGlua01hdGNoVHlwZShTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtNYXRj
aFR5cGUoc2VsZWN0b3IoKSkpCisgICAgLCBtX2hhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oaGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbikKKyAgICAsIG1faXNJblJlZ2lvblJ1bGUoaW5SZWdpb25S
dWxlKQoreworICAgIEFTU0VSVChtX3Bvc2l0aW9uID09IHBvc2l0aW9uKTsKKyAgICBBU1NFUlQo
bV9zZWxlY3RvckluZGV4ID09IHNlbGVjdG9ySW5kZXgpOworICAgIFNlbGVjdG9yQ2hlY2tlcjo6
Y29sbGVjdElkZW50aWZpZXJIYXNoZXMoc2VsZWN0b3IoKSwgbV9kZXNjZW5kYW50U2VsZWN0b3JJ
ZGVudGlmaWVySGFzaGVzLCBtYXhpbXVtSWRlbnRpZmllckNvdW50KTsKK30KKwordm9pZCBSdWxl
RGF0YTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5m
bykgY29uc3QKK3sKKyAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0
aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNTUyk7Cit9CisKK3N0YXRpYyB2b2lkIHJlcG9ydEF0
b21SdWxlTWFwKE1lbW9yeUNsYXNzSW5mbyogaW5mbywgY29uc3QgUnVsZVNldDo6QXRvbVJ1bGVN
YXAmIGF0b21pY1J1bGVNYXApCit7CisgICAgaW5mby0+YWRkTWVtYmVyKGF0b21pY1J1bGVNYXAp
OworICAgIGZvciAoUnVsZVNldDo6QXRvbVJ1bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYXRv
bWljUnVsZU1hcC5iZWdpbigpOyBpdCAhPSBhdG9taWNSdWxlTWFwLmVuZCgpOyArK2l0KQorICAg
ICAgICBpbmZvLT5hZGRNZW1iZXIoKml0LT5zZWNvbmQpOworfQorCit2b2lkIFJ1bGVTZXQ6OnJl
cG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0
Cit7CisgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2Vi
Q29yZU1lbW9yeVR5cGVzOjpDU1MpOworICAgIHJlcG9ydEF0b21SdWxlTWFwKCZpbmZvLCBtX2lk
UnVsZXMpOworICAgIHJlcG9ydEF0b21SdWxlTWFwKCZpbmZvLCBtX2NsYXNzUnVsZXMpOworICAg
IHJlcG9ydEF0b21SdWxlTWFwKCZpbmZvLCBtX3RhZ1J1bGVzKTsKKyAgICByZXBvcnRBdG9tUnVs
ZU1hcCgmaW5mbywgbV9zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMpOworICAgIGluZm8uYWRkTWVt
YmVyKG1fbGlua1BzZXVkb0NsYXNzUnVsZXMpOworICAgIGluZm8uYWRkTWVtYmVyKG1fZm9jdXNQ
c2V1ZG9DbGFzc1J1bGVzKTsKKyAgICBpbmZvLmFkZE1lbWJlcihtX3VuaXZlcnNhbFJ1bGVzKTsK
KyAgICBpbmZvLmFkZE1lbWJlcihtX3BhZ2VSdWxlcyk7CisgICAgaW5mby5hZGRNZW1iZXIobV9y
ZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cyk7Cit9CisKK3ZvaWQgUnVsZVNldDo6UnVsZVNldFNl
bGVjdG9yUGFpcjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2Jq
ZWN0SW5mbykgY29uc3QKK3sKKyAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJ
bmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNTUyk7CisgICAgaW5mby5hZGRNZW1iZXIo
cnVsZVNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb2xsZWN0RmVhdHVyZXNGcm9tU2Vs
ZWN0b3IoUnVsZUZlYXR1cmVTZXQmIGZlYXR1cmVzLCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0
b3IpCit7CisgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCkKKyAg
ICAgICAgZmVhdHVyZXMuaWRzSW5SdWxlcy5hZGQoc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpKTsK
KyAgICBpZiAoc2VsZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0b3IoKSkKKyAgICAgICAgZmVhdHVy
ZXMuYXR0cnNJblJ1bGVzLmFkZChzZWxlY3Rvci0+YXR0cmlidXRlKCkubG9jYWxOYW1lKCkuaW1w
bCgpKTsKKyAgICBzd2l0Y2ggKHNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkpIHsKKyAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9GaXJzdExpbmU6CisgICAgICAgIGZlYXR1cmVzLnVzZXNGaXJzdExp
bmVSdWxlcyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0JlZm9yZToKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BZnRlcjoKKyAgICAgICAg
ZmVhdHVyZXMudXNlc0JlZm9yZUFmdGVyUnVsZXMgPSB0cnVlOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNvbGxl
Y3RGZWF0dXJlc0Zyb21SdWxlRGF0YShSdWxlRmVhdHVyZVNldCYgZmVhdHVyZXMsIGNvbnN0IFJ1
bGVEYXRhJiBydWxlRGF0YSkKK3sKKyAgICBib29sIGZvdW5kU2libGluZ1NlbGVjdG9yID0gZmFs
c2U7CisgICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBydWxlRGF0YS5zZWxlY3Rvcigp
OyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7CisgICAgICAg
IGNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3RvcihmZWF0dXJlcywgc2VsZWN0b3IpOworICAgICAg
ICAKKyAgICAgICAgaWYgKENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0ID0gc2VsZWN0b3It
PnNlbGVjdG9yTGlzdCgpKSB7CisgICAgICAgICAgICBmb3IgKENTU1NlbGVjdG9yKiBzdWJTZWxl
Y3RvciA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3ViU2VsZWN0b3I7IHN1YlNlbGVjdG9yID0g
Q1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YlNlbGVjdG9yKSkgeworICAgICAgICAgICAgICAgIGlm
ICghZm91bmRTaWJsaW5nU2VsZWN0b3IgJiYgc2VsZWN0b3ItPmlzU2libGluZ1NlbGVjdG9yKCkp
CisgICAgICAgICAgICAgICAgICAgIGZvdW5kU2libGluZ1NlbGVjdG9yID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBjb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoZmVhdHVyZXMsIHN1YlNlbGVj
dG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICghZm91bmRTaWJsaW5nU2Vs
ZWN0b3IgJiYgc2VsZWN0b3ItPmlzU2libGluZ1NlbGVjdG9yKCkpCisgICAgICAgICAgICBmb3Vu
ZFNpYmxpbmdTZWxlY3RvciA9IHRydWU7CisgICAgfQorICAgIGlmIChmb3VuZFNpYmxpbmdTZWxl
Y3RvcikKKyAgICAgICAgZmVhdHVyZXMuc2libGluZ1J1bGVzLmFwcGVuZChSdWxlRmVhdHVyZShy
dWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVjdG9ySW5kZXgoKSwgcnVsZURhdGEuaGFzRG9j
dW1lbnRTZWN1cml0eU9yaWdpbigpKSk7CisgICAgaWYgKHJ1bGVEYXRhLmNvbnRhaW5zVW5jb21t
b25BdHRyaWJ1dGVTZWxlY3RvcigpKQorICAgICAgICBmZWF0dXJlcy51bmNvbW1vbkF0dHJpYnV0
ZVJ1bGVzLmFwcGVuZChSdWxlRmVhdHVyZShydWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVj
dG9ySW5kZXgoKSwgcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpKSk7Cit9Cisg
ICAgCit2b2lkIFJ1bGVTZXQ6OmFkZFRvUnVsZVNldChBdG9taWNTdHJpbmdJbXBsKiBrZXksIEF0
b21SdWxlTWFwJiBtYXAsIGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSkKK3sKKyAgICBpZiAoIWtl
eSkKKyAgICAgICAgcmV0dXJuOworICAgIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4mIHJ1bGVz
ID0gbWFwLmFkZChrZXksIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgaWYgKCFydWxl
cykKKyAgICAgICAgcnVsZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFJ1bGVEYXRhPik7CisgICAg
cnVsZXMtPmFwcGVuZChydWxlRGF0YSk7Cit9CisKK3ZvaWQgUnVsZVNldDo6YWRkUnVsZShTdHls
ZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIGJvb2wgaGFzRG9jdW1lbnRTZWN1
cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpblJlZ2lvblJ1
bGUpCit7CisgICAgUnVsZURhdGEgcnVsZURhdGEocnVsZSwgc2VsZWN0b3JJbmRleCwgbV9ydWxl
Q291bnQrKywgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgY2FuVXNlRmFzdENoZWNrU2VsZWN0
b3IsIGluUmVnaW9uUnVsZSk7CisgICAgY29sbGVjdEZlYXR1cmVzRnJvbVJ1bGVEYXRhKG1fZmVh
dHVyZXMsIHJ1bGVEYXRhKTsKKworICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHJ1bGVEYXRh
LnNlbGVjdG9yKCk7CisKKyAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6
OklkKSB7CisgICAgICAgIGFkZFRvUnVsZVNldChzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCksIG1f
aWRSdWxlcywgcnVsZURhdGEpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzZWxl
Y3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MpIHsKKyAgICAgICAgYWRkVG9SdWxl
U2V0KHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSwgbV9jbGFzc1J1bGVzLCBydWxlRGF0YSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHNlbGVjdG9yLT5pc1Vua25vd25Qc2V1ZG9F
bGVtZW50KCkpIHsKKyAgICAgICAgYWRkVG9SdWxlU2V0KHNlbGVjdG9yLT52YWx1ZSgpLmltcGwo
KSwgbV9zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMsIHJ1bGVEYXRhKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAoU2VsZWN0b3JDaGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2Vs
ZWN0b3Ioc2VsZWN0b3IpKSB7CisgICAgICAgIHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb1R5cGUo
KSkgeworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MaW5rOgorICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkOgorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9BbnlMaW5rOgorICAgICAgICAgICAgbV9saW5rUHNldWRvQ2xhc3NSdWxlcy5hcHBlbmQo
cnVsZURhdGEpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9Gb2N1czoKKyAgICAgICAgICAgIG1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzLmFwcGVu
ZChydWxlRGF0YSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gc2VsZWN0b3ItPnRh
ZygpLmxvY2FsTmFtZSgpOworICAgIGlmIChsb2NhbE5hbWUgIT0gc3RhckF0b20pIHsKKyAgICAg
ICAgYWRkVG9SdWxlU2V0KGxvY2FsTmFtZS5pbXBsKCksIG1fdGFnUnVsZXMsIHJ1bGVEYXRhKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3VuaXZlcnNhbFJ1bGVzLmFwcGVuZChydWxl
RGF0YSk7Cit9CisKK3ZvaWQgUnVsZVNldDo6YWRkUGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSogcnVs
ZSkKK3sKKyAgICBtX3BhZ2VSdWxlcy5hcHBlbmQocnVsZSk7Cit9CisKK3ZvaWQgUnVsZVNldDo6
YWRkUmVnaW9uUnVsZShTdHlsZVJ1bGVSZWdpb24qIHJlZ2lvblJ1bGUsIGJvb2wgaGFzRG9jdW1l
bnRTZWN1cml0eU9yaWdpbikKK3sKKyAgICBPd25QdHI8UnVsZVNldD4gcmVnaW9uUnVsZVNldCA9
IFJ1bGVTZXQ6OmNyZWF0ZSgpOworICAgIC8vIFRoZSByZWdpb24gcnVsZSBzZXQgc2hvdWxkIHRh
a2UgaW50byBhY2NvdW50IHRoZSBwb3NpdGlvbiBpbnNpZGUgdGhlIHBhcmVudCBydWxlIHNldC4K
KyAgICAvLyBPdGhlcndpc2UsIHRoZSBydWxlcyBpbnNpZGUgcmVnaW9uIGJsb2NrIG1pZ2h0IGJl
IGluY29ycmVjdGx5IHBvc2l0aW9uZWQgYmVmb3JlIG90aGVyIHNpbWlsYXIgcnVsZXMgZnJvbQor
ICAgIC8vIHRoZSBzdHlsZXNoZWV0IHRoYXQgY29udGFpbnMgdGhlIHJlZ2lvbiBibG9jay4KKyAg
ICByZWdpb25SdWxlU2V0LT5tX3J1bGVDb3VudCA9IG1fcnVsZUNvdW50OworCisgICAgLy8gQ29s
bGVjdCB0aGUgcmVnaW9uIHJ1bGVzIGludG8gYSBydWxlIHNldAorICAgIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgY2hpbGRSdWxlcyA9IHJlZ2lvblJ1bGUtPmNoaWxkUnVs
ZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hpbGRSdWxlcy5zaXplKCk7ICsr
aSkgeworICAgICAgICBTdHlsZVJ1bGVCYXNlKiByZWdpb25TdHlsaW5nUnVsZSA9IGNoaWxkUnVs
ZXNbaV0uZ2V0KCk7CisgICAgICAgIGlmIChyZWdpb25TdHlsaW5nUnVsZS0+aXNTdHlsZVJ1bGUo
KSkKKyAgICAgICAgICAgIHJlZ2lvblJ1bGVTZXQtPmFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxT
dHlsZVJ1bGUqPihyZWdpb25TdHlsaW5nUnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4s
IHRydWUsIHRydWUpOworICAgIH0KKyAgICAvLyBVcGRhdGUgdGhlICJnbG9iYWwiIHJ1bGUgY291
bnQgc28gdGhhdCBwcm9wZXIgb3JkZXIgaXMgbWFpbnRhaW5lZAorICAgIG1fcnVsZUNvdW50ID0g
cmVnaW9uUnVsZVNldC0+bV9ydWxlQ291bnQ7CisKKyAgICBtX3JlZ2lvblNlbGVjdG9yc0FuZFJ1
bGVTZXRzLmFwcGVuZChSdWxlU2V0U2VsZWN0b3JQYWlyKHJlZ2lvblJ1bGUtPnNlbGVjdG9yTGlz
dCgpLmZpcnN0KCksIHJlZ2lvblJ1bGVTZXQucmVsZWFzZSgpKSk7Cit9CisKK3ZvaWQgUnVsZVNl
dDo6YWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29uc3QgTWVk
aWFRdWVyeUV2YWx1YXRvciYgbWVkaXVtLCBTdHlsZVJlc29sdmVyKiByZXNvbHZlciwgY29uc3Qg
Q29udGFpbmVyTm9kZSogc2NvcGUpCit7CisgICAgQVNTRVJUKHNoZWV0KTsKKyAgICAKKyAgICBj
b25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUltcG9ydD4gPiYgaW1wb3J0UnVsZXMgPSBzaGVl
dC0+aW1wb3J0UnVsZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW1wb3J0UnVs
ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3R5bGVSdWxlSW1wb3J0KiBpbXBvcnRSdWxlID0g
aW1wb3J0UnVsZXNbaV0uZ2V0KCk7CisgICAgICAgIGlmIChpbXBvcnRSdWxlLT5zdHlsZVNoZWV0
KCkgJiYgKCFpbXBvcnRSdWxlLT5tZWRpYVF1ZXJpZXMoKSB8fCBtZWRpdW0uZXZhbChpbXBvcnRS
dWxlLT5tZWRpYVF1ZXJpZXMoKSwgcmVzb2x2ZXIpKSkKKyAgICAgICAgICAgIGFkZFJ1bGVzRnJv
bVNoZWV0KGltcG9ydFJ1bGUtPnN0eWxlU2hlZXQoKSwgbWVkaXVtLCByZXNvbHZlciwgc2NvcGUp
OworICAgIH0KKyAgICBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPSByZXNvbHZlciAm
JiByZXNvbHZlci0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChzaGVl
dC0+YmFzZVVSTCgpKTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4g
PiYgcnVsZXMgPSBzaGVldC0+Y2hpbGRSdWxlcygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBydWxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBTdHlsZVJ1bGVCYXNlKiBydWxlID0g
cnVsZXNbaV0uZ2V0KCk7CisKKyAgICAgICAgQVNTRVJUKCFydWxlLT5pc0ltcG9ydFJ1bGUoKSk7
CisgICAgICAgIGlmIChydWxlLT5pc1N0eWxlUnVsZSgpKQorICAgICAgICAgICAgYWRkU3R5bGVS
dWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KHJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3Jp
Z2luLCAhc2NvcGUpOworICAgICAgICBlbHNlIGlmIChydWxlLT5pc1BhZ2VSdWxlKCkpCisgICAg
ICAgICAgICBhZGRQYWdlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVQYWdlKj4ocnVsZSkpOwor
ICAgICAgICBlbHNlIGlmIChydWxlLT5pc01lZGlhUnVsZSgpKSB7CisgICAgICAgICAgICBTdHls
ZVJ1bGVNZWRpYSogbWVkaWFSdWxlID0gc3RhdGljX2Nhc3Q8U3R5bGVSdWxlTWVkaWEqPihydWxl
KTsKKworICAgICAgICAgICAgaWYgKCghbWVkaWFSdWxlLT5tZWRpYVF1ZXJpZXMoKSB8fCBtZWRp
dW0uZXZhbChtZWRpYVJ1bGUtPm1lZGlhUXVlcmllcygpLCByZXNvbHZlcikpKSB7CisgICAgICAg
ICAgICAgICAgLy8gVHJhdmVyc2UgY2hpbGQgZWxlbWVudHMgb2YgdGhlIEBtZWRpYSBydWxlLgor
ICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgY2hp
bGRSdWxlcyA9IG1lZGlhUnVsZS0+Y2hpbGRSdWxlcygpOworICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IDA7IGogPCBjaGlsZFJ1bGVzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAg
ICAgICAgICAgIFN0eWxlUnVsZUJhc2UqIGNoaWxkUnVsZSA9IGNoaWxkUnVsZXNbal0uZ2V0KCk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZFJ1bGUtPmlzU3R5bGVSdWxlKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4o
Y2hpbGRSdWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgIXNjb3BlKTsKKyAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGRSdWxlLT5pc1BhZ2VSdWxlKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBhZGRQYWdlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVQYWdlKj4oY2hp
bGRSdWxlKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkUnVsZS0+aXNGb250
RmFjZVJ1bGUoKSAmJiByZXNvbHZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRk
IHRoaXMgZm9udCBmYWNlIHRvIG91ciBzZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBG
SVhNRShCVUcgNzI0NjEpOiBXZSBkb24ndCBhZGQgQGZvbnQtZmFjZSBydWxlcyBvZiBzY29wZWQg
c3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHNjb3BlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSA9IHN0
YXRpY19jYXN0PFN0eWxlUnVsZUZvbnRGYWNlKj4oY2hpbGRSdWxlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc29sdmVyLT5mb250U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxlKGZvbnRG
YWNlUnVsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlci0+aW52YWxpZGF0ZU1h
dGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChj
aGlsZFJ1bGUtPmlzS2V5ZnJhbWVzUnVsZSgpICYmIHJlc29sdmVyKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBBZGQgdGhpcyBrZXlmcmFtZSBydWxlIHRvIG91ciBzZXQuCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRShCVUcgNzI0NjIpOiBXZSBkb24ndCBhZGQgQGtleWZy
YW1lIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc2NvcGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlci0+YWRkS2V5ZnJhbWVT
dHlsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXMqPihjaGlsZFJ1bGUpKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gLy8gZm9yIHJ1bGVzCisgICAgICAg
ICAgICB9IC8vIGlmIHJ1bGVzCisgICAgICAgIH0gZWxzZSBpZiAocnVsZS0+aXNGb250RmFjZVJ1
bGUoKSAmJiByZXNvbHZlcikgeworICAgICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRv
IG91ciBzZXQuCisgICAgICAgICAgICAvLyBGSVhNRShCVUcgNzI0NjEpOiBXZSBkb24ndCBhZGQg
QGZvbnQtZmFjZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50Lgor
ICAgICAgICAgICAgaWYgKHNjb3BlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSA9IHN0YXRpY19jYXN0
PFN0eWxlUnVsZUZvbnRGYWNlKj4ocnVsZSk7CisgICAgICAgICAgICByZXNvbHZlci0+Zm9udFNl
bGVjdG9yKCktPmFkZEZvbnRGYWNlUnVsZShmb250RmFjZVJ1bGUpOworICAgICAgICAgICAgcmVz
b2x2ZXItPmludmFsaWRhdGVNYXRjaGVkUHJvcGVydGllc0NhY2hlKCk7CisgICAgICAgIH0gZWxz
ZSBpZiAocnVsZS0+aXNLZXlmcmFtZXNSdWxlKCkgJiYgcmVzb2x2ZXIpIHsKKyAgICAgICAgICAg
IC8vIEZJWE1FIChCVUcgNzI0NjIpOiBXZSBkb24ndCBhZGQgQGtleWZyYW1lIHJ1bGVzIG9mIHNj
b3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCisgICAgICAgICAgICBpZiAoc2NvcGUp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICByZXNvbHZlci0+YWRkS2V5
ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXMqPihydWxlKSk7CisgICAg
ICAgIH0KKyNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCisgICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlz
UmVnaW9uUnVsZSgpICYmIHJlc29sdmVyKSB7CisgICAgICAgICAgICAvLyBGSVhNRSAoQlVHIDcy
NDcyKTogV2UgZG9uJ3QgYWRkIEAtd2Via2l0LXJlZ2lvbiBydWxlcyBvZiBzY29wZWQgc3R5bGUg
c2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgaWYgKHNjb3BlKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYWRkUmVnaW9uUnVsZShzdGF0aWNfY2FzdDxT
dHlsZVJ1bGVSZWdpb24qPihydWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbik7CisgICAg
ICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICBpZiAobV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKQor
ICAgICAgICBzaHJpbmtUb0ZpdCgpOworfQorCit2b2lkIFJ1bGVTZXQ6OmFkZFN0eWxlUnVsZShT
dHlsZVJ1bGUqIHJ1bGUsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5V
c2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSkKK3sKKyAgICBmb3IgKHNp
emVfdCBzZWxlY3RvckluZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAhPSBub3RGb3VuZDsgc2VsZWN0
b3JJbmRleCA9IHJ1bGUtPnNlbGVjdG9yTGlzdCgpLmluZGV4T2ZOZXh0U2VsZWN0b3JBZnRlcihz
ZWxlY3RvckluZGV4KSkKKyAgICAgICAgYWRkUnVsZShydWxlLCBzZWxlY3RvckluZGV4LCBoYXNE
b2N1bWVudFNlY3VyaXR5T3JpZ2luLCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgaXNJblJlZ2lv
blJ1bGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2hyaW5rTWFwVmVjdG9yc1RvRml0KFJ1
bGVTZXQ6OkF0b21SdWxlTWFwJiBtYXApCit7CisgICAgUnVsZVNldDo6QXRvbVJ1bGVNYXA6Oml0
ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsKKyAgICBmb3IgKFJ1bGVTZXQ6OkF0b21SdWxlTWFwOjpp
dGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGl0LT5z
ZWNvbmQtPnNocmlua1RvRml0KCk7Cit9CisKK3ZvaWQgUnVsZVNldDo6c2hyaW5rVG9GaXQoKQor
eworICAgIHNocmlua01hcFZlY3RvcnNUb0ZpdChtX2lkUnVsZXMpOworICAgIHNocmlua01hcFZl
Y3RvcnNUb0ZpdChtX2NsYXNzUnVsZXMpOworICAgIHNocmlua01hcFZlY3RvcnNUb0ZpdChtX3Rh
Z1J1bGVzKTsKKyAgICBzaHJpbmtNYXBWZWN0b3JzVG9GaXQobV9zaGFkb3dQc2V1ZG9FbGVtZW50
UnVsZXMpOworICAgIG1fbGlua1BzZXVkb0NsYXNzUnVsZXMuc2hyaW5rVG9GaXQoKTsKKyAgICBt
X2ZvY3VzUHNldWRvQ2xhc3NSdWxlcy5zaHJpbmtUb0ZpdCgpOworICAgIG1fdW5pdmVyc2FsUnVs
ZXMuc2hyaW5rVG9GaXQoKTsKKyAgICBtX3BhZ2VSdWxlcy5zaHJpbmtUb0ZpdCgpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVs
ZVNldC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NTc3MjM4
YmE5MjM2YTlkNjgxMDM5MTk1YTBkZDQzYTJlODA4MmEwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuaApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgUnVsZVNldF9oCisjZGVm
aW5lIFJ1bGVTZXRfaAorCisjaW5jbHVkZSAiUnVsZUZlYXR1cmUuaCIKKyNpbmNsdWRlICJTdHls
ZVJ1bGUuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NTZWxlY3RvcjsKK2Ns
YXNzIENvbnRhaW5lck5vZGU7CitjbGFzcyBNZWRpYVF1ZXJ5RXZhbHVhdG9yOworY2xhc3MgU3R5
bGVSZXNvbHZlcjsKK2NsYXNzIFN0eWxlUnVsZVJlZ2lvbjsKK2NsYXNzIFN0eWxlU2hlZXRDb250
ZW50czsKKworY2xhc3MgUnVsZURhdGEgeworcHVibGljOgorICAgIFJ1bGVEYXRhKFN0eWxlUnVs
ZSosIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIHVuc2lnbmVkIHBvc2l0aW9uLCBib29sIGhhc0Rv
Y3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wg
aW5SZWdpb25SdWxlKTsKKworICAgIHVuc2lnbmVkIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9wb3NpdGlvbjsgfQorICAgIFN0eWxlUnVsZSogcnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcnVs
ZTsgfQorICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fcnVsZS0+
c2VsZWN0b3JMaXN0KCkuc2VsZWN0b3JBdChtX3NlbGVjdG9ySW5kZXgpOyB9CisgICAgdW5zaWdu
ZWQgc2VsZWN0b3JJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0b3JJbmRleDsgfQorCisg
ICAgYm9vbCBoYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2hhc0Zh
c3RDaGVja2FibGVTZWxlY3RvcjsgfQorICAgIGJvb2wgaGFzTXVsdGlwYXJ0U2VsZWN0b3IoKSBj
b25zdCB7IHJldHVybiBtX2hhc011bHRpcGFydFNlbGVjdG9yOyB9CisgICAgYm9vbCBoYXNSaWdo
dG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaCgpIGNvbnN0IHsgcmV0dXJu
IG1faGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2g7IH0KKyAg
ICBib29sIGNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yOyB9CisgICAgdW5zaWduZWQgc3Bl
Y2lmaWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3NwZWNpZmljaXR5OyB9CisgICAgdW5zaWduZWQg
bGlua01hdGNoVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlua01hdGNoVHlwZTsgfQorICAgIGJv
b2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzRG9jdW1l
bnRTZWN1cml0eU9yaWdpbjsgfQorICAgIGJvb2wgaXNJblJlZ2lvblJ1bGUoKSBjb25zdCB7IHJl
dHVybiBtX2lzSW5SZWdpb25SdWxlOyB9CisKKyAgICAvLyBUcnkgdG8gYmFsYW5jZSBiZXR3ZWVu
IG1lbW9yeSB1c2FnZSAodGhlcmUgY2FuIGJlIGxvdHMgb2YgUnVsZURhdGEgb2JqZWN0cykgYW5k
IGdvb2QgZmlsdGVyaW5nIHBlcmZvcm1hbmNlLgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBt
YXhpbXVtSWRlbnRpZmllckNvdW50ID0gNDsKKyAgICBjb25zdCB1bnNpZ25lZCogZGVzY2VuZGFu
dFNlbGVjdG9ySWRlbnRpZmllckhhc2hlcygpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY2VuZGFudFNl
bGVjdG9ySWRlbnRpZmllckhhc2hlczsgfQorCisgICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShN
ZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgU3R5bGVSdWxlKiBtX3J1
bGU7CisgICAgdW5zaWduZWQgbV9zZWxlY3RvckluZGV4IDogMTI7CisgICAgLy8gVGhpcyBudW1i
ZXIgd2FzIHBpY2tlZCBmYWlybHkgYXJiaXRyYXJpbHkuIFdlIGNhbiBwcm9iYWJseSBsb3dlciBp
dCBpZiB3ZSBuZWVkIHRvLgorICAgIC8vIFNvbWUgc2ltcGxlIHRlc3Rpbmcgc2hvd2VkIDwxMDAs
MDAwIFJ1bGVEYXRhJ3Mgb24gbGFyZ2Ugc2l0ZXMuCisgICAgdW5zaWduZWQgbV9wb3NpdGlvbiA6
IDIwOworICAgIHVuc2lnbmVkIG1fc3BlY2lmaWNpdHkgOiAyNDsKKyAgICB1bnNpZ25lZCBtX2hh
c0Zhc3RDaGVja2FibGVTZWxlY3RvciA6IDE7CisgICAgdW5zaWduZWQgbV9oYXNNdWx0aXBhcnRT
ZWxlY3RvciA6IDE7CisgICAgdW5zaWduZWQgbV9oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5n
SFRNTEJhc2VkT25SdWxlSGFzaCA6IDE7CisgICAgdW5zaWduZWQgbV9jb250YWluc1VuY29tbW9u
QXR0cmlidXRlU2VsZWN0b3IgOiAxOworICAgIHVuc2lnbmVkIG1fbGlua01hdGNoVHlwZSA6IDI7
IC8vICBTZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1hc2sKKyAgICB1bnNpZ25lZCBtX2hhc0Rv
Y3VtZW50U2VjdXJpdHlPcmlnaW4gOiAxOworICAgIHVuc2lnbmVkIG1faXNJblJlZ2lvblJ1bGUg
OiAxOworICAgIC8vIFVzZSBwbGFpbiBhcnJheSBpbnN0ZWFkIG9mIGEgVmVjdG9yIHRvIG1pbmlt
aXplIG1lbW9yeSBvdmVyaGVhZC4KKyAgICB1bnNpZ25lZCBtX2Rlc2NlbmRhbnRTZWxlY3Rvcklk
ZW50aWZpZXJIYXNoZXNbbWF4aW11bUlkZW50aWZpZXJDb3VudF07Cit9OworICAgIAorc3RydWN0
IFNhbWVTaXplQXNSdWxlRGF0YSB7CisgICAgdm9pZCogYTsKKyAgICB1bnNpZ25lZCBiOworICAg
IHVuc2lnbmVkIGM7CisgICAgdW5zaWduZWQgZFs0XTsKK307CisKK0NPTVBJTEVfQVNTRVJUKHNp
emVvZihSdWxlRGF0YSkgPT0gc2l6ZW9mKFNhbWVTaXplQXNSdWxlRGF0YSksIFJ1bGVEYXRhX3No
b3VsZF9zdGF5X3NtYWxsKTsKKworY2xhc3MgUnVsZVNldCB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoUnVsZVNldCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzT3duUHRyPFJ1bGVTZXQ+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBS
dWxlU2V0KTsgfQorCisgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBPd25Q
dHI8VmVjdG9yPFJ1bGVEYXRhPiA+ID4gQXRvbVJ1bGVNYXA7CisKKyAgICB2b2lkIGFkZFJ1bGVz
RnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3Im
LCBTdHlsZVJlc29sdmVyKiA9IDAsIGNvbnN0IENvbnRhaW5lck5vZGUqID0gMCk7CisKKyAgICB2
b2lkIGFkZFN0eWxlUnVsZShTdHlsZVJ1bGUqLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmln
aW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1bGUgPSBm
YWxzZSk7CisgICAgdm9pZCBhZGRSdWxlKFN0eWxlUnVsZSosIHVuc2lnbmVkIHNlbGVjdG9ySW5k
ZXgsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tT
ZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSA9IGZhbHNlKTsKKyAgICB2b2lkIGFkZFBhZ2VS
dWxlKFN0eWxlUnVsZVBhZ2UqKTsKKyAgICB2b2lkIGFkZFRvUnVsZVNldChBdG9taWNTdHJpbmdJ
bXBsKiBrZXksIEF0b21SdWxlTWFwJiwgY29uc3QgUnVsZURhdGEmKTsKKyAgICB2b2lkIGFkZFJl
Z2lvblJ1bGUoU3R5bGVSdWxlUmVnaW9uKiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
KTsKKyAgICB2b2lkIHNocmlua1RvRml0KCk7CisgICAgdm9pZCBkaXNhYmxlQXV0b1Nocmlua1Rv
Rml0KCkgeyBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQgPSBmYWxzZTsgfQorCisgICAgY29uc3Qg
UnVsZUZlYXR1cmVTZXQmIGZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlczsgfQor
CisgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogaWRSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBr
ZXkpIGNvbnN0IHsgcmV0dXJuIG1faWRSdWxlcy5nZXQoa2V5KTsgfQorICAgIGNvbnN0IFZlY3Rv
cjxSdWxlRGF0YT4qIGNsYXNzUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7IHJl
dHVybiBtX2NsYXNzUnVsZXMuZ2V0KGtleSk7IH0KKyAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+
KiB0YWdSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1fdGFnUnVs
ZXMuZ2V0KGtleSk7IH0KKyAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBzaGFkb3dQc2V1ZG9F
bGVtZW50UnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7IHJldHVybiBtX3NoYWRv
d1BzZXVkb0VsZW1lbnRSdWxlcy5nZXQoa2V5KTsgfQorICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0
YT4qIGxpbmtQc2V1ZG9DbGFzc1J1bGVzKCkgY29uc3QgeyByZXR1cm4gJm1fbGlua1BzZXVkb0Ns
YXNzUnVsZXM7IH0KKyAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBmb2N1c1BzZXVkb0NsYXNz
UnVsZXMoKSBjb25zdCB7IHJldHVybiAmbV9mb2N1c1BzZXVkb0NsYXNzUnVsZXM7IH0KKyAgICBj
b25zdCBWZWN0b3I8UnVsZURhdGE+KiB1bml2ZXJzYWxSdWxlcygpIGNvbnN0IHsgcmV0dXJuICZt
X3VuaXZlcnNhbFJ1bGVzOyB9CisgICAgY29uc3QgVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYgcGFn
ZVJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlUnVsZXM7IH0KKworICAgIHZvaWQgcmVwb3J0
TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OworCitwdWJsaWM6CisgICAgUnVs
ZVNldCgpOworCisgICAgQXRvbVJ1bGVNYXAgbV9pZFJ1bGVzOworICAgIEF0b21SdWxlTWFwIG1f
Y2xhc3NSdWxlczsKKyAgICBBdG9tUnVsZU1hcCBtX3RhZ1J1bGVzOworICAgIEF0b21SdWxlTWFw
IG1fc2hhZG93UHNldWRvRWxlbWVudFJ1bGVzOworICAgIFZlY3RvcjxSdWxlRGF0YT4gbV9saW5r
UHNldWRvQ2xhc3NSdWxlczsKKyAgICBWZWN0b3I8UnVsZURhdGE+IG1fZm9jdXNQc2V1ZG9DbGFz
c1J1bGVzOworICAgIFZlY3RvcjxSdWxlRGF0YT4gbV91bml2ZXJzYWxSdWxlczsKKyAgICBWZWN0
b3I8U3R5bGVSdWxlUGFnZSo+IG1fcGFnZVJ1bGVzOworICAgIHVuc2lnbmVkIG1fcnVsZUNvdW50
OworICAgIGJvb2wgbV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkOworICAgIFJ1bGVGZWF0dXJlU2V0
IG1fZmVhdHVyZXM7CisKKyAgICBzdHJ1Y3QgUnVsZVNldFNlbGVjdG9yUGFpciB7CisgICAgICAg
IFJ1bGVTZXRTZWxlY3RvclBhaXIoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBQYXNzT3duUHRyPFJ1
bGVTZXQ+IHJ1bGVTZXQpIDogc2VsZWN0b3Ioc2VsZWN0b3IpLCBydWxlU2V0KHJ1bGVTZXQpIHsg
fQorICAgICAgICBSdWxlU2V0U2VsZWN0b3JQYWlyKGNvbnN0IFJ1bGVTZXRTZWxlY3RvclBhaXIm
IHJzKSA6IHNlbGVjdG9yKHJzLnNlbGVjdG9yKSwgcnVsZVNldChjb25zdF9jYXN0PFJ1bGVTZXRT
ZWxlY3RvclBhaXIqPigmcnMpLT5ydWxlU2V0LnJlbGVhc2UoKSkgeyB9CisgICAgICAgIHZvaWQg
cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OworCisgICAgICAgIENT
U1NlbGVjdG9yKiBzZWxlY3RvcjsKKyAgICAgICAgT3duUHRyPFJ1bGVTZXQ+IHJ1bGVTZXQ7Cisg
ICAgfTsKKworICAgIFZlY3RvcjxSdWxlU2V0U2VsZWN0b3JQYWlyPiBtX3JlZ2lvblNlbGVjdG9y
c0FuZFJ1bGVTZXRzOworfTsKKworaW5saW5lIFJ1bGVTZXQ6OlJ1bGVTZXQoKQorICAgIDogbV9y
dWxlQ291bnQoMCkKKyAgICAsIG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCh0cnVlKQoreworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBSdWxlU2V0X2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCBjYzNmNWYzZGYyZmEzYzEyNDgyYTFiODI4ZmNj
Y2IzMjc5OTgyZDBjLi5lNGJhMGE4ZmVlMTIyNjQxYzZkOGM3MGMxZDAwNTBlNzc0NTVhZTQwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC05OCw2ICs5OCw3IEBACiAjaW5j
bHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAi
Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiUnVsZVNldC5oIgogI2luY2x1
ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVu
dC5oIgogI2luY2x1ZGUgIlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCkBAIC0yMDUsMTEzICsy
MDYsNiBAQCBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChwcm9wLCBQcm9wKSBcCiBpZiAocHJp
bWl0aXZlVmFsdWUpIFwKICAgICBtX3N0eWxlLT5zZXQjI1Byb3AoKnByaW1pdGl2ZVZhbHVlKTsK
IAotY2xhc3MgUnVsZURhdGEgewotcHVibGljOgotICAgIFJ1bGVEYXRhKFN0eWxlUnVsZSosIHVu
c2lnbmVkIHNlbGVjdG9ySW5kZXgsIHVuc2lnbmVkIHBvc2l0aW9uLCBib29sIGhhc0RvY3VtZW50
U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaW5SZWdp
b25SdWxlKTsKLQotICAgIHVuc2lnbmVkIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3Np
dGlvbjsgfQotICAgIFN0eWxlUnVsZSogcnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcnVsZTsgfQot
ICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fcnVsZS0+c2VsZWN0
b3JMaXN0KCkuc2VsZWN0b3JBdChtX3NlbGVjdG9ySW5kZXgpOyB9Ci0gICAgdW5zaWduZWQgc2Vs
ZWN0b3JJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0b3JJbmRleDsgfQotCi0gICAgYm9v
bCBoYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2hhc0Zhc3RDaGVj
a2FibGVTZWxlY3RvcjsgfQotICAgIGJvb2wgaGFzTXVsdGlwYXJ0U2VsZWN0b3IoKSBjb25zdCB7
IHJldHVybiBtX2hhc011bHRpcGFydFNlbGVjdG9yOyB9Ci0gICAgYm9vbCBoYXNSaWdodG1vc3RT
ZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1faGFz
UmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2g7IH0KLSAgICBib29s
IGNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yOyB9Ci0gICAgdW5zaWduZWQgc3BlY2lmaWNp
dHkoKSBjb25zdCB7IHJldHVybiBtX3NwZWNpZmljaXR5OyB9Ci0gICAgdW5zaWduZWQgbGlua01h
dGNoVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlua01hdGNoVHlwZTsgfQotICAgIGJvb2wgaGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzRG9jdW1lbnRTZWN1
cml0eU9yaWdpbjsgfQotICAgIGJvb2wgaXNJblJlZ2lvblJ1bGUoKSBjb25zdCB7IHJldHVybiBt
X2lzSW5SZWdpb25SdWxlOyB9Ci0KLSAgICAvLyBUcnkgdG8gYmFsYW5jZSBiZXR3ZWVuIG1lbW9y
eSB1c2FnZSAodGhlcmUgY2FuIGJlIGxvdHMgb2YgUnVsZURhdGEgb2JqZWN0cykgYW5kIGdvb2Qg
ZmlsdGVyaW5nIHBlcmZvcm1hbmNlLgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhpbXVt
SWRlbnRpZmllckNvdW50ID0gNDsKLSAgICBjb25zdCB1bnNpZ25lZCogZGVzY2VuZGFudFNlbGVj
dG9ySWRlbnRpZmllckhhc2hlcygpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY2VuZGFudFNlbGVjdG9y
SWRlbnRpZmllckhhc2hlczsgfQotCi0gICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlP
YmplY3RJbmZvKikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgU3R5bGVSdWxlKiBtX3J1bGU7Ci0g
ICAgdW5zaWduZWQgbV9zZWxlY3RvckluZGV4IDogMTI7Ci0gICAgLy8gVGhpcyBudW1iZXIgd2Fz
IHBpY2tlZCBmYWlybHkgYXJiaXRyYXJpbHkuIFdlIGNhbiBwcm9iYWJseSBsb3dlciBpdCBpZiB3
ZSBuZWVkIHRvLgotICAgIC8vIFNvbWUgc2ltcGxlIHRlc3Rpbmcgc2hvd2VkIDwxMDAsMDAwIFJ1
bGVEYXRhJ3Mgb24gbGFyZ2Ugc2l0ZXMuCi0gICAgdW5zaWduZWQgbV9wb3NpdGlvbiA6IDIwOwot
ICAgIHVuc2lnbmVkIG1fc3BlY2lmaWNpdHkgOiAyNDsKLSAgICB1bnNpZ25lZCBtX2hhc0Zhc3RD
aGVja2FibGVTZWxlY3RvciA6IDE7Ci0gICAgdW5zaWduZWQgbV9oYXNNdWx0aXBhcnRTZWxlY3Rv
ciA6IDE7Ci0gICAgdW5zaWduZWQgbV9oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJh
c2VkT25SdWxlSGFzaCA6IDE7Ci0gICAgdW5zaWduZWQgbV9jb250YWluc1VuY29tbW9uQXR0cmli
dXRlU2VsZWN0b3IgOiAxOwotICAgIHVuc2lnbmVkIG1fbGlua01hdGNoVHlwZSA6IDI7IC8vICBT
ZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1hc2sKLSAgICB1bnNpZ25lZCBtX2hhc0RvY3VtZW50
U2VjdXJpdHlPcmlnaW4gOiAxOwotICAgIHVuc2lnbmVkIG1faXNJblJlZ2lvblJ1bGUgOiAxOwot
ICAgIC8vIFVzZSBwbGFpbiBhcnJheSBpbnN0ZWFkIG9mIGEgVmVjdG9yIHRvIG1pbmltaXplIG1l
bW9yeSBvdmVyaGVhZC4KLSAgICB1bnNpZ25lZCBtX2Rlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZp
ZXJIYXNoZXNbbWF4aW11bUlkZW50aWZpZXJDb3VudF07Ci19OwotICAgIAotc3RydWN0IFNhbWVT
aXplQXNSdWxlRGF0YSB7Ci0gICAgdm9pZCogYTsKLSAgICB1bnNpZ25lZCBiOwotICAgIHVuc2ln
bmVkIGM7Ci0gICAgdW5zaWduZWQgZFs0XTsKLX07Ci0KLUNPTVBJTEVfQVNTRVJUKHNpemVvZihS
dWxlRGF0YSkgPT0gc2l6ZW9mKFNhbWVTaXplQXNSdWxlRGF0YSksIFJ1bGVEYXRhX3Nob3VsZF9z
dGF5X3NtYWxsKTsKLQotY2xhc3MgUnVsZVNldCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
UnVsZVNldCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzT3duUHRyPFJ1bGVTZXQ+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBSdWxlU2V0
KTsgfQotCi0gICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBPd25QdHI8VmVj
dG9yPFJ1bGVEYXRhPiA+ID4gQXRvbVJ1bGVNYXA7Ci0KLSAgICB2b2lkIGFkZFJ1bGVzRnJvbVNo
ZWV0KFN0eWxlU2hlZXRDb250ZW50cyosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBTdHls
ZVJlc29sdmVyKiA9IDAsIGNvbnN0IENvbnRhaW5lck5vZGUqID0gMCk7Ci0KLSAgICB2b2lkIGFk
ZFN0eWxlUnVsZShTdHlsZVJ1bGUqLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJv
b2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1bGUgPSBmYWxzZSk7
Ci0gICAgdm9pZCBhZGRSdWxlKFN0eWxlUnVsZSosIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIGJv
b2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3Rv
ciwgYm9vbCBpc0luUmVnaW9uUnVsZSA9IGZhbHNlKTsKLSAgICB2b2lkIGFkZFBhZ2VSdWxlKFN0
eWxlUnVsZVBhZ2UqKTsKLSAgICB2b2lkIGFkZFRvUnVsZVNldChBdG9taWNTdHJpbmdJbXBsKiBr
ZXksIEF0b21SdWxlTWFwJiwgY29uc3QgUnVsZURhdGEmKTsKLSAgICB2b2lkIGFkZFJlZ2lvblJ1
bGUoU3R5bGVSdWxlUmVnaW9uKiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKTsKLSAg
ICB2b2lkIHNocmlua1RvRml0KCk7Ci0gICAgdm9pZCBkaXNhYmxlQXV0b1Nocmlua1RvRml0KCkg
eyBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQgPSBmYWxzZTsgfQotCi0gICAgY29uc3QgU3R5bGVS
ZXNvbHZlcjo6RmVhdHVyZXMmIGZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlczsg
fQotCi0gICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogaWRSdWxlcyhBdG9taWNTdHJpbmdJbXBs
KiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1faWRSdWxlcy5nZXQoa2V5KTsgfQotICAgIGNvbnN0IFZl
Y3RvcjxSdWxlRGF0YT4qIGNsYXNzUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7
IHJldHVybiBtX2NsYXNzUnVsZXMuZ2V0KGtleSk7IH0KLSAgICBjb25zdCBWZWN0b3I8UnVsZURh
dGE+KiB0YWdSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1fdGFn
UnVsZXMuZ2V0KGtleSk7IH0KLSAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBzaGFkb3dQc2V1
ZG9FbGVtZW50UnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7IHJldHVybiBtX3No
YWRvd1BzZXVkb0VsZW1lbnRSdWxlcy5nZXQoa2V5KTsgfQotICAgIGNvbnN0IFZlY3RvcjxSdWxl
RGF0YT4qIGxpbmtQc2V1ZG9DbGFzc1J1bGVzKCkgY29uc3QgeyByZXR1cm4gJm1fbGlua1BzZXVk
b0NsYXNzUnVsZXM7IH0KLSAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBmb2N1c1BzZXVkb0Ns
YXNzUnVsZXMoKSBjb25zdCB7IHJldHVybiAmbV9mb2N1c1BzZXVkb0NsYXNzUnVsZXM7IH0KLSAg
ICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiB1bml2ZXJzYWxSdWxlcygpIGNvbnN0IHsgcmV0dXJu
ICZtX3VuaXZlcnNhbFJ1bGVzOyB9Ci0gICAgY29uc3QgVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYg
cGFnZVJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlUnVsZXM7IH0KLQotICAgIHZvaWQgcmVw
b3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwotCi1wdWJsaWM6Ci0gICAg
UnVsZVNldCgpOwotCi0gICAgQXRvbVJ1bGVNYXAgbV9pZFJ1bGVzOwotICAgIEF0b21SdWxlTWFw
IG1fY2xhc3NSdWxlczsKLSAgICBBdG9tUnVsZU1hcCBtX3RhZ1J1bGVzOwotICAgIEF0b21SdWxl
TWFwIG1fc2hhZG93UHNldWRvRWxlbWVudFJ1bGVzOwotICAgIFZlY3RvcjxSdWxlRGF0YT4gbV9s
aW5rUHNldWRvQ2xhc3NSdWxlczsKLSAgICBWZWN0b3I8UnVsZURhdGE+IG1fZm9jdXNQc2V1ZG9D
bGFzc1J1bGVzOwotICAgIFZlY3RvcjxSdWxlRGF0YT4gbV91bml2ZXJzYWxSdWxlczsKLSAgICBW
ZWN0b3I8U3R5bGVSdWxlUGFnZSo+IG1fcGFnZVJ1bGVzOwotICAgIHVuc2lnbmVkIG1fcnVsZUNv
dW50OwotICAgIGJvb2wgbV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkOwotICAgIFN0eWxlUmVzb2x2
ZXI6OkZlYXR1cmVzIG1fZmVhdHVyZXM7Ci0KLSAgICBzdHJ1Y3QgUnVsZVNldFNlbGVjdG9yUGFp
ciB7Ci0gICAgICAgIFJ1bGVTZXRTZWxlY3RvclBhaXIoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBQ
YXNzT3duUHRyPFJ1bGVTZXQ+IHJ1bGVTZXQpIDogc2VsZWN0b3Ioc2VsZWN0b3IpLCBydWxlU2V0
KHJ1bGVTZXQpIHsgfQotICAgICAgICBSdWxlU2V0U2VsZWN0b3JQYWlyKGNvbnN0IFJ1bGVTZXRT
ZWxlY3RvclBhaXImIHJzKSA6IHNlbGVjdG9yKHJzLnNlbGVjdG9yKSwgcnVsZVNldChjb25zdF9j
YXN0PFJ1bGVTZXRTZWxlY3RvclBhaXIqPigmcnMpLT5ydWxlU2V0LnJlbGVhc2UoKSkgeyB9Ci0g
ICAgICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0Owot
Ci0gICAgICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvcjsKLSAgICAgICAgT3duUHRyPFJ1bGVTZXQ+
IHJ1bGVTZXQ7Ci0gICAgfTsKLQotICAgIFZlY3RvcjxSdWxlU2V0U2VsZWN0b3JQYWlyPiBtX3Jl
Z2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzOwotfTsKIAogc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRT
dHlsZTsKIHN0YXRpYyBSdWxlU2V0KiBkZWZhdWx0UXVpcmtzU3R5bGU7CkBAIC00ODEsNyArMzc1
LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGRBdXRob3JSdWxlc0FuZENvbGxlY3RVc2VyUnVs
ZXNGcm9tU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWYKICAgICB9CiB9CiAKLXN0YXRpYyBQYXNzT3du
UHRyPFJ1bGVTZXQ+IG1ha2VSdWxlU2V0KGNvbnN0IFZlY3RvcjxTdHlsZVJlc29sdmVyOjpSdWxl
RmVhdHVyZT4mIHJ1bGVzKQorc3RhdGljIFBhc3NPd25QdHI8UnVsZVNldD4gbWFrZVJ1bGVTZXQo
Y29uc3QgVmVjdG9yPFJ1bGVGZWF0dXJlPiYgcnVsZXMpCiB7CiAgICAgc2l6ZV90IHNpemUgPSBy
dWxlcy5zaXplKCk7CiAgICAgaWYgKCFzaXplKQpAQCAtNzEyLDQ5ICs2MDYsNiBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OnN3ZWVwTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpCiAgICAgICAgIG1fbWF0
Y2hlZFByb3BlcnRpZXNDYWNoZS5yZW1vdmUodG9SZW1vdmVbaV0pOwogfQogCi1TdHlsZVJlc29s
dmVyOjpGZWF0dXJlczo6RmVhdHVyZXMoKQotICAgIDogdXNlc0ZpcnN0TGluZVJ1bGVzKGZhbHNl
KQotICAgICwgdXNlc0JlZm9yZUFmdGVyUnVsZXMoZmFsc2UpCi17Ci19Ci0KLVN0eWxlUmVzb2x2
ZXI6OkZlYXR1cmVzOjp+RmVhdHVyZXMoKQotewotfQotICAgIAotdm9pZCBTdHlsZVJlc29sdmVy
OjpGZWF0dXJlczo6YWRkKGNvbnN0IFN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVzJiBvdGhlcikKLXsK
LSAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPjo6aXRlcmF0b3IgZW5kID0gb3RoZXIuaWRz
SW5SdWxlcy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+OjppdGVy
YXRvciBpdCA9IG90aGVyLmlkc0luUnVsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBpZHNJblJ1bGVzLmFkZCgqaXQpOwotICAgIGVuZCA9IG90aGVyLmF0dHJzSW5SdWxlcy5l
bmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+OjppdGVyYXRvciBpdCA9
IG90aGVyLmF0dHJzSW5SdWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGF0
dHJzSW5SdWxlcy5hZGQoKml0KTsKLSAgICBzaWJsaW5nUnVsZXMuYXBwZW5kKG90aGVyLnNpYmxp
bmdSdWxlcyk7Ci0gICAgdW5jb21tb25BdHRyaWJ1dGVSdWxlcy5hcHBlbmQob3RoZXIudW5jb21t
b25BdHRyaWJ1dGVSdWxlcyk7Ci0gICAgdXNlc0ZpcnN0TGluZVJ1bGVzID0gdXNlc0ZpcnN0TGlu
ZVJ1bGVzIHx8IG90aGVyLnVzZXNGaXJzdExpbmVSdWxlczsKLSAgICB1c2VzQmVmb3JlQWZ0ZXJS
dWxlcyA9IHVzZXNCZWZvcmVBZnRlclJ1bGVzIHx8IG90aGVyLnVzZXNCZWZvcmVBZnRlclJ1bGVz
OwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVzOjpjbGVhcigpCi17Ci0gICAgaWRz
SW5SdWxlcy5jbGVhcigpOwotICAgIGF0dHJzSW5SdWxlcy5jbGVhcigpOwotICAgIHNpYmxpbmdS
dWxlcy5jbGVhcigpOwotICAgIHVuY29tbW9uQXR0cmlidXRlUnVsZXMuY2xlYXIoKTsKLSAgICB1
c2VzRmlyc3RMaW5lUnVsZXMgPSBmYWxzZTsKLSAgICB1c2VzQmVmb3JlQWZ0ZXJSdWxlcyA9IGZh
bHNlOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVzOjpyZXBvcnRNZW1vcnlVc2Fn
ZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAotewotICAgIE1lbW9y
eUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBl
czo6Q1NTKTsKLSAgICBpbmZvLmFkZE1lbWJlcihpZHNJblJ1bGVzKTsKLSAgICBpbmZvLmFkZE1l
bWJlcihhdHRyc0luUnVsZXMpOwotICAgIGluZm8uYWRkTWVtYmVyKHNpYmxpbmdSdWxlcyk7Ci0g
ICAgaW5mby5hZGRNZW1iZXIodW5jb21tb25BdHRyaWJ1dGVSdWxlcyk7Ci19Ci0KIHN0YXRpYyBT
dHlsZVNoZWV0Q29udGVudHMqIHBhcnNlVUFTaGVldChjb25zdCBTdHJpbmcmIHN0cikKIHsKICAg
ICBTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0ID0gU3R5bGVTaGVldENvbnRlbnRzOjpjcmVhdGUo
KS5sZWFrUmVmKCk7IC8vIGxlYWsgdGhlIHNoZWV0IG9uIHB1cnBvc2UKQEAgLTI0NzIsMzM5ICsy
MzIzLDYgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpkZXRlcm1pbmVTdHlsZXNoZWV0U2VsZWN0b3JT
Y29wZXMoU3R5bGVTaGVldENvbnRlbnRzKiBzdHlsZXMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotc3RhdGljIGlubGluZSBib29sIGlzU2VsZWN0b3JNYXRjaGluZ0hUTUxC
YXNlZE9uUnVsZUhhc2goY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgc2VsZWN0b3JOYW1lc3BhY2UgPSBzZWxlY3Rvci0+dGFnKCkubmFtZXNw
YWNlVVJJKCk7Ci0gICAgaWYgKHNlbGVjdG9yTmFtZXNwYWNlICE9IHN0YXJBdG9tICYmIHNlbGVj
dG9yTmFtZXNwYWNlICE9IHhodG1sTmFtZXNwYWNlVVJJKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpOb25lKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoc2VsZWN0b3ItPnRhZygpICE9IHN0YXJBdG9tKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKFNlbGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1
ZG9DbGFzc1NlbGVjdG9yKHNlbGVjdG9yKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0
dXJuIHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCB8fCBzZWxlY3Rvci0+bV9t
YXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZWxl
Y3Rvckxpc3RDb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0
b3IqIHNlbGVjdG9yKQotewotICAgIENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0ID0gc2Vs
ZWN0b3ItPnNlbGVjdG9yTGlzdCgpOwotICAgIGlmICghc2VsZWN0b3JMaXN0KQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChDU1NTZWxlY3Rvciogc3ViU2VsZWN0b3IgPSBzZWxlY3Rv
ckxpc3QtPmZpcnN0KCk7IHN1YlNlbGVjdG9yOyBzdWJTZWxlY3RvciA9IENTU1NlbGVjdG9yTGlz
dDo6bmV4dChzdWJTZWxlY3RvcikpIHsKLSAgICAgICAgaWYgKHN1YlNlbGVjdG9yLT5pc0F0dHJp
YnV0ZVNlbGVjdG9yKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNDb21tb25BdHRyaWJ1dGVTZWxl
Y3RvckF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpCi17Ci0gICAgLy8g
VGhlc2UgYXJlIGV4cGxpY2l0bHkgdGVzdGVkIGZvciBlcXVhbGl0eSBpbiBjYW5TaGFyZVN0eWxl
V2l0aEVsZW1lbnQuCi0gICAgcmV0dXJuIGF0dHJpYnV0ZSA9PSB0eXBlQXR0ciB8fCBhdHRyaWJ1
dGUgPT0gcmVhZG9ubHlBdHRyOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgY29udGFpbnNVbmNv
bW1vbkF0dHJpYnV0ZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAg
ICBmb3IgKDsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewot
ICAgICAgICAvLyBBbGxvdyBjZXJ0YWluIGNvbW1vbiBhdHRyaWJ1dGVzICh1c2VkIGluIHRoZSBk
ZWZhdWx0IHN0eWxlKSBpbiB0aGUgc2VsZWN0b3JzIHRoYXQgbWF0Y2ggdGhlIGN1cnJlbnQgZWxl
bWVudC4KLSAgICAgICAgaWYgKHNlbGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkgJiYgIWlz
Q29tbW9uQXR0cmlidXRlU2VsZWN0b3JBdHRyaWJ1dGUoc2VsZWN0b3ItPmF0dHJpYnV0ZSgpKSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoc2VsZWN0b3JMaXN0Q29udGFp
bnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKHNlbGVjdG9yKSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgIT0gQ1NTU2VsZWN0b3I6
OlN1YlNlbGVjdG9yKSB7Ci0gICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0
b3J5KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAo
OyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7Ci0gICAgICAg
IGlmIChzZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIGlmIChzZWxlY3Rvckxpc3RDb250YWluc1VuY29tbW9uQXR0cmlidXRl
U2VsZWN0b3Ioc2VsZWN0b3IpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotUnVsZURhdGE6OlJ1bGVEYXRhKFN0eWxlUnVsZSogcnVsZSwg
dW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgcG9zaXRpb24sIGJvb2wgaGFzRG9jdW1l
bnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpblJl
Z2lvblJ1bGUpCi0gICAgOiBtX3J1bGUocnVsZSkKLSAgICAsIG1fc2VsZWN0b3JJbmRleChzZWxl
Y3RvckluZGV4KQotICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbikKLSAgICAsIG1fc3BlY2lmaWNp
dHkoc2VsZWN0b3IoKS0+c3BlY2lmaWNpdHkoKSkKLSAgICAsIG1faGFzRmFzdENoZWNrYWJsZVNl
bGVjdG9yKGNhblVzZUZhc3RDaGVja1NlbGVjdG9yICYmIFNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0
Q2hlY2thYmxlU2VsZWN0b3Ioc2VsZWN0b3IoKSkpCi0gICAgLCBtX2hhc011bHRpcGFydFNlbGVj
dG9yKCEhc2VsZWN0b3IoKS0+dGFnSGlzdG9yeSgpKQotICAgICwgbV9oYXNSaWdodG1vc3RTZWxl
Y3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaChpc1NlbGVjdG9yTWF0Y2hpbmdIVE1MQmFz
ZWRPblJ1bGVIYXNoKHNlbGVjdG9yKCkpKQotICAgICwgbV9jb250YWluc1VuY29tbW9uQXR0cmli
dXRlU2VsZWN0b3IoV2ViQ29yZTo6Y29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKHNl
bGVjdG9yKCkpKQotICAgICwgbV9saW5rTWF0Y2hUeXBlKFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJt
aW5lTGlua01hdGNoVHlwZShzZWxlY3RvcigpKSkKLSAgICAsIG1faGFzRG9jdW1lbnRTZWN1cml0
eU9yaWdpbihoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKQotICAgICwgbV9pc0luUmVnaW9uUnVs
ZShpblJlZ2lvblJ1bGUpCi17Ci0gICAgQVNTRVJUKG1fcG9zaXRpb24gPT0gcG9zaXRpb24pOwot
ICAgIEFTU0VSVChtX3NlbGVjdG9ySW5kZXggPT0gc2VsZWN0b3JJbmRleCk7Ci0gICAgU2VsZWN0
b3JDaGVja2VyOjpjb2xsZWN0SWRlbnRpZmllckhhc2hlcyhzZWxlY3RvcigpLCBtX2Rlc2NlbmRh
bnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMsIG1heGltdW1JZGVudGlmaWVyQ291bnQpOwotfQot
Ci12b2lkIFJ1bGVEYXRhOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1v
cnlPYmplY3RJbmZvKSBjb25zdAotewotICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9i
amVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6Q1NTKTsKLX0KLQotUnVsZVNldDo6
UnVsZVNldCgpCi0gICAgOiBtX3J1bGVDb3VudCgwKQotICAgICwgbV9hdXRvU2hyaW5rVG9GaXRF
bmFibGVkKHRydWUpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIHJlcG9ydEF0b21SdWxlTWFwKE1lbW9y
eUNsYXNzSW5mbyogaW5mbywgY29uc3QgUnVsZVNldDo6QXRvbVJ1bGVNYXAmIGF0b21pY1J1bGVN
YXApCi17Ci0gICAgaW5mby0+YWRkTWVtYmVyKGF0b21pY1J1bGVNYXApOwotICAgIGZvciAoUnVs
ZVNldDo6QXRvbVJ1bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYXRvbWljUnVsZU1hcC5iZWdp
bigpOyBpdCAhPSBhdG9taWNSdWxlTWFwLmVuZCgpOyArK2l0KQotICAgICAgICBpbmZvLT5hZGRN
ZW1iZXIoKml0LT5zZWNvbmQpOwotfQotCi12b2lkIFJ1bGVTZXQ6OnJlcG9ydE1lbW9yeVVzYWdl
KE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0Ci17Ci0gICAgTWVtb3J5
Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVz
OjpDU1MpOwotICAgIHJlcG9ydEF0b21SdWxlTWFwKCZpbmZvLCBtX2lkUnVsZXMpOwotICAgIHJl
cG9ydEF0b21SdWxlTWFwKCZpbmZvLCBtX2NsYXNzUnVsZXMpOwotICAgIHJlcG9ydEF0b21SdWxl
TWFwKCZpbmZvLCBtX3RhZ1J1bGVzKTsKLSAgICByZXBvcnRBdG9tUnVsZU1hcCgmaW5mbywgbV9z
aGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fbGlua1BzZXVk
b0NsYXNzUnVsZXMpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVz
KTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3VuaXZlcnNhbFJ1bGVzKTsKLSAgICBpbmZvLmFkZE1l
bWJlcihtX3BhZ2VSdWxlcyk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9yZWdpb25TZWxlY3RvcnNB
bmRSdWxlU2V0cyk7Ci19Ci0KLXZvaWQgUnVsZVNldDo6UnVsZVNldFNlbGVjdG9yUGFpcjo6cmVw
b3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QK
LXsKLSAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJD
b3JlTWVtb3J5VHlwZXM6OkNTUyk7Ci0gICAgaW5mby5hZGRNZW1iZXIocnVsZVNldCk7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgdm9pZCBjb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoU3R5bGVSZXNv
bHZlcjo6RmVhdHVyZXMmIGZlYXR1cmVzLCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCi17
Ci0gICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCkKLSAgICAgICAg
ZmVhdHVyZXMuaWRzSW5SdWxlcy5hZGQoc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpKTsKLSAgICBp
ZiAoc2VsZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0b3IoKSkKLSAgICAgICAgZmVhdHVyZXMuYXR0
cnNJblJ1bGVzLmFkZChzZWxlY3Rvci0+YXR0cmlidXRlKCkubG9jYWxOYW1lKCkuaW1wbCgpKTsK
LSAgICBzd2l0Y2ggKHNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkpIHsKLSAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9GaXJzdExpbmU6Ci0gICAgICAgIGZlYXR1cmVzLnVzZXNGaXJzdExpbmVSdWxl
cyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Jl
Zm9yZToKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BZnRlcjoKLSAgICAgICAgZmVhdHVy
ZXMudXNlc0JlZm9yZUFmdGVyUnVsZXMgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbGxlY3RGZWF0
dXJlc0Zyb21SdWxlRGF0YShTdHlsZVJlc29sdmVyOjpGZWF0dXJlcyYgZmVhdHVyZXMsIGNvbnN0
IFJ1bGVEYXRhJiBydWxlRGF0YSkKLXsKLSAgICBib29sIGZvdW5kU2libGluZ1NlbGVjdG9yID0g
ZmFsc2U7Ci0gICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBydWxlRGF0YS5zZWxlY3Rv
cigpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7Ci0gICAg
ICAgIGNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3RvcihmZWF0dXJlcywgc2VsZWN0b3IpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0ID0gc2VsZWN0
b3ItPnNlbGVjdG9yTGlzdCgpKSB7Ci0gICAgICAgICAgICBmb3IgKENTU1NlbGVjdG9yKiBzdWJT
ZWxlY3RvciA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3ViU2VsZWN0b3I7IHN1YlNlbGVjdG9y
ID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YlNlbGVjdG9yKSkgewotICAgICAgICAgICAgICAg
IGlmICghZm91bmRTaWJsaW5nU2VsZWN0b3IgJiYgc2VsZWN0b3ItPmlzU2libGluZ1NlbGVjdG9y
KCkpCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kU2libGluZ1NlbGVjdG9yID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICBjb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoZmVhdHVyZXMsIHN1YlNl
bGVjdG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICghZm91bmRTaWJsaW5n
U2VsZWN0b3IgJiYgc2VsZWN0b3ItPmlzU2libGluZ1NlbGVjdG9yKCkpCi0gICAgICAgICAgICBm
b3VuZFNpYmxpbmdTZWxlY3RvciA9IHRydWU7Ci0gICAgfQotICAgIGlmIChmb3VuZFNpYmxpbmdT
ZWxlY3RvcikKLSAgICAgICAgZmVhdHVyZXMuc2libGluZ1J1bGVzLmFwcGVuZChTdHlsZVJlc29s
dmVyOjpSdWxlRmVhdHVyZShydWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVjdG9ySW5kZXgo
KSwgcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpKSk7Ci0gICAgaWYgKHJ1bGVE
YXRhLmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpKQotICAgICAgICBmZWF0dXJl
cy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmFwcGVuZChTdHlsZVJlc29sdmVyOjpSdWxlRmVhdHVy
ZShydWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVjdG9ySW5kZXgoKSwgcnVsZURhdGEuaGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbigpKSk7Ci19Ci0gICAgCi12b2lkIFJ1bGVTZXQ6OmFkZFRv
UnVsZVNldChBdG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiBtYXAsIGNvbnN0IFJ1
bGVEYXRhJiBydWxlRGF0YSkKLXsKLSAgICBpZiAoIWtleSkKLSAgICAgICAgcmV0dXJuOwotICAg
IE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4mIHJ1bGVzID0gbWFwLmFkZChrZXksIG51bGxwdHIp
Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0gICAgaWYgKCFydWxlcykKLSAgICAgICAgcnVsZXMgPSBhZG9w
dFB0cihuZXcgVmVjdG9yPFJ1bGVEYXRhPik7Ci0gICAgcnVsZXMtPmFwcGVuZChydWxlRGF0YSk7
Ci19Ci0KLXZvaWQgUnVsZVNldDo6YWRkUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNl
bGVjdG9ySW5kZXgsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VG
YXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpblJlZ2lvblJ1bGUpCi17Ci0gICAgUnVsZURhdGEgcnVs
ZURhdGEocnVsZSwgc2VsZWN0b3JJbmRleCwgbV9ydWxlQ291bnQrKywgaGFzRG9jdW1lbnRTZWN1
cml0eU9yaWdpbiwgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGluUmVnaW9uUnVsZSk7Ci0gICAg
Y29sbGVjdEZlYXR1cmVzRnJvbVJ1bGVEYXRhKG1fZmVhdHVyZXMsIHJ1bGVEYXRhKTsKLQotICAg
IENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHJ1bGVEYXRhLnNlbGVjdG9yKCk7Ci0KLSAgICBpZiAo
c2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkKSB7Ci0gICAgICAgIGFkZFRvUnVs
ZVNldChzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCksIG1faWRSdWxlcywgcnVsZURhdGEpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxl
Y3Rvcjo6Q2xhc3MpIHsKLSAgICAgICAgYWRkVG9SdWxlU2V0KHNlbGVjdG9yLT52YWx1ZSgpLmlt
cGwoKSwgbV9jbGFzc1J1bGVzLCBydWxlRGF0YSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKHNlbGVjdG9yLT5pc1Vua25vd25Qc2V1ZG9FbGVtZW50KCkpIHsKLSAgICAgICAgYWRk
VG9SdWxlU2V0KHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSwgbV9zaGFkb3dQc2V1ZG9FbGVtZW50
UnVsZXMsIHJ1bGVEYXRhKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoU2VsZWN0
b3JDaGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3Ioc2VsZWN0b3IpKSB7Ci0gICAg
ICAgIHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb1R5cGUoKSkgewotICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9MaW5rOgotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNp
dGVkOgotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BbnlMaW5rOgotICAgICAgICAg
ICAgbV9saW5rUHNldWRvQ2xhc3NSdWxlcy5hcHBlbmQocnVsZURhdGEpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Gb2N1czoKLSAgICAgICAg
ICAgIG1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzLmFwcGVuZChydWxlRGF0YSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgbG9jYWxOYW1lID0gc2VsZWN0b3ItPnRhZygpLmxvY2FsTmFtZSgpOwotICAgIGlm
IChsb2NhbE5hbWUgIT0gc3RhckF0b20pIHsKLSAgICAgICAgYWRkVG9SdWxlU2V0KGxvY2FsTmFt
ZS5pbXBsKCksIG1fdGFnUnVsZXMsIHJ1bGVEYXRhKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBtX3VuaXZlcnNhbFJ1bGVzLmFwcGVuZChydWxlRGF0YSk7Ci19Ci0KLXZvaWQgUnVsZVNl
dDo6YWRkUGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSogcnVsZSkKLXsKLSAgICBtX3BhZ2VSdWxlcy5h
cHBlbmQocnVsZSk7Ci19Ci0KLXZvaWQgUnVsZVNldDo6YWRkUmVnaW9uUnVsZShTdHlsZVJ1bGVS
ZWdpb24qIHJlZ2lvblJ1bGUsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbikKLXsKLSAg
ICBPd25QdHI8UnVsZVNldD4gcmVnaW9uUnVsZVNldCA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwotICAg
IC8vIFRoZSByZWdpb24gcnVsZSBzZXQgc2hvdWxkIHRha2UgaW50byBhY2NvdW50IHRoZSBwb3Np
dGlvbiBpbnNpZGUgdGhlIHBhcmVudCBydWxlIHNldC4KLSAgICAvLyBPdGhlcndpc2UsIHRoZSBy
dWxlcyBpbnNpZGUgcmVnaW9uIGJsb2NrIG1pZ2h0IGJlIGluY29ycmVjdGx5IHBvc2l0aW9uZWQg
YmVmb3JlIG90aGVyIHNpbWlsYXIgcnVsZXMgZnJvbQotICAgIC8vIHRoZSBzdHlsZXNoZWV0IHRo
YXQgY29udGFpbnMgdGhlIHJlZ2lvbiBibG9jay4KLSAgICByZWdpb25SdWxlU2V0LT5tX3J1bGVD
b3VudCA9IG1fcnVsZUNvdW50OwotCi0gICAgLy8gQ29sbGVjdCB0aGUgcmVnaW9uIHJ1bGVzIGlu
dG8gYSBydWxlIHNldAotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYg
Y2hpbGRSdWxlcyA9IHJlZ2lvblJ1bGUtPmNoaWxkUnVsZXMoKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY2hpbGRSdWxlcy5zaXplKCk7ICsraSkgewotICAgICAgICBTdHlsZVJ1bGVC
YXNlKiByZWdpb25TdHlsaW5nUnVsZSA9IGNoaWxkUnVsZXNbaV0uZ2V0KCk7Ci0gICAgICAgIGlm
IChyZWdpb25TdHlsaW5nUnVsZS0+aXNTdHlsZVJ1bGUoKSkKLSAgICAgICAgICAgIHJlZ2lvblJ1
bGVTZXQtPmFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihyZWdpb25TdHlsaW5n
UnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIHRydWUsIHRydWUpOwotICAgIH0KLSAg
ICAvLyBVcGRhdGUgdGhlICJnbG9iYWwiIHJ1bGUgY291bnQgc28gdGhhdCBwcm9wZXIgb3JkZXIg
aXMgbWFpbnRhaW5lZAotICAgIG1fcnVsZUNvdW50ID0gcmVnaW9uUnVsZVNldC0+bV9ydWxlQ291
bnQ7Ci0KLSAgICBtX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmFwcGVuZChSdWxlU2V0U2Vs
ZWN0b3JQYWlyKHJlZ2lvblJ1bGUtPnNlbGVjdG9yTGlzdCgpLmZpcnN0KCksIHJlZ2lvblJ1bGVT
ZXQucmVsZWFzZSgpKSk7Ci19Ci0KLXZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoU3R5
bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaXVt
LCBTdHlsZVJlc29sdmVyKiByZXNvbHZlciwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCi17
Ci0gICAgQVNTRVJUKHNoZWV0KTsKLSAgICAKLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxl
UnVsZUltcG9ydD4gPiYgaW1wb3J0UnVsZXMgPSBzaGVldC0+aW1wb3J0UnVsZXMoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW1wb3J0UnVsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgU3R5bGVSdWxlSW1wb3J0KiBpbXBvcnRSdWxlID0gaW1wb3J0UnVsZXNbaV0uZ2V0KCk7Ci0g
ICAgICAgIGlmIChpbXBvcnRSdWxlLT5zdHlsZVNoZWV0KCkgJiYgKCFpbXBvcnRSdWxlLT5tZWRp
YVF1ZXJpZXMoKSB8fCBtZWRpdW0uZXZhbChpbXBvcnRSdWxlLT5tZWRpYVF1ZXJpZXMoKSwgcmVz
b2x2ZXIpKSkKLSAgICAgICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KGltcG9ydFJ1bGUtPnN0eWxl
U2hlZXQoKSwgbWVkaXVtLCByZXNvbHZlciwgc2NvcGUpOwotICAgIH0KLSAgICBib29sIGhhc0Rv
Y3VtZW50U2VjdXJpdHlPcmlnaW4gPSByZXNvbHZlciAmJiByZXNvbHZlci0+ZG9jdW1lbnQoKS0+
c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChzaGVldC0+YmFzZVVSTCgpKTsKLQotICAgIGNv
bnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgcnVsZXMgPSBzaGVldC0+Y2hpbGRS
dWxlcygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxlcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBTdHlsZVJ1bGVCYXNlKiBydWxlID0gcnVsZXNbaV0uZ2V0KCk7Ci0KLSAgICAg
ICAgQVNTRVJUKCFydWxlLT5pc0ltcG9ydFJ1bGUoKSk7Ci0gICAgICAgIGlmIChydWxlLT5pc1N0
eWxlUnVsZSgpKQotICAgICAgICAgICAgYWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVs
ZSo+KHJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCAhc2NvcGUpOwotICAgICAgICBl
bHNlIGlmIChydWxlLT5pc1BhZ2VSdWxlKCkpCi0gICAgICAgICAgICBhZGRQYWdlUnVsZShzdGF0
aWNfY2FzdDxTdHlsZVJ1bGVQYWdlKj4ocnVsZSkpOwotICAgICAgICBlbHNlIGlmIChydWxlLT5p
c01lZGlhUnVsZSgpKSB7Ci0gICAgICAgICAgICBTdHlsZVJ1bGVNZWRpYSogbWVkaWFSdWxlID0g
c3RhdGljX2Nhc3Q8U3R5bGVSdWxlTWVkaWEqPihydWxlKTsKLQotICAgICAgICAgICAgaWYgKCgh
bWVkaWFSdWxlLT5tZWRpYVF1ZXJpZXMoKSB8fCBtZWRpdW0uZXZhbChtZWRpYVJ1bGUtPm1lZGlh
UXVlcmllcygpLCByZXNvbHZlcikpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHJhdmVyc2UgY2hp
bGQgZWxlbWVudHMgb2YgdGhlIEBtZWRpYSBydWxlLgotICAgICAgICAgICAgICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgY2hpbGRSdWxlcyA9IG1lZGlhUnVsZS0+Y2hp
bGRSdWxlcygpOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBjaGls
ZFJ1bGVzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0eWxlUnVsZUJhc2Uq
IGNoaWxkUnVsZSA9IGNoaWxkUnVsZXNbal0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChjaGlsZFJ1bGUtPmlzU3R5bGVSdWxlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRT
dHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4oY2hpbGRSdWxlKSwgaGFzRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbiwgIXNjb3BlKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hp
bGRSdWxlLT5pc1BhZ2VSdWxlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRQYWdlUnVs
ZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVQYWdlKj4oY2hpbGRSdWxlKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGNoaWxkUnVsZS0+aXNGb250RmFjZVJ1bGUoKSAmJiByZXNvbHZlcikg
ewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBz
ZXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRShCVUcgNzI0NjEpOiBXZSBkb24n
dCBhZGQgQGZvbnQtZmFjZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9t
ZW50LgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3R5
bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSA9IHN0YXRpY19jYXN0PFN0eWxlUnVsZUZvbnRG
YWNlKj4oY2hpbGRSdWxlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVyLT5mb250
U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxlKGZvbnRGYWNlUnVsZSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXNvbHZlci0+aW52YWxpZGF0ZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZFJ1bGUtPmlzS2V5ZnJhbWVzUnVs
ZSgpICYmIHJlc29sdmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBr
ZXlmcmFtZSBydWxlIHRvIG91ciBzZXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhN
RShCVUcgNzI0NjIpOiBXZSBkb24ndCBhZGQgQGtleWZyYW1lIHJ1bGVzIG9mIHNjb3BlZCBzdHls
ZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Nv
cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXNvbHZlci0+YWRkS2V5ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxTdHlsZVJ1
bGVLZXlmcmFtZXMqPihjaGlsZFJ1bGUpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0gLy8gZm9yIHJ1bGVzCi0gICAgICAgICAgICB9IC8vIGlmIHJ1bGVzCi0gICAg
ICAgIH0gZWxzZSBpZiAocnVsZS0+aXNGb250RmFjZVJ1bGUoKSAmJiByZXNvbHZlcikgewotICAg
ICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBzZXQuCi0gICAgICAgICAgICAv
LyBGSVhNRShCVUcgNzI0NjEpOiBXZSBkb24ndCBhZGQgQGZvbnQtZmFjZSBydWxlcyBvZiBzY29w
ZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgotICAgICAgICAgICAgaWYgKHNjb3BlKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY29uc3QgU3R5bGVSdWxlRm9u
dEZhY2UqIGZvbnRGYWNlUnVsZSA9IHN0YXRpY19jYXN0PFN0eWxlUnVsZUZvbnRGYWNlKj4ocnVs
ZSk7Ci0gICAgICAgICAgICByZXNvbHZlci0+Zm9udFNlbGVjdG9yKCktPmFkZEZvbnRGYWNlUnVs
ZShmb250RmFjZVJ1bGUpOwotICAgICAgICAgICAgcmVzb2x2ZXItPmludmFsaWRhdGVNYXRjaGVk
UHJvcGVydGllc0NhY2hlKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAocnVsZS0+aXNLZXlmcmFtZXNS
dWxlKCkgJiYgcmVzb2x2ZXIpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FIChCVUcgNzI0NjIpOiBX
ZSBkb24ndCBhZGQgQGtleWZyYW1lIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRo
ZSBtb21lbnQuCi0gICAgICAgICAgICBpZiAoc2NvcGUpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICByZXNvbHZlci0+YWRkS2V5ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxT
dHlsZVJ1bGVLZXlmcmFtZXMqPihydWxlKSk7Ci0gICAgICAgIH0KLSNpZiBFTkFCTEUoQ1NTX1JF
R0lPTlMpCi0gICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzUmVnaW9uUnVsZSgpICYmIHJlc29sdmVy
KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRSAoQlVHIDcyNDcyKTogV2UgZG9uJ3QgYWRkIEAtd2Vi
a2l0LXJlZ2lvbiBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50Lgot
ICAgICAgICAgICAgaWYgKHNjb3BlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgYWRkUmVnaW9uUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVSZWdpb24qPihydWxlKSwg
aGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbik7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgIH0KLSAg
ICBpZiAobV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKQotICAgICAgICBzaHJpbmtUb0ZpdCgpOwot
fQotCi12b2lkIFJ1bGVTZXQ6OmFkZFN0eWxlUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIGJvb2wgaGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9v
bCBpc0luUmVnaW9uUnVsZSkKLXsKLSAgICBmb3IgKHNpemVfdCBzZWxlY3RvckluZGV4ID0gMDsg
c2VsZWN0b3JJbmRleCAhPSBub3RGb3VuZDsgc2VsZWN0b3JJbmRleCA9IHJ1bGUtPnNlbGVjdG9y
TGlzdCgpLmluZGV4T2ZOZXh0U2VsZWN0b3JBZnRlcihzZWxlY3RvckluZGV4KSkKLSAgICAgICAg
YWRkUnVsZShydWxlLCBzZWxlY3RvckluZGV4LCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBj
YW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgaXNJblJlZ2lvblJ1bGUpOwotfQotCi1zdGF0aWMgaW5s
aW5lIHZvaWQgc2hyaW5rTWFwVmVjdG9yc1RvRml0KFJ1bGVTZXQ6OkF0b21SdWxlTWFwJiBtYXAp
Ci17Ci0gICAgUnVsZVNldDo6QXRvbVJ1bGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsK
LSAgICBmb3IgKFJ1bGVTZXQ6OkF0b21SdWxlTWFwOjppdGVyYXRvciBpdCA9IG1hcC5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnNocmlua1RvRml0KCk7Ci19
Ci0KLXZvaWQgUnVsZVNldDo6c2hyaW5rVG9GaXQoKQotewotICAgIHNocmlua01hcFZlY3RvcnNU
b0ZpdChtX2lkUnVsZXMpOwotICAgIHNocmlua01hcFZlY3RvcnNUb0ZpdChtX2NsYXNzUnVsZXMp
OwotICAgIHNocmlua01hcFZlY3RvcnNUb0ZpdChtX3RhZ1J1bGVzKTsKLSAgICBzaHJpbmtNYXBW
ZWN0b3JzVG9GaXQobV9zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMpOwotICAgIG1fbGlua1BzZXVk
b0NsYXNzUnVsZXMuc2hyaW5rVG9GaXQoKTsKLSAgICBtX2ZvY3VzUHNldWRvQ2xhc3NSdWxlcy5z
aHJpbmtUb0ZpdCgpOwotICAgIG1fdW5pdmVyc2FsUnVsZXMuc2hyaW5rVG9GaXQoKTsKLSAgICBt
X3BhZ2VSdWxlcy5zaHJpbmtUb0ZpdCgpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAvLyB0aGlzIGlzIG1vc3RseSBib3Jpbmcgc3R1ZmYgb24gaG93IHRvIGFwcGx5IGEg
Y2VydGFpbiBydWxlIHRvIHRoZSByZW5kZXJzdHlsZS4uLgogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuaAppbmRleCBmMzJjNzEzYjgxYjA4ZTAwODgyNzU5YTk3MjFjYzI2MDc3YTFiMjBhLi5h
ZmI3YTQ4NTYyYWQ3OGZkMjljMDI0YTM2N2I0ZTI4NmZmZWIzMTY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJMaW5rSGFzaC5oIgog
I2luY2x1ZGUgIk1lZGlhUXVlcnlFeHAuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2lu
Y2x1ZGUgIlJ1bGVGZWF0dXJlLmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyLmgiCiAjaW5j
bHVkZSAiU3R5bGVJbmhlcml0ZWREYXRhLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAg
LTI3NCwzMSArMjc1LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBsb2FkUGVuZGluZ1Jlc291cmNl
cygpOwogCi0gICAgc3RydWN0IFJ1bGVGZWF0dXJlIHsKLSAgICAgICAgUnVsZUZlYXR1cmUoU3R5
bGVSdWxlKiBydWxlLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCBib29sIGhhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW4pCi0gICAgICAgICAgICA6IHJ1bGUocnVsZSkKLSAgICAgICAgICAgICwgc2Vs
ZWN0b3JJbmRleChzZWxlY3RvckluZGV4KQotICAgICAgICAgICAgLCBoYXNEb2N1bWVudFNlY3Vy
aXR5T3JpZ2luKGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pIAotICAgICAgICB7IAotICAgICAg
ICB9Ci0gICAgICAgIFN0eWxlUnVsZSogcnVsZTsKLSAgICAgICAgdW5zaWduZWQgc2VsZWN0b3JJ
bmRleDsKLSAgICAgICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luOwotICAgIH07Ci0g
ICAgc3RydWN0IEZlYXR1cmVzIHsKLSAgICAgICAgRmVhdHVyZXMoKTsKLSAgICAgICAgfkZlYXR1
cmVzKCk7Ci0gICAgICAgIHZvaWQgYWRkKGNvbnN0IFN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVzJik7
Ci0gICAgICAgIHZvaWQgY2xlYXIoKTsKLSAgICAgICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShN
ZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7Ci0gICAgICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1w
bCo+IGlkc0luUnVsZXM7Ci0gICAgICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IGF0dHJz
SW5SdWxlczsKLSAgICAgICAgVmVjdG9yPFJ1bGVGZWF0dXJlPiBzaWJsaW5nUnVsZXM7Ci0gICAg
ICAgIFZlY3RvcjxSdWxlRmVhdHVyZT4gdW5jb21tb25BdHRyaWJ1dGVSdWxlczsKLSAgICAgICAg
Ym9vbCB1c2VzRmlyc3RMaW5lUnVsZXM7Ci0gICAgICAgIGJvb2wgdXNlc0JlZm9yZUFmdGVyUnVs
ZXM7Ci0gICAgfTsKLQogcHJpdmF0ZToKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGZpeGVzIHVwIHRo
ZSBkZWZhdWx0IGZvbnQgc2l6ZSBpZiBpdCBkZXRlY3RzIHRoYXQgdGhlIGN1cnJlbnQgZ2VuZXJp
YyBmb250IGZhbWlseSBoYXMgY2hhbmdlZC4gLWR3aAogICAgIHZvaWQgY2hlY2tGb3JHZW5lcmlj
RmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKQEAg
LTM5NSw3ICszNzEsNyBAQCBwcml2YXRlOgogICAgIE93blB0cjxSdWxlU2V0PiBtX2F1dGhvclN0
eWxlOwogICAgIE93blB0cjxSdWxlU2V0PiBtX3VzZXJTdHlsZTsKIAotICAgIEZlYXR1cmVzIG1f
ZmVhdHVyZXM7CisgICAgUnVsZUZlYXR1cmVTZXQgbV9mZWF0dXJlczsKICAgICBPd25QdHI8UnVs
ZVNldD4gbV9zaWJsaW5nUnVsZVNldDsKICAgICBPd25QdHI8UnVsZVNldD4gbV91bmNvbW1vbkF0
dHJpYnV0ZVJ1bGVTZXQ7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167237</attachid>
            <date>2012-10-04 19:56:33 -0700</date>
            <delta_ts>2012-10-04 21:17:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98469-20121005115541.patch</filename>
            <type>text/plain</type>
            <size>67267</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNDQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2M1OWU5NDllZTcyNGMy
NDhlOTM3MWMyODg5M2NjZGQzZDgyOTM1Ny4uMzk5MzFiMDk3NjE1NmFlMTc1MjcxYzA4OWI0YzFl
ZjkxYjEzMjBkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk1IEBACisyMDEyLTEwLTA0ICBIYWpp
bWUgTW9ycml0YSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBbUmVmYWN0b3Jpbmdd
IFNvbWUgY2xhc3NlcyBpbiBTdHlsZVJlc29sdmVyLmNwcC9oIGNvdWxkIGhhdmUgaXRzIG93biBm
aWxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTg0
NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IGNoYW5nZSBleHRyYWN0cyBSdWxlRGF0YSwgUnVsZVNldCwgUnVsZUZlYXR1cmUgYW5kIEZlYXR1
cnMgY2xhc3MKKyAgICAgICAgdG8gaXRzIG93biBmaWxlOiBSdWxlU2V0LmgvY3BwIGFuZCBSdWxl
RmVhdHVyZS5oL2NwcAorCisgICAgICAgIFJ1bGVGZWF0dXJlIGNsYXNzIGlzIG1vdmVkIGZybyBT
dHlsZVJlc29sdmVyIGlubmVyIGNsYXNzIHRvIHBsYWluIFdlYkNvcmUgY2xhc3MuCisgICAgICAg
IEZlYXVyZXMgY2xhc3MgaXMgcmVuYW1lZCB0byBSdWxlRmVhdHVyZVNldCB0byBhdm9pZCBwb3Nz
aWJsZSBuYW1lIGNvbmZsaWN0LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gSnVzdCBzcGxpdHRp
bmcgZmlsZSBhbmQgZG9pbmcgc2ltcGxlIHJlbmFtZS4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnBy
aToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NBbGxJbk9uZS5jcHA6CisgICAgICAg
ICogY3NzL1J1bGVGZWF0dXJlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJ1bGVGZWF0dXJlU2V0OjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6UnVs
ZUZlYXR1cmVTZXQ6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVGZWF0dXJlU2V0Ojpy
ZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL1J1bGVGZWF0dXJlLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChSdWxlRmVhdHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpSdWxlRmVhdHVyZTo6UnVsZUZlYXR1cmUpOgorICAgICAgICAoUnVsZUZlYXR1cmVTZXQp
OgorICAgICAgICAoV2ViQ29yZTo6UnVsZUZlYXR1cmVTZXQ6OlJ1bGVGZWF0dXJlU2V0KToKKyAg
ICAgICAgKiBjc3MvUnVsZVNldC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjppc1NlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNlbGVjdG9yTGlzdENvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxl
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjppc0NvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yQXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpSdWxlRGF0YTo6UnVsZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6UnVsZURhdGE6OnJlcG9ydE1lbW9yeVVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OnJl
cG9ydEF0b21SdWxlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OnJlcG9ydE1lbW9y
eVVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OlJ1bGVTZXRTZWxlY3RvclBhaXI6
OnJlcG9ydE1lbW9yeVVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbGxlY3RGZWF0dXJlc0Zy
b21TZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0RmVhdHVyZXNGcm9tUnVsZURh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRkVG9SdWxlU2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6
YWRkUGFnZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRkUmVnaW9uUnVsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldCk6CisgICAgICAg
IChXZWJDb3JlOjpSdWxlU2V0OjphZGRTdHlsZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6c2hy
aW5rTWFwVmVjdG9yc1RvRml0KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OnNocmlua1Rv
Rml0KToKKyAgICAgICAgKiBjc3MvUnVsZVNldC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoUnVsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OnBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVEYXRhOjpydWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJ1bGVEYXRhOjpzZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSdWxlRGF0YTo6c2Vs
ZWN0b3JJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlRGF0YTo6aGFzRmFzdENoZWNrYWJs
ZVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVEYXRhOjpoYXNNdWx0aXBhcnRTZWxl
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSdWxlRGF0YTo6aGFzUmlnaHRtb3N0U2VsZWN0b3JN
YXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6
OmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpS
dWxlRGF0YTo6c3BlY2lmaWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OmxpbmtN
YXRjaFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6Omhhc0RvY3VtZW50U2VjdXJp
dHlPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OmlzSW5SZWdpb25SdWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJ1bGVEYXRhOjpkZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVy
SGFzaGVzKToKKyAgICAgICAgKFNhbWVTaXplQXNSdWxlRGF0YSk6CisgICAgICAgIChSdWxlU2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSdWxlU2V0OjpkaXNhYmxlQXV0b1Nocmlua1RvRml0KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1
bGVTZXQ6OmZlYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmlkUnVsZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6Y2xhc3NSdWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSdWxlU2V0Ojp0YWdSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjpzaGFkb3dQ
c2V1ZG9FbGVtZW50UnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6bGlua1BzZXVk
b0NsYXNzUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6Zm9jdXNQc2V1ZG9DbGFz
c1J1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OnVuaXZlcnNhbFJ1bGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OnBhZ2VSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpS
dWxlU2V0OjpSdWxlU2V0U2VsZWN0b3JQYWlyOjpSdWxlU2V0U2VsZWN0b3JQYWlyKToKKyAgICAg
ICAgKFJ1bGVTZXRTZWxlY3RvclBhaXIpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6UnVs
ZVNldCk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlUnVsZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAqIGNz
cy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgIChTdHlsZVJlc29sdmVyKToKKwogMjAxMi0xMC0w
NCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFtWOF0gTm90aWZp
Y2F0aW9uQ2VudGVyIGxlYWtzIGJlY2F1c2UgaXQgdXNlcyBidWdneSBjdXN0b20gYmluZGluZ3MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMjU0OTRjMGI4YjQxNjU0NzU0ZThlYjZmYjlhNDdkYzg1
MjNkMDg1NS4uNmZkNTEwOWM3OGI5ZTdkYWNlNTFmZjZkMDgxNjkzMzUyMTBhZjgwMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKQEAgLTEwNjcsNiArMTA2NywxMCBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VT
CiAgICAgY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNwcAogICAgIGNzcy9Qcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb24uY3BwCiAgICAgY3NzL1JHQkNvbG9yLmNwcAorICAgIGNzcy9SdWxlRmVh
dHVyZS5oCisgICAgY3NzL1J1bGVGZWF0dXJlLmNwcAorICAgIGNzcy9SdWxlU2V0LmgKKyAgICBj
c3MvUnVsZVNldC5jcHAKICAgICBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcAogICAgIGNzcy9TaGFk
b3dWYWx1ZS5jcHAKICAgICBjc3MvU3R5bGVCdWlsZGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KaW5kZXggMzQ2MWRiYmVmNTk5NTBjODk3MDAzM2U3MmQ3ODU2MDY0YzhmMmJkYi4u
ZDBkZWNjM2VlZmZhZjkyOTI3ZDUwYTVkODQzMjg1NTZiZTVmMWVlMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCkBAIC0yNjEwLDYgKzI2MTAsMTAgQEAgd2ViY29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvUmVjdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvUkdC
Q29sb3IuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvUkdCQ29sb3IuaCBcCisJU291cmNlL1dl
YkNvcmUvY3NzL1J1bGVGZWF0dXJlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvY3NzL1J1bGVGZWF0
dXJlLmggXAorCVNvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcCBcCisJU291cmNlL1dlYkNv
cmUvY3NzL1J1bGVTZXQuaCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaCBcCiAJU291cmNlL1dl
YkNvcmUvY3NzL1NoYWRvd1ZhbHVlLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9U
YXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCBhNGQ4NzU0N2E0YTlk
MGE1MDllMTNmOTRmYjBkZTUzYjJkOGRmMTQ4Li42N2Y1YmNhMTJjYTY0ODFiZDZkNzYyMWJlYmFj
MzViYTZlN2ZiNjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTMxMyw2ICszMTMsOCBAQCBTT1VSQ0VTICs9
IFwKICAgICBjc3MvTWVkaWFRdWVyeU1hdGNoZXIuY3BwIFwKICAgICBjc3MvUHJvcGVydHlTZXRD
U1NTdHlsZURlY2xhcmF0aW9uLmNwcCBcCiAgICAgY3NzL1JHQkNvbG9yLmNwcCBcCisgICAgY3Nz
L1J1bGVGZWF0dXJlLmNwcCBcCisgICAgY3NzL1J1bGVTZXRjcHAgXAogICAgIGNzcy9TZWxlY3Rv
ckNoZWNrZXIuY3BwIFwKICAgICBjc3MvU2hhZG93VmFsdWUuY3BwIFwKICAgICBjc3MvU3R5bGVC
dWlsZGVyLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggN2MxMWU3Njc3YTc1ZjQwMWUyNDU0MmFl
NDI2MDY2ZWYyZTg4YWQ1Zi4uM2YyMmFkMWQ1M2ZkYmU0MzE3MTk2MGRkMmE4MDJlMDE0ODllNTVj
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjYwOSw2ICsyNjA5LDEwIEBACiAgICAgICAgICAgICAn
Y3NzL1JHQkNvbG9yLmNwcCcsCiAgICAgICAgICAgICAnY3NzL1JHQkNvbG9yLmgnLAogICAgICAg
ICAgICAgJ2Nzcy9SZWN0LmgnLAorICAgICAgICAgICAgJ2Nzcy9SdWxlRmVhdHVyZS5jcHAnLAor
ICAgICAgICAgICAgJ2Nzcy9SdWxlRmVhdHVyZS5oJywKKyAgICAgICAgICAgICdjc3MvUnVsZVNl
dC5jcHAnLAorICAgICAgICAgICAgJ2Nzcy9SdWxlU2V0LmgnLAogICAgICAgICAgICAgJ2Nzcy9T
VkdDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwJywKICAgICAgICAgICAgICdjc3MvU1ZH
Q1NTUGFyc2VyLmNwcCcsCiAgICAgICAgICAgICAnY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3Bw
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCA2ODlmM2FkOTlmNjQyNmY4YWIzYjcxZjcyN2RmODA0ZGQ1ZmMyOTQ4Li5mYzdlYjI5
MTM2ODg3MzcyNDBiODliY2U1NzEzMzhhMWJmY2E2Y2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zODYwLDYgKzM4NjAsMTAg
QEAKIAkJQTc4RkUxM0MxMjM2NkIxMDAwQUNFOEQwIC8qIFNwZWxsQ2hlY2tlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4RkUxM0ExMjM2NkIxMDAw
QUNFOEQwIC8qIFNwZWxsQ2hlY2tlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUE3OTU0NjNFMEI1QzRDODAwMDdCNDM4RiAvKiBEcmFnRGF0YU1h
Yy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OTU0
NjNEMEI1QzRDODAwMDdCNDM4RiAvKiBEcmFnRGF0YU1hYy5tbSAqLzsgfTsKIAkJQTc5NTQ2NDMw
QjVDNENCNDAwN0I0MzhGIC8qIERyYWdEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OTU0NjQyMEI1QzRDQjQwMDdCNDM4RiAvKiBEcmFnRGF0
YS5jcHAgKi87IH07CisJCUE3OUJBREExMTYxRTdGM0YwMEMyRTY1MiAvKiBSdWxlRmVhdHVyZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzlCQUQ5
RDE2MUU3RjNGMDBDMkU2NTIgLyogUnVsZUZlYXR1cmUuY3BwICovOyB9OworCQlBNzlCQURBMjE2
MUU3RjNGMDBDMkU2NTIgLyogUnVsZUZlYXR1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OUJBRDlFMTYxRTdGM0YwMEMyRTY1MiAvKiBSdWxlRmVh
dHVyZS5oICovOyB9OworCQlBNzlCQURBMzE2MUU3RjNGMDBDMkU2NTIgLyogUnVsZVNldC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzlCQUQ5RjE2
MUU3RjNGMDBDMkU2NTIgLyogUnVsZVNldC5jcHAgKi87IH07CisJCUE3OUJBREE0MTYxRTdGM0Yw
MEMyRTY1MiAvKiBSdWxlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNzlCQURBMDE2MUU3RjNGMDBDMkU2NTIgLyogUnVsZVNldC5oICovOyB9Owog
CQlBN0E3OENENTE1MzJCQTYyMDA2QzIxRTQgLyogQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBNzhDRDQx
NTMyQkE2MjAwNkMyMUU0IC8qIENvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcCAqLzsgfTsKIAkJ
QTdBRDJGODcwRUM4OUQwNzAwOEFCMDAyIC8qIExpbmtIYXNoLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QUQyRjg1MEVDODlEMDcwMDhBQjAwMiAv
KiBMaW5rSGFzaC5jcHAgKi87IH07CiAJCUE3QUQyRjg4MEVDODlEMDcwMDhBQjAwMiAvKiBMaW5r
SGFzaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdB
RDJGODYwRUM4OUQwNzAwOEFCMDAyIC8qIExpbmtIYXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExMDg4LDYgKzExMDkyLDEwIEBACiAJCUE3
OEZFMTNBMTIzNjZCMTAwMEFDRThEMCAvKiBTcGVsbENoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGZpbGVFbmNv
ZGluZyA9IDQ7IHBhdGggPSBTcGVsbENoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTc5NTQ2M0QwQjVDNEM4MDAwN0I0MzhGIC8qIERyYWdEYXRhTWFjLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERyYWdEYXRhTWFjLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBNzk1NDY0MjBCNUM0Q0I0MDA3QjQzOEYgLyogRHJhZ0Rh
dGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRHJhZ0RhdGEuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzlCQUQ5RDE2MUU3RjNGMDBDMkU2NTIg
LyogUnVsZUZlYXR1cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UnVsZUZlYXR1cmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzlCQUQ5RTE2
MUU3RjNGMDBDMkU2NTIgLyogUnVsZUZlYXR1cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUnVsZUZlYXR1cmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTc5
QkFEOUYxNjFFN0YzRjAwQzJFNjUyIC8qIFJ1bGVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUnVsZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUE3OUJBREEwMTYxRTdGM0YwMEMyRTY1MiAvKiBSdWxlU2V0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJ1bGVTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTdBNzhDRDQxNTMyQkE2MjAwNkMyMUU0IC8qIENvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRhaW5lck5vZGVBbGdv
cml0aG1zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBRDJGODUwRUM4OUQw
NzAwOEFCMDAyIC8qIExpbmtIYXNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IExpbmtIYXNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBRDJG
ODYwRUM4OUQwNzAwOEFCMDAyIC8qIExpbmtIYXNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExpbmtIYXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTIw
OSw2ICsyMTIxNywxMCBAQAogCQkJCUJDNzREQTM2MTAxM0YzRjcwMDc5ODdBRCAvKiBSR0JDb2xv
ci5jcHAgKi8sCiAJCQkJQkM3NERBMzUxMDEzRjNGNzAwNzk4N0FEIC8qIFJHQkNvbG9yLmggKi8s
CiAJCQkJODU4QzM4RUYwQUE4RkREMTAwQjE4N0E0IC8qIFJHQkNvbG9yLmlkbCAqLywKKwkJCQlB
NzlCQUQ5RDE2MUU3RjNGMDBDMkU2NTIgLyogUnVsZUZlYXR1cmUuY3BwICovLAorCQkJCUE3OUJB
RDlFMTYxRTdGM0YwMEMyRTY1MiAvKiBSdWxlRmVhdHVyZS5oICovLAorCQkJCUE3OUJBRDlGMTYx
RTdGM0YwMEMyRTY1MiAvKiBSdWxlU2V0LmNwcCAqLywKKwkJCQlBNzlCQURBMDE2MUU3RjNGMDBD
MkU2NTIgLyogUnVsZVNldC5oICovLAogCQkJCUU0NEI0QkIxMTQxNjUwRDcwMDJCMUQ4QiAvKiBT
ZWxlY3RvckNoZWNrZXIuY3BwICovLAogCQkJCUU0NEI0QkIyMTQxNjUwRDcwMDJCMUQ4QiAvKiBT
ZWxlY3RvckNoZWNrZXIuaCAqLywKIAkJCQlBODBFNkNDQTBBMTk4OUNBMDA3RkI4QzUgLyogU2hh
ZG93VmFsdWUuY3BwICovLApAQCAtMjQ3ODEsNiArMjQ3OTMsOCBAQAogCQkJCUZEMzE2MEE5MTJC
MDI2RjcwMEMxQTM1OSAvKiBSZXZlcmJDb252b2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZE
MzE2MEFCMTJCMDI2RjcwMEMxQTM1OSAvKiBSZXZlcmJDb252b2x2ZXJTdGFnZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkQzMTYwQUQxMkIwMjZGNzAwQzFBMzU5IC8qIFJldmVyYklucHV0QnVmZmVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQlBNzlCQURBMjE2MUU3RjNGMDBDMkU2NTIgLyogUnVsZUZl
YXR1cmUuaCBpbiBIZWFkZXJzICovLAorCQkJCUE3OUJBREE0MTYxRTdGM0YwMEMyRTY1MiAvKiBS
dWxlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzc0REEzNzEwMTNGM0Y3MDA3OTg3QUQgLyog
UkdCQ29sb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4Q0ZGNUUxMEExNTVBMDUwMDBBNDIzNCAv
KiBSb290SW5saW5lQm94LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUU5MTFDOTBFRjg2RDQ3MDA5
RDBDQUYgLyogUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTI4
MDAyLDYgKzI4MDE2LDggQEAKIAkJCQlBOENGRjVFNzBBMTU1QTA1MDAwQTQyMzQgLyogUm9vdElu
bGluZUJveC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUU5MTFDODBFRjg2RDQ3MDA5RDBDQUYg
LyogUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3M0Y5
NUZFMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBNzlCQURBMTE2MUU3RjNGMDBDMkU2NTIgLyogUnVsZUZlYXR1cmUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTc5QkFEQTMxNjFFN0YzRjAwQzJFNjUyIC8qIFJ1bGVTZXQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQkMwQjM1ODcxNEM0Rjk4MzAwNTVFMjJBIC8qIFJ1bkxvb3AuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMjlBMzA5QUMxNTYxQzk5QjAwQkJEOEU1IC8qIFJ1bkxvb3BDRi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzBCMzU4MzE0QzRGOTU0MDA1NUUyMkEgLyogUnVuTG9vcE1h
Yy5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Fs
bEluT25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAKaW5kZXggMTkz
YjdhZmM0OGFlMDE4MzVmNDk1YjBhYzMwZTA1ZGVhZTRjNjczYS4uMDFkZGIyZDcxNjE5OGQxMzQ2
Y2ZmNTIyODI5NGEwZmMxMDk0ODkyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0FsbEluT25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwCkBA
IC02Niw2ICs2Niw4IEBACiAjaW5jbHVkZSAiQ1NTVmFsdWUuY3BwIgogI2luY2x1ZGUgIkNTU1Zh
bHVlTGlzdC5jcHAiCiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmNwcCIKKyNpbmNsdWRlICJSdWxl
RmVhdHVyZS5jcHAiCisjaW5jbHVkZSAiUnVsZVNldC5jcHAiCiAjaW5jbHVkZSAiU3R5bGVCdWls
ZGVyLmNwcCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmNwcCIKICNpbmNsdWRlICJTdHls
ZVByb3BlcnR5U2hvcnRoYW5kLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9S
dWxlRmVhdHVyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZUZlYXR1cmUuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjY2M2I5NDYxM2FjODdkYWIwN2JmNTVmZjRlMDBjZDcxNjIyNDU1NjAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZUZlYXR1cmUuY3BwCkBAIC0wLDAgKzEs
NzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKKyAqICAgICAgICAgICAoQykgMjAwNC0yMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2Rl
QGNhcmV3b2xmLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBOaWNob2xhcyBTaGFu
a3MgKHdlYmtpdEBuaWNrc2hhbmtzLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwg
MjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSdWxlRmVh
dHVyZS5oIgorCisjaW5jbHVkZSAiV2ViQ29yZU1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgorI2lu
Y2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L01lbW9yeUluc3RydW1lbnRhdGlvbkhhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTWVtb3J5SW5z
dHJ1bWVudGF0aW9uVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBSdWxl
RmVhdHVyZVNldDo6YWRkKGNvbnN0IFJ1bGVGZWF0dXJlU2V0JiBvdGhlcikKK3sKKyAgICBIYXNo
U2V0PEF0b21pY1N0cmluZ0ltcGwqPjo6aXRlcmF0b3IgZW5kID0gb3RoZXIuaWRzSW5SdWxlcy5l
bmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+OjppdGVyYXRvciBpdCA9
IG90aGVyLmlkc0luUnVsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpZHNJ
blJ1bGVzLmFkZCgqaXQpOworICAgIGVuZCA9IG90aGVyLmF0dHJzSW5SdWxlcy5lbmQoKTsKKyAg
ICBmb3IgKEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+OjppdGVyYXRvciBpdCA9IG90aGVyLmF0
dHJzSW5SdWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGF0dHJzSW5SdWxl
cy5hZGQoKml0KTsKKyAgICBzaWJsaW5nUnVsZXMuYXBwZW5kKG90aGVyLnNpYmxpbmdSdWxlcyk7
CisgICAgdW5jb21tb25BdHRyaWJ1dGVSdWxlcy5hcHBlbmQob3RoZXIudW5jb21tb25BdHRyaWJ1
dGVSdWxlcyk7CisgICAgdXNlc0ZpcnN0TGluZVJ1bGVzID0gdXNlc0ZpcnN0TGluZVJ1bGVzIHx8
IG90aGVyLnVzZXNGaXJzdExpbmVSdWxlczsKKyAgICB1c2VzQmVmb3JlQWZ0ZXJSdWxlcyA9IHVz
ZXNCZWZvcmVBZnRlclJ1bGVzIHx8IG90aGVyLnVzZXNCZWZvcmVBZnRlclJ1bGVzOworfQorCit2
b2lkIFJ1bGVGZWF0dXJlU2V0OjpjbGVhcigpCit7CisgICAgaWRzSW5SdWxlcy5jbGVhcigpOwor
ICAgIGF0dHJzSW5SdWxlcy5jbGVhcigpOworICAgIHNpYmxpbmdSdWxlcy5jbGVhcigpOworICAg
IHVuY29tbW9uQXR0cmlidXRlUnVsZXMuY2xlYXIoKTsKKyAgICB1c2VzRmlyc3RMaW5lUnVsZXMg
PSBmYWxzZTsKKyAgICB1c2VzQmVmb3JlQWZ0ZXJSdWxlcyA9IGZhbHNlOworfQorCit2b2lkIFJ1
bGVGZWF0dXJlU2V0OjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlP
YmplY3RJbmZvKSBjb25zdAoreworICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVj
dEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6Q1NTKTsKKyAgICBpbmZvLmFkZE1lbWJl
cihpZHNJblJ1bGVzKTsKKyAgICBpbmZvLmFkZE1lbWJlcihhdHRyc0luUnVsZXMpOworICAgIGlu
Zm8uYWRkTWVtYmVyKHNpYmxpbmdSdWxlcyk7CisgICAgaW5mby5hZGRNZW1iZXIodW5jb21tb25B
dHRyaWJ1dGVSdWxlcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlRmVhdHVyZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1J1
bGVGZWF0dXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWYxNjI4OGMwNWUxZGM0ZmExZjExOTM5YTA2NDM3NTli
ZWIzMmM4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlRmVhdHVy
ZS5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9s
bCAoa25vbGxAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworCisjaWZuZGVmIFJ1bGVGZWF0dXJlX2gKKyNkZWZpbmUgUnVsZUZlYXR1cmVfaAor
CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU3R5bGVSdWxlOworCitjbGFzcyBSdWxl
RmVhdHVyZSB7CitwdWJsaWM6CisgICAgUnVsZUZlYXR1cmUoU3R5bGVSdWxlKiBydWxlLCB1bnNp
Z25lZCBzZWxlY3RvckluZGV4LCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pCisgICAg
ICAgIDogcnVsZShydWxlKQorICAgICAgICAsIHNlbGVjdG9ySW5kZXgoc2VsZWN0b3JJbmRleCkK
KyAgICAgICAgLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKGhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4pIAorICAgIHsgCisgICAgfQorICAgIFN0eWxlUnVsZSogcnVsZTsKKyAgICB1bnNpZ25l
ZCBzZWxlY3RvckluZGV4OworICAgIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbjsKK307
CisKK2NsYXNzIFJ1bGVGZWF0dXJlU2V0IHsKK3B1YmxpYzoKKyAgICBSdWxlRmVhdHVyZVNldCgp
CisgICAgICAgIDogdXNlc0ZpcnN0TGluZVJ1bGVzKGZhbHNlKQorICAgICAgICAsIHVzZXNCZWZv
cmVBZnRlclJ1bGVzKGZhbHNlKQorICAgIHsgfQorCisgICAgdm9pZCBhZGQoY29uc3QgUnVsZUZl
YXR1cmVTZXQmKTsKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgdm9pZCByZXBvcnRNZW1vcnlVc2Fn
ZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CisgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBs
Kj4gaWRzSW5SdWxlczsKKyAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBhdHRyc0luUnVs
ZXM7CisgICAgVmVjdG9yPFJ1bGVGZWF0dXJlPiBzaWJsaW5nUnVsZXM7CisgICAgVmVjdG9yPFJ1
bGVGZWF0dXJlPiB1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzOworICAgIGJvb2wgdXNlc0ZpcnN0TGlu
ZVJ1bGVzOworICAgIGJvb2wgdXNlc0JlZm9yZUFmdGVyUnVsZXM7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBSdWxlRmVhdHVyZV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvUnVsZVNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOTU0ZTAwOGM0ZmZkMzEzZWViMjA4YjU3ODQ5OWIwMWNhMTJjMmViZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcApAQCAtMCww
ICsxLDM4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDA0LTIwMDUgQWxsYW4gU2FuZGZlbGQgSmVuc2Vu
IChrZGVAY2FyZXdvbGYuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IE5pY2hvbGFz
IFNoYW5rcyAod2Via2l0QG5pY2tzaGFua3MuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292
IDxhcEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9i
aWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29t
LykKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJ1
bGVTZXQuaCIKKworI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU1Nl
bGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTU2VsZWN0b3JMaXN0LmgiCisjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCisjaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5oIgorI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyLmgiCisjaW5jbHVkZSAiU3R5
bGVSZXNvbHZlci5oIgorI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgorI2luY2x1ZGUgIlN0eWxlUnVs
ZUltcG9ydC5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgorI2luY2x1ZGUgIldl
YkNvcmVNZW1vcnlJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJXZWJLaXRDU1NLZXlmcmFt
ZXNSdWxlLmgiCisjaW5jbHVkZSA8d3RmL01lbW9yeUluc3RydW1lbnRhdGlvbkhhc2hNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaFNldC5oPgorI2luY2x1ZGUg
PHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdGF0aWMg
aW5saW5lIGJvb2wgaXNTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaChjb25zdCBD
U1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3Rv
ck5hbWVzcGFjZSA9IHNlbGVjdG9yLT50YWcoKS5uYW1lc3BhY2VVUkkoKTsKKyAgICBpZiAoc2Vs
ZWN0b3JOYW1lc3BhY2UgIT0gc3RhckF0b20gJiYgc2VsZWN0b3JOYW1lc3BhY2UgIT0geGh0bWxO
YW1lc3BhY2VVUkkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc2VsZWN0b3ItPm1f
bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6Ok5vbmUpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlm
IChzZWxlY3Rvci0+dGFnKCkgIT0gc3RhckF0b20pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoU2VsZWN0b3JDaGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3Ioc2VsZWN0
b3IpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc2VsZWN0b3ItPm1fbWF0Y2gg
PT0gQ1NTU2VsZWN0b3I6OklkIHx8IHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpD
bGFzczsKK30KKworc3RhdGljIGlubGluZSBib29sIHNlbGVjdG9yTGlzdENvbnRhaW5zVW5jb21t
b25BdHRyaWJ1dGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAg
Q1NTU2VsZWN0b3JMaXN0KiBzZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCk7
CisgICAgaWYgKCFzZWxlY3Rvckxpc3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3Ig
KENTU1NlbGVjdG9yKiBzdWJTZWxlY3RvciA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3ViU2Vs
ZWN0b3I7IHN1YlNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YlNlbGVjdG9yKSkg
eworICAgICAgICBpZiAoc3ViU2VsZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0b3IoKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRp
YyBpbmxpbmUgYm9vbCBpc0NvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkKK3sKKyAgICAvLyBUaGVzZSBhcmUgZXhwbGljaXRseSB0
ZXN0ZWQgZm9yIGVxdWFsaXR5IGluIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudC4KKyAgICByZXR1
cm4gYXR0cmlidXRlID09IHR5cGVBdHRyIHx8IGF0dHJpYnV0ZSA9PSByZWFkb25seUF0dHI7Cit9
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3Io
Y29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIGZvciAoOyBzZWxlY3Rvcjsgc2Vs
ZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7CisgICAgICAgIC8vIEFsbG93IGNlcnRh
aW4gY29tbW9uIGF0dHJpYnV0ZXMgKHVzZWQgaW4gdGhlIGRlZmF1bHQgc3R5bGUpIGluIHRoZSBz
ZWxlY3RvcnMgdGhhdCBtYXRjaCB0aGUgY3VycmVudCBlbGVtZW50LgorICAgICAgICBpZiAoc2Vs
ZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0b3IoKSAmJiAhaXNDb21tb25BdHRyaWJ1dGVTZWxlY3Rv
ckF0dHJpYnV0ZShzZWxlY3Rvci0+YXR0cmlidXRlKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGlmIChzZWxlY3Rvckxpc3RDb250YWluc1VuY29tbW9uQXR0cmlidXRlU2Vs
ZWN0b3Ioc2VsZWN0b3IpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChz
ZWxlY3Rvci0+cmVsYXRpb24oKSAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpIHsKKyAgICAg
ICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICg7IHNlbGVjdG9yOyBzZWxlY3RvciA9
IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKKyAgICAgICAgaWYgKHNlbGVjdG9yLT5pc0F0dHJp
YnV0ZVNlbGVjdG9yKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKHNl
bGVjdG9yTGlzdENvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcihzZWxlY3RvcikpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitS
dWxlRGF0YTo6UnVsZURhdGEoU3R5bGVSdWxlKiBydWxlLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4
LCB1bnNpZ25lZCBwb3NpdGlvbiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29s
IGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGluUmVnaW9uUnVsZSkKKyAgICA6IG1fcnVs
ZShydWxlKQorICAgICwgbV9zZWxlY3RvckluZGV4KHNlbGVjdG9ySW5kZXgpCisgICAgLCBtX3Bv
c2l0aW9uKHBvc2l0aW9uKQorICAgICwgbV9zcGVjaWZpY2l0eShzZWxlY3RvcigpLT5zcGVjaWZp
Y2l0eSgpKQorICAgICwgbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY2FuVXNlRmFzdENoZWNr
U2VsZWN0b3IgJiYgU2VsZWN0b3JDaGVja2VyOjppc0Zhc3RDaGVja2FibGVTZWxlY3RvcihzZWxl
Y3RvcigpKSkKKyAgICAsIG1faGFzTXVsdGlwYXJ0U2VsZWN0b3IoISFzZWxlY3RvcigpLT50YWdI
aXN0b3J5KCkpCisgICAgLCBtX2hhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRP
blJ1bGVIYXNoKGlzU2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goc2VsZWN0b3Io
KSkpCisgICAgLCBtX2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcihXZWJDb3JlOjpj
b250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3Ioc2VsZWN0b3IoKSkpCisgICAgLCBtX2xp
bmtNYXRjaFR5cGUoU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rTWF0Y2hUeXBlKHNlbGVj
dG9yKCkpKQorICAgICwgbV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKGhhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW4pCisgICAgLCBtX2lzSW5SZWdpb25SdWxlKGluUmVnaW9uUnVsZSkKK3sKKyAg
ICBBU1NFUlQobV9wb3NpdGlvbiA9PSBwb3NpdGlvbik7CisgICAgQVNTRVJUKG1fc2VsZWN0b3JJ
bmRleCA9PSBzZWxlY3RvckluZGV4KTsKKyAgICBTZWxlY3RvckNoZWNrZXI6OmNvbGxlY3RJZGVu
dGlmaWVySGFzaGVzKHNlbGVjdG9yKCksIG1fZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhh
c2hlcywgbWF4aW11bUlkZW50aWZpZXJDb3VudCk7Cit9CisKK3ZvaWQgUnVsZURhdGE6OnJlcG9y
dE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0Cit7
CisgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29y
ZU1lbW9yeVR5cGVzOjpDU1MpOworfQorCitzdGF0aWMgdm9pZCByZXBvcnRBdG9tUnVsZU1hcChN
ZW1vcnlDbGFzc0luZm8qIGluZm8sIGNvbnN0IFJ1bGVTZXQ6OkF0b21SdWxlTWFwJiBhdG9taWNS
dWxlTWFwKQoreworICAgIGluZm8tPmFkZE1lbWJlcihhdG9taWNSdWxlTWFwKTsKKyAgICBmb3Ig
KFJ1bGVTZXQ6OkF0b21SdWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGF0b21pY1J1bGVNYXAu
YmVnaW4oKTsgaXQgIT0gYXRvbWljUnVsZU1hcC5lbmQoKTsgKytpdCkKKyAgICAgICAgaW5mby0+
YWRkTWVtYmVyKCppdC0+c2Vjb25kKTsKK30KKwordm9pZCBSdWxlU2V0OjpyZXBvcnRNZW1vcnlV
c2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAoreworICAgIE1l
bW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlU
eXBlczo6Q1NTKTsKKyAgICByZXBvcnRBdG9tUnVsZU1hcCgmaW5mbywgbV9pZFJ1bGVzKTsKKyAg
ICByZXBvcnRBdG9tUnVsZU1hcCgmaW5mbywgbV9jbGFzc1J1bGVzKTsKKyAgICByZXBvcnRBdG9t
UnVsZU1hcCgmaW5mbywgbV90YWdSdWxlcyk7CisgICAgcmVwb3J0QXRvbVJ1bGVNYXAoJmluZm8s
IG1fc2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKTsKKyAgICBpbmZvLmFkZE1lbWJlcihtX2xpbmtQ
c2V1ZG9DbGFzc1J1bGVzKTsKKyAgICBpbmZvLmFkZE1lbWJlcihtX2ZvY3VzUHNldWRvQ2xhc3NS
dWxlcyk7CisgICAgaW5mby5hZGRNZW1iZXIobV91bml2ZXJzYWxSdWxlcyk7CisgICAgaW5mby5h
ZGRNZW1iZXIobV9wYWdlUnVsZXMpOworICAgIGluZm8uYWRkTWVtYmVyKG1fcmVnaW9uU2VsZWN0
b3JzQW5kUnVsZVNldHMpOworfQorCit2b2lkIFJ1bGVTZXQ6OlJ1bGVTZXRTZWxlY3RvclBhaXI6
OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNv
bnN0Cit7CisgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywg
V2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOworICAgIGluZm8uYWRkTWVtYmVyKHJ1bGVTZXQpOwor
fQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29sbGVjdEZlYXR1cmVzRnJvbVNlbGVjdG9yKFJ1bGVG
ZWF0dXJlU2V0JiBmZWF0dXJlcywgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAg
IGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpCisgICAgICAgIGZlYXR1
cmVzLmlkc0luUnVsZXMuYWRkKHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSk7CisgICAgaWYgKHNl
bGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkpCisgICAgICAgIGZlYXR1cmVzLmF0dHJzSW5S
dWxlcy5hZGQoc2VsZWN0b3ItPmF0dHJpYnV0ZSgpLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAg
c3dpdGNoIChzZWxlY3Rvci0+cHNldWRvVHlwZSgpKSB7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvRmlyc3RMaW5lOgorICAgICAgICBmZWF0dXJlcy51c2VzRmlyc3RMaW5lUnVsZXMgPSB0
cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9CZWZvcmU6
CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQWZ0ZXI6CisgICAgICAgIGZlYXR1cmVzLnVz
ZXNCZWZvcmVBZnRlclJ1bGVzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjb2xsZWN0RmVhdHVyZXNG
cm9tUnVsZURhdGEoUnVsZUZlYXR1cmVTZXQmIGZlYXR1cmVzLCBjb25zdCBSdWxlRGF0YSYgcnVs
ZURhdGEpCit7CisgICAgYm9vbCBmb3VuZFNpYmxpbmdTZWxlY3RvciA9IGZhbHNlOworICAgIGZv
ciAoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gcnVsZURhdGEuc2VsZWN0b3IoKTsgc2VsZWN0b3I7
IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgeworICAgICAgICBjb2xsZWN0RmVh
dHVyZXNGcm9tU2VsZWN0b3IoZmVhdHVyZXMsIHNlbGVjdG9yKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChDU1NTZWxlY3Rvckxpc3QqIHNlbGVjdG9yTGlzdCA9IHNlbGVjdG9yLT5zZWxlY3Rvckxp
c3QoKSkgeworICAgICAgICAgICAgZm9yIChDU1NTZWxlY3Rvciogc3ViU2VsZWN0b3IgPSBzZWxl
Y3Rvckxpc3QtPmZpcnN0KCk7IHN1YlNlbGVjdG9yOyBzdWJTZWxlY3RvciA9IENTU1NlbGVjdG9y
TGlzdDo6bmV4dChzdWJTZWxlY3RvcikpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWZvdW5kU2li
bGluZ1NlbGVjdG9yICYmIHNlbGVjdG9yLT5pc1NpYmxpbmdTZWxlY3RvcigpKQorICAgICAgICAg
ICAgICAgICAgICBmb3VuZFNpYmxpbmdTZWxlY3RvciA9IHRydWU7CisgICAgICAgICAgICAgICAg
Y29sbGVjdEZlYXR1cmVzRnJvbVNlbGVjdG9yKGZlYXR1cmVzLCBzdWJTZWxlY3Rvcik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoIWZvdW5kU2libGluZ1NlbGVjdG9yICYmIHNl
bGVjdG9yLT5pc1NpYmxpbmdTZWxlY3RvcigpKQorICAgICAgICAgICAgZm91bmRTaWJsaW5nU2Vs
ZWN0b3IgPSB0cnVlOworICAgIH0KKyAgICBpZiAoZm91bmRTaWJsaW5nU2VsZWN0b3IpCisgICAg
ICAgIGZlYXR1cmVzLnNpYmxpbmdSdWxlcy5hcHBlbmQoUnVsZUZlYXR1cmUocnVsZURhdGEucnVs
ZSgpLCBydWxlRGF0YS5zZWxlY3RvckluZGV4KCksIHJ1bGVEYXRhLmhhc0RvY3VtZW50U2VjdXJp
dHlPcmlnaW4oKSkpOworICAgIGlmIChydWxlRGF0YS5jb250YWluc1VuY29tbW9uQXR0cmlidXRl
U2VsZWN0b3IoKSkKKyAgICAgICAgZmVhdHVyZXMudW5jb21tb25BdHRyaWJ1dGVSdWxlcy5hcHBl
bmQoUnVsZUZlYXR1cmUocnVsZURhdGEucnVsZSgpLCBydWxlRGF0YS5zZWxlY3RvckluZGV4KCks
IHJ1bGVEYXRhLmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSkpOworfQorICAgIAordm9pZCBS
dWxlU2V0OjphZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBBdG9tUnVsZU1hcCYg
bWFwLCBjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEpCit7CisgICAgaWYgKCFrZXkpCisgICAgICAg
IHJldHVybjsKKyAgICBPd25QdHI8VmVjdG9yPFJ1bGVEYXRhPiA+JiBydWxlcyA9IG1hcC5hZGQo
a2V5LCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIGlmICghcnVsZXMpCisgICAgICAg
IHJ1bGVzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxSdWxlRGF0YT4pOworICAgIHJ1bGVzLT5hcHBl
bmQocnVsZURhdGEpOworfQorCit2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoU3R5bGVSdWxlKiBydWxl
LCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4s
IGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaW5SZWdpb25SdWxlKQoreworICAg
IFJ1bGVEYXRhIHJ1bGVEYXRhKHJ1bGUsIHNlbGVjdG9ySW5kZXgsIG1fcnVsZUNvdW50KyssIGhh
c0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBpblJlZ2lv
blJ1bGUpOworICAgIGNvbGxlY3RGZWF0dXJlc0Zyb21SdWxlRGF0YShtX2ZlYXR1cmVzLCBydWxl
RGF0YSk7CisKKyAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBydWxlRGF0YS5zZWxlY3Rvcigp
OworCisgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCkgeworICAg
ICAgICBhZGRUb1J1bGVTZXQoc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpLCBtX2lkUnVsZXMsIHJ1
bGVEYXRhKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoc2VsZWN0b3ItPm1fbWF0
Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzKSB7CisgICAgICAgIGFkZFRvUnVsZVNldChzZWxlY3Rv
ci0+dmFsdWUoKS5pbXBsKCksIG1fY2xhc3NSdWxlcywgcnVsZURhdGEpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChzZWxlY3Rvci0+aXNVbmtub3duUHNldWRvRWxlbWVudCgpKSB7
CisgICAgICAgIGFkZFRvUnVsZVNldChzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCksIG1fc2hhZG93
UHNldWRvRWxlbWVudFJ1bGVzLCBydWxlRGF0YSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgaWYgKFNlbGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yKHNlbGVj
dG9yKSkgeworICAgICAgICBzd2l0Y2ggKHNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkpIHsKKyAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGluazoKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvVmlzaXRlZDoKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQW55TGlu
azoKKyAgICAgICAgICAgIG1fbGlua1BzZXVkb0NsYXNzUnVsZXMuYXBwZW5kKHJ1bGVEYXRhKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRm9j
dXM6CisgICAgICAgICAgICBtX2ZvY3VzUHNldWRvQ2xhc3NSdWxlcy5hcHBlbmQocnVsZURhdGEp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IHNlbGVjdG9yLT50YWcoKS5sb2NhbE5h
bWUoKTsKKyAgICBpZiAobG9jYWxOYW1lICE9IHN0YXJBdG9tKSB7CisgICAgICAgIGFkZFRvUnVs
ZVNldChsb2NhbE5hbWUuaW1wbCgpLCBtX3RhZ1J1bGVzLCBydWxlRGF0YSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgbV91bml2ZXJzYWxSdWxlcy5hcHBlbmQocnVsZURhdGEpOworfQor
Cit2b2lkIFJ1bGVTZXQ6OmFkZFBhZ2VSdWxlKFN0eWxlUnVsZVBhZ2UqIHJ1bGUpCit7CisgICAg
bV9wYWdlUnVsZXMuYXBwZW5kKHJ1bGUpOworfQorCit2b2lkIFJ1bGVTZXQ6OmFkZFJlZ2lvblJ1
bGUoU3R5bGVSdWxlUmVnaW9uKiByZWdpb25SdWxlLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4pCit7CisgICAgT3duUHRyPFJ1bGVTZXQ+IHJlZ2lvblJ1bGVTZXQgPSBSdWxlU2V0Ojpj
cmVhdGUoKTsKKyAgICAvLyBUaGUgcmVnaW9uIHJ1bGUgc2V0IHNob3VsZCB0YWtlIGludG8gYWNj
b3VudCB0aGUgcG9zaXRpb24gaW5zaWRlIHRoZSBwYXJlbnQgcnVsZSBzZXQuCisgICAgLy8gT3Ro
ZXJ3aXNlLCB0aGUgcnVsZXMgaW5zaWRlIHJlZ2lvbiBibG9jayBtaWdodCBiZSBpbmNvcnJlY3Rs
eSBwb3NpdGlvbmVkIGJlZm9yZSBvdGhlciBzaW1pbGFyIHJ1bGVzIGZyb20KKyAgICAvLyB0aGUg
c3R5bGVzaGVldCB0aGF0IGNvbnRhaW5zIHRoZSByZWdpb24gYmxvY2suCisgICAgcmVnaW9uUnVs
ZVNldC0+bV9ydWxlQ291bnQgPSBtX3J1bGVDb3VudDsKKworICAgIC8vIENvbGxlY3QgdGhlIHJl
Z2lvbiBydWxlcyBpbnRvIGEgcnVsZSBzZXQKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxl
UnVsZUJhc2U+ID4mIGNoaWxkUnVsZXMgPSByZWdpb25SdWxlLT5jaGlsZFJ1bGVzKCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoaWxkUnVsZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgU3R5bGVSdWxlQmFzZSogcmVnaW9uU3R5bGluZ1J1bGUgPSBjaGlsZFJ1bGVzW2ldLmdldCgp
OworICAgICAgICBpZiAocmVnaW9uU3R5bGluZ1J1bGUtPmlzU3R5bGVSdWxlKCkpCisgICAgICAg
ICAgICByZWdpb25SdWxlU2V0LT5hZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4o
cmVnaW9uU3R5bGluZ1J1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCB0cnVlLCB0cnVl
KTsKKyAgICB9CisgICAgLy8gVXBkYXRlIHRoZSAiZ2xvYmFsIiBydWxlIGNvdW50IHNvIHRoYXQg
cHJvcGVyIG9yZGVyIGlzIG1haW50YWluZWQKKyAgICBtX3J1bGVDb3VudCA9IHJlZ2lvblJ1bGVT
ZXQtPm1fcnVsZUNvdW50OworCisgICAgbV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hcHBl
bmQoUnVsZVNldFNlbGVjdG9yUGFpcihyZWdpb25SdWxlLT5zZWxlY3Rvckxpc3QoKS5maXJzdCgp
LCByZWdpb25SdWxlU2V0LnJlbGVhc2UoKSkpOworfQorCit2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVz
RnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFs
dWF0b3ImIG1lZGl1bSwgU3R5bGVSZXNvbHZlciogcmVzb2x2ZXIsIGNvbnN0IENvbnRhaW5lck5v
ZGUqIHNjb3BlKQoreworICAgIEFTU0VSVChzaGVldCk7CisgICAgCisgICAgY29uc3QgVmVjdG9y
PFJlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+ID4mIGltcG9ydFJ1bGVzID0gc2hlZXQtPmltcG9ydFJ1
bGVzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGltcG9ydFJ1bGVzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIFN0eWxlUnVsZUltcG9ydCogaW1wb3J0UnVsZSA9IGltcG9ydFJ1bGVz
W2ldLmdldCgpOworICAgICAgICBpZiAoaW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpICYmICghaW1w
b3J0UnVsZS0+bWVkaWFRdWVyaWVzKCkgfHwgbWVkaXVtLmV2YWwoaW1wb3J0UnVsZS0+bWVkaWFR
dWVyaWVzKCksIHJlc29sdmVyKSkpCisgICAgICAgICAgICBhZGRSdWxlc0Zyb21TaGVldChpbXBv
cnRSdWxlLT5zdHlsZVNoZWV0KCksIG1lZGl1bSwgcmVzb2x2ZXIsIHNjb3BlKTsKKyAgICB9Cisg
ICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luID0gcmVzb2x2ZXIgJiYgcmVzb2x2ZXIt
PmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3Qoc2hlZXQtPmJhc2VVUkwo
KSk7CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIHJ1bGVzID0g
c2hlZXQtPmNoaWxkUnVsZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcnVsZXMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3R5bGVSdWxlQmFzZSogcnVsZSA9IHJ1bGVzW2ldLmdl
dCgpOworCisgICAgICAgIEFTU0VSVCghcnVsZS0+aXNJbXBvcnRSdWxlKCkpOworICAgICAgICBp
ZiAocnVsZS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgICAgIGFkZFN0eWxlUnVsZShzdGF0aWNf
Y2FzdDxTdHlsZVJ1bGUqPihydWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgIXNjb3Bl
KTsKKyAgICAgICAgZWxzZSBpZiAocnVsZS0+aXNQYWdlUnVsZSgpKQorICAgICAgICAgICAgYWRk
UGFnZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUGFnZSo+KHJ1bGUpKTsKKyAgICAgICAgZWxz
ZSBpZiAocnVsZS0+aXNNZWRpYVJ1bGUoKSkgeworICAgICAgICAgICAgU3R5bGVSdWxlTWVkaWEq
IG1lZGlhUnVsZSA9IHN0YXRpY19jYXN0PFN0eWxlUnVsZU1lZGlhKj4ocnVsZSk7CisKKyAgICAg
ICAgICAgIGlmICgoIW1lZGlhUnVsZS0+bWVkaWFRdWVyaWVzKCkgfHwgbWVkaXVtLmV2YWwobWVk
aWFSdWxlLT5tZWRpYVF1ZXJpZXMoKSwgcmVzb2x2ZXIpKSkgeworICAgICAgICAgICAgICAgIC8v
IFRyYXZlcnNlIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBAbWVkaWEgcnVsZS4KKyAgICAgICAgICAg
ICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGNoaWxkUnVsZXMgPSBt
ZWRpYVJ1bGUtPmNoaWxkUnVsZXMoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGog
PSAwOyBqIDwgY2hpbGRSdWxlcy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgICAgICBT
dHlsZVJ1bGVCYXNlKiBjaGlsZFJ1bGUgPSBjaGlsZFJ1bGVzW2pdLmdldCgpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoY2hpbGRSdWxlLT5pc1N0eWxlUnVsZSgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KGNoaWxkUnVsZSks
IGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sICFzY29wZSk7CisgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGNoaWxkUnVsZS0+aXNQYWdlUnVsZSgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgYWRkUGFnZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUGFnZSo+KGNoaWxkUnVsZSkpOwor
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGlsZFJ1bGUtPmlzRm9udEZhY2VSdWxlKCkg
JiYgcmVzb2x2ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGlzIGZvbnQg
ZmFjZSB0byBvdXIgc2V0LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUUoQlVHIDcy
NDYxKTogV2UgZG9uJ3QgYWRkIEBmb250LWZhY2UgcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0
cyBmb3IgdGhlIG1vbWVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY29wZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxT
dHlsZVJ1bGVGb250RmFjZSo+KGNoaWxkUnVsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXNvbHZlci0+Zm9udFNlbGVjdG9yKCktPmFkZEZvbnRGYWNlUnVsZShmb250RmFjZVJ1bGUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZXItPmludmFsaWRhdGVNYXRjaGVkUHJvcGVy
dGllc0NhY2hlKCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRSdWxlLT5p
c0tleWZyYW1lc1J1bGUoKSAmJiByZXNvbHZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQWRkIHRoaXMga2V5ZnJhbWUgcnVsZSB0byBvdXIgc2V0LgorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRklYTUUoQlVHIDcyNDYyKTogV2UgZG9uJ3QgYWRkIEBrZXlmcmFtZSBydWxlcyBv
ZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHNjb3BlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZXItPmFkZEtleWZyYW1lU3R5bGUoc3RhdGlj
X2Nhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVzKj4oY2hpbGRSdWxlKSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9IC8vIGZvciBydWxlcworICAgICAgICAgICAgfSAvLyBp
ZiBydWxlcworICAgICAgICB9IGVsc2UgaWYgKHJ1bGUtPmlzRm9udEZhY2VSdWxlKCkgJiYgcmVz
b2x2ZXIpIHsKKyAgICAgICAgICAgIC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0byBvdXIgc2V0Lgor
ICAgICAgICAgICAgLy8gRklYTUUoQlVHIDcyNDYxKTogV2UgZG9uJ3QgYWRkIEBmb250LWZhY2Ug
cnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KKyAgICAgICAgICAg
IGlmIChzY29wZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGNvbnN0
IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGVG
b250RmFjZSo+KHJ1bGUpOworICAgICAgICAgICAgcmVzb2x2ZXItPmZvbnRTZWxlY3RvcigpLT5h
ZGRGb250RmFjZVJ1bGUoZm9udEZhY2VSdWxlKTsKKyAgICAgICAgICAgIHJlc29sdmVyLT5pbnZh
bGlkYXRlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpOworICAgICAgICB9IGVsc2UgaWYgKHJ1bGUt
PmlzS2V5ZnJhbWVzUnVsZSgpICYmIHJlc29sdmVyKSB7CisgICAgICAgICAgICAvLyBGSVhNRSAo
QlVHIDcyNDYyKTogV2UgZG9uJ3QgYWRkIEBrZXlmcmFtZSBydWxlcyBvZiBzY29wZWQgc3R5bGUg
c2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgaWYgKHNjb3BlKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcmVzb2x2ZXItPmFkZEtleWZyYW1lU3R5bGUo
c3RhdGljX2Nhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVzKj4ocnVsZSkpOworICAgICAgICB9CisjaWYg
RU5BQkxFKENTU19SRUdJT05TKQorICAgICAgICBlbHNlIGlmIChydWxlLT5pc1JlZ2lvblJ1bGUo
KSAmJiByZXNvbHZlcikgeworICAgICAgICAgICAgLy8gRklYTUUgKEJVRyA3MjQ3Mik6IFdlIGRv
bid0IGFkZCBALXdlYmtpdC1yZWdpb24gcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3Ig
dGhlIG1vbWVudC4KKyAgICAgICAgICAgIGlmIChzY29wZSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIGFkZFJlZ2lvblJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUmVn
aW9uKj4ocnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pOworICAgICAgICB9CisjZW5k
aWYKKyAgICB9CisgICAgaWYgKG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCkKKyAgICAgICAgc2hy
aW5rVG9GaXQoKTsKK30KKwordm9pZCBSdWxlU2V0OjphZGRTdHlsZVJ1bGUoU3R5bGVSdWxlKiBy
dWxlLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNr
U2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1bGUpCit7CisgICAgZm9yIChzaXplX3Qgc2VsZWN0
b3JJbmRleCA9IDA7IHNlbGVjdG9ySW5kZXggIT0gbm90Rm91bmQ7IHNlbGVjdG9ySW5kZXggPSBy
dWxlLT5zZWxlY3Rvckxpc3QoKS5pbmRleE9mTmV4dFNlbGVjdG9yQWZ0ZXIoc2VsZWN0b3JJbmRl
eCkpCisgICAgICAgIGFkZFJ1bGUocnVsZSwgc2VsZWN0b3JJbmRleCwgaGFzRG9jdW1lbnRTZWN1
cml0eU9yaWdpbiwgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGlzSW5SZWdpb25SdWxlKTsKK30K
Kworc3RhdGljIGlubGluZSB2b2lkIHNocmlua01hcFZlY3RvcnNUb0ZpdChSdWxlU2V0OjpBdG9t
UnVsZU1hcCYgbWFwKQoreworICAgIFJ1bGVTZXQ6OkF0b21SdWxlTWFwOjppdGVyYXRvciBlbmQg
PSBtYXAuZW5kKCk7CisgICAgZm9yIChSdWxlU2V0OjpBdG9tUnVsZU1hcDo6aXRlcmF0b3IgaXQg
PSBtYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpdC0+c2Vjb25kLT5zaHJp
bmtUb0ZpdCgpOworfQorCit2b2lkIFJ1bGVTZXQ6OnNocmlua1RvRml0KCkKK3sKKyAgICBzaHJp
bmtNYXBWZWN0b3JzVG9GaXQobV9pZFJ1bGVzKTsKKyAgICBzaHJpbmtNYXBWZWN0b3JzVG9GaXQo
bV9jbGFzc1J1bGVzKTsKKyAgICBzaHJpbmtNYXBWZWN0b3JzVG9GaXQobV90YWdSdWxlcyk7Cisg
ICAgc2hyaW5rTWFwVmVjdG9yc1RvRml0KG1fc2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKTsKKyAg
ICBtX2xpbmtQc2V1ZG9DbGFzc1J1bGVzLnNocmlua1RvRml0KCk7CisgICAgbV9mb2N1c1BzZXVk
b0NsYXNzUnVsZXMuc2hyaW5rVG9GaXQoKTsKKyAgICBtX3VuaXZlcnNhbFJ1bGVzLnNocmlua1Rv
Rml0KCk7CisgICAgbV9wYWdlUnVsZXMuc2hyaW5rVG9GaXQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjU3NzIzOGJhOTIzNmE5ZDY4
MTAzOTE5NWEwZGQ0M2EyZTgwODJhMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9SdWxlU2V0LmgKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5
OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFJ1bGVTZXRfaAorI2RlZmluZSBSdWxlU2V0
X2gKKworI2luY2x1ZGUgIlJ1bGVGZWF0dXJlLmgiCisjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCisj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTU2VsZWN0b3I7CitjbGFzcyBDb250YWlu
ZXJOb2RlOworY2xhc3MgTWVkaWFRdWVyeUV2YWx1YXRvcjsKK2NsYXNzIFN0eWxlUmVzb2x2ZXI7
CitjbGFzcyBTdHlsZVJ1bGVSZWdpb247CitjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7CisKK2Ns
YXNzIFJ1bGVEYXRhIHsKK3B1YmxpYzoKKyAgICBSdWxlRGF0YShTdHlsZVJ1bGUqLCB1bnNpZ25l
ZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBwb3NpdGlvbiwgYm9vbCBoYXNEb2N1bWVudFNlY3Vy
aXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGluUmVnaW9uUnVs
ZSk7CisKKyAgICB1bnNpZ25lZCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247
IH0KKyAgICBTdHlsZVJ1bGUqIHJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3J1bGU7IH0KKyAgICBD
U1NTZWxlY3Rvciogc2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3J1bGUtPnNlbGVjdG9yTGlz
dCgpLnNlbGVjdG9yQXQobV9zZWxlY3RvckluZGV4KTsgfQorICAgIHVuc2lnbmVkIHNlbGVjdG9y
SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdG9ySW5kZXg7IH0KKworICAgIGJvb2wgaGFz
RmFzdENoZWNrYWJsZVNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGYXN0Q2hlY2thYmxl
U2VsZWN0b3I7IH0KKyAgICBib29sIGhhc011bHRpcGFydFNlbGVjdG9yKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNNdWx0aXBhcnRTZWxlY3RvcjsgfQorICAgIGJvb2wgaGFzUmlnaHRtb3N0U2VsZWN0
b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goKSBjb25zdCB7IHJldHVybiBtX2hhc1JpZ2h0
bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoOyB9CisgICAgYm9vbCBjb250
YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5z
VW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcjsgfQorICAgIHVuc2lnbmVkIHNwZWNpZmljaXR5KCkg
Y29uc3QgeyByZXR1cm4gbV9zcGVjaWZpY2l0eTsgfQorICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5
cGUoKSBjb25zdCB7IHJldHVybiBtX2xpbmtNYXRjaFR5cGU7IH0KKyAgICBib29sIGhhc0RvY3Vt
ZW50U2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX2hhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW47IH0KKyAgICBib29sIGlzSW5SZWdpb25SdWxlKCkgY29uc3QgeyByZXR1cm4gbV9pc0lu
UmVnaW9uUnVsZTsgfQorCisgICAgLy8gVHJ5IHRvIGJhbGFuY2UgYmV0d2VlbiBtZW1vcnkgdXNh
Z2UgKHRoZXJlIGNhbiBiZSBsb3RzIG9mIFJ1bGVEYXRhIG9iamVjdHMpIGFuZCBnb29kIGZpbHRl
cmluZyBwZXJmb3JtYW5jZS4KKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUlkZW50
aWZpZXJDb3VudCA9IDQ7CisgICAgY29uc3QgdW5zaWduZWQqIGRlc2NlbmRhbnRTZWxlY3Rvcklk
ZW50aWZpZXJIYXNoZXMoKSBjb25zdCB7IHJldHVybiBtX2Rlc2NlbmRhbnRTZWxlY3RvcklkZW50
aWZpZXJIYXNoZXM7IH0KKworICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0
SW5mbyopIGNvbnN0OworCitwcml2YXRlOgorICAgIFN0eWxlUnVsZSogbV9ydWxlOworICAgIHVu
c2lnbmVkIG1fc2VsZWN0b3JJbmRleCA6IDEyOworICAgIC8vIFRoaXMgbnVtYmVyIHdhcyBwaWNr
ZWQgZmFpcmx5IGFyYml0cmFyaWx5LiBXZSBjYW4gcHJvYmFibHkgbG93ZXIgaXQgaWYgd2UgbmVl
ZCB0by4KKyAgICAvLyBTb21lIHNpbXBsZSB0ZXN0aW5nIHNob3dlZCA8MTAwLDAwMCBSdWxlRGF0
YSdzIG9uIGxhcmdlIHNpdGVzLgorICAgIHVuc2lnbmVkIG1fcG9zaXRpb24gOiAyMDsKKyAgICB1
bnNpZ25lZCBtX3NwZWNpZmljaXR5IDogMjQ7CisgICAgdW5zaWduZWQgbV9oYXNGYXN0Q2hlY2th
YmxlU2VsZWN0b3IgOiAxOworICAgIHVuc2lnbmVkIG1faGFzTXVsdGlwYXJ0U2VsZWN0b3IgOiAx
OworICAgIHVuc2lnbmVkIG1faGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9u
UnVsZUhhc2ggOiAxOworICAgIHVuc2lnbmVkIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNl
bGVjdG9yIDogMTsKKyAgICB1bnNpZ25lZCBtX2xpbmtNYXRjaFR5cGUgOiAyOyAvLyAgU2VsZWN0
b3JDaGVja2VyOjpMaW5rTWF0Y2hNYXNrCisgICAgdW5zaWduZWQgbV9oYXNEb2N1bWVudFNlY3Vy
aXR5T3JpZ2luIDogMTsKKyAgICB1bnNpZ25lZCBtX2lzSW5SZWdpb25SdWxlIDogMTsKKyAgICAv
LyBVc2UgcGxhaW4gYXJyYXkgaW5zdGVhZCBvZiBhIFZlY3RvciB0byBtaW5pbWl6ZSBtZW1vcnkg
b3ZlcmhlYWQuCisgICAgdW5zaWduZWQgbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFz
aGVzW21heGltdW1JZGVudGlmaWVyQ291bnRdOworfTsKKyAgICAKK3N0cnVjdCBTYW1lU2l6ZUFz
UnVsZURhdGEgeworICAgIHZvaWQqIGE7CisgICAgdW5zaWduZWQgYjsKKyAgICB1bnNpZ25lZCBj
OworICAgIHVuc2lnbmVkIGRbNF07Cit9OworCitDT01QSUxFX0FTU0VSVChzaXplb2YoUnVsZURh
dGEpID09IHNpemVvZihTYW1lU2l6ZUFzUnVsZURhdGEpLCBSdWxlRGF0YV9zaG91bGRfc3RheV9z
bWFsbCk7CisKK2NsYXNzIFJ1bGVTZXQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJ1bGVT
ZXQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093
blB0cjxSdWxlU2V0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgUnVsZVNldCk7IH0K
KworICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgT3duUHRyPFZlY3RvcjxS
dWxlRGF0YT4gPiA+IEF0b21SdWxlTWFwOworCisgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChT
dHlsZVNoZWV0Q29udGVudHMqLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgU3R5bGVSZXNv
bHZlciogPSAwLCBjb25zdCBDb250YWluZXJOb2RlKiA9IDApOworCisgICAgdm9pZCBhZGRTdHls
ZVJ1bGUoU3R5bGVSdWxlKiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNh
blVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGlzSW5SZWdpb25SdWxlID0gZmFsc2UpOworICAg
IHZvaWQgYWRkUnVsZShTdHlsZVJ1bGUqLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCBib29sIGhh
c0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJv
b2wgaXNJblJlZ2lvblJ1bGUgPSBmYWxzZSk7CisgICAgdm9pZCBhZGRQYWdlUnVsZShTdHlsZVJ1
bGVQYWdlKik7CisgICAgdm9pZCBhZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBB
dG9tUnVsZU1hcCYsIGNvbnN0IFJ1bGVEYXRhJik7CisgICAgdm9pZCBhZGRSZWdpb25SdWxlKFN0
eWxlUnVsZVJlZ2lvbiosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbik7CisgICAgdm9p
ZCBzaHJpbmtUb0ZpdCgpOworICAgIHZvaWQgZGlzYWJsZUF1dG9TaHJpbmtUb0ZpdCgpIHsgbV9h
dXRvU2hyaW5rVG9GaXRFbmFibGVkID0gZmFsc2U7IH0KKworICAgIGNvbnN0IFJ1bGVGZWF0dXJl
U2V0JiBmZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXM7IH0KKworICAgIGNvbnN0
IFZlY3RvcjxSdWxlRGF0YT4qIGlkUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7
IHJldHVybiBtX2lkUnVsZXMuZ2V0KGtleSk7IH0KKyAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+
KiBjbGFzc1J1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29uc3QgeyByZXR1cm4gbV9jbGFz
c1J1bGVzLmdldChrZXkpOyB9CisgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogdGFnUnVsZXMo
QXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7IHJldHVybiBtX3RhZ1J1bGVzLmdldChrZXkp
OyB9CisgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogc2hhZG93UHNldWRvRWxlbWVudFJ1bGVz
KEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29uc3QgeyByZXR1cm4gbV9zaGFkb3dQc2V1ZG9FbGVt
ZW50UnVsZXMuZ2V0KGtleSk7IH0KKyAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBsaW5rUHNl
dWRvQ2xhc3NSdWxlcygpIGNvbnN0IHsgcmV0dXJuICZtX2xpbmtQc2V1ZG9DbGFzc1J1bGVzOyB9
CisgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogZm9jdXNQc2V1ZG9DbGFzc1J1bGVzKCkgY29u
c3QgeyByZXR1cm4gJm1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzOyB9CisgICAgY29uc3QgVmVjdG9y
PFJ1bGVEYXRhPiogdW5pdmVyc2FsUnVsZXMoKSBjb25zdCB7IHJldHVybiAmbV91bml2ZXJzYWxS
dWxlczsgfQorICAgIGNvbnN0IFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIHBhZ2VSdWxlcygpIGNv
bnN0IHsgcmV0dXJuIG1fcGFnZVJ1bGVzOyB9CisKKyAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdl
KE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKKworcHVibGljOgorICAgIFJ1bGVTZXQoKTsKKwor
ICAgIEF0b21SdWxlTWFwIG1faWRSdWxlczsKKyAgICBBdG9tUnVsZU1hcCBtX2NsYXNzUnVsZXM7
CisgICAgQXRvbVJ1bGVNYXAgbV90YWdSdWxlczsKKyAgICBBdG9tUnVsZU1hcCBtX3NoYWRvd1Bz
ZXVkb0VsZW1lbnRSdWxlczsKKyAgICBWZWN0b3I8UnVsZURhdGE+IG1fbGlua1BzZXVkb0NsYXNz
UnVsZXM7CisgICAgVmVjdG9yPFJ1bGVEYXRhPiBtX2ZvY3VzUHNldWRvQ2xhc3NSdWxlczsKKyAg
ICBWZWN0b3I8UnVsZURhdGE+IG1fdW5pdmVyc2FsUnVsZXM7CisgICAgVmVjdG9yPFN0eWxlUnVs
ZVBhZ2UqPiBtX3BhZ2VSdWxlczsKKyAgICB1bnNpZ25lZCBtX3J1bGVDb3VudDsKKyAgICBib29s
IG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZDsKKyAgICBSdWxlRmVhdHVyZVNldCBtX2ZlYXR1cmVz
OworCisgICAgc3RydWN0IFJ1bGVTZXRTZWxlY3RvclBhaXIgeworICAgICAgICBSdWxlU2V0U2Vs
ZWN0b3JQYWlyKENTU1NlbGVjdG9yKiBzZWxlY3RvciwgUGFzc093blB0cjxSdWxlU2V0PiBydWxl
U2V0KSA6IHNlbGVjdG9yKHNlbGVjdG9yKSwgcnVsZVNldChydWxlU2V0KSB7IH0KKyAgICAgICAg
UnVsZVNldFNlbGVjdG9yUGFpcihjb25zdCBSdWxlU2V0U2VsZWN0b3JQYWlyJiBycykgOiBzZWxl
Y3Rvcihycy5zZWxlY3RvciksIHJ1bGVTZXQoY29uc3RfY2FzdDxSdWxlU2V0U2VsZWN0b3JQYWly
Kj4oJnJzKS0+cnVsZVNldC5yZWxlYXNlKCkpIHsgfQorICAgICAgICB2b2lkIHJlcG9ydE1lbW9y
eVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKKworICAgICAgICBDU1NTZWxlY3Rvciog
c2VsZWN0b3I7CisgICAgICAgIE93blB0cjxSdWxlU2V0PiBydWxlU2V0OworICAgIH07CisKKyAg
ICBWZWN0b3I8UnVsZVNldFNlbGVjdG9yUGFpcj4gbV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0
czsKK307CisKK2lubGluZSBSdWxlU2V0OjpSdWxlU2V0KCkKKyAgICA6IG1fcnVsZUNvdW50KDAp
CisgICAgLCBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQodHJ1ZSkKK3sKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUnVsZVNldF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5jcHAKaW5kZXggY2MzZjVmM2RmMmZhM2MxMjQ4MmExYjgyOGZjY2NiMzI3OTk4MmQw
Yy4uZTRiYTBhOGZlZTEyMjY0MWM2ZDhjNzBjMWQwMDUwZTc3NDU1YWU0MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtOTgsNiArOTgsNyBAQAogI2luY2x1ZGUgIlJlbmRl
clRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJvdGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIlJ1bGVTZXQuaCIKICNpbmNsdWRlICJTVkdEb2N1
bWVudEV4dGVuc2lvbnMuaCIKICNpbmNsdWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIKICNpbmNs
dWRlICJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgpAQCAtMjA1LDExMyArMjA2LDYgQEAgSEFO
RExFX0lOSEVSSVRfQU5EX0lOSVRJQUwocHJvcCwgUHJvcCkgXAogaWYgKHByaW1pdGl2ZVZhbHVl
KSBcCiAgICAgbV9zdHlsZS0+c2V0IyNQcm9wKCpwcmltaXRpdmVWYWx1ZSk7CiAKLWNsYXNzIFJ1
bGVEYXRhIHsKLXB1YmxpYzoKLSAgICBSdWxlRGF0YShTdHlsZVJ1bGUqLCB1bnNpZ25lZCBzZWxl
Y3RvckluZGV4LCB1bnNpZ25lZCBwb3NpdGlvbiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3Jp
Z2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGluUmVnaW9uUnVsZSk7Ci0K
LSAgICB1bnNpZ25lZCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KLSAg
ICBTdHlsZVJ1bGUqIHJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3J1bGU7IH0KLSAgICBDU1NTZWxl
Y3Rvciogc2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3J1bGUtPnNlbGVjdG9yTGlzdCgpLnNl
bGVjdG9yQXQobV9zZWxlY3RvckluZGV4KTsgfQotICAgIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgo
KSBjb25zdCB7IHJldHVybiBtX3NlbGVjdG9ySW5kZXg7IH0KLQotICAgIGJvb2wgaGFzRmFzdENo
ZWNrYWJsZVNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0
b3I7IH0KLSAgICBib29sIGhhc011bHRpcGFydFNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9o
YXNNdWx0aXBhcnRTZWxlY3RvcjsgfQotICAgIGJvb2wgaGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRj
aGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goKSBjb25zdCB7IHJldHVybiBtX2hhc1JpZ2h0bW9zdFNl
bGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoOyB9Ci0gICAgYm9vbCBjb250YWluc1Vu
Y29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zVW5jb21t
b25BdHRyaWJ1dGVTZWxlY3RvcjsgfQotICAgIHVuc2lnbmVkIHNwZWNpZmljaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV9zcGVjaWZpY2l0eTsgfQotICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUoKSBj
b25zdCB7IHJldHVybiBtX2xpbmtNYXRjaFR5cGU7IH0KLSAgICBib29sIGhhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX2hhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW47
IH0KLSAgICBib29sIGlzSW5SZWdpb25SdWxlKCkgY29uc3QgeyByZXR1cm4gbV9pc0luUmVnaW9u
UnVsZTsgfQotCi0gICAgLy8gVHJ5IHRvIGJhbGFuY2UgYmV0d2VlbiBtZW1vcnkgdXNhZ2UgKHRo
ZXJlIGNhbiBiZSBsb3RzIG9mIFJ1bGVEYXRhIG9iamVjdHMpIGFuZCBnb29kIGZpbHRlcmluZyBw
ZXJmb3JtYW5jZS4KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUlkZW50aWZpZXJD
b3VudCA9IDQ7Ci0gICAgY29uc3QgdW5zaWduZWQqIGRlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZp
ZXJIYXNoZXMoKSBjb25zdCB7IHJldHVybiBtX2Rlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJI
YXNoZXM7IH0KLQotICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyop
IGNvbnN0OwotCi1wcml2YXRlOgotICAgIFN0eWxlUnVsZSogbV9ydWxlOwotICAgIHVuc2lnbmVk
IG1fc2VsZWN0b3JJbmRleCA6IDEyOwotICAgIC8vIFRoaXMgbnVtYmVyIHdhcyBwaWNrZWQgZmFp
cmx5IGFyYml0cmFyaWx5LiBXZSBjYW4gcHJvYmFibHkgbG93ZXIgaXQgaWYgd2UgbmVlZCB0by4K
LSAgICAvLyBTb21lIHNpbXBsZSB0ZXN0aW5nIHNob3dlZCA8MTAwLDAwMCBSdWxlRGF0YSdzIG9u
IGxhcmdlIHNpdGVzLgotICAgIHVuc2lnbmVkIG1fcG9zaXRpb24gOiAyMDsKLSAgICB1bnNpZ25l
ZCBtX3NwZWNpZmljaXR5IDogMjQ7Ci0gICAgdW5zaWduZWQgbV9oYXNGYXN0Q2hlY2thYmxlU2Vs
ZWN0b3IgOiAxOwotICAgIHVuc2lnbmVkIG1faGFzTXVsdGlwYXJ0U2VsZWN0b3IgOiAxOwotICAg
IHVuc2lnbmVkIG1faGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhh
c2ggOiAxOwotICAgIHVuc2lnbmVkIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9y
IDogMTsKLSAgICB1bnNpZ25lZCBtX2xpbmtNYXRjaFR5cGUgOiAyOyAvLyAgU2VsZWN0b3JDaGVj
a2VyOjpMaW5rTWF0Y2hNYXNrCi0gICAgdW5zaWduZWQgbV9oYXNEb2N1bWVudFNlY3VyaXR5T3Jp
Z2luIDogMTsKLSAgICB1bnNpZ25lZCBtX2lzSW5SZWdpb25SdWxlIDogMTsKLSAgICAvLyBVc2Ug
cGxhaW4gYXJyYXkgaW5zdGVhZCBvZiBhIFZlY3RvciB0byBtaW5pbWl6ZSBtZW1vcnkgb3Zlcmhl
YWQuCi0gICAgdW5zaWduZWQgbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzW21h
eGltdW1JZGVudGlmaWVyQ291bnRdOwotfTsKLSAgICAKLXN0cnVjdCBTYW1lU2l6ZUFzUnVsZURh
dGEgewotICAgIHZvaWQqIGE7Ci0gICAgdW5zaWduZWQgYjsKLSAgICB1bnNpZ25lZCBjOwotICAg
IHVuc2lnbmVkIGRbNF07Ci19OwotCi1DT01QSUxFX0FTU0VSVChzaXplb2YoUnVsZURhdGEpID09
IHNpemVvZihTYW1lU2l6ZUFzUnVsZURhdGEpLCBSdWxlRGF0YV9zaG91bGRfc3RheV9zbWFsbCk7
Ci0KLWNsYXNzIFJ1bGVTZXQgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJ1bGVTZXQpOyBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxS
dWxlU2V0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgUnVsZVNldCk7IH0KLQotICAg
IHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgT3duUHRyPFZlY3RvcjxSdWxlRGF0
YT4gPiA+IEF0b21SdWxlTWFwOwotCi0gICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChTdHlsZVNo
ZWV0Q29udGVudHMqLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgU3R5bGVSZXNvbHZlciog
PSAwLCBjb25zdCBDb250YWluZXJOb2RlKiA9IDApOwotCi0gICAgdm9pZCBhZGRTdHlsZVJ1bGUo
U3R5bGVSdWxlKiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZh
c3RDaGVja1NlbGVjdG9yLCBib29sIGlzSW5SZWdpb25SdWxlID0gZmFsc2UpOwotICAgIHZvaWQg
YWRkUnVsZShTdHlsZVJ1bGUqLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCBib29sIGhhc0RvY3Vt
ZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJ
blJlZ2lvblJ1bGUgPSBmYWxzZSk7Ci0gICAgdm9pZCBhZGRQYWdlUnVsZShTdHlsZVJ1bGVQYWdl
Kik7Ci0gICAgdm9pZCBhZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBBdG9tUnVs
ZU1hcCYsIGNvbnN0IFJ1bGVEYXRhJik7Ci0gICAgdm9pZCBhZGRSZWdpb25SdWxlKFN0eWxlUnVs
ZVJlZ2lvbiosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbik7Ci0gICAgdm9pZCBzaHJp
bmtUb0ZpdCgpOwotICAgIHZvaWQgZGlzYWJsZUF1dG9TaHJpbmtUb0ZpdCgpIHsgbV9hdXRvU2hy
aW5rVG9GaXRFbmFibGVkID0gZmFsc2U7IH0KLQotICAgIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OkZl
YXR1cmVzJiBmZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXM7IH0KLQotICAgIGNv
bnN0IFZlY3RvcjxSdWxlRGF0YT4qIGlkUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25z
dCB7IHJldHVybiBtX2lkUnVsZXMuZ2V0KGtleSk7IH0KLSAgICBjb25zdCBWZWN0b3I8UnVsZURh
dGE+KiBjbGFzc1J1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29uc3QgeyByZXR1cm4gbV9j
bGFzc1J1bGVzLmdldChrZXkpOyB9Ci0gICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogdGFnUnVs
ZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7IHJldHVybiBtX3RhZ1J1bGVzLmdldChr
ZXkpOyB9Ci0gICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogc2hhZG93UHNldWRvRWxlbWVudFJ1
bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29uc3QgeyByZXR1cm4gbV9zaGFkb3dQc2V1ZG9F
bGVtZW50UnVsZXMuZ2V0KGtleSk7IH0KLSAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBsaW5r
UHNldWRvQ2xhc3NSdWxlcygpIGNvbnN0IHsgcmV0dXJuICZtX2xpbmtQc2V1ZG9DbGFzc1J1bGVz
OyB9Ci0gICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogZm9jdXNQc2V1ZG9DbGFzc1J1bGVzKCkg
Y29uc3QgeyByZXR1cm4gJm1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzOyB9Ci0gICAgY29uc3QgVmVj
dG9yPFJ1bGVEYXRhPiogdW5pdmVyc2FsUnVsZXMoKSBjb25zdCB7IHJldHVybiAmbV91bml2ZXJz
YWxSdWxlczsgfQotICAgIGNvbnN0IFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIHBhZ2VSdWxlcygp
IGNvbnN0IHsgcmV0dXJuIG1fcGFnZVJ1bGVzOyB9Ci0KLSAgICB2b2lkIHJlcG9ydE1lbW9yeVVz
YWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKLQotcHVibGljOgotICAgIFJ1bGVTZXQoKTsK
LQotICAgIEF0b21SdWxlTWFwIG1faWRSdWxlczsKLSAgICBBdG9tUnVsZU1hcCBtX2NsYXNzUnVs
ZXM7Ci0gICAgQXRvbVJ1bGVNYXAgbV90YWdSdWxlczsKLSAgICBBdG9tUnVsZU1hcCBtX3NoYWRv
d1BzZXVkb0VsZW1lbnRSdWxlczsKLSAgICBWZWN0b3I8UnVsZURhdGE+IG1fbGlua1BzZXVkb0Ns
YXNzUnVsZXM7Ci0gICAgVmVjdG9yPFJ1bGVEYXRhPiBtX2ZvY3VzUHNldWRvQ2xhc3NSdWxlczsK
LSAgICBWZWN0b3I8UnVsZURhdGE+IG1fdW5pdmVyc2FsUnVsZXM7Ci0gICAgVmVjdG9yPFN0eWxl
UnVsZVBhZ2UqPiBtX3BhZ2VSdWxlczsKLSAgICB1bnNpZ25lZCBtX3J1bGVDb3VudDsKLSAgICBi
b29sIG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZDsKLSAgICBTdHlsZVJlc29sdmVyOjpGZWF0dXJl
cyBtX2ZlYXR1cmVzOwotCi0gICAgc3RydWN0IFJ1bGVTZXRTZWxlY3RvclBhaXIgewotICAgICAg
ICBSdWxlU2V0U2VsZWN0b3JQYWlyKENTU1NlbGVjdG9yKiBzZWxlY3RvciwgUGFzc093blB0cjxS
dWxlU2V0PiBydWxlU2V0KSA6IHNlbGVjdG9yKHNlbGVjdG9yKSwgcnVsZVNldChydWxlU2V0KSB7
IH0KLSAgICAgICAgUnVsZVNldFNlbGVjdG9yUGFpcihjb25zdCBSdWxlU2V0U2VsZWN0b3JQYWly
JiBycykgOiBzZWxlY3Rvcihycy5zZWxlY3RvciksIHJ1bGVTZXQoY29uc3RfY2FzdDxSdWxlU2V0
U2VsZWN0b3JQYWlyKj4oJnJzKS0+cnVsZVNldC5yZWxlYXNlKCkpIHsgfQotICAgICAgICB2b2lk
IHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKLQotICAgICAgICBD
U1NTZWxlY3Rvciogc2VsZWN0b3I7Ci0gICAgICAgIE93blB0cjxSdWxlU2V0PiBydWxlU2V0Owot
ICAgIH07Ci0KLSAgICBWZWN0b3I8UnVsZVNldFNlbGVjdG9yUGFpcj4gbV9yZWdpb25TZWxlY3Rv
cnNBbmRSdWxlU2V0czsKLX07CiAKIHN0YXRpYyBSdWxlU2V0KiBkZWZhdWx0U3R5bGU7CiBzdGF0
aWMgUnVsZVNldCogZGVmYXVsdFF1aXJrc1N0eWxlOwpAQCAtNDgxLDcgKzM3NSw3IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YWRkQXV0aG9yUnVsZXNBbmRDb2xsZWN0VXNlclJ1bGVzRnJvbVNoZWV0
cyhjb25zdCBWZWN0b3I8UmVmCiAgICAgfQogfQogCi1zdGF0aWMgUGFzc093blB0cjxSdWxlU2V0
PiBtYWtlUnVsZVNldChjb25zdCBWZWN0b3I8U3R5bGVSZXNvbHZlcjo6UnVsZUZlYXR1cmU+JiBy
dWxlcykKK3N0YXRpYyBQYXNzT3duUHRyPFJ1bGVTZXQ+IG1ha2VSdWxlU2V0KGNvbnN0IFZlY3Rv
cjxSdWxlRmVhdHVyZT4mIHJ1bGVzKQogewogICAgIHNpemVfdCBzaXplID0gcnVsZXMuc2l6ZSgp
OwogICAgIGlmICghc2l6ZSkKQEAgLTcxMiw0OSArNjA2LDYgQEAgdm9pZCBTdHlsZVJlc29sdmVy
Ojpzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKQogICAgICAgICBtX21hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUucmVtb3ZlKHRvUmVtb3ZlW2ldKTsKIH0KIAotU3R5bGVSZXNvbHZlcjo6RmVhdHVy
ZXM6OkZlYXR1cmVzKCkKLSAgICA6IHVzZXNGaXJzdExpbmVSdWxlcyhmYWxzZSkKLSAgICAsIHVz
ZXNCZWZvcmVBZnRlclJ1bGVzKGZhbHNlKQotewotfQotCi1TdHlsZVJlc29sdmVyOjpGZWF0dXJl
czo6fkZlYXR1cmVzKCkKLXsKLX0KLSAgICAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXM6
OmFkZChjb25zdCBTdHlsZVJlc29sdmVyOjpGZWF0dXJlcyYgb3RoZXIpCi17Ci0gICAgSGFzaFNl
dDxBdG9taWNTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGVuZCA9IG90aGVyLmlkc0luUnVsZXMuZW5k
KCk7Ci0gICAgZm9yIChIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPjo6aXRlcmF0b3IgaXQgPSBv
dGhlci5pZHNJblJ1bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaWRzSW5S
dWxlcy5hZGQoKml0KTsKLSAgICBlbmQgPSBvdGhlci5hdHRyc0luUnVsZXMuZW5kKCk7Ci0gICAg
Zm9yIChIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPjo6aXRlcmF0b3IgaXQgPSBvdGhlci5hdHRy
c0luUnVsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBhdHRyc0luUnVsZXMu
YWRkKCppdCk7Ci0gICAgc2libGluZ1J1bGVzLmFwcGVuZChvdGhlci5zaWJsaW5nUnVsZXMpOwot
ICAgIHVuY29tbW9uQXR0cmlidXRlUnVsZXMuYXBwZW5kKG90aGVyLnVuY29tbW9uQXR0cmlidXRl
UnVsZXMpOwotICAgIHVzZXNGaXJzdExpbmVSdWxlcyA9IHVzZXNGaXJzdExpbmVSdWxlcyB8fCBv
dGhlci51c2VzRmlyc3RMaW5lUnVsZXM7Ci0gICAgdXNlc0JlZm9yZUFmdGVyUnVsZXMgPSB1c2Vz
QmVmb3JlQWZ0ZXJSdWxlcyB8fCBvdGhlci51c2VzQmVmb3JlQWZ0ZXJSdWxlczsKLX0KLQotdm9p
ZCBTdHlsZVJlc29sdmVyOjpGZWF0dXJlczo6Y2xlYXIoKQotewotICAgIGlkc0luUnVsZXMuY2xl
YXIoKTsKLSAgICBhdHRyc0luUnVsZXMuY2xlYXIoKTsKLSAgICBzaWJsaW5nUnVsZXMuY2xlYXIo
KTsKLSAgICB1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmNsZWFyKCk7Ci0gICAgdXNlc0ZpcnN0TGlu
ZVJ1bGVzID0gZmFsc2U7Ci0gICAgdXNlc0JlZm9yZUFmdGVyUnVsZXMgPSBmYWxzZTsKLX0KLQot
dm9pZCBTdHlsZVJlc29sdmVyOjpGZWF0dXJlczo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2Jq
ZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKLXsKLSAgICBNZW1vcnlDbGFzc0luZm8g
aW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNTUyk7Ci0g
ICAgaW5mby5hZGRNZW1iZXIoaWRzSW5SdWxlcyk7Ci0gICAgaW5mby5hZGRNZW1iZXIoYXR0cnNJ
blJ1bGVzKTsKLSAgICBpbmZvLmFkZE1lbWJlcihzaWJsaW5nUnVsZXMpOwotICAgIGluZm8uYWRk
TWVtYmVyKHVuY29tbW9uQXR0cmlidXRlUnVsZXMpOwotfQotCiBzdGF0aWMgU3R5bGVTaGVldENv
bnRlbnRzKiBwYXJzZVVBU2hlZXQoY29uc3QgU3RyaW5nJiBzdHIpCiB7CiAgICAgU3R5bGVTaGVl
dENvbnRlbnRzKiBzaGVldCA9IFN0eWxlU2hlZXRDb250ZW50czo6Y3JlYXRlKCkubGVha1JlZigp
OyAvLyBsZWFrIHRoZSBzaGVldCBvbiBwdXJwb3NlCkBAIC0yNDcyLDMzOSArMjMyMyw2IEBAIGJv
b2wgU3R5bGVSZXNvbHZlcjo6ZGV0ZXJtaW5lU3R5bGVzaGVldFNlbGVjdG9yU2NvcGVzKFN0eWxl
U2hlZXRDb250ZW50cyogc3R5bGVzCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1NlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVI
YXNoKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICBjb25zdCBBdG9taWNTdHJp
bmcmIHNlbGVjdG9yTmFtZXNwYWNlID0gc2VsZWN0b3ItPnRhZygpLm5hbWVzcGFjZVVSSSgpOwot
ICAgIGlmIChzZWxlY3Rvck5hbWVzcGFjZSAhPSBzdGFyQXRvbSAmJiBzZWxlY3Rvck5hbWVzcGFj
ZSAhPSB4aHRtbE5hbWVzcGFjZVVSSSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChz
ZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Tm9uZSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgaWYgKHNlbGVjdG9yLT50YWcoKSAhPSBzdGFyQXRvbSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChTZWxlY3RvckNoZWNrZXI6OmlzQ29tbW9uUHNldWRvQ2xhc3NTZWxl
Y3RvcihzZWxlY3RvcikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBzZWxlY3Rv
ci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQgfHwgc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NT
U2VsZWN0b3I6OkNsYXNzOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2VsZWN0b3JMaXN0Q29u
dGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3Rv
cikKLXsKLSAgICBDU1NTZWxlY3Rvckxpc3QqIHNlbGVjdG9yTGlzdCA9IHNlbGVjdG9yLT5zZWxl
Y3Rvckxpc3QoKTsKLSAgICBpZiAoIXNlbGVjdG9yTGlzdCkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGZvciAoQ1NTU2VsZWN0b3IqIHN1YlNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJz
dCgpOyBzdWJTZWxlY3Rvcjsgc3ViU2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3Vi
U2VsZWN0b3IpKSB7Ci0gICAgICAgIGlmIChzdWJTZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3Rv
cigpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotc3RhdGljIGlubGluZSBib29sIGlzQ29tbW9uQXR0cmlidXRlU2VsZWN0b3JBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKQotewotICAgIC8vIFRoZXNlIGFyZSBl
eHBsaWNpdGx5IHRlc3RlZCBmb3IgZXF1YWxpdHkgaW4gY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50
LgotICAgIHJldHVybiBhdHRyaWJ1dGUgPT0gdHlwZUF0dHIgfHwgYXR0cmlidXRlID09IHJlYWRv
bmx5QXR0cjsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGNvbnRhaW5zVW5jb21tb25BdHRyaWJ1
dGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCi17Ci0gICAgZm9yICg7IHNl
bGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKLSAgICAgICAgLy8g
QWxsb3cgY2VydGFpbiBjb21tb24gYXR0cmlidXRlcyAodXNlZCBpbiB0aGUgZGVmYXVsdCBzdHls
ZSkgaW4gdGhlIHNlbGVjdG9ycyB0aGF0IG1hdGNoIHRoZSBjdXJyZW50IGVsZW1lbnQuCi0gICAg
ICAgIGlmIChzZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpICYmICFpc0NvbW1vbkF0dHJp
YnV0ZVNlbGVjdG9yQXR0cmlidXRlKHNlbGVjdG9yLT5hdHRyaWJ1dGUoKSkpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKHNlbGVjdG9yTGlzdENvbnRhaW5zVW5jb21tb25B
dHRyaWJ1dGVTZWxlY3RvcihzZWxlY3RvcikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3Rv
cikgewotICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKDsgc2VsZWN0b3I7
IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewotICAgICAgICBpZiAoc2VsZWN0
b3ItPmlzQXR0cmlidXRlU2VsZWN0b3IoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBpZiAoc2VsZWN0b3JMaXN0Q29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKHNl
bGVjdG9yKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLVJ1bGVEYXRhOjpSdWxlRGF0YShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNl
bGVjdG9ySW5kZXgsIHVuc2lnbmVkIHBvc2l0aW9uLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaW5SZWdpb25SdWxlKQot
ICAgIDogbV9ydWxlKHJ1bGUpCi0gICAgLCBtX3NlbGVjdG9ySW5kZXgoc2VsZWN0b3JJbmRleCkK
LSAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24pCi0gICAgLCBtX3NwZWNpZmljaXR5KHNlbGVjdG9y
KCktPnNwZWNpZmljaXR5KCkpCi0gICAgLCBtX2hhc0Zhc3RDaGVja2FibGVTZWxlY3RvcihjYW5V
c2VGYXN0Q2hlY2tTZWxlY3RvciAmJiBTZWxlY3RvckNoZWNrZXI6OmlzRmFzdENoZWNrYWJsZVNl
bGVjdG9yKHNlbGVjdG9yKCkpKQotICAgICwgbV9oYXNNdWx0aXBhcnRTZWxlY3RvcighIXNlbGVj
dG9yKCktPnRhZ0hpc3RvcnkoKSkKLSAgICAsIG1faGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGlu
Z0hUTUxCYXNlZE9uUnVsZUhhc2goaXNTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFz
aChzZWxlY3RvcigpKSkKLSAgICAsIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9y
KFdlYkNvcmU6OmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcihzZWxlY3RvcigpKSkK
LSAgICAsIG1fbGlua01hdGNoVHlwZShTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtNYXRj
aFR5cGUoc2VsZWN0b3IoKSkpCi0gICAgLCBtX2hhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oaGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbikKLSAgICAsIG1faXNJblJlZ2lvblJ1bGUoaW5SZWdpb25S
dWxlKQotewotICAgIEFTU0VSVChtX3Bvc2l0aW9uID09IHBvc2l0aW9uKTsKLSAgICBBU1NFUlQo
bV9zZWxlY3RvckluZGV4ID09IHNlbGVjdG9ySW5kZXgpOwotICAgIFNlbGVjdG9yQ2hlY2tlcjo6
Y29sbGVjdElkZW50aWZpZXJIYXNoZXMoc2VsZWN0b3IoKSwgbV9kZXNjZW5kYW50U2VsZWN0b3JJ
ZGVudGlmaWVySGFzaGVzLCBtYXhpbXVtSWRlbnRpZmllckNvdW50KTsKLX0KLQotdm9pZCBSdWxl
RGF0YTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5m
bykgY29uc3QKLXsKLSAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0
aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNTUyk7Ci19Ci0KLVJ1bGVTZXQ6OlJ1bGVTZXQoKQot
ICAgIDogbV9ydWxlQ291bnQoMCkKLSAgICAsIG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCh0cnVl
KQotewotfQotCi1zdGF0aWMgdm9pZCByZXBvcnRBdG9tUnVsZU1hcChNZW1vcnlDbGFzc0luZm8q
IGluZm8sIGNvbnN0IFJ1bGVTZXQ6OkF0b21SdWxlTWFwJiBhdG9taWNSdWxlTWFwKQotewotICAg
IGluZm8tPmFkZE1lbWJlcihhdG9taWNSdWxlTWFwKTsKLSAgICBmb3IgKFJ1bGVTZXQ6OkF0b21S
dWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGF0b21pY1J1bGVNYXAuYmVnaW4oKTsgaXQgIT0g
YXRvbWljUnVsZU1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgaW5mby0+YWRkTWVtYmVyKCppdC0+
c2Vjb25kKTsKLX0KLQotdm9pZCBSdWxlU2V0OjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmpl
Y3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAotewotICAgIE1lbW9yeUNsYXNzSW5mbyBp
bmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6Q1NTKTsKLSAg
ICByZXBvcnRBdG9tUnVsZU1hcCgmaW5mbywgbV9pZFJ1bGVzKTsKLSAgICByZXBvcnRBdG9tUnVs
ZU1hcCgmaW5mbywgbV9jbGFzc1J1bGVzKTsKLSAgICByZXBvcnRBdG9tUnVsZU1hcCgmaW5mbywg
bV90YWdSdWxlcyk7Ci0gICAgcmVwb3J0QXRvbVJ1bGVNYXAoJmluZm8sIG1fc2hhZG93UHNldWRv
RWxlbWVudFJ1bGVzKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX2xpbmtQc2V1ZG9DbGFzc1J1bGVz
KTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX2ZvY3VzUHNldWRvQ2xhc3NSdWxlcyk7Ci0gICAgaW5m
by5hZGRNZW1iZXIobV91bml2ZXJzYWxSdWxlcyk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9wYWdl
UnVsZXMpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMp
OwotfQotCi12b2lkIFJ1bGVTZXQ6OlJ1bGVTZXRTZWxlY3RvclBhaXI6OnJlcG9ydE1lbW9yeVVz
YWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0Ci17Ci0gICAgTWVt
b3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5
cGVzOjpDU1MpOwotICAgIGluZm8uYWRkTWVtYmVyKHJ1bGVTZXQpOwotfQotCi1zdGF0aWMgaW5s
aW5lIHZvaWQgY29sbGVjdEZlYXR1cmVzRnJvbVNlbGVjdG9yKFN0eWxlUmVzb2x2ZXI6OkZlYXR1
cmVzJiBmZWF0dXJlcywgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAgIGlmIChz
ZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpCi0gICAgICAgIGZlYXR1cmVzLmlk
c0luUnVsZXMuYWRkKHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSk7Ci0gICAgaWYgKHNlbGVjdG9y
LT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkpCi0gICAgICAgIGZlYXR1cmVzLmF0dHJzSW5SdWxlcy5h
ZGQoc2VsZWN0b3ItPmF0dHJpYnV0ZSgpLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgc3dpdGNo
IChzZWxlY3Rvci0+cHNldWRvVHlwZSgpKSB7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
Rmlyc3RMaW5lOgotICAgICAgICBmZWF0dXJlcy51c2VzRmlyc3RMaW5lUnVsZXMgPSB0cnVlOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9CZWZvcmU6Ci0gICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQWZ0ZXI6Ci0gICAgICAgIGZlYXR1cmVzLnVzZXNCZWZv
cmVBZnRlclJ1bGVzID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBjb2xsZWN0RmVhdHVyZXNGcm9tUnVs
ZURhdGEoU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXMmIGZlYXR1cmVzLCBjb25zdCBSdWxlRGF0YSYg
cnVsZURhdGEpCi17Ci0gICAgYm9vbCBmb3VuZFNpYmxpbmdTZWxlY3RvciA9IGZhbHNlOwotICAg
IGZvciAoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gcnVsZURhdGEuc2VsZWN0b3IoKTsgc2VsZWN0
b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewotICAgICAgICBjb2xsZWN0
RmVhdHVyZXNGcm9tU2VsZWN0b3IoZmVhdHVyZXMsIHNlbGVjdG9yKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChDU1NTZWxlY3Rvckxpc3QqIHNlbGVjdG9yTGlzdCA9IHNlbGVjdG9yLT5zZWxlY3Rv
ckxpc3QoKSkgewotICAgICAgICAgICAgZm9yIChDU1NTZWxlY3Rvciogc3ViU2VsZWN0b3IgPSBz
ZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YlNlbGVjdG9yOyBzdWJTZWxlY3RvciA9IENTU1NlbGVj
dG9yTGlzdDo6bmV4dChzdWJTZWxlY3RvcikpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWZvdW5k
U2libGluZ1NlbGVjdG9yICYmIHNlbGVjdG9yLT5pc1NpYmxpbmdTZWxlY3RvcigpKQotICAgICAg
ICAgICAgICAgICAgICBmb3VuZFNpYmxpbmdTZWxlY3RvciA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgY29sbGVjdEZlYXR1cmVzRnJvbVNlbGVjdG9yKGZlYXR1cmVzLCBzdWJTZWxlY3Rvcik7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoIWZvdW5kU2libGluZ1NlbGVjdG9yICYm
IHNlbGVjdG9yLT5pc1NpYmxpbmdTZWxlY3RvcigpKQotICAgICAgICAgICAgZm91bmRTaWJsaW5n
U2VsZWN0b3IgPSB0cnVlOwotICAgIH0KLSAgICBpZiAoZm91bmRTaWJsaW5nU2VsZWN0b3IpCi0g
ICAgICAgIGZlYXR1cmVzLnNpYmxpbmdSdWxlcy5hcHBlbmQoU3R5bGVSZXNvbHZlcjo6UnVsZUZl
YXR1cmUocnVsZURhdGEucnVsZSgpLCBydWxlRGF0YS5zZWxlY3RvckluZGV4KCksIHJ1bGVEYXRh
Lmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSkpOwotICAgIGlmIChydWxlRGF0YS5jb250YWlu
c1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSkKLSAgICAgICAgZmVhdHVyZXMudW5jb21tb25B
dHRyaWJ1dGVSdWxlcy5hcHBlbmQoU3R5bGVSZXNvbHZlcjo6UnVsZUZlYXR1cmUocnVsZURhdGEu
cnVsZSgpLCBydWxlRGF0YS5zZWxlY3RvckluZGV4KCksIHJ1bGVEYXRhLmhhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW4oKSkpOwotfQotICAgIAotdm9pZCBSdWxlU2V0OjphZGRUb1J1bGVTZXQoQXRv
bWljU3RyaW5nSW1wbCoga2V5LCBBdG9tUnVsZU1hcCYgbWFwLCBjb25zdCBSdWxlRGF0YSYgcnVs
ZURhdGEpCi17Ci0gICAgaWYgKCFrZXkpCi0gICAgICAgIHJldHVybjsKLSAgICBPd25QdHI8VmVj
dG9yPFJ1bGVEYXRhPiA+JiBydWxlcyA9IG1hcC5hZGQoa2V5LCBudWxscHRyKS5pdGVyYXRvci0+
c2Vjb25kOwotICAgIGlmICghcnVsZXMpCi0gICAgICAgIHJ1bGVzID0gYWRvcHRQdHIobmV3IFZl
Y3RvcjxSdWxlRGF0YT4pOwotICAgIHJ1bGVzLT5hcHBlbmQocnVsZURhdGEpOwotfQotCi12b2lk
IFJ1bGVTZXQ6OmFkZFJ1bGUoU3R5bGVSdWxlKiBydWxlLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4
LCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2Vs
ZWN0b3IsIGJvb2wgaW5SZWdpb25SdWxlKQotewotICAgIFJ1bGVEYXRhIHJ1bGVEYXRhKHJ1bGUs
IHNlbGVjdG9ySW5kZXgsIG1fcnVsZUNvdW50KyssIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4s
IGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBpblJlZ2lvblJ1bGUpOwotICAgIGNvbGxlY3RGZWF0
dXJlc0Zyb21SdWxlRGF0YShtX2ZlYXR1cmVzLCBydWxlRGF0YSk7Ci0KLSAgICBDU1NTZWxlY3Rv
ciogc2VsZWN0b3IgPSBydWxlRGF0YS5zZWxlY3RvcigpOwotCi0gICAgaWYgKHNlbGVjdG9yLT5t
X21hdGNoID09IENTU1NlbGVjdG9yOjpJZCkgewotICAgICAgICBhZGRUb1J1bGVTZXQoc2VsZWN0
b3ItPnZhbHVlKCkuaW1wbCgpLCBtX2lkUnVsZXMsIHJ1bGVEYXRhKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNz
KSB7Ci0gICAgICAgIGFkZFRvUnVsZVNldChzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCksIG1fY2xh
c3NSdWxlcywgcnVsZURhdGEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChzZWxl
Y3Rvci0+aXNVbmtub3duUHNldWRvRWxlbWVudCgpKSB7Ci0gICAgICAgIGFkZFRvUnVsZVNldChz
ZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCksIG1fc2hhZG93UHNldWRvRWxlbWVudFJ1bGVzLCBydWxl
RGF0YSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKFNlbGVjdG9yQ2hlY2tlcjo6
aXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yKHNlbGVjdG9yKSkgewotICAgICAgICBzd2l0Y2gg
KHNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkpIHsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvTGluazoKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZDoKLSAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQW55TGluazoKLSAgICAgICAgICAgIG1fbGlua1Bz
ZXVkb0NsYXNzUnVsZXMuYXBwZW5kKHJ1bGVEYXRhKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRm9jdXM6Ci0gICAgICAgICAgICBtX2ZvY3Vz
UHNldWRvQ2xhc3NSdWxlcy5hcHBlbmQocnVsZURhdGEpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxv
Y2FsTmFtZSA9IHNlbGVjdG9yLT50YWcoKS5sb2NhbE5hbWUoKTsKLSAgICBpZiAobG9jYWxOYW1l
ICE9IHN0YXJBdG9tKSB7Ci0gICAgICAgIGFkZFRvUnVsZVNldChsb2NhbE5hbWUuaW1wbCgpLCBt
X3RhZ1J1bGVzLCBydWxlRGF0YSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV91bml2
ZXJzYWxSdWxlcy5hcHBlbmQocnVsZURhdGEpOwotfQotCi12b2lkIFJ1bGVTZXQ6OmFkZFBhZ2VS
dWxlKFN0eWxlUnVsZVBhZ2UqIHJ1bGUpCi17Ci0gICAgbV9wYWdlUnVsZXMuYXBwZW5kKHJ1bGUp
OwotfQotCi12b2lkIFJ1bGVTZXQ6OmFkZFJlZ2lvblJ1bGUoU3R5bGVSdWxlUmVnaW9uKiByZWdp
b25SdWxlLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pCi17Ci0gICAgT3duUHRyPFJ1
bGVTZXQ+IHJlZ2lvblJ1bGVTZXQgPSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICAvLyBUaGUgcmVn
aW9uIHJ1bGUgc2V0IHNob3VsZCB0YWtlIGludG8gYWNjb3VudCB0aGUgcG9zaXRpb24gaW5zaWRl
IHRoZSBwYXJlbnQgcnVsZSBzZXQuCi0gICAgLy8gT3RoZXJ3aXNlLCB0aGUgcnVsZXMgaW5zaWRl
IHJlZ2lvbiBibG9jayBtaWdodCBiZSBpbmNvcnJlY3RseSBwb3NpdGlvbmVkIGJlZm9yZSBvdGhl
ciBzaW1pbGFyIHJ1bGVzIGZyb20KLSAgICAvLyB0aGUgc3R5bGVzaGVldCB0aGF0IGNvbnRhaW5z
IHRoZSByZWdpb24gYmxvY2suCi0gICAgcmVnaW9uUnVsZVNldC0+bV9ydWxlQ291bnQgPSBtX3J1
bGVDb3VudDsKLQotICAgIC8vIENvbGxlY3QgdGhlIHJlZ2lvbiBydWxlcyBpbnRvIGEgcnVsZSBz
ZXQKLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGNoaWxkUnVsZXMg
PSByZWdpb25SdWxlLT5jaGlsZFJ1bGVzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGNoaWxkUnVsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3R5bGVSdWxlQmFzZSogcmVnaW9u
U3R5bGluZ1J1bGUgPSBjaGlsZFJ1bGVzW2ldLmdldCgpOwotICAgICAgICBpZiAocmVnaW9uU3R5
bGluZ1J1bGUtPmlzU3R5bGVSdWxlKCkpCi0gICAgICAgICAgICByZWdpb25SdWxlU2V0LT5hZGRT
dHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4ocmVnaW9uU3R5bGluZ1J1bGUpLCBoYXNE
b2N1bWVudFNlY3VyaXR5T3JpZ2luLCB0cnVlLCB0cnVlKTsKLSAgICB9Ci0gICAgLy8gVXBkYXRl
IHRoZSAiZ2xvYmFsIiBydWxlIGNvdW50IHNvIHRoYXQgcHJvcGVyIG9yZGVyIGlzIG1haW50YWlu
ZWQKLSAgICBtX3J1bGVDb3VudCA9IHJlZ2lvblJ1bGVTZXQtPm1fcnVsZUNvdW50OwotCi0gICAg
bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hcHBlbmQoUnVsZVNldFNlbGVjdG9yUGFpcihy
ZWdpb25SdWxlLT5zZWxlY3Rvckxpc3QoKS5maXJzdCgpLCByZWdpb25SdWxlU2V0LnJlbGVhc2Uo
KSkpOwotfQotCi12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250
ZW50cyogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgU3R5bGVSZXNv
bHZlciogcmVzb2x2ZXIsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQotewotICAgIEFTU0VS
VChzaGVldCk7Ci0gICAgCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+
ID4mIGltcG9ydFJ1bGVzID0gc2hlZXQtPmltcG9ydFJ1bGVzKCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGltcG9ydFJ1bGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0eWxlUnVs
ZUltcG9ydCogaW1wb3J0UnVsZSA9IGltcG9ydFJ1bGVzW2ldLmdldCgpOwotICAgICAgICBpZiAo
aW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpICYmICghaW1wb3J0UnVsZS0+bWVkaWFRdWVyaWVzKCkg
fHwgbWVkaXVtLmV2YWwoaW1wb3J0UnVsZS0+bWVkaWFRdWVyaWVzKCksIHJlc29sdmVyKSkpCi0g
ICAgICAgICAgICBhZGRSdWxlc0Zyb21TaGVldChpbXBvcnRSdWxlLT5zdHlsZVNoZWV0KCksIG1l
ZGl1bSwgcmVzb2x2ZXIsIHNjb3BlKTsKLSAgICB9Ci0gICAgYm9vbCBoYXNEb2N1bWVudFNlY3Vy
aXR5T3JpZ2luID0gcmVzb2x2ZXIgJiYgcmVzb2x2ZXItPmRvY3VtZW50KCktPnNlY3VyaXR5T3Jp
Z2luKCktPmNhblJlcXVlc3Qoc2hlZXQtPmJhc2VVUkwoKSk7Ci0KLSAgICBjb25zdCBWZWN0b3I8
UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIHJ1bGVzID0gc2hlZXQtPmNoaWxkUnVsZXMoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcnVsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
U3R5bGVSdWxlQmFzZSogcnVsZSA9IHJ1bGVzW2ldLmdldCgpOwotCi0gICAgICAgIEFTU0VSVCgh
cnVsZS0+aXNJbXBvcnRSdWxlKCkpOwotICAgICAgICBpZiAocnVsZS0+aXNTdHlsZVJ1bGUoKSkK
LSAgICAgICAgICAgIGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihydWxlKSwg
aGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgIXNjb3BlKTsKLSAgICAgICAgZWxzZSBpZiAocnVs
ZS0+aXNQYWdlUnVsZSgpKQotICAgICAgICAgICAgYWRkUGFnZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5
bGVSdWxlUGFnZSo+KHJ1bGUpKTsKLSAgICAgICAgZWxzZSBpZiAocnVsZS0+aXNNZWRpYVJ1bGUo
KSkgewotICAgICAgICAgICAgU3R5bGVSdWxlTWVkaWEqIG1lZGlhUnVsZSA9IHN0YXRpY19jYXN0
PFN0eWxlUnVsZU1lZGlhKj4ocnVsZSk7Ci0KLSAgICAgICAgICAgIGlmICgoIW1lZGlhUnVsZS0+
bWVkaWFRdWVyaWVzKCkgfHwgbWVkaXVtLmV2YWwobWVkaWFSdWxlLT5tZWRpYVF1ZXJpZXMoKSwg
cmVzb2x2ZXIpKSkgewotICAgICAgICAgICAgICAgIC8vIFRyYXZlcnNlIGNoaWxkIGVsZW1lbnRz
IG9mIHRoZSBAbWVkaWEgcnVsZS4KLSAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRy
PFN0eWxlUnVsZUJhc2U+ID4mIGNoaWxkUnVsZXMgPSBtZWRpYVJ1bGUtPmNoaWxkUnVsZXMoKTsK
LSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgY2hpbGRSdWxlcy5zaXpl
KCk7ICsraikgewotICAgICAgICAgICAgICAgICAgICBTdHlsZVJ1bGVCYXNlKiBjaGlsZFJ1bGUg
PSBjaGlsZFJ1bGVzW2pdLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRSdWxl
LT5pc1N0eWxlUnVsZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3R5bGVSdWxlKHN0
YXRpY19jYXN0PFN0eWxlUnVsZSo+KGNoaWxkUnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmln
aW4sICFzY29wZSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkUnVsZS0+aXNQ
YWdlUnVsZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkUGFnZVJ1bGUoc3RhdGljX2Nh
c3Q8U3R5bGVSdWxlUGFnZSo+KGNoaWxkUnVsZSkpOwotICAgICAgICAgICAgICAgICAgICBlbHNl
IGlmIChjaGlsZFJ1bGUtPmlzRm9udEZhY2VSdWxlKCkgJiYgcmVzb2x2ZXIpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0byBvdXIgc2V0LgotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gRklYTUUoQlVHIDcyNDYxKTogV2UgZG9uJ3QgYWRkIEBmb250
LWZhY2UgcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChzY29wZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0eWxlUnVsZUZvbnRG
YWNlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGVGb250RmFjZSo+KGNoaWxk
UnVsZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlci0+Zm9udFNlbGVjdG9yKCkt
PmFkZEZvbnRGYWNlUnVsZShmb250RmFjZVJ1bGUpOwotICAgICAgICAgICAgICAgICAgICAgICAg
cmVzb2x2ZXItPmludmFsaWRhdGVNYXRjaGVkUHJvcGVydGllc0NhY2hlKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRSdWxlLT5pc0tleWZyYW1lc1J1bGUoKSAmJiByZXNv
bHZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMga2V5ZnJhbWUgcnVs
ZSB0byBvdXIgc2V0LgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUUoQlVHIDcyNDYy
KTogV2UgZG9uJ3QgYWRkIEBrZXlmcmFtZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZv
ciB0aGUgbW9tZW50LgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAg
cmVzb2x2ZXItPmFkZEtleWZyYW1lU3R5bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVz
Kj4oY2hpbGRSdWxlKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
IC8vIGZvciBydWxlcwotICAgICAgICAgICAgfSAvLyBpZiBydWxlcwotICAgICAgICB9IGVsc2Ug
aWYgKHJ1bGUtPmlzRm9udEZhY2VSdWxlKCkgJiYgcmVzb2x2ZXIpIHsKLSAgICAgICAgICAgIC8v
IEFkZCB0aGlzIGZvbnQgZmFjZSB0byBvdXIgc2V0LgotICAgICAgICAgICAgLy8gRklYTUUoQlVH
IDcyNDYxKTogV2UgZG9uJ3QgYWRkIEBmb250LWZhY2UgcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNo
ZWV0cyBmb3IgdGhlIG1vbWVudC4KLSAgICAgICAgICAgIGlmIChzY29wZSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250
RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGVGb250RmFjZSo+KHJ1bGUpOwotICAgICAg
ICAgICAgcmVzb2x2ZXItPmZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1bGUoZm9udEZhY2VS
dWxlKTsKLSAgICAgICAgICAgIHJlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZFByb3BlcnRpZXND
YWNoZSgpOwotICAgICAgICB9IGVsc2UgaWYgKHJ1bGUtPmlzS2V5ZnJhbWVzUnVsZSgpICYmIHJl
c29sdmVyKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRSAoQlVHIDcyNDYyKTogV2UgZG9uJ3QgYWRk
IEBrZXlmcmFtZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50Lgot
ICAgICAgICAgICAgaWYgKHNjb3BlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgcmVzb2x2ZXItPmFkZEtleWZyYW1lU3R5bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlS2V5
ZnJhbWVzKj4ocnVsZSkpOwotICAgICAgICB9Ci0jaWYgRU5BQkxFKENTU19SRUdJT05TKQotICAg
ICAgICBlbHNlIGlmIChydWxlLT5pc1JlZ2lvblJ1bGUoKSAmJiByZXNvbHZlcikgewotICAgICAg
ICAgICAgLy8gRklYTUUgKEJVRyA3MjQ3Mik6IFdlIGRvbid0IGFkZCBALXdlYmtpdC1yZWdpb24g
cnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KLSAgICAgICAgICAg
IGlmIChzY29wZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGFkZFJl
Z2lvblJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUmVnaW9uKj4ocnVsZSksIGhhc0RvY3VtZW50
U2VjdXJpdHlPcmlnaW4pOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0gICAgaWYgKG1fYXV0
b1Nocmlua1RvRml0RW5hYmxlZCkKLSAgICAgICAgc2hyaW5rVG9GaXQoKTsKLX0KLQotdm9pZCBS
dWxlU2V0OjphZGRTdHlsZVJ1bGUoU3R5bGVSdWxlKiBydWxlLCBib29sIGhhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lv
blJ1bGUpCi17Ci0gICAgZm9yIChzaXplX3Qgc2VsZWN0b3JJbmRleCA9IDA7IHNlbGVjdG9ySW5k
ZXggIT0gbm90Rm91bmQ7IHNlbGVjdG9ySW5kZXggPSBydWxlLT5zZWxlY3Rvckxpc3QoKS5pbmRl
eE9mTmV4dFNlbGVjdG9yQWZ0ZXIoc2VsZWN0b3JJbmRleCkpCi0gICAgICAgIGFkZFJ1bGUocnVs
ZSwgc2VsZWN0b3JJbmRleCwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgY2FuVXNlRmFzdENo
ZWNrU2VsZWN0b3IsIGlzSW5SZWdpb25SdWxlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNo
cmlua01hcFZlY3RvcnNUb0ZpdChSdWxlU2V0OjpBdG9tUnVsZU1hcCYgbWFwKQotewotICAgIFJ1
bGVTZXQ6OkF0b21SdWxlTWFwOjppdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7Ci0gICAgZm9yIChS
dWxlU2V0OjpBdG9tUnVsZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5zaHJpbmtUb0ZpdCgpOwotfQotCi12b2lkIFJ1
bGVTZXQ6OnNocmlua1RvRml0KCkKLXsKLSAgICBzaHJpbmtNYXBWZWN0b3JzVG9GaXQobV9pZFJ1
bGVzKTsKLSAgICBzaHJpbmtNYXBWZWN0b3JzVG9GaXQobV9jbGFzc1J1bGVzKTsKLSAgICBzaHJp
bmtNYXBWZWN0b3JzVG9GaXQobV90YWdSdWxlcyk7Ci0gICAgc2hyaW5rTWFwVmVjdG9yc1RvRml0
KG1fc2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKTsKLSAgICBtX2xpbmtQc2V1ZG9DbGFzc1J1bGVz
LnNocmlua1RvRml0KCk7Ci0gICAgbV9mb2N1c1BzZXVkb0NsYXNzUnVsZXMuc2hyaW5rVG9GaXQo
KTsKLSAgICBtX3VuaXZlcnNhbFJ1bGVzLnNocmlua1RvRml0KCk7Ci0gICAgbV9wYWdlUnVsZXMu
c2hyaW5rVG9GaXQoKTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8g
dGhpcyBpcyBtb3N0bHkgYm9yaW5nIHN0dWZmIG9uIGhvdyB0byBhcHBseSBhIGNlcnRhaW4gcnVs
ZSB0byB0aGUgcmVuZGVyc3R5bGUuLi4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5k
ZXggZjMyYzcxM2I4MWIwOGUwMDg4Mjc1OWE5NzIxY2MyNjA3N2ExYjIwYS4uYWZiN2E0ODU2MmFk
NzhmZDI5YzAyNGEzNjdiNGUyODZmZmViMzE2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiTGlua0hhc2guaCIKICNpbmNsdWRlICJN
ZWRpYVF1ZXJ5RXhwLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJSdWxl
RmVhdHVyZS5oIgogI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgogI2luY2x1ZGUgIlN0eWxl
SW5oZXJpdGVkRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0yNzQsMzEgKzI3
NSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbG9hZFBlbmRpbmdSZXNvdXJjZXMoKTsKIAotICAg
IHN0cnVjdCBSdWxlRmVhdHVyZSB7Ci0gICAgICAgIFJ1bGVGZWF0dXJlKFN0eWxlUnVsZSogcnVs
ZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
KQotICAgICAgICAgICAgOiBydWxlKHJ1bGUpCi0gICAgICAgICAgICAsIHNlbGVjdG9ySW5kZXgo
c2VsZWN0b3JJbmRleCkKLSAgICAgICAgICAgICwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiho
YXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKSAKLSAgICAgICAgeyAKLSAgICAgICAgfQotICAgICAg
ICBTdHlsZVJ1bGUqIHJ1bGU7Ci0gICAgICAgIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXg7Ci0gICAg
ICAgIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbjsKLSAgICB9OwotICAgIHN0cnVjdCBG
ZWF0dXJlcyB7Ci0gICAgICAgIEZlYXR1cmVzKCk7Ci0gICAgICAgIH5GZWF0dXJlcygpOwotICAg
ICAgICB2b2lkIGFkZChjb25zdCBTdHlsZVJlc29sdmVyOjpGZWF0dXJlcyYpOwotICAgICAgICB2
b2lkIGNsZWFyKCk7Ci0gICAgICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0
SW5mbyopIGNvbnN0OwotICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBpZHNJblJ1
bGVzOwotICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBhdHRyc0luUnVsZXM7Ci0g
ICAgICAgIFZlY3RvcjxSdWxlRmVhdHVyZT4gc2libGluZ1J1bGVzOwotICAgICAgICBWZWN0b3I8
UnVsZUZlYXR1cmU+IHVuY29tbW9uQXR0cmlidXRlUnVsZXM7Ci0gICAgICAgIGJvb2wgdXNlc0Zp
cnN0TGluZVJ1bGVzOwotICAgICAgICBib29sIHVzZXNCZWZvcmVBZnRlclJ1bGVzOwotICAgIH07
Ci0KIHByaXZhdGU6CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBmaXhlcyB1cCB0aGUgZGVmYXVsdCBm
b250IHNpemUgaWYgaXQgZGV0ZWN0cyB0aGF0IHRoZSBjdXJyZW50IGdlbmVyaWMgZm9udCBmYW1p
bHkgaGFzIGNoYW5nZWQuIC1kd2gKICAgICB2b2lkIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5n
ZShSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CkBAIC0zOTUsNyArMzcx
LDcgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8UnVsZVNldD4gbV9hdXRob3JTdHlsZTsKICAgICBP
d25QdHI8UnVsZVNldD4gbV91c2VyU3R5bGU7CiAKLSAgICBGZWF0dXJlcyBtX2ZlYXR1cmVzOwor
ICAgIFJ1bGVGZWF0dXJlU2V0IG1fZmVhdHVyZXM7CiAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fc2li
bGluZ1J1bGVTZXQ7CiAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fdW5jb21tb25BdHRyaWJ1dGVSdWxl
U2V0OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167242</attachid>
            <date>2012-10-04 21:17:11 -0700</date>
            <delta_ts>2012-10-04 23:15:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98469-20121005131620.patch</filename>
            <type>text/plain</type>
            <size>67268</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNDQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2M1OWU5NDllZTcyNGMy
NDhlOTM3MWMyODg5M2NjZGQzZDgyOTM1Ny4uMzk5MzFiMDk3NjE1NmFlMTc1MjcxYzA4OWI0YzFl
ZjkxYjEzMjBkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk1IEBACisyMDEyLTEwLTA0ICBIYWpp
bWUgTW9ycml0YSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBbUmVmYWN0b3Jpbmdd
IFNvbWUgY2xhc3NlcyBpbiBTdHlsZVJlc29sdmVyLmNwcC9oIGNvdWxkIGhhdmUgaXRzIG93biBm
aWxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTg0
NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IGNoYW5nZSBleHRyYWN0cyBSdWxlRGF0YSwgUnVsZVNldCwgUnVsZUZlYXR1cmUgYW5kIEZlYXR1
cnMgY2xhc3MKKyAgICAgICAgdG8gaXRzIG93biBmaWxlOiBSdWxlU2V0LmgvY3BwIGFuZCBSdWxl
RmVhdHVyZS5oL2NwcAorCisgICAgICAgIFJ1bGVGZWF0dXJlIGNsYXNzIGlzIG1vdmVkIGZybyBT
dHlsZVJlc29sdmVyIGlubmVyIGNsYXNzIHRvIHBsYWluIFdlYkNvcmUgY2xhc3MuCisgICAgICAg
IEZlYXVyZXMgY2xhc3MgaXMgcmVuYW1lZCB0byBSdWxlRmVhdHVyZVNldCB0byBhdm9pZCBwb3Nz
aWJsZSBuYW1lIGNvbmZsaWN0LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gSnVzdCBzcGxpdHRp
bmcgZmlsZSBhbmQgZG9pbmcgc2ltcGxlIHJlbmFtZS4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnBy
aToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NBbGxJbk9uZS5jcHA6CisgICAgICAg
ICogY3NzL1J1bGVGZWF0dXJlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJ1bGVGZWF0dXJlU2V0OjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6UnVs
ZUZlYXR1cmVTZXQ6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVGZWF0dXJlU2V0Ojpy
ZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL1J1bGVGZWF0dXJlLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChSdWxlRmVhdHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpSdWxlRmVhdHVyZTo6UnVsZUZlYXR1cmUpOgorICAgICAgICAoUnVsZUZlYXR1cmVTZXQp
OgorICAgICAgICAoV2ViQ29yZTo6UnVsZUZlYXR1cmVTZXQ6OlJ1bGVGZWF0dXJlU2V0KToKKyAg
ICAgICAgKiBjc3MvUnVsZVNldC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjppc1NlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNlbGVjdG9yTGlzdENvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxl
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjppc0NvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yQXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpSdWxlRGF0YTo6UnVsZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6UnVsZURhdGE6OnJlcG9ydE1lbW9yeVVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OnJl
cG9ydEF0b21SdWxlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OnJlcG9ydE1lbW9y
eVVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OlJ1bGVTZXRTZWxlY3RvclBhaXI6
OnJlcG9ydE1lbW9yeVVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbGxlY3RGZWF0dXJlc0Zy
b21TZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0RmVhdHVyZXNGcm9tUnVsZURh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRkVG9SdWxlU2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6
YWRkUGFnZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRkUmVnaW9uUnVsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldCk6CisgICAgICAg
IChXZWJDb3JlOjpSdWxlU2V0OjphZGRTdHlsZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6c2hy
aW5rTWFwVmVjdG9yc1RvRml0KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OnNocmlua1Rv
Rml0KToKKyAgICAgICAgKiBjc3MvUnVsZVNldC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoUnVsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OnBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVEYXRhOjpydWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJ1bGVEYXRhOjpzZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSdWxlRGF0YTo6c2Vs
ZWN0b3JJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlRGF0YTo6aGFzRmFzdENoZWNrYWJs
ZVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVEYXRhOjpoYXNNdWx0aXBhcnRTZWxl
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSdWxlRGF0YTo6aGFzUmlnaHRtb3N0U2VsZWN0b3JN
YXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6
OmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpS
dWxlRGF0YTo6c3BlY2lmaWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OmxpbmtN
YXRjaFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6Omhhc0RvY3VtZW50U2VjdXJp
dHlPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OmlzSW5SZWdpb25SdWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJ1bGVEYXRhOjpkZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVy
SGFzaGVzKToKKyAgICAgICAgKFNhbWVTaXplQXNSdWxlRGF0YSk6CisgICAgICAgIChSdWxlU2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSdWxlU2V0OjpkaXNhYmxlQXV0b1Nocmlua1RvRml0KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1
bGVTZXQ6OmZlYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmlkUnVsZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6Y2xhc3NSdWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSdWxlU2V0Ojp0YWdSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjpzaGFkb3dQ
c2V1ZG9FbGVtZW50UnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6bGlua1BzZXVk
b0NsYXNzUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6Zm9jdXNQc2V1ZG9DbGFz
c1J1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OnVuaXZlcnNhbFJ1bGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OnBhZ2VSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpS
dWxlU2V0OjpSdWxlU2V0U2VsZWN0b3JQYWlyOjpSdWxlU2V0U2VsZWN0b3JQYWlyKToKKyAgICAg
ICAgKFJ1bGVTZXRTZWxlY3RvclBhaXIpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6UnVs
ZVNldCk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlUnVsZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAqIGNz
cy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgIChTdHlsZVJlc29sdmVyKToKKwogMjAxMi0xMC0w
NCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFtWOF0gTm90aWZp
Y2F0aW9uQ2VudGVyIGxlYWtzIGJlY2F1c2UgaXQgdXNlcyBidWdneSBjdXN0b20gYmluZGluZ3MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMjU0OTRjMGI4YjQxNjU0NzU0ZThlYjZmYjlhNDdkYzg1
MjNkMDg1NS4uNmZkNTEwOWM3OGI5ZTdkYWNlNTFmZjZkMDgxNjkzMzUyMTBhZjgwMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKQEAgLTEwNjcsNiArMTA2NywxMCBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VT
CiAgICAgY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNwcAogICAgIGNzcy9Qcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb24uY3BwCiAgICAgY3NzL1JHQkNvbG9yLmNwcAorICAgIGNzcy9SdWxlRmVh
dHVyZS5oCisgICAgY3NzL1J1bGVGZWF0dXJlLmNwcAorICAgIGNzcy9SdWxlU2V0LmgKKyAgICBj
c3MvUnVsZVNldC5jcHAKICAgICBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcAogICAgIGNzcy9TaGFk
b3dWYWx1ZS5jcHAKICAgICBjc3MvU3R5bGVCdWlsZGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KaW5kZXggMzQ2MWRiYmVmNTk5NTBjODk3MDAzM2U3MmQ3ODU2MDY0YzhmMmJkYi4u
ZDBkZWNjM2VlZmZhZjkyOTI3ZDUwYTVkODQzMjg1NTZiZTVmMWVlMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCkBAIC0yNjEwLDYgKzI2MTAsMTAgQEAgd2ViY29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvUmVjdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvUkdC
Q29sb3IuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvUkdCQ29sb3IuaCBcCisJU291cmNlL1dl
YkNvcmUvY3NzL1J1bGVGZWF0dXJlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvY3NzL1J1bGVGZWF0
dXJlLmggXAorCVNvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcCBcCisJU291cmNlL1dlYkNv
cmUvY3NzL1J1bGVTZXQuaCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaCBcCiAJU291cmNlL1dl
YkNvcmUvY3NzL1NoYWRvd1ZhbHVlLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9U
YXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCBhNGQ4NzU0N2E0YTlk
MGE1MDllMTNmOTRmYjBkZTUzYjJkOGRmMTQ4Li4yNzZiNDA2MTZjOTBlMjFhZTFlNmE5ZWRhODJj
NWM2YWRmOWM5N2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTMxMyw2ICszMTMsOCBAQCBTT1VSQ0VTICs9
IFwKICAgICBjc3MvTWVkaWFRdWVyeU1hdGNoZXIuY3BwIFwKICAgICBjc3MvUHJvcGVydHlTZXRD
U1NTdHlsZURlY2xhcmF0aW9uLmNwcCBcCiAgICAgY3NzL1JHQkNvbG9yLmNwcCBcCisgICAgY3Nz
L1J1bGVGZWF0dXJlLmNwcCBcCisgICAgY3NzL1J1bGVTZXQuY3BwIFwKICAgICBjc3MvU2VsZWN0
b3JDaGVja2VyLmNwcCBcCiAgICAgY3NzL1NoYWRvd1ZhbHVlLmNwcCBcCiAgICAgY3NzL1N0eWxl
QnVpbGRlci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDdjMTFlNzY3N2E3NWY0MDFlMjQ1NDJh
ZTQyNjA2NmVmMmU4OGFkNWYuLjNmMjJhZDFkNTNmZGJlNDMxNzE5NjBkZDJhODAyZTAxNDg5ZTU1
YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTI2MDksNiArMjYwOSwxMCBAQAogICAgICAgICAgICAg
J2Nzcy9SR0JDb2xvci5jcHAnLAogICAgICAgICAgICAgJ2Nzcy9SR0JDb2xvci5oJywKICAgICAg
ICAgICAgICdjc3MvUmVjdC5oJywKKyAgICAgICAgICAgICdjc3MvUnVsZUZlYXR1cmUuY3BwJywK
KyAgICAgICAgICAgICdjc3MvUnVsZUZlYXR1cmUuaCcsCisgICAgICAgICAgICAnY3NzL1J1bGVT
ZXQuY3BwJywKKyAgICAgICAgICAgICdjc3MvUnVsZVNldC5oJywKICAgICAgICAgICAgICdjc3Mv
U1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCcsCiAgICAgICAgICAgICAnY3NzL1NW
R0NTU1BhcnNlci5jcHAnLAogICAgICAgICAgICAgJ2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNw
cCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggNjg5ZjNhZDk5ZjY0MjZmOGFiM2I3MWY3MjdkZjgwNGRkNWZjMjk0OC4uZmM3ZWIy
OTEzNjg4NzM3MjQwYjg5YmNlNTcxMzM4YTFiZmNhNmNmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzg2MCw2ICszODYwLDEw
IEBACiAJCUE3OEZFMTNDMTIzNjZCMTAwMEFDRThEMCAvKiBTcGVsbENoZWNrZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OEZFMTNBMTIzNjZCMTAw
MEFDRThEMCAvKiBTcGVsbENoZWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlBNzk1NDYzRTBCNUM0QzgwMDA3QjQzOEYgLyogRHJhZ0RhdGFN
YWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzk1
NDYzRDBCNUM0QzgwMDA3QjQzOEYgLyogRHJhZ0RhdGFNYWMubW0gKi87IH07CiAJCUE3OTU0NjQz
MEI1QzRDQjQwMDdCNDM4RiAvKiBEcmFnRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzk1NDY0MjBCNUM0Q0I0MDA3QjQzOEYgLyogRHJhZ0Rh
dGEuY3BwICovOyB9OworCQlBNzlCQURBMTE2MUU3RjNGMDBDMkU2NTIgLyogUnVsZUZlYXR1cmUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc5QkFE
OUQxNjFFN0YzRjAwQzJFNjUyIC8qIFJ1bGVGZWF0dXJlLmNwcCAqLzsgfTsKKwkJQTc5QkFEQTIx
NjFFN0YzRjAwQzJFNjUyIC8qIFJ1bGVGZWF0dXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzlCQUQ5RTE2MUU3RjNGMDBDMkU2NTIgLyogUnVsZUZl
YXR1cmUuaCAqLzsgfTsKKwkJQTc5QkFEQTMxNjFFN0YzRjAwQzJFNjUyIC8qIFJ1bGVTZXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc5QkFEOUYx
NjFFN0YzRjAwQzJFNjUyIC8qIFJ1bGVTZXQuY3BwICovOyB9OworCQlBNzlCQURBNDE2MUU3RjNG
MDBDMkU2NTIgLyogUnVsZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTc5QkFEQTAxNjFFN0YzRjAwQzJFNjUyIC8qIFJ1bGVTZXQuaCAqLzsgfTsK
IAkJQTdBNzhDRDUxNTMyQkE2MjAwNkMyMUU0IC8qIENvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTc4Q0Q0
MTUzMkJBNjIwMDZDMjFFNCAvKiBDb250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHAgKi87IH07CiAJ
CUE3QUQyRjg3MEVDODlEMDcwMDhBQjAwMiAvKiBMaW5rSGFzaC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0FEMkY4NTBFQzg5RDA3MDA4QUIwMDIg
LyogTGlua0hhc2guY3BwICovOyB9OwogCQlBN0FEMkY4ODBFQzg5RDA3MDA4QUIwMDIgLyogTGlu
a0hhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
QUQyRjg2MEVDODlEMDcwMDhBQjAwMiAvKiBMaW5rSGFzaC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMTA4OCw2ICsxMTA5MiwxMCBAQAogCQlB
NzhGRTEzQTEyMzY2QjEwMDBBQ0U4RDAgLyogU3BlbGxDaGVja2VyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBmaWxlRW5j
b2RpbmcgPSA0OyBwYXRoID0gU3BlbGxDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3OTU0NjNEMEI1QzRDODAwMDdCNDM4RiAvKiBEcmFnRGF0YU1hYy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEcmFnRGF0YU1hYy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc5NTQ2NDIwQjVDNENCNDAwN0I0MzhGIC8qIERyYWdE
YXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERyYWdEYXRhLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTc5QkFEOUQxNjFFN0YzRjAwQzJFNjUy
IC8qIFJ1bGVGZWF0dXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJ1bGVGZWF0dXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTc5QkFEOUUx
NjFFN0YzRjAwQzJFNjUyIC8qIFJ1bGVGZWF0dXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJ1bGVGZWF0dXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3
OUJBRDlGMTYxRTdGM0YwMEMyRTY1MiAvKiBSdWxlU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJ1bGVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBNzlCQURBMDE2MUU3RjNGMDBDMkU2NTIgLyogUnVsZVNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSdWxlU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE3QTc4Q0Q0MTUzMkJBNjIwMDZDMjFFNCAvKiBDb250YWluZXJOb2RlQWxnb3JpdGhtcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb250YWluZXJOb2RlQWxn
b3JpdGhtcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QUQyRjg1MEVDODlE
MDcwMDhBQjAwMiAvKiBMaW5rSGFzaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBMaW5rSGFzaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QUQy
Rjg2MEVDODlEMDcwMDhBQjAwMiAvKiBMaW5rSGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMaW5rSGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjEy
MDksNiArMjEyMTcsMTAgQEAKIAkJCQlCQzc0REEzNjEwMTNGM0Y3MDA3OTg3QUQgLyogUkdCQ29s
b3IuY3BwICovLAogCQkJCUJDNzREQTM1MTAxM0YzRjcwMDc5ODdBRCAvKiBSR0JDb2xvci5oICov
LAogCQkJCTg1OEMzOEVGMEFBOEZERDEwMEIxODdBNCAvKiBSR0JDb2xvci5pZGwgKi8sCisJCQkJ
QTc5QkFEOUQxNjFFN0YzRjAwQzJFNjUyIC8qIFJ1bGVGZWF0dXJlLmNwcCAqLywKKwkJCQlBNzlC
QUQ5RTE2MUU3RjNGMDBDMkU2NTIgLyogUnVsZUZlYXR1cmUuaCAqLywKKwkJCQlBNzlCQUQ5RjE2
MUU3RjNGMDBDMkU2NTIgLyogUnVsZVNldC5jcHAgKi8sCisJCQkJQTc5QkFEQTAxNjFFN0YzRjAw
QzJFNjUyIC8qIFJ1bGVTZXQuaCAqLywKIAkJCQlFNDRCNEJCMTE0MTY1MEQ3MDAyQjFEOEIgLyog
U2VsZWN0b3JDaGVja2VyLmNwcCAqLywKIAkJCQlFNDRCNEJCMjE0MTY1MEQ3MDAyQjFEOEIgLyog
U2VsZWN0b3JDaGVja2VyLmggKi8sCiAJCQkJQTgwRTZDQ0EwQTE5ODlDQTAwN0ZCOEM1IC8qIFNo
YWRvd1ZhbHVlLmNwcCAqLywKQEAgLTI0NzgxLDYgKzI0NzkzLDggQEAKIAkJCQlGRDMxNjBBOTEy
QjAyNkY3MDBDMUEzNTkgLyogUmV2ZXJiQ29udm9sdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RDMxNjBBQjEyQjAyNkY3MDBDMUEzNTkgLyogUmV2ZXJiQ29udm9sdmVyU3RhZ2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUZEMzE2MEFEMTJCMDI2RjcwMEMxQTM1OSAvKiBSZXZlcmJJbnB1dEJ1ZmZl
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTc5QkFEQTIxNjFFN0YzRjAwQzJFNjUyIC8qIFJ1bGVG
ZWF0dXJlLmggaW4gSGVhZGVycyAqLywKKwkJCQlBNzlCQURBNDE2MUU3RjNGMDBDMkU2NTIgLyog
UnVsZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3NERBMzcxMDEzRjNGNzAwNzk4N0FEIC8q
IFJHQkNvbG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOENGRjVFMTBBMTU1QTA1MDAwQTQyMzQg
LyogUm9vdElubGluZUJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFOTExQzkwRUY4NkQ0NzAw
OUQwQ0FGIC8qIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
ODAwMiw2ICsyODAxNiw4IEBACiAJCQkJQThDRkY1RTcwQTE1NUEwNTAwMEE0MjM0IC8qIFJvb3RJ
bmxpbmVCb3guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlFOTExQzgwRUY4NkQ0NzAwOUQwQ0FG
IC8qIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzNG
OTVGRTEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRlZFJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTc5QkFEQTExNjFFN0YzRjAwQzJFNjUyIC8qIFJ1bGVGZWF0dXJlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUE3OUJBREEzMTYxRTdGM0YwMEMyRTY1MiAvKiBSdWxlU2V0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDMEIzNTg3MTRDNEY5ODMwMDU1RTIyQSAvKiBSdW5Mb29wLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTI5QTMwOUFDMTU2MUM5OUIwMEJCRDhFNSAvKiBSdW5Mb29wQ0YuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwQjM1ODMxNEM0Rjk1NDAwNTVFMjJBIC8qIFJ1bkxvb3BN
YWMubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NB
bGxJbk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwCmluZGV4IDE5
M2I3YWZjNDhhZTAxODM1ZjQ5NWIwYWMzMGUwNWRlYWU0YzY3M2EuLjAxZGRiMmQ3MTYxOThkMTM0
NmNmZjUyMjgyOTRhMGZjMTA5NDg5MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NBbGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0FsbEluT25lLmNwcApA
QCAtNjYsNiArNjYsOCBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlLmNwcCIKICNpbmNsdWRlICJDU1NW
YWx1ZUxpc3QuY3BwIgogI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5jcHAiCisjaW5jbHVkZSAiUnVs
ZUZlYXR1cmUuY3BwIgorI2luY2x1ZGUgIlJ1bGVTZXQuY3BwIgogI2luY2x1ZGUgIlN0eWxlQnVp
bGRlci5jcHAiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5jcHAiCiAjaW5jbHVkZSAiU3R5
bGVQcm9wZXJ0eVNob3J0aGFuZC5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
UnVsZUZlYXR1cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVGZWF0dXJlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42NjNiOTQ2MTNhYzg3ZGFiMDdiZjU1ZmY0ZTAwY2Q3MTYyMjQ1NTYwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVGZWF0dXJlLmNwcApAQCAtMCwwICsx
LDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCisgKiAgICAgICAgICAgKEMpIDIwMDQtMjAwNSBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtk
ZUBjYXJld29sZi5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgTmljaG9sYXMgU2hh
bmtzICh3ZWJraXRAbmlja3NoYW5rcy5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFsZXhleSBQcm9za3VyeWFrb3YgPGFw
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQor
ICogQ29weXJpZ2h0IChjKSAyMDExLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUnVsZUZl
YXR1cmUuaCIKKworI2luY2x1ZGUgIldlYkNvcmVNZW1vcnlJbnN0cnVtZW50YXRpb24uaCIKKyNp
bmNsdWRlIDx3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL01lbW9yeUlu
c3RydW1lbnRhdGlvblZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgUnVs
ZUZlYXR1cmVTZXQ6OmFkZChjb25zdCBSdWxlRmVhdHVyZVNldCYgb3RoZXIpCit7CisgICAgSGFz
aFNldDxBdG9taWNTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGVuZCA9IG90aGVyLmlkc0luUnVsZXMu
ZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPjo6aXRlcmF0b3IgaXQg
PSBvdGhlci5pZHNJblJ1bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaWRz
SW5SdWxlcy5hZGQoKml0KTsKKyAgICBlbmQgPSBvdGhlci5hdHRyc0luUnVsZXMuZW5kKCk7Cisg
ICAgZm9yIChIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPjo6aXRlcmF0b3IgaXQgPSBvdGhlci5h
dHRyc0luUnVsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBhdHRyc0luUnVs
ZXMuYWRkKCppdCk7CisgICAgc2libGluZ1J1bGVzLmFwcGVuZChvdGhlci5zaWJsaW5nUnVsZXMp
OworICAgIHVuY29tbW9uQXR0cmlidXRlUnVsZXMuYXBwZW5kKG90aGVyLnVuY29tbW9uQXR0cmli
dXRlUnVsZXMpOworICAgIHVzZXNGaXJzdExpbmVSdWxlcyA9IHVzZXNGaXJzdExpbmVSdWxlcyB8
fCBvdGhlci51c2VzRmlyc3RMaW5lUnVsZXM7CisgICAgdXNlc0JlZm9yZUFmdGVyUnVsZXMgPSB1
c2VzQmVmb3JlQWZ0ZXJSdWxlcyB8fCBvdGhlci51c2VzQmVmb3JlQWZ0ZXJSdWxlczsKK30KKwor
dm9pZCBSdWxlRmVhdHVyZVNldDo6Y2xlYXIoKQoreworICAgIGlkc0luUnVsZXMuY2xlYXIoKTsK
KyAgICBhdHRyc0luUnVsZXMuY2xlYXIoKTsKKyAgICBzaWJsaW5nUnVsZXMuY2xlYXIoKTsKKyAg
ICB1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmNsZWFyKCk7CisgICAgdXNlc0ZpcnN0TGluZVJ1bGVz
ID0gZmFsc2U7CisgICAgdXNlc0JlZm9yZUFmdGVyUnVsZXMgPSBmYWxzZTsKK30KKwordm9pZCBS
dWxlRmVhdHVyZVNldDo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5
T2JqZWN0SW5mbykgY29uc3QKK3sKKyAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmpl
Y3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNTUyk7CisgICAgaW5mby5hZGRNZW1i
ZXIoaWRzSW5SdWxlcyk7CisgICAgaW5mby5hZGRNZW1iZXIoYXR0cnNJblJ1bGVzKTsKKyAgICBp
bmZvLmFkZE1lbWJlcihzaWJsaW5nUnVsZXMpOworICAgIGluZm8uYWRkTWVtYmVyKHVuY29tbW9u
QXR0cmlidXRlUnVsZXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZUZlYXR1cmUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9S
dWxlRmVhdHVyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmMTYyODhjMDVlMWRjNGZhMWYxMTkzOWEwNjQzNzU5
YmViMzJjODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZUZlYXR1
cmUuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25v
bGwgKGtub2xsQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI2lmbmRlZiBSdWxlRmVhdHVyZV9oCisjZGVmaW5lIFJ1bGVGZWF0dXJlX2gK
KworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFN0eWxlUnVsZTsKKworY2xhc3MgUnVs
ZUZlYXR1cmUgeworcHVibGljOgorICAgIFJ1bGVGZWF0dXJlKFN0eWxlUnVsZSogcnVsZSwgdW5z
aWduZWQgc2VsZWN0b3JJbmRleCwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKQorICAg
ICAgICA6IHJ1bGUocnVsZSkKKyAgICAgICAgLCBzZWxlY3RvckluZGV4KHNlbGVjdG9ySW5kZXgp
CisgICAgICAgICwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbihoYXNEb2N1bWVudFNlY3VyaXR5
T3JpZ2luKSAKKyAgICB7IAorICAgIH0KKyAgICBTdHlsZVJ1bGUqIHJ1bGU7CisgICAgdW5zaWdu
ZWQgc2VsZWN0b3JJbmRleDsKKyAgICBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW47Cit9
OworCitjbGFzcyBSdWxlRmVhdHVyZVNldCB7CitwdWJsaWM6CisgICAgUnVsZUZlYXR1cmVTZXQo
KQorICAgICAgICA6IHVzZXNGaXJzdExpbmVSdWxlcyhmYWxzZSkKKyAgICAgICAgLCB1c2VzQmVm
b3JlQWZ0ZXJSdWxlcyhmYWxzZSkKKyAgICB7IH0KKworICAgIHZvaWQgYWRkKGNvbnN0IFJ1bGVG
ZWF0dXJlU2V0Jik7CisgICAgdm9pZCBjbGVhcigpOworICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNh
Z2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OworICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1w
bCo+IGlkc0luUnVsZXM7CisgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4gYXR0cnNJblJ1
bGVzOworICAgIFZlY3RvcjxSdWxlRmVhdHVyZT4gc2libGluZ1J1bGVzOworICAgIFZlY3RvcjxS
dWxlRmVhdHVyZT4gdW5jb21tb25BdHRyaWJ1dGVSdWxlczsKKyAgICBib29sIHVzZXNGaXJzdExp
bmVSdWxlczsKKyAgICBib29sIHVzZXNCZWZvcmVBZnRlclJ1bGVzOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUnVsZUZlYXR1cmVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjk1NGUwMDhjNGZmZDMxM2VlYjIwOGI1Nzg0OTliMDFjYTEyYzJlYmQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5jcHAKQEAgLTAs
MCArMSwzODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxA
a2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwNC0yMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNl
biAoa2RlQGNhcmV3b2xmLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBOaWNob2xh
cyBTaGFua3MgKHdlYmtpdEBuaWNrc2hhbmtzLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtv
diA8YXBAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1v
YmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNv
bS8pCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAy
MDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJS
dWxlU2V0LmgiCisKKyNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKKyNpbmNsdWRlICJDU1NT
ZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgorI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgorI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKKyNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgorI2luY2x1ZGUgIlN0
eWxlUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKKyNpbmNsdWRlICJTdHlsZVJ1
bGVJbXBvcnQuaCIKKyNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKKyNpbmNsdWRlICJX
ZWJDb3JlTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiV2ViS2l0Q1NTS2V5ZnJh
bWVzUnVsZS5oIgorI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL01lbW9yeUluc3RydW1lbnRhdGlvbkhhc2hTZXQuaD4KKyNpbmNsdWRl
IDx3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3RhdGlj
IGlubGluZSBib29sIGlzU2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goY29uc3Qg
Q1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc2VsZWN0
b3JOYW1lc3BhY2UgPSBzZWxlY3Rvci0+dGFnKCkubmFtZXNwYWNlVVJJKCk7CisgICAgaWYgKHNl
bGVjdG9yTmFtZXNwYWNlICE9IHN0YXJBdG9tICYmIHNlbGVjdG9yTmFtZXNwYWNlICE9IHhodG1s
TmFtZXNwYWNlVVJJKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHNlbGVjdG9yLT5t
X21hdGNoID09IENTU1NlbGVjdG9yOjpOb25lKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBp
ZiAoc2VsZWN0b3ItPnRhZygpICE9IHN0YXJBdG9tKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKFNlbGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yKHNlbGVj
dG9yKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHNlbGVjdG9yLT5tX21hdGNo
ID09IENTU1NlbGVjdG9yOjpJZCB8fCBzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6
Q2xhc3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZWxlY3Rvckxpc3RDb250YWluc1VuY29t
bW9uQXR0cmlidXRlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAg
IENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0ID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgp
OworICAgIGlmICghc2VsZWN0b3JMaXN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9y
IChDU1NTZWxlY3Rvciogc3ViU2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YlNl
bGVjdG9yOyBzdWJTZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJTZWxlY3Rvcikp
IHsKKyAgICAgICAgaWYgKHN1YlNlbGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgaXNDb21tb25BdHRyaWJ1dGVTZWxlY3RvckF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpCit7CisgICAgLy8gVGhlc2UgYXJlIGV4cGxpY2l0bHkg
dGVzdGVkIGZvciBlcXVhbGl0eSBpbiBjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQuCisgICAgcmV0
dXJuIGF0dHJpYnV0ZSA9PSB0eXBlQXR0ciB8fCBhdHRyaWJ1dGUgPT0gcmVhZG9ubHlBdHRyOwor
fQorCitzdGF0aWMgaW5saW5lIGJvb2wgY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9y
KGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAgICBmb3IgKDsgc2VsZWN0b3I7IHNl
bGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgeworICAgICAgICAvLyBBbGxvdyBjZXJ0
YWluIGNvbW1vbiBhdHRyaWJ1dGVzICh1c2VkIGluIHRoZSBkZWZhdWx0IHN0eWxlKSBpbiB0aGUg
c2VsZWN0b3JzIHRoYXQgbWF0Y2ggdGhlIGN1cnJlbnQgZWxlbWVudC4KKyAgICAgICAgaWYgKHNl
bGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkgJiYgIWlzQ29tbW9uQXR0cmlidXRlU2VsZWN0
b3JBdHRyaWJ1dGUoc2VsZWN0b3ItPmF0dHJpYnV0ZSgpKSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBpZiAoc2VsZWN0b3JMaXN0Q29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNl
bGVjdG9yKHNlbGVjdG9yKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAo
c2VsZWN0b3ItPnJlbGF0aW9uKCkgIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKSB7CisgICAg
ICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoOyBzZWxlY3Rvcjsgc2VsZWN0b3Ig
PSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7CisgICAgICAgIGlmIChzZWxlY3Rvci0+aXNBdHRy
aWJ1dGVTZWxlY3RvcigpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChz
ZWxlY3Rvckxpc3RDb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3Ioc2VsZWN0b3IpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwor
UnVsZURhdGE6OlJ1bGVEYXRhKFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRl
eCwgdW5zaWduZWQgcG9zaXRpb24sIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9v
bCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpblJlZ2lvblJ1bGUpCisgICAgOiBtX3J1
bGUocnVsZSkKKyAgICAsIG1fc2VsZWN0b3JJbmRleChzZWxlY3RvckluZGV4KQorICAgICwgbV9w
b3NpdGlvbihwb3NpdGlvbikKKyAgICAsIG1fc3BlY2lmaWNpdHkoc2VsZWN0b3IoKS0+c3BlY2lm
aWNpdHkoKSkKKyAgICAsIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNhblVzZUZhc3RDaGVj
a1NlbGVjdG9yICYmIFNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Ioc2Vs
ZWN0b3IoKSkpCisgICAgLCBtX2hhc011bHRpcGFydFNlbGVjdG9yKCEhc2VsZWN0b3IoKS0+dGFn
SGlzdG9yeSgpKQorICAgICwgbV9oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2Vk
T25SdWxlSGFzaChpc1NlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKHNlbGVjdG9y
KCkpKQorICAgICwgbV9jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoV2ViQ29yZTo6
Y29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKHNlbGVjdG9yKCkpKQorICAgICwgbV9s
aW5rTWF0Y2hUeXBlKFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua01hdGNoVHlwZShzZWxl
Y3RvcigpKSkKKyAgICAsIG1faGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbihoYXNEb2N1bWVudFNl
Y3VyaXR5T3JpZ2luKQorICAgICwgbV9pc0luUmVnaW9uUnVsZShpblJlZ2lvblJ1bGUpCit7Cisg
ICAgQVNTRVJUKG1fcG9zaXRpb24gPT0gcG9zaXRpb24pOworICAgIEFTU0VSVChtX3NlbGVjdG9y
SW5kZXggPT0gc2VsZWN0b3JJbmRleCk7CisgICAgU2VsZWN0b3JDaGVja2VyOjpjb2xsZWN0SWRl
bnRpZmllckhhc2hlcyhzZWxlY3RvcigpLCBtX2Rlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJI
YXNoZXMsIG1heGltdW1JZGVudGlmaWVyQ291bnQpOworfQorCit2b2lkIFJ1bGVEYXRhOjpyZXBv
cnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAor
eworICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNv
cmVNZW1vcnlUeXBlczo6Q1NTKTsKK30KKworc3RhdGljIHZvaWQgcmVwb3J0QXRvbVJ1bGVNYXAo
TWVtb3J5Q2xhc3NJbmZvKiBpbmZvLCBjb25zdCBSdWxlU2V0OjpBdG9tUnVsZU1hcCYgYXRvbWlj
UnVsZU1hcCkKK3sKKyAgICBpbmZvLT5hZGRNZW1iZXIoYXRvbWljUnVsZU1hcCk7CisgICAgZm9y
IChSdWxlU2V0OjpBdG9tUnVsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhdG9taWNSdWxlTWFw
LmJlZ2luKCk7IGl0ICE9IGF0b21pY1J1bGVNYXAuZW5kKCk7ICsraXQpCisgICAgICAgIGluZm8t
PmFkZE1lbWJlcigqaXQtPnNlY29uZCk7Cit9CisKK3ZvaWQgUnVsZVNldDo6cmVwb3J0TWVtb3J5
VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKK3sKKyAgICBN
ZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5
VHlwZXM6OkNTUyk7CisgICAgcmVwb3J0QXRvbVJ1bGVNYXAoJmluZm8sIG1faWRSdWxlcyk7Cisg
ICAgcmVwb3J0QXRvbVJ1bGVNYXAoJmluZm8sIG1fY2xhc3NSdWxlcyk7CisgICAgcmVwb3J0QXRv
bVJ1bGVNYXAoJmluZm8sIG1fdGFnUnVsZXMpOworICAgIHJlcG9ydEF0b21SdWxlTWFwKCZpbmZv
LCBtX3NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcyk7CisgICAgaW5mby5hZGRNZW1iZXIobV9saW5r
UHNldWRvQ2xhc3NSdWxlcyk7CisgICAgaW5mby5hZGRNZW1iZXIobV9mb2N1c1BzZXVkb0NsYXNz
UnVsZXMpOworICAgIGluZm8uYWRkTWVtYmVyKG1fdW5pdmVyc2FsUnVsZXMpOworICAgIGluZm8u
YWRkTWVtYmVyKG1fcGFnZVJ1bGVzKTsKKyAgICBpbmZvLmFkZE1lbWJlcihtX3JlZ2lvblNlbGVj
dG9yc0FuZFJ1bGVTZXRzKTsKK30KKwordm9pZCBSdWxlU2V0OjpSdWxlU2V0U2VsZWN0b3JQYWly
OjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBj
b25zdAoreworICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMs
IFdlYkNvcmVNZW1vcnlUeXBlczo6Q1NTKTsKKyAgICBpbmZvLmFkZE1lbWJlcihydWxlU2V0KTsK
K30KKworc3RhdGljIGlubGluZSB2b2lkIGNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3RvcihSdWxl
RmVhdHVyZVNldCYgZmVhdHVyZXMsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAg
ICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkKQorICAgICAgICBmZWF0
dXJlcy5pZHNJblJ1bGVzLmFkZChzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCkpOworICAgIGlmIChz
ZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpKQorICAgICAgICBmZWF0dXJlcy5hdHRyc0lu
UnVsZXMuYWRkKHNlbGVjdG9yLT5hdHRyaWJ1dGUoKS5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAg
IHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb1R5cGUoKSkgeworICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0ZpcnN0TGluZToKKyAgICAgICAgZmVhdHVyZXMudXNlc0ZpcnN0TGluZVJ1bGVzID0g
dHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQmVmb3Jl
OgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FmdGVyOgorICAgICAgICBmZWF0dXJlcy51
c2VzQmVmb3JlQWZ0ZXJSdWxlcyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgY29sbGVjdEZlYXR1cmVz
RnJvbVJ1bGVEYXRhKFJ1bGVGZWF0dXJlU2V0JiBmZWF0dXJlcywgY29uc3QgUnVsZURhdGEmIHJ1
bGVEYXRhKQoreworICAgIGJvb2wgZm91bmRTaWJsaW5nU2VsZWN0b3IgPSBmYWxzZTsKKyAgICBm
b3IgKENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHJ1bGVEYXRhLnNlbGVjdG9yKCk7IHNlbGVjdG9y
OyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKKyAgICAgICAgY29sbGVjdEZl
YXR1cmVzRnJvbVNlbGVjdG9yKGZlYXR1cmVzLCBzZWxlY3Rvcik7CisgICAgICAgIAorICAgICAg
ICBpZiAoQ1NTU2VsZWN0b3JMaXN0KiBzZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci0+c2VsZWN0b3JM
aXN0KCkpIHsKKyAgICAgICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHN1YlNlbGVjdG9yID0gc2Vs
ZWN0b3JMaXN0LT5maXJzdCgpOyBzdWJTZWxlY3Rvcjsgc3ViU2VsZWN0b3IgPSBDU1NTZWxlY3Rv
ckxpc3Q6Om5leHQoc3ViU2VsZWN0b3IpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFmb3VuZFNp
YmxpbmdTZWxlY3RvciAmJiBzZWxlY3Rvci0+aXNTaWJsaW5nU2VsZWN0b3IoKSkKKyAgICAgICAg
ICAgICAgICAgICAgZm91bmRTaWJsaW5nU2VsZWN0b3IgPSB0cnVlOworICAgICAgICAgICAgICAg
IGNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3RvcihmZWF0dXJlcywgc3ViU2VsZWN0b3IpOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCFmb3VuZFNpYmxpbmdTZWxlY3RvciAmJiBz
ZWxlY3Rvci0+aXNTaWJsaW5nU2VsZWN0b3IoKSkKKyAgICAgICAgICAgIGZvdW5kU2libGluZ1Nl
bGVjdG9yID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGZvdW5kU2libGluZ1NlbGVjdG9yKQorICAg
ICAgICBmZWF0dXJlcy5zaWJsaW5nUnVsZXMuYXBwZW5kKFJ1bGVGZWF0dXJlKHJ1bGVEYXRhLnJ1
bGUoKSwgcnVsZURhdGEuc2VsZWN0b3JJbmRleCgpLCBydWxlRGF0YS5oYXNEb2N1bWVudFNlY3Vy
aXR5T3JpZ2luKCkpKTsKKyAgICBpZiAocnVsZURhdGEuY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0
ZVNlbGVjdG9yKCkpCisgICAgICAgIGZlYXR1cmVzLnVuY29tbW9uQXR0cmlidXRlUnVsZXMuYXBw
ZW5kKFJ1bGVGZWF0dXJlKHJ1bGVEYXRhLnJ1bGUoKSwgcnVsZURhdGEuc2VsZWN0b3JJbmRleCgp
LCBydWxlRGF0YS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkpKTsKK30KKyAgICAKK3ZvaWQg
UnVsZVNldDo6YWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAm
IG1hcCwgY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhKQoreworICAgIGlmICgha2V5KQorICAgICAg
ICByZXR1cm47CisgICAgT3duUHRyPFZlY3RvcjxSdWxlRGF0YT4gPiYgcnVsZXMgPSBtYXAuYWRk
KGtleSwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBpZiAoIXJ1bGVzKQorICAgICAg
ICBydWxlcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UnVsZURhdGE+KTsKKyAgICBydWxlcy0+YXBw
ZW5kKHJ1bGVEYXRhKTsKK30KKwordm9pZCBSdWxlU2V0OjphZGRSdWxlKFN0eWxlUnVsZSogcnVs
ZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
LCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGluUmVnaW9uUnVsZSkKK3sKKyAg
ICBSdWxlRGF0YSBydWxlRGF0YShydWxlLCBzZWxlY3RvckluZGV4LCBtX3J1bGVDb3VudCsrLCBo
YXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgaW5SZWdp
b25SdWxlKTsKKyAgICBjb2xsZWN0RmVhdHVyZXNGcm9tUnVsZURhdGEobV9mZWF0dXJlcywgcnVs
ZURhdGEpOworCisgICAgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gcnVsZURhdGEuc2VsZWN0b3Io
KTsKKworICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpIHsKKyAg
ICAgICAgYWRkVG9SdWxlU2V0KHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSwgbV9pZFJ1bGVzLCBy
dWxlRGF0YSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHNlbGVjdG9yLT5tX21h
dGNoID09IENTU1NlbGVjdG9yOjpDbGFzcykgeworICAgICAgICBhZGRUb1J1bGVTZXQoc2VsZWN0
b3ItPnZhbHVlKCkuaW1wbCgpLCBtX2NsYXNzUnVsZXMsIHJ1bGVEYXRhKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAoc2VsZWN0b3ItPmlzVW5rbm93blBzZXVkb0VsZW1lbnQoKSkg
eworICAgICAgICBhZGRUb1J1bGVTZXQoc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpLCBtX3NoYWRv
d1BzZXVkb0VsZW1lbnRSdWxlcywgcnVsZURhdGEpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChTZWxlY3RvckNoZWNrZXI6OmlzQ29tbW9uUHNldWRvQ2xhc3NTZWxlY3RvcihzZWxl
Y3RvcikpIHsKKyAgICAgICAgc3dpdGNoIChzZWxlY3Rvci0+cHNldWRvVHlwZSgpKSB7CisgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xpbms6CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb1Zpc2l0ZWQ6CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FueUxp
bms6CisgICAgICAgICAgICBtX2xpbmtQc2V1ZG9DbGFzc1J1bGVzLmFwcGVuZChydWxlRGF0YSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Zv
Y3VzOgorICAgICAgICAgICAgbV9mb2N1c1BzZXVkb0NsYXNzUnVsZXMuYXBwZW5kKHJ1bGVEYXRh
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUgPSBzZWxlY3Rvci0+dGFnKCkubG9jYWxO
YW1lKCk7CisgICAgaWYgKGxvY2FsTmFtZSAhPSBzdGFyQXRvbSkgeworICAgICAgICBhZGRUb1J1
bGVTZXQobG9jYWxOYW1lLmltcGwoKSwgbV90YWdSdWxlcywgcnVsZURhdGEpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIG1fdW5pdmVyc2FsUnVsZXMuYXBwZW5kKHJ1bGVEYXRhKTsKK30K
Kwordm9pZCBSdWxlU2V0OjphZGRQYWdlUnVsZShTdHlsZVJ1bGVQYWdlKiBydWxlKQoreworICAg
IG1fcGFnZVJ1bGVzLmFwcGVuZChydWxlKTsKK30KKwordm9pZCBSdWxlU2V0OjphZGRSZWdpb25S
dWxlKFN0eWxlUnVsZVJlZ2lvbiogcmVnaW9uUnVsZSwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5
T3JpZ2luKQoreworICAgIE93blB0cjxSdWxlU2V0PiByZWdpb25SdWxlU2V0ID0gUnVsZVNldDo6
Y3JlYXRlKCk7CisgICAgLy8gVGhlIHJlZ2lvbiBydWxlIHNldCBzaG91bGQgdGFrZSBpbnRvIGFj
Y291bnQgdGhlIHBvc2l0aW9uIGluc2lkZSB0aGUgcGFyZW50IHJ1bGUgc2V0LgorICAgIC8vIE90
aGVyd2lzZSwgdGhlIHJ1bGVzIGluc2lkZSByZWdpb24gYmxvY2sgbWlnaHQgYmUgaW5jb3JyZWN0
bHkgcG9zaXRpb25lZCBiZWZvcmUgb3RoZXIgc2ltaWxhciBydWxlcyBmcm9tCisgICAgLy8gdGhl
IHN0eWxlc2hlZXQgdGhhdCBjb250YWlucyB0aGUgcmVnaW9uIGJsb2NrLgorICAgIHJlZ2lvblJ1
bGVTZXQtPm1fcnVsZUNvdW50ID0gbV9ydWxlQ291bnQ7CisKKyAgICAvLyBDb2xsZWN0IHRoZSBy
ZWdpb24gcnVsZXMgaW50byBhIHJ1bGUgc2V0CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHls
ZVJ1bGVCYXNlPiA+JiBjaGlsZFJ1bGVzID0gcmVnaW9uUnVsZS0+Y2hpbGRSdWxlcygpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGlsZFJ1bGVzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIFN0eWxlUnVsZUJhc2UqIHJlZ2lvblN0eWxpbmdSdWxlID0gY2hpbGRSdWxlc1tpXS5nZXQo
KTsKKyAgICAgICAgaWYgKHJlZ2lvblN0eWxpbmdSdWxlLT5pc1N0eWxlUnVsZSgpKQorICAgICAg
ICAgICAgcmVnaW9uUnVsZVNldC0+YWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+
KHJlZ2lvblN0eWxpbmdSdWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgdHJ1ZSwgdHJ1
ZSk7CisgICAgfQorICAgIC8vIFVwZGF0ZSB0aGUgImdsb2JhbCIgcnVsZSBjb3VudCBzbyB0aGF0
IHByb3BlciBvcmRlciBpcyBtYWludGFpbmVkCisgICAgbV9ydWxlQ291bnQgPSByZWdpb25SdWxl
U2V0LT5tX3J1bGVDb3VudDsKKworICAgIG1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXBw
ZW5kKFJ1bGVTZXRTZWxlY3RvclBhaXIocmVnaW9uUnVsZS0+c2VsZWN0b3JMaXN0KCkuZmlyc3Qo
KSwgcmVnaW9uUnVsZVNldC5yZWxlYXNlKCkpKTsKK30KKwordm9pZCBSdWxlU2V0OjphZGRSdWxl
c0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZh
bHVhdG9yJiBtZWRpdW0sIFN0eWxlUmVzb2x2ZXIqIHJlc29sdmVyLCBjb25zdCBDb250YWluZXJO
b2RlKiBzY29wZSkKK3sKKyAgICBBU1NFUlQoc2hlZXQpOworICAgIAorICAgIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8U3R5bGVSdWxlSW1wb3J0PiA+JiBpbXBvcnRSdWxlcyA9IHNoZWV0LT5pbXBvcnRS
dWxlcygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbXBvcnRSdWxlcy5zaXplKCk7
ICsraSkgeworICAgICAgICBTdHlsZVJ1bGVJbXBvcnQqIGltcG9ydFJ1bGUgPSBpbXBvcnRSdWxl
c1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKGltcG9ydFJ1bGUtPnN0eWxlU2hlZXQoKSAmJiAoIWlt
cG9ydFJ1bGUtPm1lZGlhUXVlcmllcygpIHx8IG1lZGl1bS5ldmFsKGltcG9ydFJ1bGUtPm1lZGlh
UXVlcmllcygpLCByZXNvbHZlcikpKQorICAgICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXQoaW1w
b3J0UnVsZS0+c3R5bGVTaGVldCgpLCBtZWRpdW0sIHJlc29sdmVyLCBzY29wZSk7CisgICAgfQor
ICAgIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA9IHJlc29sdmVyICYmIHJlc29sdmVy
LT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHNoZWV0LT5iYXNlVVJM
KCkpOworCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBydWxlcyA9
IHNoZWV0LT5jaGlsZFJ1bGVzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIFN0eWxlUnVsZUJhc2UqIHJ1bGUgPSBydWxlc1tpXS5n
ZXQoKTsKKworICAgICAgICBBU1NFUlQoIXJ1bGUtPmlzSW1wb3J0UnVsZSgpKTsKKyAgICAgICAg
aWYgKHJ1bGUtPmlzU3R5bGVSdWxlKCkpCisgICAgICAgICAgICBhZGRTdHlsZVJ1bGUoc3RhdGlj
X2Nhc3Q8U3R5bGVSdWxlKj4ocnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sICFzY29w
ZSk7CisgICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzUGFnZVJ1bGUoKSkKKyAgICAgICAgICAgIGFk
ZFBhZ2VSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZVBhZ2UqPihydWxlKSk7CisgICAgICAgIGVs
c2UgaWYgKHJ1bGUtPmlzTWVkaWFSdWxlKCkpIHsKKyAgICAgICAgICAgIFN0eWxlUnVsZU1lZGlh
KiBtZWRpYVJ1bGUgPSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGVNZWRpYSo+KHJ1bGUpOworCisgICAg
ICAgICAgICBpZiAoKCFtZWRpYVJ1bGUtPm1lZGlhUXVlcmllcygpIHx8IG1lZGl1bS5ldmFsKG1l
ZGlhUnVsZS0+bWVkaWFRdWVyaWVzKCksIHJlc29sdmVyKSkpIHsKKyAgICAgICAgICAgICAgICAv
LyBUcmF2ZXJzZSBjaGlsZCBlbGVtZW50cyBvZiB0aGUgQG1lZGlhIHJ1bGUuCisgICAgICAgICAg
ICAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBjaGlsZFJ1bGVzID0g
bWVkaWFSdWxlLT5jaGlsZFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gMDsgaiA8IGNoaWxkUnVsZXMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAg
U3R5bGVSdWxlQmFzZSogY2hpbGRSdWxlID0gY2hpbGRSdWxlc1tqXS5nZXQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGNoaWxkUnVsZS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihjaGlsZFJ1bGUp
LCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCAhc2NvcGUpOworICAgICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChjaGlsZFJ1bGUtPmlzUGFnZVJ1bGUoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZFBhZ2VSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZVBhZ2UqPihjaGlsZFJ1bGUpKTsK
KyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGRSdWxlLT5pc0ZvbnRGYWNlUnVsZSgp
ICYmIHJlc29sdmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBmb250
IGZhY2UgdG8gb3VyIHNldC4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FKEJVRyA3
MjQ2MSk6IFdlIGRvbid0IGFkZCBAZm9udC1mYWNlIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVl
dHMgZm9yIHRoZSBtb21lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlID0gc3RhdGljX2Nhc3Q8
U3R5bGVSdWxlRm9udEZhY2UqPihjaGlsZFJ1bGUpOworICAgICAgICAgICAgICAgICAgICAgICAg
cmVzb2x2ZXItPmZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1bGUoZm9udEZhY2VSdWxlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZFByb3Bl
cnRpZXNDYWNoZSgpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkUnVsZS0+
aXNLZXlmcmFtZXNSdWxlKCkgJiYgcmVzb2x2ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEFkZCB0aGlzIGtleWZyYW1lIHJ1bGUgdG8gb3VyIHNldC4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEZJWE1FKEJVRyA3MjQ2Mik6IFdlIGRvbid0IGFkZCBAa2V5ZnJhbWUgcnVsZXMg
b2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzY29wZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVyLT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRp
Y19jYXN0PFN0eWxlUnVsZUtleWZyYW1lcyo+KGNoaWxkUnVsZSkpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfSAvLyBmb3IgcnVsZXMKKyAgICAgICAgICAgIH0gLy8g
aWYgcnVsZXMKKyAgICAgICAgfSBlbHNlIGlmIChydWxlLT5pc0ZvbnRGYWNlUnVsZSgpICYmIHJl
c29sdmVyKSB7CisgICAgICAgICAgICAvLyBBZGQgdGhpcyBmb250IGZhY2UgdG8gb3VyIHNldC4K
KyAgICAgICAgICAgIC8vIEZJWE1FKEJVRyA3MjQ2MSk6IFdlIGRvbid0IGFkZCBAZm9udC1mYWNl
IHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCisgICAgICAgICAg
ICBpZiAoc2NvcGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBjb25z
dCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlID0gc3RhdGljX2Nhc3Q8U3R5bGVSdWxl
Rm9udEZhY2UqPihydWxlKTsKKyAgICAgICAgICAgIHJlc29sdmVyLT5mb250U2VsZWN0b3IoKS0+
YWRkRm9udEZhY2VSdWxlKGZvbnRGYWNlUnVsZSk7CisgICAgICAgICAgICByZXNvbHZlci0+aW52
YWxpZGF0ZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsKKyAgICAgICAgfSBlbHNlIGlmIChydWxl
LT5pc0tleWZyYW1lc1J1bGUoKSAmJiByZXNvbHZlcikgeworICAgICAgICAgICAgLy8gRklYTUUg
KEJVRyA3MjQ2Mik6IFdlIGRvbid0IGFkZCBAa2V5ZnJhbWUgcnVsZXMgb2Ygc2NvcGVkIHN0eWxl
IHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KKyAgICAgICAgICAgIGlmIChzY29wZSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHJlc29sdmVyLT5hZGRLZXlmcmFtZVN0eWxl
KHN0YXRpY19jYXN0PFN0eWxlUnVsZUtleWZyYW1lcyo+KHJ1bGUpKTsKKyAgICAgICAgfQorI2lm
IEVOQUJMRShDU1NfUkVHSU9OUykKKyAgICAgICAgZWxzZSBpZiAocnVsZS0+aXNSZWdpb25SdWxl
KCkgJiYgcmVzb2x2ZXIpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FIChCVUcgNzI0NzIpOiBXZSBk
b24ndCBhZGQgQC13ZWJraXQtcmVnaW9uIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9y
IHRoZSBtb21lbnQuCisgICAgICAgICAgICBpZiAoc2NvcGUpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBhZGRSZWdpb25SdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZVJl
Z2lvbio+KHJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKTsKKyAgICAgICAgfQorI2Vu
ZGlmCisgICAgfQorICAgIGlmIChtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQpCisgICAgICAgIHNo
cmlua1RvRml0KCk7Cit9CisKK3ZvaWQgUnVsZVNldDo6YWRkU3R5bGVSdWxlKFN0eWxlUnVsZSog
cnVsZSwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVj
a1NlbGVjdG9yLCBib29sIGlzSW5SZWdpb25SdWxlKQoreworICAgIGZvciAoc2l6ZV90IHNlbGVj
dG9ySW5kZXggPSAwOyBzZWxlY3RvckluZGV4ICE9IG5vdEZvdW5kOyBzZWxlY3RvckluZGV4ID0g
cnVsZS0+c2VsZWN0b3JMaXN0KCkuaW5kZXhPZk5leHRTZWxlY3RvckFmdGVyKHNlbGVjdG9ySW5k
ZXgpKQorICAgICAgICBhZGRSdWxlKHJ1bGUsIHNlbGVjdG9ySW5kZXgsIGhhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW4sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBpc0luUmVnaW9uUnVsZSk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaHJpbmtNYXBWZWN0b3JzVG9GaXQoUnVsZVNldDo6QXRv
bVJ1bGVNYXAmIG1hcCkKK3sKKyAgICBSdWxlU2V0OjpBdG9tUnVsZU1hcDo6aXRlcmF0b3IgZW5k
ID0gbWFwLmVuZCgpOworICAgIGZvciAoUnVsZVNldDo6QXRvbVJ1bGVNYXA6Oml0ZXJhdG9yIGl0
ID0gbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnNlY29uZC0+c2hy
aW5rVG9GaXQoKTsKK30KKwordm9pZCBSdWxlU2V0OjpzaHJpbmtUb0ZpdCgpCit7CisgICAgc2hy
aW5rTWFwVmVjdG9yc1RvRml0KG1faWRSdWxlcyk7CisgICAgc2hyaW5rTWFwVmVjdG9yc1RvRml0
KG1fY2xhc3NSdWxlcyk7CisgICAgc2hyaW5rTWFwVmVjdG9yc1RvRml0KG1fdGFnUnVsZXMpOwor
ICAgIHNocmlua01hcFZlY3RvcnNUb0ZpdChtX3NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcyk7Cisg
ICAgbV9saW5rUHNldWRvQ2xhc3NSdWxlcy5zaHJpbmtUb0ZpdCgpOworICAgIG1fZm9jdXNQc2V1
ZG9DbGFzc1J1bGVzLnNocmlua1RvRml0KCk7CisgICAgbV91bml2ZXJzYWxSdWxlcy5zaHJpbmtU
b0ZpdCgpOworICAgIG1fcGFnZVJ1bGVzLnNocmlua1RvRml0KCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1NzcyMzhiYTkyMzZhOWQ2
ODEwMzkxOTVhMGRkNDNhMmU4MDgyYTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvUnVsZVNldC5oCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAx
OTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBSdWxlU2V0X2gKKyNkZWZpbmUgUnVsZVNl
dF9oCisKKyNpbmNsdWRlICJSdWxlRmVhdHVyZS5oIgorI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgor
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENTU1NlbGVjdG9yOworY2xhc3MgQ29udGFp
bmVyTm9kZTsKK2NsYXNzIE1lZGlhUXVlcnlFdmFsdWF0b3I7CitjbGFzcyBTdHlsZVJlc29sdmVy
OworY2xhc3MgU3R5bGVSdWxlUmVnaW9uOworY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOworCitj
bGFzcyBSdWxlRGF0YSB7CitwdWJsaWM6CisgICAgUnVsZURhdGEoU3R5bGVSdWxlKiwgdW5zaWdu
ZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgcG9zaXRpb24sIGJvb2wgaGFzRG9jdW1lbnRTZWN1
cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpblJlZ2lvblJ1
bGUpOworCisgICAgdW5zaWduZWQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9u
OyB9CisgICAgU3R5bGVSdWxlKiBydWxlKCkgY29uc3QgeyByZXR1cm4gbV9ydWxlOyB9CisgICAg
Q1NTU2VsZWN0b3IqIHNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9ydWxlLT5zZWxlY3Rvckxp
c3QoKS5zZWxlY3RvckF0KG1fc2VsZWN0b3JJbmRleCk7IH0KKyAgICB1bnNpZ25lZCBzZWxlY3Rv
ckluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RvckluZGV4OyB9CisKKyAgICBib29sIGhh
c0Zhc3RDaGVja2FibGVTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzRmFzdENoZWNrYWJs
ZVNlbGVjdG9yOyB9CisgICAgYm9vbCBoYXNNdWx0aXBhcnRTZWxlY3RvcigpIGNvbnN0IHsgcmV0
dXJuIG1faGFzTXVsdGlwYXJ0U2VsZWN0b3I7IH0KKyAgICBib29sIGhhc1JpZ2h0bW9zdFNlbGVj
dG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKCkgY29uc3QgeyByZXR1cm4gbV9oYXNSaWdo
dG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaDsgfQorICAgIGJvb2wgY29u
dGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWlu
c1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3I7IH0KKyAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lmaWNpdHk7IH0KKyAgICB1bnNpZ25lZCBsaW5rTWF0Y2hU
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9saW5rTWF0Y2hUeXBlOyB9CisgICAgYm9vbCBoYXNEb2N1
bWVudFNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9oYXNEb2N1bWVudFNlY3VyaXR5
T3JpZ2luOyB9CisgICAgYm9vbCBpc0luUmVnaW9uUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNJ
blJlZ2lvblJ1bGU7IH0KKworICAgIC8vIFRyeSB0byBiYWxhbmNlIGJldHdlZW4gbWVtb3J5IHVz
YWdlICh0aGVyZSBjYW4gYmUgbG90cyBvZiBSdWxlRGF0YSBvYmplY3RzKSBhbmQgZ29vZCBmaWx0
ZXJpbmcgcGVyZm9ybWFuY2UuCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heGltdW1JZGVu
dGlmaWVyQ291bnQgPSA0OworICAgIGNvbnN0IHVuc2lnbmVkKiBkZXNjZW5kYW50U2VsZWN0b3JJ
ZGVudGlmaWVySGFzaGVzKCkgY29uc3QgeyByZXR1cm4gbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVu
dGlmaWVySGFzaGVzOyB9CisKKyAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVj
dEluZm8qKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBTdHlsZVJ1bGUqIG1fcnVsZTsKKyAgICB1
bnNpZ25lZCBtX3NlbGVjdG9ySW5kZXggOiAxMjsKKyAgICAvLyBUaGlzIG51bWJlciB3YXMgcGlj
a2VkIGZhaXJseSBhcmJpdHJhcmlseS4gV2UgY2FuIHByb2JhYmx5IGxvd2VyIGl0IGlmIHdlIG5l
ZWQgdG8uCisgICAgLy8gU29tZSBzaW1wbGUgdGVzdGluZyBzaG93ZWQgPDEwMCwwMDAgUnVsZURh
dGEncyBvbiBsYXJnZSBzaXRlcy4KKyAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uIDogMjA7CisgICAg
dW5zaWduZWQgbV9zcGVjaWZpY2l0eSA6IDI0OworICAgIHVuc2lnbmVkIG1faGFzRmFzdENoZWNr
YWJsZVNlbGVjdG9yIDogMTsKKyAgICB1bnNpZ25lZCBtX2hhc011bHRpcGFydFNlbGVjdG9yIDog
MTsKKyAgICB1bnNpZ25lZCBtX2hhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRP
blJ1bGVIYXNoIDogMTsKKyAgICB1bnNpZ25lZCBtX2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVT
ZWxlY3RvciA6IDE7CisgICAgdW5zaWduZWQgbV9saW5rTWF0Y2hUeXBlIDogMjsgLy8gIFNlbGVj
dG9yQ2hlY2tlcjo6TGlua01hdGNoTWFzaworICAgIHVuc2lnbmVkIG1faGFzRG9jdW1lbnRTZWN1
cml0eU9yaWdpbiA6IDE7CisgICAgdW5zaWduZWQgbV9pc0luUmVnaW9uUnVsZSA6IDE7CisgICAg
Ly8gVXNlIHBsYWluIGFycmF5IGluc3RlYWQgb2YgYSBWZWN0b3IgdG8gbWluaW1pemUgbWVtb3J5
IG92ZXJoZWFkLgorICAgIHVuc2lnbmVkIG1fZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhh
c2hlc1ttYXhpbXVtSWRlbnRpZmllckNvdW50XTsKK307CisgICAgCitzdHJ1Y3QgU2FtZVNpemVB
c1J1bGVEYXRhIHsKKyAgICB2b2lkKiBhOworICAgIHVuc2lnbmVkIGI7CisgICAgdW5zaWduZWQg
YzsKKyAgICB1bnNpZ25lZCBkWzRdOworfTsKKworQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJ1bGVE
YXRhKSA9PSBzaXplb2YoU2FtZVNpemVBc1J1bGVEYXRhKSwgUnVsZURhdGFfc2hvdWxkX3N0YXlf
c21hbGwpOworCitjbGFzcyBSdWxlU2V0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSdWxl
U2V0KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NP
d25QdHI8UnVsZVNldD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFJ1bGVTZXQpOyB9
CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIE93blB0cjxWZWN0b3I8
UnVsZURhdGE+ID4gPiBBdG9tUnVsZU1hcDsKKworICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQo
U3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIFN0eWxlUmVz
b2x2ZXIqID0gMCwgY29uc3QgQ29udGFpbmVyTm9kZSogPSAwKTsKKworICAgIHZvaWQgYWRkU3R5
bGVSdWxlKFN0eWxlUnVsZSosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBj
YW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSA9IGZhbHNlKTsKKyAg
ICB2b2lkIGFkZFJ1bGUoU3R5bGVSdWxlKiwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgYm9vbCBo
YXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBi
b29sIGlzSW5SZWdpb25SdWxlID0gZmFsc2UpOworICAgIHZvaWQgYWRkUGFnZVJ1bGUoU3R5bGVS
dWxlUGFnZSopOworICAgIHZvaWQgYWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwg
QXRvbVJ1bGVNYXAmLCBjb25zdCBSdWxlRGF0YSYpOworICAgIHZvaWQgYWRkUmVnaW9uUnVsZShT
dHlsZVJ1bGVSZWdpb24qLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pOworICAgIHZv
aWQgc2hyaW5rVG9GaXQoKTsKKyAgICB2b2lkIGRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKSB7IG1f
YXV0b1Nocmlua1RvRml0RW5hYmxlZCA9IGZhbHNlOyB9CisKKyAgICBjb25zdCBSdWxlRmVhdHVy
ZVNldCYgZmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzOyB9CisKKyAgICBjb25z
dCBWZWN0b3I8UnVsZURhdGE+KiBpZFJ1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29uc3Qg
eyByZXR1cm4gbV9pZFJ1bGVzLmdldChrZXkpOyB9CisgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRh
PiogY2xhc3NSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1fY2xh
c3NSdWxlcy5nZXQoa2V5KTsgfQorICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHRhZ1J1bGVz
KEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29uc3QgeyByZXR1cm4gbV90YWdSdWxlcy5nZXQoa2V5
KTsgfQorICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHNoYWRvd1BzZXVkb0VsZW1lbnRSdWxl
cyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93UHNldWRvRWxl
bWVudFJ1bGVzLmdldChrZXkpOyB9CisgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogbGlua1Bz
ZXVkb0NsYXNzUnVsZXMoKSBjb25zdCB7IHJldHVybiAmbV9saW5rUHNldWRvQ2xhc3NSdWxlczsg
fQorICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIGZvY3VzUHNldWRvQ2xhc3NSdWxlcygpIGNv
bnN0IHsgcmV0dXJuICZtX2ZvY3VzUHNldWRvQ2xhc3NSdWxlczsgfQorICAgIGNvbnN0IFZlY3Rv
cjxSdWxlRGF0YT4qIHVuaXZlcnNhbFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gJm1fdW5pdmVyc2Fs
UnVsZXM7IH0KKyAgICBjb25zdCBWZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiBwYWdlUnVsZXMoKSBj
b25zdCB7IHJldHVybiBtX3BhZ2VSdWxlczsgfQorCisgICAgdm9pZCByZXBvcnRNZW1vcnlVc2Fn
ZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CisKK3B1YmxpYzoKKyAgICBSdWxlU2V0KCk7CisK
KyAgICBBdG9tUnVsZU1hcCBtX2lkUnVsZXM7CisgICAgQXRvbVJ1bGVNYXAgbV9jbGFzc1J1bGVz
OworICAgIEF0b21SdWxlTWFwIG1fdGFnUnVsZXM7CisgICAgQXRvbVJ1bGVNYXAgbV9zaGFkb3dQ
c2V1ZG9FbGVtZW50UnVsZXM7CisgICAgVmVjdG9yPFJ1bGVEYXRhPiBtX2xpbmtQc2V1ZG9DbGFz
c1J1bGVzOworICAgIFZlY3RvcjxSdWxlRGF0YT4gbV9mb2N1c1BzZXVkb0NsYXNzUnVsZXM7Cisg
ICAgVmVjdG9yPFJ1bGVEYXRhPiBtX3VuaXZlcnNhbFJ1bGVzOworICAgIFZlY3RvcjxTdHlsZVJ1
bGVQYWdlKj4gbV9wYWdlUnVsZXM7CisgICAgdW5zaWduZWQgbV9ydWxlQ291bnQ7CisgICAgYm9v
bCBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQ7CisgICAgUnVsZUZlYXR1cmVTZXQgbV9mZWF0dXJl
czsKKworICAgIHN0cnVjdCBSdWxlU2V0U2VsZWN0b3JQYWlyIHsKKyAgICAgICAgUnVsZVNldFNl
bGVjdG9yUGFpcihDU1NTZWxlY3Rvciogc2VsZWN0b3IsIFBhc3NPd25QdHI8UnVsZVNldD4gcnVs
ZVNldCkgOiBzZWxlY3RvcihzZWxlY3RvciksIHJ1bGVTZXQocnVsZVNldCkgeyB9CisgICAgICAg
IFJ1bGVTZXRTZWxlY3RvclBhaXIoY29uc3QgUnVsZVNldFNlbGVjdG9yUGFpciYgcnMpIDogc2Vs
ZWN0b3IocnMuc2VsZWN0b3IpLCBydWxlU2V0KGNvbnN0X2Nhc3Q8UnVsZVNldFNlbGVjdG9yUGFp
cio+KCZycyktPnJ1bGVTZXQucmVsZWFzZSgpKSB7IH0KKyAgICAgICAgdm9pZCByZXBvcnRNZW1v
cnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CisKKyAgICAgICAgQ1NTU2VsZWN0b3Iq
IHNlbGVjdG9yOworICAgICAgICBPd25QdHI8UnVsZVNldD4gcnVsZVNldDsKKyAgICB9OworCisg
ICAgVmVjdG9yPFJ1bGVTZXRTZWxlY3RvclBhaXI+IG1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNl
dHM7Cit9OworCitpbmxpbmUgUnVsZVNldDo6UnVsZVNldCgpCisgICAgOiBtX3J1bGVDb3VudCgw
KQorICAgICwgbV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKHRydWUpCit7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFJ1bGVTZXRfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuY3BwCmluZGV4IGNjM2Y1ZjNkZjJmYTNjMTI0ODJhMWI4MjhmY2NjYjMyNzk5ODJk
MGMuLmU0YmEwYThmZWUxMjI2NDFjNmQ4YzcwYzFkMDA1MGU3NzQ1NWFlNDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTk4LDYgKzk4LDcgQEAKICNpbmNsdWRlICJSZW5k
ZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSb3RhdGVUcmFu
c2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJSdWxlU2V0LmgiCiAjaW5jbHVkZSAiU1ZHRG9j
dW1lbnRFeHRlbnNpb25zLmgiCiAjaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCiAjaW5j
bHVkZSAiU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKQEAgLTIwNSwxMTMgKzIwNiw2IEBAIEhB
TkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwKIGlmIChwcmltaXRpdmVWYWx1
ZSkgXAogICAgIG1fc3R5bGUtPnNldCMjUHJvcCgqcHJpbWl0aXZlVmFsdWUpOwogCi1jbGFzcyBS
dWxlRGF0YSB7Ci1wdWJsaWM6Ci0gICAgUnVsZURhdGEoU3R5bGVSdWxlKiwgdW5zaWduZWQgc2Vs
ZWN0b3JJbmRleCwgdW5zaWduZWQgcG9zaXRpb24sIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9y
aWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpblJlZ2lvblJ1bGUpOwot
Ci0gICAgdW5zaWduZWQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9Ci0g
ICAgU3R5bGVSdWxlKiBydWxlKCkgY29uc3QgeyByZXR1cm4gbV9ydWxlOyB9Ci0gICAgQ1NTU2Vs
ZWN0b3IqIHNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9ydWxlLT5zZWxlY3Rvckxpc3QoKS5z
ZWxlY3RvckF0KG1fc2VsZWN0b3JJbmRleCk7IH0KLSAgICB1bnNpZ25lZCBzZWxlY3RvckluZGV4
KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RvckluZGV4OyB9Ci0KLSAgICBib29sIGhhc0Zhc3RD
aGVja2FibGVTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzRmFzdENoZWNrYWJsZVNlbGVj
dG9yOyB9Ci0gICAgYm9vbCBoYXNNdWx0aXBhcnRTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzTXVsdGlwYXJ0U2VsZWN0b3I7IH0KLSAgICBib29sIGhhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0
Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKCkgY29uc3QgeyByZXR1cm4gbV9oYXNSaWdodG1vc3RT
ZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaDsgfQotICAgIGJvb2wgY29udGFpbnNV
bmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc1VuY29t
bW9uQXR0cmlidXRlU2VsZWN0b3I7IH0KLSAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3BlY2lmaWNpdHk7IH0KLSAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlKCkg
Y29uc3QgeyByZXR1cm4gbV9saW5rTWF0Y2hUeXBlOyB9Ci0gICAgYm9vbCBoYXNEb2N1bWVudFNl
Y3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
OyB9Ci0gICAgYm9vbCBpc0luUmVnaW9uUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNJblJlZ2lv
blJ1bGU7IH0KLQotICAgIC8vIFRyeSB0byBiYWxhbmNlIGJldHdlZW4gbWVtb3J5IHVzYWdlICh0
aGVyZSBjYW4gYmUgbG90cyBvZiBSdWxlRGF0YSBvYmplY3RzKSBhbmQgZ29vZCBmaWx0ZXJpbmcg
cGVyZm9ybWFuY2UuCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heGltdW1JZGVudGlmaWVy
Q291bnQgPSA0OwotICAgIGNvbnN0IHVuc2lnbmVkKiBkZXNjZW5kYW50U2VsZWN0b3JJZGVudGlm
aWVySGFzaGVzKCkgY29uc3QgeyByZXR1cm4gbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVy
SGFzaGVzOyB9Ci0KLSAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8q
KSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBTdHlsZVJ1bGUqIG1fcnVsZTsKLSAgICB1bnNpZ25l
ZCBtX3NlbGVjdG9ySW5kZXggOiAxMjsKLSAgICAvLyBUaGlzIG51bWJlciB3YXMgcGlja2VkIGZh
aXJseSBhcmJpdHJhcmlseS4gV2UgY2FuIHByb2JhYmx5IGxvd2VyIGl0IGlmIHdlIG5lZWQgdG8u
Ci0gICAgLy8gU29tZSBzaW1wbGUgdGVzdGluZyBzaG93ZWQgPDEwMCwwMDAgUnVsZURhdGEncyBv
biBsYXJnZSBzaXRlcy4KLSAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uIDogMjA7Ci0gICAgdW5zaWdu
ZWQgbV9zcGVjaWZpY2l0eSA6IDI0OwotICAgIHVuc2lnbmVkIG1faGFzRmFzdENoZWNrYWJsZVNl
bGVjdG9yIDogMTsKLSAgICB1bnNpZ25lZCBtX2hhc011bHRpcGFydFNlbGVjdG9yIDogMTsKLSAg
ICB1bnNpZ25lZCBtX2hhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVI
YXNoIDogMTsKLSAgICB1bnNpZ25lZCBtX2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3Rv
ciA6IDE7Ci0gICAgdW5zaWduZWQgbV9saW5rTWF0Y2hUeXBlIDogMjsgLy8gIFNlbGVjdG9yQ2hl
Y2tlcjo6TGlua01hdGNoTWFzawotICAgIHVuc2lnbmVkIG1faGFzRG9jdW1lbnRTZWN1cml0eU9y
aWdpbiA6IDE7Ci0gICAgdW5zaWduZWQgbV9pc0luUmVnaW9uUnVsZSA6IDE7Ci0gICAgLy8gVXNl
IHBsYWluIGFycmF5IGluc3RlYWQgb2YgYSBWZWN0b3IgdG8gbWluaW1pemUgbWVtb3J5IG92ZXJo
ZWFkLgotICAgIHVuc2lnbmVkIG1fZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hlc1tt
YXhpbXVtSWRlbnRpZmllckNvdW50XTsKLX07Ci0gICAgCi1zdHJ1Y3QgU2FtZVNpemVBc1J1bGVE
YXRhIHsKLSAgICB2b2lkKiBhOwotICAgIHVuc2lnbmVkIGI7Ci0gICAgdW5zaWduZWQgYzsKLSAg
ICB1bnNpZ25lZCBkWzRdOwotfTsKLQotQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJ1bGVEYXRhKSA9
PSBzaXplb2YoU2FtZVNpemVBc1J1bGVEYXRhKSwgUnVsZURhdGFfc2hvdWxkX3N0YXlfc21hbGwp
OwotCi1jbGFzcyBSdWxlU2V0IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSdWxlU2V0KTsg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8
UnVsZVNldD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFJ1bGVTZXQpOyB9Ci0KLSAg
ICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIE93blB0cjxWZWN0b3I8UnVsZURh
dGE+ID4gPiBBdG9tUnVsZU1hcDsKLQotICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVT
aGVldENvbnRlbnRzKiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIFN0eWxlUmVzb2x2ZXIq
ID0gMCwgY29uc3QgQ29udGFpbmVyTm9kZSogPSAwKTsKLQotICAgIHZvaWQgYWRkU3R5bGVSdWxl
KFN0eWxlUnVsZSosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VG
YXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSA9IGZhbHNlKTsKLSAgICB2b2lk
IGFkZFJ1bGUoU3R5bGVSdWxlKiwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgYm9vbCBoYXNEb2N1
bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGlz
SW5SZWdpb25SdWxlID0gZmFsc2UpOwotICAgIHZvaWQgYWRkUGFnZVJ1bGUoU3R5bGVSdWxlUGFn
ZSopOwotICAgIHZvaWQgYWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1
bGVNYXAmLCBjb25zdCBSdWxlRGF0YSYpOwotICAgIHZvaWQgYWRkUmVnaW9uUnVsZShTdHlsZVJ1
bGVSZWdpb24qLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pOwotICAgIHZvaWQgc2hy
aW5rVG9GaXQoKTsKLSAgICB2b2lkIGRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKSB7IG1fYXV0b1No
cmlua1RvRml0RW5hYmxlZCA9IGZhbHNlOyB9Ci0KLSAgICBjb25zdCBTdHlsZVJlc29sdmVyOjpG
ZWF0dXJlcyYgZmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzOyB9Ci0KLSAgICBj
b25zdCBWZWN0b3I8UnVsZURhdGE+KiBpZFJ1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29u
c3QgeyByZXR1cm4gbV9pZFJ1bGVzLmdldChrZXkpOyB9Ci0gICAgY29uc3QgVmVjdG9yPFJ1bGVE
YXRhPiogY2xhc3NSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1f
Y2xhc3NSdWxlcy5nZXQoa2V5KTsgfQotICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHRhZ1J1
bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29uc3QgeyByZXR1cm4gbV90YWdSdWxlcy5nZXQo
a2V5KTsgfQotICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHNoYWRvd1BzZXVkb0VsZW1lbnRS
dWxlcyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93UHNldWRv
RWxlbWVudFJ1bGVzLmdldChrZXkpOyB9Ci0gICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogbGlu
a1BzZXVkb0NsYXNzUnVsZXMoKSBjb25zdCB7IHJldHVybiAmbV9saW5rUHNldWRvQ2xhc3NSdWxl
czsgfQotICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIGZvY3VzUHNldWRvQ2xhc3NSdWxlcygp
IGNvbnN0IHsgcmV0dXJuICZtX2ZvY3VzUHNldWRvQ2xhc3NSdWxlczsgfQotICAgIGNvbnN0IFZl
Y3RvcjxSdWxlRGF0YT4qIHVuaXZlcnNhbFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gJm1fdW5pdmVy
c2FsUnVsZXM7IH0KLSAgICBjb25zdCBWZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiBwYWdlUnVsZXMo
KSBjb25zdCB7IHJldHVybiBtX3BhZ2VSdWxlczsgfQotCi0gICAgdm9pZCByZXBvcnRNZW1vcnlV
c2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7Ci0KLXB1YmxpYzoKLSAgICBSdWxlU2V0KCk7
Ci0KLSAgICBBdG9tUnVsZU1hcCBtX2lkUnVsZXM7Ci0gICAgQXRvbVJ1bGVNYXAgbV9jbGFzc1J1
bGVzOwotICAgIEF0b21SdWxlTWFwIG1fdGFnUnVsZXM7Ci0gICAgQXRvbVJ1bGVNYXAgbV9zaGFk
b3dQc2V1ZG9FbGVtZW50UnVsZXM7Ci0gICAgVmVjdG9yPFJ1bGVEYXRhPiBtX2xpbmtQc2V1ZG9D
bGFzc1J1bGVzOwotICAgIFZlY3RvcjxSdWxlRGF0YT4gbV9mb2N1c1BzZXVkb0NsYXNzUnVsZXM7
Ci0gICAgVmVjdG9yPFJ1bGVEYXRhPiBtX3VuaXZlcnNhbFJ1bGVzOwotICAgIFZlY3RvcjxTdHls
ZVJ1bGVQYWdlKj4gbV9wYWdlUnVsZXM7Ci0gICAgdW5zaWduZWQgbV9ydWxlQ291bnQ7Ci0gICAg
Ym9vbCBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQ7Ci0gICAgU3R5bGVSZXNvbHZlcjo6RmVhdHVy
ZXMgbV9mZWF0dXJlczsKLQotICAgIHN0cnVjdCBSdWxlU2V0U2VsZWN0b3JQYWlyIHsKLSAgICAg
ICAgUnVsZVNldFNlbGVjdG9yUGFpcihDU1NTZWxlY3Rvciogc2VsZWN0b3IsIFBhc3NPd25QdHI8
UnVsZVNldD4gcnVsZVNldCkgOiBzZWxlY3RvcihzZWxlY3RvciksIHJ1bGVTZXQocnVsZVNldCkg
eyB9Ci0gICAgICAgIFJ1bGVTZXRTZWxlY3RvclBhaXIoY29uc3QgUnVsZVNldFNlbGVjdG9yUGFp
ciYgcnMpIDogc2VsZWN0b3IocnMuc2VsZWN0b3IpLCBydWxlU2V0KGNvbnN0X2Nhc3Q8UnVsZVNl
dFNlbGVjdG9yUGFpcio+KCZycyktPnJ1bGVTZXQucmVsZWFzZSgpKSB7IH0KLSAgICAgICAgdm9p
ZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7Ci0KLSAgICAgICAg
Q1NTU2VsZWN0b3IqIHNlbGVjdG9yOwotICAgICAgICBPd25QdHI8UnVsZVNldD4gcnVsZVNldDsK
LSAgICB9OwotCi0gICAgVmVjdG9yPFJ1bGVTZXRTZWxlY3RvclBhaXI+IG1fcmVnaW9uU2VsZWN0
b3JzQW5kUnVsZVNldHM7Ci19OwogCiBzdGF0aWMgUnVsZVNldCogZGVmYXVsdFN0eWxlOwogc3Rh
dGljIFJ1bGVTZXQqIGRlZmF1bHRRdWlya3NTdHlsZTsKQEAgLTQ4MSw3ICszNzUsNyBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFkZEF1dGhvclJ1bGVzQW5kQ29sbGVjdFVzZXJSdWxlc0Zyb21TaGVl
dHMoY29uc3QgVmVjdG9yPFJlZgogICAgIH0KIH0KIAotc3RhdGljIFBhc3NPd25QdHI8UnVsZVNl
dD4gbWFrZVJ1bGVTZXQoY29uc3QgVmVjdG9yPFN0eWxlUmVzb2x2ZXI6OlJ1bGVGZWF0dXJlPiYg
cnVsZXMpCitzdGF0aWMgUGFzc093blB0cjxSdWxlU2V0PiBtYWtlUnVsZVNldChjb25zdCBWZWN0
b3I8UnVsZUZlYXR1cmU+JiBydWxlcykKIHsKICAgICBzaXplX3Qgc2l6ZSA9IHJ1bGVzLnNpemUo
KTsKICAgICBpZiAoIXNpemUpCkBAIC03MTIsNDkgKzYwNiw2IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6c3dlZXBNYXRjaGVkUHJvcGVydGllc0NhY2hlKCkKICAgICAgICAgbV9tYXRjaGVkUHJvcGVy
dGllc0NhY2hlLnJlbW92ZSh0b1JlbW92ZVtpXSk7CiB9CiAKLVN0eWxlUmVzb2x2ZXI6OkZlYXR1
cmVzOjpGZWF0dXJlcygpCi0gICAgOiB1c2VzRmlyc3RMaW5lUnVsZXMoZmFsc2UpCi0gICAgLCB1
c2VzQmVmb3JlQWZ0ZXJSdWxlcyhmYWxzZSkKLXsKLX0KLQotU3R5bGVSZXNvbHZlcjo6RmVhdHVy
ZXM6On5GZWF0dXJlcygpCi17Ci19Ci0gICAgCi12b2lkIFN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVz
OjphZGQoY29uc3QgU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXMmIG90aGVyKQotewotICAgIEhhc2hT
ZXQ8QXRvbWljU3RyaW5nSW1wbCo+OjppdGVyYXRvciBlbmQgPSBvdGhlci5pZHNJblJ1bGVzLmVu
ZCgpOwotICAgIGZvciAoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0ID0g
b3RoZXIuaWRzSW5SdWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGlkc0lu
UnVsZXMuYWRkKCppdCk7Ci0gICAgZW5kID0gb3RoZXIuYXR0cnNJblJ1bGVzLmVuZCgpOwotICAg
IGZvciAoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0ID0gb3RoZXIuYXR0
cnNJblJ1bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgYXR0cnNJblJ1bGVz
LmFkZCgqaXQpOwotICAgIHNpYmxpbmdSdWxlcy5hcHBlbmQob3RoZXIuc2libGluZ1J1bGVzKTsK
LSAgICB1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmFwcGVuZChvdGhlci51bmNvbW1vbkF0dHJpYnV0
ZVJ1bGVzKTsKLSAgICB1c2VzRmlyc3RMaW5lUnVsZXMgPSB1c2VzRmlyc3RMaW5lUnVsZXMgfHwg
b3RoZXIudXNlc0ZpcnN0TGluZVJ1bGVzOwotICAgIHVzZXNCZWZvcmVBZnRlclJ1bGVzID0gdXNl
c0JlZm9yZUFmdGVyUnVsZXMgfHwgb3RoZXIudXNlc0JlZm9yZUFmdGVyUnVsZXM7Ci19Ci0KLXZv
aWQgU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXM6OmNsZWFyKCkKLXsKLSAgICBpZHNJblJ1bGVzLmNs
ZWFyKCk7Ci0gICAgYXR0cnNJblJ1bGVzLmNsZWFyKCk7Ci0gICAgc2libGluZ1J1bGVzLmNsZWFy
KCk7Ci0gICAgdW5jb21tb25BdHRyaWJ1dGVSdWxlcy5jbGVhcigpOwotICAgIHVzZXNGaXJzdExp
bmVSdWxlcyA9IGZhbHNlOwotICAgIHVzZXNCZWZvcmVBZnRlclJ1bGVzID0gZmFsc2U7Ci19Ci0K
LXZvaWQgU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXM6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9i
amVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0Ci17Ci0gICAgTWVtb3J5Q2xhc3NJbmZv
IGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwot
ICAgIGluZm8uYWRkTWVtYmVyKGlkc0luUnVsZXMpOwotICAgIGluZm8uYWRkTWVtYmVyKGF0dHJz
SW5SdWxlcyk7Ci0gICAgaW5mby5hZGRNZW1iZXIoc2libGluZ1J1bGVzKTsKLSAgICBpbmZvLmFk
ZE1lbWJlcih1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzKTsKLX0KLQogc3RhdGljIFN0eWxlU2hlZXRD
b250ZW50cyogcGFyc2VVQVNoZWV0KGNvbnN0IFN0cmluZyYgc3RyKQogewogICAgIFN0eWxlU2hl
ZXRDb250ZW50cyogc2hlZXQgPSBTdHlsZVNoZWV0Q29udGVudHM6OmNyZWF0ZSgpLmxlYWtSZWYo
KTsgLy8gbGVhayB0aGUgc2hlZXQgb24gcHVycG9zZQpAQCAtMjQ3MiwzMzkgKzIzMjMsNiBAQCBi
b29sIFN0eWxlUmVzb2x2ZXI6OmRldGVybWluZVN0eWxlc2hlZXRTZWxlY3RvclNjb3BlcyhTdHls
ZVNoZWV0Q29udGVudHMqIHN0eWxlcwogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxl
SGFzaChjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCi17Ci0gICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBzZWxlY3Rvck5hbWVzcGFjZSA9IHNlbGVjdG9yLT50YWcoKS5uYW1lc3BhY2VVUkkoKTsK
LSAgICBpZiAoc2VsZWN0b3JOYW1lc3BhY2UgIT0gc3RhckF0b20gJiYgc2VsZWN0b3JOYW1lc3Bh
Y2UgIT0geGh0bWxOYW1lc3BhY2VVUkkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
c2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6Ok5vbmUpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIGlmIChzZWxlY3Rvci0+dGFnKCkgIT0gc3RhckF0b20pCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoU2VsZWN0b3JDaGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2Vs
ZWN0b3Ioc2VsZWN0b3IpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gc2VsZWN0
b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkIHx8IHNlbGVjdG9yLT5tX21hdGNoID09IENT
U1NlbGVjdG9yOjpDbGFzczsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNlbGVjdG9yTGlzdENv
bnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0
b3IpCi17Ci0gICAgQ1NTU2VsZWN0b3JMaXN0KiBzZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci0+c2Vs
ZWN0b3JMaXN0KCk7Ci0gICAgaWYgKCFzZWxlY3Rvckxpc3QpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBmb3IgKENTU1NlbGVjdG9yKiBzdWJTZWxlY3RvciA9IHNlbGVjdG9yTGlzdC0+Zmly
c3QoKTsgc3ViU2VsZWN0b3I7IHN1YlNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1
YlNlbGVjdG9yKSkgewotICAgICAgICBpZiAoc3ViU2VsZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0
b3IoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0NvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yQXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkKLXsKLSAgICAvLyBUaGVzZSBhcmUg
ZXhwbGljaXRseSB0ZXN0ZWQgZm9yIGVxdWFsaXR5IGluIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVu
dC4KLSAgICByZXR1cm4gYXR0cmlidXRlID09IHR5cGVBdHRyIHx8IGF0dHJpYnV0ZSA9PSByZWFk
b25seUF0dHI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBjb250YWluc1VuY29tbW9uQXR0cmli
dXRlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAgIGZvciAoOyBz
ZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7Ci0gICAgICAgIC8v
IEFsbG93IGNlcnRhaW4gY29tbW9uIGF0dHJpYnV0ZXMgKHVzZWQgaW4gdGhlIGRlZmF1bHQgc3R5
bGUpIGluIHRoZSBzZWxlY3RvcnMgdGhhdCBtYXRjaCB0aGUgY3VycmVudCBlbGVtZW50LgotICAg
ICAgICBpZiAoc2VsZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0b3IoKSAmJiAhaXNDb21tb25BdHRy
aWJ1dGVTZWxlY3RvckF0dHJpYnV0ZShzZWxlY3Rvci0+YXR0cmlidXRlKCkpKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChzZWxlY3Rvckxpc3RDb250YWluc1VuY29tbW9u
QXR0cmlidXRlU2VsZWN0b3Ioc2VsZWN0b3IpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIGlmIChzZWxlY3Rvci0+cmVsYXRpb24oKSAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0
b3IpIHsKLSAgICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yICg7IHNlbGVjdG9y
OyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKLSAgICAgICAgaWYgKHNlbGVj
dG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgaWYgKHNlbGVjdG9yTGlzdENvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3Rvcihz
ZWxlY3RvcikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1SdWxlRGF0YTo6UnVsZURhdGEoU3R5bGVSdWxlKiBydWxlLCB1bnNpZ25lZCBz
ZWxlY3RvckluZGV4LCB1bnNpZ25lZCBwb3NpdGlvbiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5
T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGluUmVnaW9uUnVsZSkK
LSAgICA6IG1fcnVsZShydWxlKQotICAgICwgbV9zZWxlY3RvckluZGV4KHNlbGVjdG9ySW5kZXgp
Ci0gICAgLCBtX3Bvc2l0aW9uKHBvc2l0aW9uKQotICAgICwgbV9zcGVjaWZpY2l0eShzZWxlY3Rv
cigpLT5zcGVjaWZpY2l0eSgpKQotICAgICwgbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY2Fu
VXNlRmFzdENoZWNrU2VsZWN0b3IgJiYgU2VsZWN0b3JDaGVja2VyOjppc0Zhc3RDaGVja2FibGVT
ZWxlY3RvcihzZWxlY3RvcigpKSkKLSAgICAsIG1faGFzTXVsdGlwYXJ0U2VsZWN0b3IoISFzZWxl
Y3RvcigpLT50YWdIaXN0b3J5KCkpCi0gICAgLCBtX2hhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hp
bmdIVE1MQmFzZWRPblJ1bGVIYXNoKGlzU2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhh
c2goc2VsZWN0b3IoKSkpCi0gICAgLCBtX2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3Rv
cihXZWJDb3JlOjpjb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3Ioc2VsZWN0b3IoKSkp
Ci0gICAgLCBtX2xpbmtNYXRjaFR5cGUoU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rTWF0
Y2hUeXBlKHNlbGVjdG9yKCkpKQotICAgICwgbV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKGhh
c0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pCi0gICAgLCBtX2lzSW5SZWdpb25SdWxlKGluUmVnaW9u
UnVsZSkKLXsKLSAgICBBU1NFUlQobV9wb3NpdGlvbiA9PSBwb3NpdGlvbik7Ci0gICAgQVNTRVJU
KG1fc2VsZWN0b3JJbmRleCA9PSBzZWxlY3RvckluZGV4KTsKLSAgICBTZWxlY3RvckNoZWNrZXI6
OmNvbGxlY3RJZGVudGlmaWVySGFzaGVzKHNlbGVjdG9yKCksIG1fZGVzY2VuZGFudFNlbGVjdG9y
SWRlbnRpZmllckhhc2hlcywgbWF4aW11bUlkZW50aWZpZXJDb3VudCk7Ci19Ci0KLXZvaWQgUnVs
ZURhdGE6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdElu
Zm8pIGNvbnN0Ci17Ci0gICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywg
dGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwotfQotCi1SdWxlU2V0OjpSdWxlU2V0KCkK
LSAgICA6IG1fcnVsZUNvdW50KDApCi0gICAgLCBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQodHJ1
ZSkKLXsKLX0KLQotc3RhdGljIHZvaWQgcmVwb3J0QXRvbVJ1bGVNYXAoTWVtb3J5Q2xhc3NJbmZv
KiBpbmZvLCBjb25zdCBSdWxlU2V0OjpBdG9tUnVsZU1hcCYgYXRvbWljUnVsZU1hcCkKLXsKLSAg
ICBpbmZvLT5hZGRNZW1iZXIoYXRvbWljUnVsZU1hcCk7Ci0gICAgZm9yIChSdWxlU2V0OjpBdG9t
UnVsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhdG9taWNSdWxlTWFwLmJlZ2luKCk7IGl0ICE9
IGF0b21pY1J1bGVNYXAuZW5kKCk7ICsraXQpCi0gICAgICAgIGluZm8tPmFkZE1lbWJlcigqaXQt
PnNlY29uZCk7Ci19Ci0KLXZvaWQgUnVsZVNldDo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2Jq
ZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKLXsKLSAgICBNZW1vcnlDbGFzc0luZm8g
aW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNTUyk7Ci0g
ICAgcmVwb3J0QXRvbVJ1bGVNYXAoJmluZm8sIG1faWRSdWxlcyk7Ci0gICAgcmVwb3J0QXRvbVJ1
bGVNYXAoJmluZm8sIG1fY2xhc3NSdWxlcyk7Ci0gICAgcmVwb3J0QXRvbVJ1bGVNYXAoJmluZm8s
IG1fdGFnUnVsZXMpOwotICAgIHJlcG9ydEF0b21SdWxlTWFwKCZpbmZvLCBtX3NoYWRvd1BzZXVk
b0VsZW1lbnRSdWxlcyk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9saW5rUHNldWRvQ2xhc3NSdWxl
cyk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9mb2N1c1BzZXVkb0NsYXNzUnVsZXMpOwotICAgIGlu
Zm8uYWRkTWVtYmVyKG1fdW5pdmVyc2FsUnVsZXMpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fcGFn
ZVJ1bGVzKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRz
KTsKLX0KLQotdm9pZCBSdWxlU2V0OjpSdWxlU2V0U2VsZWN0b3JQYWlyOjpyZXBvcnRNZW1vcnlV
c2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAotewotICAgIE1l
bW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlU
eXBlczo6Q1NTKTsKLSAgICBpbmZvLmFkZE1lbWJlcihydWxlU2V0KTsKLX0KLQotc3RhdGljIGlu
bGluZSB2b2lkIGNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3RvcihTdHlsZVJlc29sdmVyOjpGZWF0
dXJlcyYgZmVhdHVyZXMsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICBpZiAo
c2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkKQotICAgICAgICBmZWF0dXJlcy5p
ZHNJblJ1bGVzLmFkZChzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCkpOwotICAgIGlmIChzZWxlY3Rv
ci0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpKQotICAgICAgICBmZWF0dXJlcy5hdHRyc0luUnVsZXMu
YWRkKHNlbGVjdG9yLT5hdHRyaWJ1dGUoKS5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgIHN3aXRj
aCAoc2VsZWN0b3ItPnBzZXVkb1R5cGUoKSkgewotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0ZpcnN0TGluZToKLSAgICAgICAgZmVhdHVyZXMudXNlc0ZpcnN0TGluZVJ1bGVzID0gdHJ1ZTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQmVmb3JlOgotICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FmdGVyOgotICAgICAgICBmZWF0dXJlcy51c2VzQmVm
b3JlQWZ0ZXJSdWxlcyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgY29sbGVjdEZlYXR1cmVzRnJvbVJ1
bGVEYXRhKFN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVzJiBmZWF0dXJlcywgY29uc3QgUnVsZURhdGEm
IHJ1bGVEYXRhKQotewotICAgIGJvb2wgZm91bmRTaWJsaW5nU2VsZWN0b3IgPSBmYWxzZTsKLSAg
ICBmb3IgKENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHJ1bGVEYXRhLnNlbGVjdG9yKCk7IHNlbGVj
dG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKLSAgICAgICAgY29sbGVj
dEZlYXR1cmVzRnJvbVNlbGVjdG9yKGZlYXR1cmVzLCBzZWxlY3Rvcik7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoQ1NTU2VsZWN0b3JMaXN0KiBzZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci0+c2VsZWN0
b3JMaXN0KCkpIHsKLSAgICAgICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHN1YlNlbGVjdG9yID0g
c2VsZWN0b3JMaXN0LT5maXJzdCgpOyBzdWJTZWxlY3Rvcjsgc3ViU2VsZWN0b3IgPSBDU1NTZWxl
Y3Rvckxpc3Q6Om5leHQoc3ViU2VsZWN0b3IpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFmb3Vu
ZFNpYmxpbmdTZWxlY3RvciAmJiBzZWxlY3Rvci0+aXNTaWJsaW5nU2VsZWN0b3IoKSkKLSAgICAg
ICAgICAgICAgICAgICAgZm91bmRTaWJsaW5nU2VsZWN0b3IgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIGNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3RvcihmZWF0dXJlcywgc3ViU2VsZWN0b3IpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCFmb3VuZFNpYmxpbmdTZWxlY3RvciAm
JiBzZWxlY3Rvci0+aXNTaWJsaW5nU2VsZWN0b3IoKSkKLSAgICAgICAgICAgIGZvdW5kU2libGlu
Z1NlbGVjdG9yID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKGZvdW5kU2libGluZ1NlbGVjdG9yKQot
ICAgICAgICBmZWF0dXJlcy5zaWJsaW5nUnVsZXMuYXBwZW5kKFN0eWxlUmVzb2x2ZXI6OlJ1bGVG
ZWF0dXJlKHJ1bGVEYXRhLnJ1bGUoKSwgcnVsZURhdGEuc2VsZWN0b3JJbmRleCgpLCBydWxlRGF0
YS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkpKTsKLSAgICBpZiAocnVsZURhdGEuY29udGFp
bnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKCkpCi0gICAgICAgIGZlYXR1cmVzLnVuY29tbW9u
QXR0cmlidXRlUnVsZXMuYXBwZW5kKFN0eWxlUmVzb2x2ZXI6OlJ1bGVGZWF0dXJlKHJ1bGVEYXRh
LnJ1bGUoKSwgcnVsZURhdGEuc2VsZWN0b3JJbmRleCgpLCBydWxlRGF0YS5oYXNEb2N1bWVudFNl
Y3VyaXR5T3JpZ2luKCkpKTsKLX0KLSAgICAKLXZvaWQgUnVsZVNldDo6YWRkVG9SdWxlU2V0KEF0
b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwgY29uc3QgUnVsZURhdGEmIHJ1
bGVEYXRhKQotewotICAgIGlmICgha2V5KQotICAgICAgICByZXR1cm47Ci0gICAgT3duUHRyPFZl
Y3RvcjxSdWxlRGF0YT4gPiYgcnVsZXMgPSBtYXAuYWRkKGtleSwgbnVsbHB0cikuaXRlcmF0b3It
PnNlY29uZDsKLSAgICBpZiAoIXJ1bGVzKQotICAgICAgICBydWxlcyA9IGFkb3B0UHRyKG5ldyBW
ZWN0b3I8UnVsZURhdGE+KTsKLSAgICBydWxlcy0+YXBwZW5kKHJ1bGVEYXRhKTsKLX0KLQotdm9p
ZCBSdWxlU2V0OjphZGRSdWxlKFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRl
eCwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1Nl
bGVjdG9yLCBib29sIGluUmVnaW9uUnVsZSkKLXsKLSAgICBSdWxlRGF0YSBydWxlRGF0YShydWxl
LCBzZWxlY3RvckluZGV4LCBtX3J1bGVDb3VudCsrLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
LCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgaW5SZWdpb25SdWxlKTsKLSAgICBjb2xsZWN0RmVh
dHVyZXNGcm9tUnVsZURhdGEobV9mZWF0dXJlcywgcnVsZURhdGEpOwotCi0gICAgQ1NTU2VsZWN0
b3IqIHNlbGVjdG9yID0gcnVsZURhdGEuc2VsZWN0b3IoKTsKLQotICAgIGlmIChzZWxlY3Rvci0+
bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpIHsKLSAgICAgICAgYWRkVG9SdWxlU2V0KHNlbGVj
dG9yLT52YWx1ZSgpLmltcGwoKSwgbV9pZFJ1bGVzLCBydWxlRGF0YSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFz
cykgewotICAgICAgICBhZGRUb1J1bGVTZXQoc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpLCBtX2Ns
YXNzUnVsZXMsIHJ1bGVEYXRhKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoc2Vs
ZWN0b3ItPmlzVW5rbm93blBzZXVkb0VsZW1lbnQoKSkgewotICAgICAgICBhZGRUb1J1bGVTZXQo
c2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpLCBtX3NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcywgcnVs
ZURhdGEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChTZWxlY3RvckNoZWNrZXI6
OmlzQ29tbW9uUHNldWRvQ2xhc3NTZWxlY3RvcihzZWxlY3RvcikpIHsKLSAgICAgICAgc3dpdGNo
IChzZWxlY3Rvci0+cHNldWRvVHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0xpbms6Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQ6Ci0gICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FueUxpbms6Ci0gICAgICAgICAgICBtX2xpbmtQ
c2V1ZG9DbGFzc1J1bGVzLmFwcGVuZChydWxlRGF0YSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZvY3VzOgotICAgICAgICAgICAgbV9mb2N1
c1BzZXVkb0NsYXNzUnVsZXMuYXBwZW5kKHJ1bGVEYXRhKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBs
b2NhbE5hbWUgPSBzZWxlY3Rvci0+dGFnKCkubG9jYWxOYW1lKCk7Ci0gICAgaWYgKGxvY2FsTmFt
ZSAhPSBzdGFyQXRvbSkgewotICAgICAgICBhZGRUb1J1bGVTZXQobG9jYWxOYW1lLmltcGwoKSwg
bV90YWdSdWxlcywgcnVsZURhdGEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fdW5p
dmVyc2FsUnVsZXMuYXBwZW5kKHJ1bGVEYXRhKTsKLX0KLQotdm9pZCBSdWxlU2V0OjphZGRQYWdl
UnVsZShTdHlsZVJ1bGVQYWdlKiBydWxlKQotewotICAgIG1fcGFnZVJ1bGVzLmFwcGVuZChydWxl
KTsKLX0KLQotdm9pZCBSdWxlU2V0OjphZGRSZWdpb25SdWxlKFN0eWxlUnVsZVJlZ2lvbiogcmVn
aW9uUnVsZSwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKQotewotICAgIE93blB0cjxS
dWxlU2V0PiByZWdpb25SdWxlU2V0ID0gUnVsZVNldDo6Y3JlYXRlKCk7Ci0gICAgLy8gVGhlIHJl
Z2lvbiBydWxlIHNldCBzaG91bGQgdGFrZSBpbnRvIGFjY291bnQgdGhlIHBvc2l0aW9uIGluc2lk
ZSB0aGUgcGFyZW50IHJ1bGUgc2V0LgotICAgIC8vIE90aGVyd2lzZSwgdGhlIHJ1bGVzIGluc2lk
ZSByZWdpb24gYmxvY2sgbWlnaHQgYmUgaW5jb3JyZWN0bHkgcG9zaXRpb25lZCBiZWZvcmUgb3Ro
ZXIgc2ltaWxhciBydWxlcyBmcm9tCi0gICAgLy8gdGhlIHN0eWxlc2hlZXQgdGhhdCBjb250YWlu
cyB0aGUgcmVnaW9uIGJsb2NrLgotICAgIHJlZ2lvblJ1bGVTZXQtPm1fcnVsZUNvdW50ID0gbV9y
dWxlQ291bnQ7Ci0KLSAgICAvLyBDb2xsZWN0IHRoZSByZWdpb24gcnVsZXMgaW50byBhIHJ1bGUg
c2V0Ci0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBjaGlsZFJ1bGVz
ID0gcmVnaW9uUnVsZS0+Y2hpbGRSdWxlcygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjaGlsZFJ1bGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0eWxlUnVsZUJhc2UqIHJlZ2lv
blN0eWxpbmdSdWxlID0gY2hpbGRSdWxlc1tpXS5nZXQoKTsKLSAgICAgICAgaWYgKHJlZ2lvblN0
eWxpbmdSdWxlLT5pc1N0eWxlUnVsZSgpKQotICAgICAgICAgICAgcmVnaW9uUnVsZVNldC0+YWRk
U3R5bGVSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KHJlZ2lvblN0eWxpbmdSdWxlKSwgaGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgfQotICAgIC8vIFVwZGF0
ZSB0aGUgImdsb2JhbCIgcnVsZSBjb3VudCBzbyB0aGF0IHByb3BlciBvcmRlciBpcyBtYWludGFp
bmVkCi0gICAgbV9ydWxlQ291bnQgPSByZWdpb25SdWxlU2V0LT5tX3J1bGVDb3VudDsKLQotICAg
IG1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXBwZW5kKFJ1bGVTZXRTZWxlY3RvclBhaXIo
cmVnaW9uUnVsZS0+c2VsZWN0b3JMaXN0KCkuZmlyc3QoKSwgcmVnaW9uUnVsZVNldC5yZWxlYXNl
KCkpKTsKLX0KLQotdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29u
dGVudHMqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpdW0sIFN0eWxlUmVz
b2x2ZXIqIHJlc29sdmVyLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkKLXsKLSAgICBBU1NF
UlQoc2hlZXQpOwotICAgIAotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlSW1wb3J0
PiA+JiBpbXBvcnRSdWxlcyA9IHNoZWV0LT5pbXBvcnRSdWxlcygpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBpbXBvcnRSdWxlcy5zaXplKCk7ICsraSkgewotICAgICAgICBTdHlsZVJ1
bGVJbXBvcnQqIGltcG9ydFJ1bGUgPSBpbXBvcnRSdWxlc1tpXS5nZXQoKTsKLSAgICAgICAgaWYg
KGltcG9ydFJ1bGUtPnN0eWxlU2hlZXQoKSAmJiAoIWltcG9ydFJ1bGUtPm1lZGlhUXVlcmllcygp
IHx8IG1lZGl1bS5ldmFsKGltcG9ydFJ1bGUtPm1lZGlhUXVlcmllcygpLCByZXNvbHZlcikpKQot
ICAgICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXQoaW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpLCBt
ZWRpdW0sIHJlc29sdmVyLCBzY29wZSk7Ci0gICAgfQotICAgIGJvb2wgaGFzRG9jdW1lbnRTZWN1
cml0eU9yaWdpbiA9IHJlc29sdmVyICYmIHJlc29sdmVyLT5kb2N1bWVudCgpLT5zZWN1cml0eU9y
aWdpbigpLT5jYW5SZXF1ZXN0KHNoZWV0LT5iYXNlVVJMKCkpOwotCi0gICAgY29uc3QgVmVjdG9y
PFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBydWxlcyA9IHNoZWV0LT5jaGlsZFJ1bGVzKCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IFN0eWxlUnVsZUJhc2UqIHJ1bGUgPSBydWxlc1tpXS5nZXQoKTsKLQotICAgICAgICBBU1NFUlQo
IXJ1bGUtPmlzSW1wb3J0UnVsZSgpKTsKLSAgICAgICAgaWYgKHJ1bGUtPmlzU3R5bGVSdWxlKCkp
Ci0gICAgICAgICAgICBhZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4ocnVsZSks
IGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sICFzY29wZSk7Ci0gICAgICAgIGVsc2UgaWYgKHJ1
bGUtPmlzUGFnZVJ1bGUoKSkKLSAgICAgICAgICAgIGFkZFBhZ2VSdWxlKHN0YXRpY19jYXN0PFN0
eWxlUnVsZVBhZ2UqPihydWxlKSk7Ci0gICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzTWVkaWFSdWxl
KCkpIHsKLSAgICAgICAgICAgIFN0eWxlUnVsZU1lZGlhKiBtZWRpYVJ1bGUgPSBzdGF0aWNfY2Fz
dDxTdHlsZVJ1bGVNZWRpYSo+KHJ1bGUpOwotCi0gICAgICAgICAgICBpZiAoKCFtZWRpYVJ1bGUt
Pm1lZGlhUXVlcmllcygpIHx8IG1lZGl1bS5ldmFsKG1lZGlhUnVsZS0+bWVkaWFRdWVyaWVzKCks
IHJlc29sdmVyKSkpIHsKLSAgICAgICAgICAgICAgICAvLyBUcmF2ZXJzZSBjaGlsZCBlbGVtZW50
cyBvZiB0aGUgQG1lZGlhIHJ1bGUuCi0gICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFJlZlB0
cjxTdHlsZVJ1bGVCYXNlPiA+JiBjaGlsZFJ1bGVzID0gbWVkaWFSdWxlLT5jaGlsZFJ1bGVzKCk7
Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGNoaWxkUnVsZXMuc2l6
ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICAgICAgU3R5bGVSdWxlQmFzZSogY2hpbGRSdWxl
ID0gY2hpbGRSdWxlc1tqXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkUnVs
ZS0+aXNTdHlsZVJ1bGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUnVsZShz
dGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihjaGlsZFJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3Jp
Z2luLCAhc2NvcGUpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGlsZFJ1bGUtPmlz
UGFnZVJ1bGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFBhZ2VSdWxlKHN0YXRpY19j
YXN0PFN0eWxlUnVsZVBhZ2UqPihjaGlsZFJ1bGUpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoY2hpbGRSdWxlLT5pc0ZvbnRGYWNlUnVsZSgpICYmIHJlc29sdmVyKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBmb250IGZhY2UgdG8gb3VyIHNldC4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FKEJVRyA3MjQ2MSk6IFdlIGRvbid0IGFkZCBAZm9u
dC1mYWNlIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHlsZVJ1bGVGb250
RmFjZSogZm9udEZhY2VSdWxlID0gc3RhdGljX2Nhc3Q8U3R5bGVSdWxlRm9udEZhY2UqPihjaGls
ZFJ1bGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZXItPmZvbnRTZWxlY3Rvcigp
LT5hZGRGb250RmFjZVJ1bGUoZm9udEZhY2VSdWxlKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpOwotICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkUnVsZS0+aXNLZXlmcmFtZXNSdWxlKCkgJiYgcmVz
b2x2ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGlzIGtleWZyYW1lIHJ1
bGUgdG8gb3VyIHNldC4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FKEJVRyA3MjQ2
Mik6IFdlIGRvbid0IGFkZCBAa2V5ZnJhbWUgcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBm
b3IgdGhlIG1vbWVudC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY29wZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJlc29sdmVyLT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZUtleWZyYW1l
cyo+KGNoaWxkUnVsZSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fSAvLyBmb3IgcnVsZXMKLSAgICAgICAgICAgIH0gLy8gaWYgcnVsZXMKLSAgICAgICAgfSBlbHNl
IGlmIChydWxlLT5pc0ZvbnRGYWNlUnVsZSgpICYmIHJlc29sdmVyKSB7Ci0gICAgICAgICAgICAv
LyBBZGQgdGhpcyBmb250IGZhY2UgdG8gb3VyIHNldC4KLSAgICAgICAgICAgIC8vIEZJWE1FKEJV
RyA3MjQ2MSk6IFdlIGRvbid0IGFkZCBAZm9udC1mYWNlIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBz
aGVldHMgZm9yIHRoZSBtb21lbnQuCi0gICAgICAgICAgICBpZiAoc2NvcGUpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjb25zdCBTdHlsZVJ1bGVGb250RmFjZSogZm9u
dEZhY2VSdWxlID0gc3RhdGljX2Nhc3Q8U3R5bGVSdWxlRm9udEZhY2UqPihydWxlKTsKLSAgICAg
ICAgICAgIHJlc29sdmVyLT5mb250U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxlKGZvbnRGYWNl
UnVsZSk7Ci0gICAgICAgICAgICByZXNvbHZlci0+aW52YWxpZGF0ZU1hdGNoZWRQcm9wZXJ0aWVz
Q2FjaGUoKTsKLSAgICAgICAgfSBlbHNlIGlmIChydWxlLT5pc0tleWZyYW1lc1J1bGUoKSAmJiBy
ZXNvbHZlcikgewotICAgICAgICAgICAgLy8gRklYTUUgKEJVRyA3MjQ2Mik6IFdlIGRvbid0IGFk
ZCBAa2V5ZnJhbWUgcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4K
LSAgICAgICAgICAgIGlmIChzY29wZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIHJlc29sdmVyLT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZUtl
eWZyYW1lcyo+KHJ1bGUpKTsKLSAgICAgICAgfQotI2lmIEVOQUJMRShDU1NfUkVHSU9OUykKLSAg
ICAgICAgZWxzZSBpZiAocnVsZS0+aXNSZWdpb25SdWxlKCkgJiYgcmVzb2x2ZXIpIHsKLSAgICAg
ICAgICAgIC8vIEZJWE1FIChCVUcgNzI0NzIpOiBXZSBkb24ndCBhZGQgQC13ZWJraXQtcmVnaW9u
IHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCi0gICAgICAgICAg
ICBpZiAoc2NvcGUpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBhZGRS
ZWdpb25SdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZVJlZ2lvbio+KHJ1bGUpLCBoYXNEb2N1bWVu
dFNlY3VyaXR5T3JpZ2luKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotICAgIGlmIChtX2F1
dG9TaHJpbmtUb0ZpdEVuYWJsZWQpCi0gICAgICAgIHNocmlua1RvRml0KCk7Ci19Ci0KLXZvaWQg
UnVsZVNldDo6YWRkU3R5bGVSdWxlKFN0eWxlUnVsZSogcnVsZSwgYm9vbCBoYXNEb2N1bWVudFNl
Y3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGlzSW5SZWdp
b25SdWxlKQotewotICAgIGZvciAoc2l6ZV90IHNlbGVjdG9ySW5kZXggPSAwOyBzZWxlY3Rvcklu
ZGV4ICE9IG5vdEZvdW5kOyBzZWxlY3RvckluZGV4ID0gcnVsZS0+c2VsZWN0b3JMaXN0KCkuaW5k
ZXhPZk5leHRTZWxlY3RvckFmdGVyKHNlbGVjdG9ySW5kZXgpKQotICAgICAgICBhZGRSdWxlKHJ1
bGUsIHNlbGVjdG9ySW5kZXgsIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGNhblVzZUZhc3RD
aGVja1NlbGVjdG9yLCBpc0luUmVnaW9uUnVsZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBz
aHJpbmtNYXBWZWN0b3JzVG9GaXQoUnVsZVNldDo6QXRvbVJ1bGVNYXAmIG1hcCkKLXsKLSAgICBS
dWxlU2V0OjpBdG9tUnVsZU1hcDo6aXRlcmF0b3IgZW5kID0gbWFwLmVuZCgpOwotICAgIGZvciAo
UnVsZVNldDo6QXRvbVJ1bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+c2hyaW5rVG9GaXQoKTsKLX0KLQotdm9pZCBS
dWxlU2V0OjpzaHJpbmtUb0ZpdCgpCi17Ci0gICAgc2hyaW5rTWFwVmVjdG9yc1RvRml0KG1faWRS
dWxlcyk7Ci0gICAgc2hyaW5rTWFwVmVjdG9yc1RvRml0KG1fY2xhc3NSdWxlcyk7Ci0gICAgc2hy
aW5rTWFwVmVjdG9yc1RvRml0KG1fdGFnUnVsZXMpOwotICAgIHNocmlua01hcFZlY3RvcnNUb0Zp
dChtX3NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcyk7Ci0gICAgbV9saW5rUHNldWRvQ2xhc3NSdWxl
cy5zaHJpbmtUb0ZpdCgpOwotICAgIG1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzLnNocmlua1RvRml0
KCk7Ci0gICAgbV91bml2ZXJzYWxSdWxlcy5zaHJpbmtUb0ZpdCgpOwotICAgIG1fcGFnZVJ1bGVz
LnNocmlua1RvRml0KCk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8v
IHRoaXMgaXMgbW9zdGx5IGJvcmluZyBzdHVmZiBvbiBob3cgdG8gYXBwbHkgYSBjZXJ0YWluIHJ1
bGUgdG8gdGhlIHJlbmRlcnN0eWxlLi4uCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCmlu
ZGV4IGYzMmM3MTNiODFiMDhlMDA4ODI3NTlhOTcyMWNjMjYwNzdhMWIyMGEuLmFmYjdhNDg1NjJh
ZDc4ZmQyOWMwMjRhMzY3YjRlMjg2ZmZlYjMxNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2
ZXIuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkxpbmtIYXNoLmgiCiAjaW5jbHVkZSAi
TWVkaWFRdWVyeUV4cC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiUnVs
ZUZlYXR1cmUuaCIKICNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKICNpbmNsdWRlICJTdHls
ZUluaGVyaXRlZERhdGEuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtMjc0LDMxICsy
NzUsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7CiAKLSAg
ICBzdHJ1Y3QgUnVsZUZlYXR1cmUgewotICAgICAgICBSdWxlRmVhdHVyZShTdHlsZVJ1bGUqIHJ1
bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
bikKLSAgICAgICAgICAgIDogcnVsZShydWxlKQotICAgICAgICAgICAgLCBzZWxlY3RvckluZGV4
KHNlbGVjdG9ySW5kZXgpCi0gICAgICAgICAgICAsIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4o
aGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbikgCi0gICAgICAgIHsgCi0gICAgICAgIH0KLSAgICAg
ICAgU3R5bGVSdWxlKiBydWxlOwotICAgICAgICB1bnNpZ25lZCBzZWxlY3RvckluZGV4OwotICAg
ICAgICBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW47Ci0gICAgfTsKLSAgICBzdHJ1Y3Qg
RmVhdHVyZXMgewotICAgICAgICBGZWF0dXJlcygpOwotICAgICAgICB+RmVhdHVyZXMoKTsKLSAg
ICAgICAgdm9pZCBhZGQoY29uc3QgU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXMmKTsKLSAgICAgICAg
dm9pZCBjbGVhcigpOwotICAgICAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVj
dEluZm8qKSBjb25zdDsKLSAgICAgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4gaWRzSW5S
dWxlczsKLSAgICAgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4gYXR0cnNJblJ1bGVzOwot
ICAgICAgICBWZWN0b3I8UnVsZUZlYXR1cmU+IHNpYmxpbmdSdWxlczsKLSAgICAgICAgVmVjdG9y
PFJ1bGVGZWF0dXJlPiB1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzOwotICAgICAgICBib29sIHVzZXNG
aXJzdExpbmVSdWxlczsKLSAgICAgICAgYm9vbCB1c2VzQmVmb3JlQWZ0ZXJSdWxlczsKLSAgICB9
OwotCiBwcml2YXRlOgogICAgIC8vIFRoaXMgZnVuY3Rpb24gZml4ZXMgdXAgdGhlIGRlZmF1bHQg
Zm9udCBzaXplIGlmIGl0IGRldGVjdHMgdGhhdCB0aGUgY3VycmVudCBnZW5lcmljIGZvbnQgZmFt
aWx5IGhhcyBjaGFuZ2VkLiAtZHdoCiAgICAgdm9pZCBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFu
Z2UoUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwpAQCAtMzk1LDcgKzM3
MSw3IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fYXV0aG9yU3R5bGU7CiAgICAg
T3duUHRyPFJ1bGVTZXQ+IG1fdXNlclN0eWxlOwogCi0gICAgRmVhdHVyZXMgbV9mZWF0dXJlczsK
KyAgICBSdWxlRmVhdHVyZVNldCBtX2ZlYXR1cmVzOwogICAgIE93blB0cjxSdWxlU2V0PiBtX3Np
YmxpbmdSdWxlU2V0OwogICAgIE93blB0cjxSdWxlU2V0PiBtX3VuY29tbW9uQXR0cmlidXRlUnVs
ZVNldDsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>