<?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>216962</bug_id>
          
          <creation_ts>2020-09-24 22:57:02 -0700</creation_ts>
          <short_desc>IndexedDB Index Corruption after upgrade from iOS 13 to iOS 14</short_desc>
          <delta_ts>2020-09-29 11:00:44 -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>New Bugs</component>
          <version>Safari 14</version>
          <rep_platform>iPhone / iPad</rep_platform>
          <op_sys>Other</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Critical</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darryl Pogue">dvpdiner2</reporter>
          <assigned_to name="Sihui Liu">sihui_liu</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jsbell</cc>
    
    <cc>niklasmerz</cc>
    
    <cc>sihui_liu</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tim.pruessing</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1691785</commentid>
    <comment_count>0</comment_count>
    <who name="Darryl Pogue">dvpdiner2</who>
    <bug_when>2020-09-24 22:57:02 -0700</bug_when>
    <thetext>r255318 introduced a change to how IDB Indexes are stored in the SQLite backing store. It moves from per-ObjectStore index IDs to per-Database index IDs, and attempts to perform a migration. This migration is run on iOS 14 when launching an app whose WKWebView IndexedDB databases were created on iOS 13.

There&apos;s a flaw in the migration process that can result in multiple indexes being updated to have the same ID, and corrupting the associated IndexRecords data. Once this happens, it appears to be impossible to recover the correct indexes.

A detailed walkthrough of how this happens to the IDB indices in our app can be found here: https://gist.github.com/dpogue/53d529310355697a0bfdf17644a17840

It only happens in some pretty specific situations, but it&apos;s a pretty serious problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691982</commentid>
    <comment_count>1</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-09-25 12:21:27 -0700</bug_when>
    <thetext>Thanks for reporting! This is pretty bad since the corrupted records cannot be recovered.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691984</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-25 12:21:35 -0700</bug_when>
    <thetext>&lt;rdar://problem/69587004&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692000</commentid>
    <comment_count>3</comment_count>
      <attachid>409726</attachid>
    <who name="Darryl Pogue">dvpdiner2</who>
    <bug_when>2020-09-25 13:09:38 -0700</bug_when>
    <thetext>Created attachment 409726
Testcase file

Here&apos;s a testcase file which can be used to demonstrate the problem.

I ran this in an iOS simulator on iOS 13.5 and opened it in Safari, then used `xcrun simctl upgrade` to upgrade the simulator to iOS 14.0 and opened it again. Looking at it with the Safari Inspector shows that one of the indexes is now missing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692604</commentid>
    <comment_count>4</comment_count>
      <attachid>409900</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-09-28 11:04:31 -0700</bug_when>
    <thetext>Created attachment 409900
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692673</commentid>
    <comment_count>5</comment_count>
      <attachid>409924</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-09-28 14:28:12 -0700</bug_when>
    <thetext>Created attachment 409924
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692681</commentid>
    <comment_count>6</comment_count>
      <attachid>409924</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-28 14:54:41 -0700</bug_when>
    <thetext>Comment on attachment 409924
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=409924&amp;action=review

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:242
&gt; +static String indexInfoTableSchema(const String&amp; tableName)

This argument should be ASCIILiteral or const char*, not const String&amp;. It’s wastefully inefficient to turn an ASCII literal into a String and then destroy that string.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692697</commentid>
    <comment_count>7</comment_count>
    <who name="Darryl Pogue">dvpdiner2</who>
    <bug_when>2020-09-28 15:45:43 -0700</bug_when>
    <thetext>I tested this patch in both Safari and in my WKWebView-based app on the iOS simulator, and the corruption was fixed in both cases.
Thanks Sihui for jumping on this! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692706</commentid>
    <comment_count>8</comment_count>
      <attachid>409928</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-09-28 16:28:21 -0700</bug_when>
    <thetext>Created attachment 409928
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692707</commentid>
    <comment_count>9</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-09-28 16:32:06 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #6)
&gt; Comment on attachment 409924 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=409924&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:242
&gt; &gt; +static String indexInfoTableSchema(const String&amp; tableName)
&gt; 
&gt; This argument should be ASCIILiteral or const char*, not const String&amp;. It’s
&gt; wastefully inefficient to turn an ASCII literal into a String and then
&gt; destroy that string.

Right, changed to use ASCIILiteral.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693016</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-29 11:00:43 -0700</bug_when>
    <thetext>Committed r267753: &lt;https://trac.webkit.org/changeset/267753&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 409928.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>409726</attachid>
            <date>2020-09-25 13:09:38 -0700</date>
            <delta_ts>2020-09-25 13:09:38 -0700</delta_ts>
            <desc>Testcase file</desc>
            <filename>idbtestfile.html</filename>
            <type>text/html</type>
            <size>1891</size>
            <attacher name="Darryl Pogue">dvpdiner2</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICAgIDxoZWFkPgogICAgICAgIDxtZXRh
IGNoYXJzZXQ9InV0Zi04Ij4KICAgICAgICA8dGl0bGU+SW5kZXhlZERCIFRlc3QgRmlsZTwvdGl0
bGU+CiAgICA8L2hlYWQ+CiAgICA8Ym9keT4KICAgICAgICA8b3V0cHV0IGlkPSJvdXRwdXQiIHN0
eWxlPSJmb250LWZhbWlseTogbW9ub3NwYWNlOyI+PC9vdXRwdXQ+CgogICAgICAgIDxzY3JpcHQ+
CgpmdW5jdGlvbiBzZXRSZXN1bHQoc3RyKSB7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
b3V0cHV0IikudGV4dENvbnRlbnQgPSBzdHI7Cn07Cgpjb25zdCByZXEgPSBpbmRleGVkREIub3Bl
bigiVGVzdERhdGFiYXNlIiwgMSk7CgpyZXEub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZl
bnQpIHsKICAgIHRyeSB7CiAgICAgICAgY29uc3QgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OwoK
ICAgICAgICBjb25zdCB1c2Vyc09TID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoInVzZXJzIiwgeyBr
ZXlQYXRoOiAiaWQiIH0pOwogICAgICAgIHVzZXJzT1MuY3JlYXRlSW5kZXgoIm5hbWUiLCAibmFt
ZSIsIHsgdW5pcXVlOiBmYWxzZSB9KTsKCiAgICAgICAgY29uc3QgY2Fyc09TID0gZGIuY3JlYXRl
T2JqZWN0U3RvcmUoImNhcnMiLCB7IGtleVBhdGg6ICJpZCIgfSk7CiAgICAgICAgY2Fyc09TLmNy
ZWF0ZUluZGV4KCJtYWtlIiwgIm1ha2UiLCB7IHVuaXF1ZTogZmFsc2UgfSk7CiAgICAgICAgY2Fy
c09TLmNyZWF0ZUluZGV4KCJtb2RlbCIsICJtb2RlbCIsIHsgdW5pcXVlOiBmYWxzZSB9KTsKCiAg
ICAgICAgY2Fyc09TLnRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbihldnQpIHsKICAg
ICAgICAgICAgY29uc3QgY2FycyA9IGRiLnRyYW5zYWN0aW9uKCJjYXJzIiwgInJlYWR3cml0ZSIp
Lm9iamVjdFN0b3JlKCJjYXJzIik7CgogICAgICAgICAgICBjYXJzLmFkZCh7CiAgICAgICAgICAg
ICAgICBpZDogMSwKICAgICAgICAgICAgICAgIG1ha2U6ICJUb3lvdGEiLAogICAgICAgICAgICAg
ICAgbW9kZWw6ICJDYW1yeSIsCiAgICAgICAgICAgICAgICB5ZWFyOiAyMDA4CiAgICAgICAgICAg
IH0pOwogICAgICAgIH07CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBzZXRSZXN1bHQoYEVS
Uk9SOiBEYXRhYmFzZSBVcGdyYWRlIEVycm9yOiAke2Vycn1gKTsKICAgIH0KfTsKCnJlcS5vbnN1
Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgewogICAgdHJ5IHsKICAgICAgICBjb25zdCBkYiA9IGV2
ZW50LnRhcmdldC5yZXN1bHQ7CiAgICAgICAgY29uc3QgbWFrZUlkeCA9IGRiLnRyYW5zYWN0aW9u
KCJjYXJzIiwgInJlYWRvbmx5Iikub2JqZWN0U3RvcmUoImNhcnMiKS5pbmRleCgibWFrZSIpOwoK
ICAgICAgICBjb25zdCBsb29rdXAgPSBtYWtlSWR4LmdldCgiVG95b3RhIik7CiAgICAgICAgbG9v
a3VwLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2dCkgewogICAgICAgICAgICBzZXRSZXN1bHQoYFNV
Q0NFU1M6IEZvdW5kIG9uZSBlbnRyeTogJHtKU09OLnN0cmluZ2lmeShsb29rdXAucmVzdWx0KX1g
KTsKICAgICAgICB9OwoKICAgICAgICBsb29rdXAub25lcnJvciA9IGZ1bmN0aW9uKGV2dCkgewog
ICAgICAgICAgICBzZXRSZXN1bHQoYEVSUk9SOiBJbmRleCBRdWVyeSBFcnJvcjogJHtsb29rdXAu
ZXJyb3J9YCk7CiAgICAgICAgfTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIHNldFJlc3Vs
dChgRVJST1I6IEluZGV4IFF1ZXJ5IEVycm9yOiAke2Vycn1gKTsKICAgIH0KfTsKCnJlcS5vbmVy
cm9yID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgIHNldFJlc3VsdChgRVJST1I6IERhdGFiYXNlIE9w
ZW4gRXJyb3I6ICR7cmVxLmVycm9yfWApOwp9CgogICAgICAgIDwvc2NyaXB0PgogICAgPC9ib2R5
Pgo8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409900</attachid>
            <date>2020-09-28 11:04:31 -0700</date>
            <delta_ts>2020-09-28 14:28:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216962-20200928110430.patch</filename>
            <type>text/plain</type>
            <size>42127</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NjY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzU0ZTAyMzlhMmMwNDM2
ODU0OTBhMDcwMDg3OWU4ZjdhYTQzNzEzOC4uNzAyNjAwNmE3NWE2MzVmMDJiMmZhYWQwZmM2MjY4
YjYyYmViMDhiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDIwLTA5LTI4ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQiBJbmRleCBD
b3JydXB0aW9uIGFmdGVyIHVwZ3JhZGUgZnJvbSBpT1MgMTMgdG8gaU9TIDE0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY5NjIKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY5NTg3MDA0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoZXJlIGlzIGFuIGltcGxlbWVudGF0aW9uIGVycm9yIGluIHIyNTUz
MTgsIHdoaWNoIHVwZGF0ZWQgaW5kZXggSUQgaW4gZGF0YWJhc2UgSW5kZXhJbmZvIGFuZCBJbmRl
eFJlY29yZHMgCisgICAgICAgIHRhYmxlczogaXQgbWFkZSBjaGFuZ2VzIHRvIG9yaWdpbmFsIHRh
YmxlIHdoaWxlIGl0ZXJhdGluZyByZWNvcmRzIG9mIGl0LiBUaGlzIG1lYW5zIG1vZGlmaWVkIHJl
Y29yZHMgY2FuCisgICAgICAgIGJlIG1vZGlmaWVkIGFnYWluLCB3aGljaCBsZWFkcyB0byB0aGF0
IHR3byBpbmRpY2VzIGhhdmUgdGhlIHNhbWUgaW5kZXggSUQuIEFzIGluZGV4IElEIGlzIHN1cHBv
c2VkIHRvIGJlIHVuaXF1ZSwKKyAgICAgICAgc29tZSBpbmRpY2VzIGFuZCBpbmRleCByZWNvcmRz
IGNhbm5vdCBiZSBwb3B1bGF0ZWQgYW5kIGNsaWVudHMgd2lsbCBmaW5kIHNvbWUgaW5kaWNlcyBh
cmUgbWlzc2luZy4KKworICAgICAgICBUbyBmaXggdGhpcywgd2UgbmVlZCB0byBjaGFuZ2UgdGhl
IGltcGxlbWVudGF0aW9uIG9mIElEIHVwZGF0ZSBhbmQgZGVhbCB3aXRoIGFscmVhZHkgY29ycnVw
dGVkIHRhYmxlcy4gRm9yIGluZGV4CisgICAgICAgIElEIHVwZGF0ZSwgbm93IHdlIGNyZWF0ZSBh
IHRlbXBvcmFyeSB0YWJsZSBmb3Igc3RvcmluZyB0aGUgdXBkYXRlZCByZWNvcmRzLCBhbmQgcmVw
bGFjZSB0aGUgb3JpZ2luYWwgdGFibGUgd2l0aCAKKyAgICAgICAgdGVtcG9yYXJ5IHRhYmxlIGF0
IHRoZSBlbmQgb2YgaXRlcmF0aW9uLiBGb3IgdGhlIGNvcnJ1cHRpb24gaXNzdWUsIHdlIGNoZWNr
IGlmIEluZGV4SW5mbyB0YWJsZSBoYXMgZHVwbGljYXRlIAorICAgICAgICBpbmRleCBJRHMuIElm
IGl0IGhhcywgd2UgdHJ5IHJlY292ZXJpbmcgSW5kZXhJbmZvIGFuZCBJbmRleFJlY29yZHMgdGFi
bGUgYnkgcmVtb3ZpbmcgcmVjb3JkcyB3aXRoIGR1cGxpY2F0ZSAKKyAgICAgICAgaW5kZXggSURz
LCBhc3NpZ25pbmcgbmV3IElEcyB0byBkdXBsaWNhdGUgaW5kaWNlcywgYW5kIGFkZGluZyByZWNv
cmRzIHdpdGggdXBkYXRlZCBpbmRleCBJRHMuCisKKyAgICAgICAgQVBJIHRlc3RzOiBJbmRleGVk
REIuSW5kZXhVcGdyYWRlVG9WMldpdGhNdWx0aXBsZUluZGljZXMKKyAgICAgICAgICAgICAgICAg
ICBJbmRleGVkREIuSW5kZXhVcGdyYWRlVG9WMldpdGhNdWx0aXBsZUluZGljZXNIYXZlU2FtZUlE
CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0
b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6aW5kZXhJbmZvVGFibGVTY2hl
bWEpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbERhdGFiYXNlSW5mbyk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6bWlncmF0ZUluZGV4SW5mb1RhYmxl
Rm9ySURVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNr
aW5nU3RvcmU6Om1pZ3JhdGVJbmRleFJlY29yZHNUYWJsZUZvcklEVXBkYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZW1vdmVFeGlzdGlu
Z0luZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0
b3JlOjphZGRFeGlzdGluZ0luZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FM
aXRlSURCQmFja2luZ1N0b3JlOjpoYW5kbGVEdXBsaWNhdGVJbmRleElEcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5n
RGF0YWJhc2VJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFj
a2luZ1N0b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6dXBkYXRlT25lSW5kZXhGb3JBZGRSZWNvcmQpOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaDoKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZvLmg6CisgICAgICAg
IChXZWJDb3JlOjpJREJJbmRleEluZm86OnNldElkZW50aWZpZXIpOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmplY3RTdG9yZUluZm8uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmVJbmZvOjphZGRFeGlzdGluZ0luZGV4KToKKwogMjAyMC0wOS0y
NyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQu
IENhbGwgc2hvd0xheW91dFRyZWUgb25seSB3aGVuIHRyZWVzIGFyZSBtaXNtYXRjaGluZy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJ
REJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggNGY5N2RlNzIxM2QwNjgxMTQ1MTY5
ZDMwYWM0NzFjMTg3NDFmNTNkYS4uMjEyNzc2OTFmNzQzNWVkYmQ5MDQyMjAxOWU1ZjQ3YjU1NjMx
NjkzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTIzOSw2ICsyMzks
MTEgQEAgc3RhdGljIFN0cmluZyBjcmVhdGVWMk9iamVjdFN0b3JlSW5mb1NjaGVtYShBU0NJSUxp
dGVyYWwgdGFibGVOYW1lKQogICAgIHJldHVybiBtYWtlU3RyaW5nKCJDUkVBVEUgVEFCTEUgIiwg
dGFibGVOYW1lLCAiIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIE5PVCBOVUxMIE9OIENPTkZMSUNU
IEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUwsIG5hbWUgVEVYVCBOT1QgTlVMTCBPTiBDT05G
TElDVCBGQUlMIFVOSVFVRSBPTiBDT05GTElDVCBGQUlMLCBrZXlQYXRoIEJMT0IgTk9UIE5VTEwg
T04gQ09ORkxJQ1QgRkFJTCwgYXV0b0luYyBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZB
SUwpIik7CiB9CiAKK3N0YXRpYyBTdHJpbmcgaW5kZXhJbmZvVGFibGVTY2hlbWEoY29uc3QgU3Ry
aW5nJiB0YWJsZU5hbWUpCit7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIkNSRUFURSBUQUJMRSAi
LCB0YWJsZU5hbWUsICIgKGlkIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgbmFt
ZSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIG9iamVjdFN0b3JlSUQgSU5URUdFUiBO
T1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCBrZXlQYXRoIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJ
Q1QgRkFJTCwgaXNVbmlxdWUgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCBtdWx0
aUVudHJ5IElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiKTsKK30KKwogU1FMaXRl
SURCQmFja2luZ1N0b3JlOjpTUUxpdGVJREJCYWNraW5nU3RvcmUoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0IFN0
cmluZyYgZGF0YWJhc2VSb290RGlyZWN0b3J5KQogICAgIDogbV9zZXNzaW9uSUQoc2Vzc2lvbklE
KQogICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCkBAIC02MDcsNyArNjEyLDcgQEAgc3Rk
Ojp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVh
dGVBbmRQb3B1bGF0ZUluaXRpYWwKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0g
ICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIEluZGV4SW5m
byAoaWQgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCBuYW1lIFRFWFQgTk9UIE5V
TEwgT04gQ09ORkxJQ1QgRkFJTCwgb2JqZWN0U3RvcmVJRCBJTlRFR0VSIE5PVCBOVUxMIE9OIENP
TkZMSUNUIEZBSUwsIGtleVBhdGggQkxPQiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCBpc1Vu
aXF1ZSBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIG11bHRpRW50cnkgSU5URUdF
UiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKTsiKSkgeworICAgIGlmICghbV9zcWxpdGVEQi0+
ZXhlY3V0ZUNvbW1hbmQoaW5kZXhJbmZvVGFibGVTY2hlbWEoIkluZGV4SW5mbyIpKSkgewogICAg
ICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgSW5kZXhJbmZvIHRhYmxlIGluIGRhdGFi
YXNlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0
RXJyb3JNc2coKSk7CiAgICAgICAgIGNsb3NlU1FMaXRlREIoKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CkBAIC03MjMsNiArNzI4LDI2MCBAQCBPcHRpb25hbDxJc1NjaGVtYVVwZ3JhZGVkPiBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkT2JqZWN0U3RvcmVJbmZvVGFibAogICAg
IHJldHVybiB7IElzU2NoZW1hVXBncmFkZWQ6OlllcyB9OwogfQogCitib29sIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6bWlncmF0ZUluZGV4SW5mb1RhYmxlRm9ySURVcGRhdGUoY29uc3QgSGFzaE1h
cDxzdGQ6OnBhaXI8dWludDY0X3QsIHVpbnQ2NF90PiwgdWludDY0X3Q+JiBpbmRleElETWFwKQor
eworICAgIFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSA9ICptX3NxbGl0ZURCOworICAgIFNRTGl0
ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKGRhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdp
bigpOworCisgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29tbWFuZChpbmRleEluZm9UYWJsZVNj
aGVtYSgiX1RlbXBfSW5kZXhJbmZvIikpKSB7CisgICAgICAgIExPR19FUlJPUigiRXJyb3IgY3Jl
YXRpbmcgX1RlbXBfSW5kZXhJbmZvIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIGRhdGFi
YXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQoZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG5hbWUsIG9iamVjdFN0b3JlSUQsIGtleVBhdGgsIGlz
VW5pcXVlLCBtdWx0aUVudHJ5IEZST00gSW5kZXhJbmZvOyJfcyk7CisgICAgICAgIGlmIChzdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJF
cnJvciBwcmVwYXJpbmcgc3RhdGVtZW50IHRvIGZldGNoIHJlY29yZHMgZnJvbSBJbmRleEluZm8g
dGFibGUgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAg
IGludCByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgICAgICB3aGlsZSAocmVzdWx0ID09
IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGlkID0gc3RhdGVtZW50LmdldENv
bHVtbkludDY0KDApOworICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZW1lbnQuZ2V0Q29s
dW1uVGV4dCgxKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50NjQoMik7CisgICAgICAgICAgICB1aW50NjRfdCBuZXdJRCA9IGluZGV4
SURNYXAuZ2V0KHsgb2JqZWN0U3RvcmVJRCwgaWQgfSk7CisgICAgICAgICAgICBWZWN0b3I8dWlu
dDhfdD4ga2V5UGF0aEJ1ZmZlcjsKKyAgICAgICAgICAgIHN0YXRlbWVudC5nZXRDb2x1bW5CbG9i
QXNWZWN0b3IoMywga2V5UGF0aEJ1ZmZlcik7CisgICAgICAgICAgICBib29sIHVuaXF1ZSA9IHN0
YXRlbWVudC5nZXRDb2x1bW5JbnQoNCk7CisgICAgICAgICAgICBib29sIG11bHRpRW50cnkgPSBz
dGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDUpOworCisgICAgICAgICAgICBhdXRvIHNxbCA9IGNhY2hl
ZFN0YXRlbWVudChTUUw6OkNyZWF0ZVRlbXBJbmRleEluZm8sICJJTlNFUlQgSU5UTyBfVGVtcF9J
bmRleEluZm8gVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/KTsiX3MpOworICAgICAgICAgICAgaWYg
KCFzcWwKKyAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgxLCBuZXdJRCkgIT0gU1FM
SVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3FsLT5iaW5kVGV4dCgyLCBuYW1lKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgzLCBvYmplY3RTdG9yZUlE
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRCbG9iKDQsIGtleVBh
dGhCdWZmZXIuZGF0YSgpLCBrZXlQYXRoQnVmZmVyLnNpemUoKSkgIT0gU1FMSVRFX09LCisgICAg
ICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50KDUsIHVuaXF1ZSkgIT0gU1FMSVRFX09LCisgICAg
ICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50KDYsIG11bHRpRW50cnkpICE9IFNRTElURV9PSwor
ICAgICAgICAgICAgICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAg
ICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBhZGRpbmcgaW5kZXggJyVzJyB0byBfVGVtcF9JbmRl
eEluZm8gdGFibGUgKCVpKSAtICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBkYXRhYmFzZS5sYXN0
RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50
LnN0ZXAoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUp
IHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZmV0Y2hpbmcgaW5kaWNlcyBmcm9tIElu
ZGV4SW5mbyB0YWJsZSAoJWkpIC0gJXMiLCAgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmICghZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkRST1AgVEFCTEUgSW5k
ZXhJbmZvIikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBkcm9wcGluZyBleGlzdGluZyBJ
bmRleEluZm8gdGFibGUgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlm
ICghZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkFMVEVSIFRBQkxFIF9UZW1wX0luZGV4SW5mbyBS
RU5BTUUgVE8gSW5kZXhJbmZvIikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJFcnJvciByZW5hbWlu
ZyBfVGVtcF9JbmRleEluZm8gdGFibGUgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCks
IGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6bWlncmF0ZUluZGV4UmVjb3Jkc1RhYmxlRm9ySURVcGRh
dGUoY29uc3QgSGFzaE1hcDxzdGQ6OnBhaXI8dWludDY0X3QsIHVpbnQ2NF90PiwgdWludDY0X3Q+
JiBpbmRleElETWFwKQoreworICAgIFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSA9ICptX3NxbGl0
ZURCOworICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKGRhdGFiYXNlKTsKKyAgICB0
cmFuc2FjdGlvbi5iZWdpbigpOworCisgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29tbWFuZCh2
M0luZGV4UmVjb3Jkc1RhYmxlU2NoZW1hKCJfVGVtcF9JbmRleFJlY29yZHMiKSkpIHsKKyAgICAg
ICAgTE9HX0VSUk9SKCJFcnJvciBjcmVhdGluZyBfVGVtcF9JbmRleFJlY29yZHMgdGFibGUgaW4g
ZGF0YWJhc2UgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHsKKyAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChkYXRhYmFzZSwgIlNFTEVDVCBpbmRleElELCBv
YmplY3RTdG9yZUlELCBrZXksIHZhbHVlLCBvYmplY3RTdG9yZVJlY29yZElEIEZST00gSW5kZXhS
ZWNvcmRzOyJfcyk7CisgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBwcmVwYXJpbmcgc3RhdGVtZW50IHRv
IGZldGNoIHJlY29yZHMgZnJvbSB0aGUgSW5kZXhSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIGRh
dGFiYXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpbnQgcmVzdWx0ID0gc3RhdGVt
ZW50LnN0ZXAoKTsKKyAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7CisgICAg
ICAgICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAg
ICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQo
MSk7CisgICAgICAgICAgICB1aW50NjRfdCBuZXdJRCA9IGluZGV4SURNYXAuZ2V0KHsgb2JqZWN0
U3RvcmVJRCwgaWQgfSk7CisgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4ga2V5QnVmZmVyOwor
ICAgICAgICAgICAgc3RhdGVtZW50LmdldENvbHVtbkJsb2JBc1ZlY3RvcigyLCBrZXlCdWZmZXIp
OworICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlQnVmZmVyOworICAgICAgICAgICAg
c3RhdGVtZW50LmdldENvbHVtbkJsb2JBc1ZlY3RvcigzLCB2YWx1ZUJ1ZmZlcik7CisgICAgICAg
ICAgICB1aW50NjRfdCByZWNvcmRJRCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCg0KTsKKwor
ICAgICAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpQdXRUZW1wSW5kZXhS
ZWNvcmQsICJJTlNFUlQgSU5UTyBfVGVtcF9JbmRleFJlY29yZHMgVkFMVUVTICg/LCA/LCBDQVNU
KD8gQVMgVEVYVCksIENBU1QoPyBBUyBURVhUKSwgPyk7Il9zKTsKKyAgICAgICAgICAgIGlmICgh
c3FsCisgICAgICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoMSwgbmV3SUQpICE9IFNRTElU
RV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDIsIG9iamVjdFN0b3JlSUQp
ICE9IFNRTElURV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZEJsb2IoMywga2V5QnVm
ZmVyLmRhdGEoKSwga2V5QnVmZmVyLnNpemUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAg
ICAgfHwgc3FsLT5iaW5kQmxvYig0LCB2YWx1ZUJ1ZmZlci5kYXRhKCksIHZhbHVlQnVmZmVyLnNp
emUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoNSwg
cmVjb3JkSUQpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC0+c3RlcCgpICE9
IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBhZGRpbmcg
aW5kZXggcmVjb3JkIHRvIF9UZW1wX0luZGV4UmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBkYXRh
YmFzZS5sYXN0RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVzdWx0ID0g
c3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FM
SVRFX0RPTkUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZmV0Y2hpbmcgaW5kZXgg
cmVjb3JkIGZyb20gZGF0YWJhc2Ugb24gZGlzayAoJWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0RXJy
b3IoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgi
RFJPUCBUQUJMRSBJbmRleFJlY29yZHMiKSkgeworICAgICAgICBMT0dfRVJST1IoIkVycm9yIGRy
b3BwaW5nIGV4aXN0aW5nIEluZGV4UmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBkYXRhYmFzZS5s
YXN0RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiQUxURVIgVEFC
TEUgX1RlbXBfSW5kZXhSZWNvcmRzIFJFTkFNRSBUTyBJbmRleFJlY29yZHMiKSkgeworICAgICAg
ICBMT0dfRVJST1IoIkVycm9yIHJlbmFtaW5nIHRlbXBvcmFyeSBJbmRleFJlY29yZHMgdGFibGUg
KCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHRyYW5zYWN0aW9uLmNvbW1p
dCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
cmVtb3ZlRXhpc3RpbmdJbmRleCh1aW50NjRfdCBpbmRleElEKQoreworICAgIFNRTGl0ZVRyYW5z
YWN0aW9uIHRyYW5zYWN0aW9uKCptX3NxbGl0ZURCKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigp
OworCisgICAgeworICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OlJlbW92
ZUluZGV4SW5mbywgIkRFTEVURSBGUk9NIEluZGV4SW5mbyBXSEVSRSBpZCA9ID87Il9zKTsKKyAg
ICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDEsIGluZGV4SUQp
ICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHJlbW92ZSBleGlzdGluZyBpbmRl
eCBmcm9tIEluZGV4SW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3Io
KSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0
YXRlbWVudChTUUw6OkRlbGV0ZUluZGV4UmVjb3JkcywgIkRFTEVURSBGUk9NIEluZGV4UmVjb3Jk
cyBXSEVSRSBpbmRleElEID0gPzsiX3MpOworICAgICAgICBpZiAoIXNxbAorICAgICAgICAgICAg
fHwgc3FsLT5iaW5kSW50NjQoMSwgaW5kZXhJRCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8
fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gcmVtb3ZlIGV4aXN0aW5nIGluZGV4IGZyb20gSW5kZXhSZWNvcmRzIHRhYmxlICgl
aSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmFkZEV4aXN0aW5nSW5kZXgoSURCT2JqZWN0U3RvcmVJbmZvJiBv
YmplY3RTdG9yZUluZm8sIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbykKK3sKKyAgICBTUUxpdGVU
cmFuc2FjdGlvbiB0cmFuc2FjdGlvbigqbV9zcWxpdGVEQik7CisgICAgdHJhbnNhY3Rpb24uYmVn
aW4oKTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGtleVBhdGhCbG9iID0gc2VyaWFsaXpl
SURCS2V5UGF0aChpbmZvLmtleVBhdGgoKSk7CisgICAgaWYgKCFrZXlQYXRoQmxvYikgeworICAg
ICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBzZXJpYWxpemUgSURCS2V5UGF0aCB0byBzYXZlIGlu
IGRhdGFiYXNlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB7CisgICAg
ICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6Q3JlYXRlSW5kZXhJbmZvLCAiSU5T
RVJUIElOVE8gSW5kZXhJbmZvIFZBTFVFUyAoPywgPywgPywgPywgPywgPyk7Il9zKTsKKyAgICAg
ICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDEsIGluZm8uaWRlbnRp
ZmllcigpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMiwgaW5m
by5uYW1lKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoMywg
aW5mby5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8
fCBzcWwtPmJpbmRCbG9iKDQsIGtleVBhdGhCbG9iLT5kYXRhKCksIGtleVBhdGhCbG9iLT5zaXpl
KCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50KDUsIGluZm8udW5p
cXVlKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50KDYsIGluZm8u
bXVsdGlFbnRyeSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC0+c3RlcCgpICE9
IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBhZGQgaW5k
ZXggJyVzJyB0byBJbmRleEluZm8gdGFibGUgKCVpKSAtICVzIiwgaW5mby5uYW1lKCkudXRmOCgp
LmRhdGEoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1z
ZygpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHsKKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBrZXks
IHZhbHVlLCByZWNvcmRJRCBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID87Iik7
CisgICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwg
c3FsLmJpbmRJbnQ2NCgxLCBpbmZvLm9iamVjdFN0b3JlSWRlbnRpZmllcigpKSAhPSBTUUxJVEVf
T0spIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50
IG9yIGJpbmQgdmFsdWVzICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3Nx
bGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKworICAgICAgICBpbnQgcmVzdWx0ID0gc3FsLnN0ZXAoKTsKKyAgICAgICAgd2hpbGUg
KHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4ga2V5
QnVmZmVyOworICAgICAgICAgICAgSURCS2V5RGF0YSBrZXlEYXRhOworICAgICAgICAgICAgc3Fs
LmdldENvbHVtbkJsb2JBc1ZlY3RvcigwLCBrZXlCdWZmZXIpOworICAgICAgICAgICAgaWYgKCFk
ZXNlcmlhbGl6ZUlEQktleURhdGEoa2V5QnVmZmVyLmRhdGEoKSwga2V5QnVmZmVyLnNpemUoKSwg
a2V5RGF0YSkpIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBkZXNlcmlh
bGl6ZSBrZXkgZGF0YSBmcm9tIGRhdGFiYXNlIHdoaWxlIGdldHRpbmcgYWxsIHJlY29yZHMiKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIFZlY3Rvcjx1aW50OF90PiB2YWx1ZUJ1ZmZlcjsKKyAgICAgICAgICAgIHNxbC5nZXRDb2x1
bW5CbG9iQXNWZWN0b3IoMSwgdmFsdWVCdWZmZXIpOworICAgICAgICAgICAgYXV0byB2YWx1ZSA9
IFRocmVhZFNhZmVEYXRhQnVmZmVyOjpjcmVhdGUoV1RGTW92ZSh2YWx1ZUJ1ZmZlcikpOworCisg
ICAgICAgICAgICB1aW50NjRfdCByZWNvcmRJRCA9IHNxbC5nZXRDb2x1bW5JbnQ2NCgyKTsKKyAg
ICAgICAgICAgIElEQkVycm9yIGVycm9yID0gdXBkYXRlT25lSW5kZXhGb3JBZGRSZWNvcmQob2Jq
ZWN0U3RvcmVJbmZvLCBpbmZvLCBrZXlEYXRhLCB2YWx1ZSwgcmVjb3JkSUQpOworICAgICAgICAg
ICAgaWYgKCFlcnJvci5pc051bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgICAgIHJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkVycm9y
IGZldGNoaW5nIG9iamVjdCByZWNvcmRzIGZyb20gUmVjb3JkcyB0YWJsZSBvbiBkaXNrIik7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0cmFuc2Fj
dGlvbi5jb21taXQoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6aGFuZGxlRHVwbGljYXRlSW5kZXhJRHMoY29uc3QgSGFzaE1hcDx1aW50NjRf
dCwgVmVjdG9yPElEQkluZGV4SW5mbz4+JiBpbmRleEluZm9NYXAsIElEQkRhdGFiYXNlSW5mbyYg
ZGF0YWJhc2VJbmZvKQoreworICAgIGZvciAoYXV0byYgW2luZGV4SUQsIGluZm9zXSA6IGluZGV4
SW5mb01hcCkgeworICAgICAgICBpZiAoaW5mb3Muc2l6ZSgpID09IDEpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBpZiAoIXJlbW92ZUV4aXN0aW5nSW5kZXgoaW5kZXhJRCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZm9yIChhdXRvIGluZm8gOiBpbmZv
cykgeworICAgICAgICAgICAgYXV0byBvYmplY3RTdG9yZUluZm8gPSBkYXRhYmFzZUluZm8uaW5m
b0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUoaW5mby5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSk7Cisg
ICAgICAgICAgICBBU1NFUlQob2JqZWN0U3RvcmVJbmZvKTsKKyAgICAgICAgICAgIG9iamVjdFN0
b3JlSW5mby0+ZGVsZXRlSW5kZXgoaW5mby5pZGVudGlmaWVyKCkpOworCisgICAgICAgICAgICAv
LyBBIG5ldyBpbmRleCB3aXRoIHRoZSBzYW1lIG5hbWUgbWF5IGJlIGFkZGVkLgorICAgICAgICAg
ICAgaWYgKG9iamVjdFN0b3JlSW5mby0+aGFzSW5kZXgoaW5mby5uYW1lKCkpKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpbmZvLnNldElkZW50aWZpZXIoZGF0YWJh
c2VJbmZvLmdlbmVyYXRlTmV4dEluZGV4SUQoKSk7CisgICAgICAgICAgICBpZiAoIWFkZEV4aXN0
aW5nSW5kZXgoKm9iamVjdFN0b3JlSW5mbywgaW5mbykpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgICAgICBvYmplY3RTdG9yZUluZm8tPmFkZEV4aXN0aW5nSW5kZXgo
aW5mbyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogc3RkOjp1
bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpleHRyYWN0
RXhpc3RpbmdEYXRhYmFzZUluZm8oKQogewogICAgIEFTU0VSVChtX3NxbGl0ZURCKTsKQEAgLTc5
Nyw2ICsxMDU2LDcgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURC
QmFja2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKIAogICAgIHVpbnQ2NF90IG1h
eEluZGV4SUQgPSAwOwogICAgIEhhc2hNYXA8c3RkOjpwYWlyPHVpbnQ2NF90LCB1aW50NjRfdD4s
IHVpbnQ2NF90PiBpbmRleElETWFwOworICAgIEhhc2hNYXA8dWludDY0X3QsIFZlY3RvcjxJREJJ
bmRleEluZm8+PiBpbmRleEluZm9NYXA7CiAgICAgewogICAgICAgICBTUUxpdGVTdGF0ZW1lbnQg
c3FsKCptX3NxbGl0ZURCLCAiU0VMRUNUIGlkLCBuYW1lLCBvYmplY3RTdG9yZUlELCBrZXlQYXRo
LCBpc1VuaXF1ZSwgbXVsdGlFbnRyeSBGUk9NIEluZGV4SW5mbzsiX3MpOwogICAgICAgICBpZiAo
c3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKQEAgLTgzNyw3ICsxMDk3LDE1IEBAIHN0ZDo6
dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFj
dEV4aXN0aW5nRGF0YWJhc2VJCiAgICAgICAgICAgICAgICAgaW5kZXhJRCA9IG1heEluZGV4SUQ7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG9iamVjdFN0b3JlLT5hZGRFeGlzdGluZ0lu
ZGV4KHsgaW5kZXhJRCwgb2JqZWN0U3RvcmVJRCwgaW5kZXhOYW1lLCBXVEZNb3ZlKGluZGV4S2V5
UGF0aC52YWx1ZSgpKSwgdW5pcXVlLCBtdWx0aUVudHJ5IH0pOworICAgICAgICAgICAgYXV0byBp
bmRleEluZm8gPSBJREJJbmRleEluZm8geyBpbmRleElELCBvYmplY3RTdG9yZUlELCBpbmRleE5h
bWUsIFdURk1vdmUoaW5kZXhLZXlQYXRoLnZhbHVlKCkpLCB1bmlxdWUsIG11bHRpRW50cnkgfTsK
KyAgICAgICAgICAgIGlmICghc2hvdWxkVXBkYXRlSW5kZXhJRCkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGluZGV4SW5mb3MgPSBpbmRleEluZm9NYXAuZW5zdXJlKGluZGV4SUQsIFtdKCkgLT4g
VmVjdG9yPElEQkluZGV4SW5mbz4geworICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB9Owor
ICAgICAgICAgICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbmRl
eEluZm9zLmFwcGVuZChpbmRleEluZm8pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBv
YmplY3RTdG9yZS0+YWRkRXhpc3RpbmdJbmRleChpbmRleEluZm8pOwogICAgICAgICAgICAgbWF4
SW5kZXhJRCA9IG1heEluZGV4SUQgPCBpbmRleElEID8gaW5kZXhJRCA6IG1heEluZGV4SUQ7CiAK
ICAgICAgICAgICAgIHJlc3VsdCA9IHNxbC5zdGVwKCk7CkBAIC04NDgsMzEgKzExMTYsMTQgQEAg
c3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpl
eHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICB9CiAgICAgICAgIGRhdGFiYXNlSW5mby0+c2V0TWF4SW5kZXhJRChtYXhJbmRleElEKTsK
KyAgICB9CiAKLSAgICAgICAgaWYgKCFzaG91bGRVcGRhdGVJbmRleElEKQotICAgICAgICAgICAg
cmV0dXJuIGRhdGFiYXNlSW5mbzsKLQotICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogaW5kZXhJ
RE1hcCkgewotICAgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlVQ
REFURSBJbmRleEluZm8gU0VUIGlkID0gPyBXSEVSRSBpZCA9ID8gQU5EIG9iamVjdFN0b3JlSUQg
PSA/OyJfcyk7Ci0gICAgICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAg
ICAgICAgICAgICAgICB8fCBzcWwuYmluZEludDY0KDEsIGVudHJ5LnZhbHVlKSAhPSBTUUxJVEVf
T0sKLSAgICAgICAgICAgICAgICB8fCBzcWwuYmluZEludDY0KDIsIGVudHJ5LmtleS5zZWNvbmQp
ICE9IFNRTElURV9PSwotICAgICAgICAgICAgICAgIHx8IHNxbC5iaW5kSW50NjQoMywgZW50cnku
a2V5LmZpcnN0KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgICAgICB8fCBzcWwuc3RlcCgpICE9
IFNRTElURV9ET05FKSB7Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gdXBk
YXRlIGlkIG9mIEluZGV4SW5mbyB0YWJsZSIpOwotICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgcmVjb3Jk
U3FsKCptX3NxbGl0ZURCLCAiVVBEQVRFIEluZGV4UmVjb3JkcyBTRVQgaW5kZXhJRCA9ID8gV0hF
UkUgaW5kZXhJRCA9ID8gQU5EIG9iamVjdFN0b3JlSUQgPSA/OyJfcyk7Ci0gICAgICAgICAgICBp
ZiAocmVjb3JkU3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgICAgICB8fCBy
ZWNvcmRTcWwuYmluZEludDY0KDEsIGVudHJ5LnZhbHVlKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
ICAgICAgICB8fCByZWNvcmRTcWwuYmluZEludDY0KDIsIGVudHJ5LmtleS5zZWNvbmQpICE9IFNR
TElURV9PSwotICAgICAgICAgICAgICAgIHx8IHJlY29yZFNxbC5iaW5kSW50NjQoMywgZW50cnku
a2V5LmZpcnN0KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgICAgICB8fCByZWNvcmRTcWwuc3Rl
cCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUg
dG8gdXBkYXRlIGluZGV4SUQgb2YgSW5kZXhSZWNvcmRzIHRhYmxlIik7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBpZiAoc2hv
dWxkVXBkYXRlSW5kZXhJRCkgeworICAgICAgICBpZiAoIW1pZ3JhdGVJbmRleEluZm9UYWJsZUZv
cklEVXBkYXRlKGluZGV4SURNYXApIHx8ICFtaWdyYXRlSW5kZXhSZWNvcmRzVGFibGVGb3JJRFVw
ZGF0ZShpbmRleElETWFwKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmICghaGFuZGxlRHVwbGljYXRlSW5kZXhJRHMoaW5kZXhJbmZvTWFwLCAq
ZGF0YWJhc2VJbmZvKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAg
IHJldHVybiBkYXRhYmFzZUluZm87CkBAIC0xMzgwLDcgKzE2MzEsOSBAQCBJREJFcnJvciBTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhYwogCiAgICAgICAgIEFTU0VSVChjdXJzb3ItPmN1cnJlbnRSZWNvcmRSb3dJRCgp
KTsKIAotICAgICAgICBJREJFcnJvciBlcnJvciA9IHVwZGF0ZU9uZUluZGV4Rm9yQWRkUmVjb3Jk
KGluZm8sIGtleSwgdmFsdWVCdWZmZXIsIGN1cnNvci0+Y3VycmVudFJlY29yZFJvd0lEKCkpOwor
ICAgICAgICBhdXRvKiBvYmplY3RTdG9yZUluZm8gPSBpbmZvRm9yT2JqZWN0U3RvcmUoaW5mby5v
YmplY3RTdG9yZUlkZW50aWZpZXIoKSk7CisgICAgICAgIEFTU0VSVChvYmplY3RTdG9yZUluZm8p
OworICAgICAgICBJREJFcnJvciBlcnJvciA9IHVwZGF0ZU9uZUluZGV4Rm9yQWRkUmVjb3JkKCpv
YmplY3RTdG9yZUluZm8sIGluZm8sIGtleSwgdmFsdWVCdWZmZXIsIGN1cnNvci0+Y3VycmVudFJl
Y29yZFJvd0lEKCkpOwogICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7CiAgICAgICAgICAg
ICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkRlbGV0ZUluZGV4SW5mbywgIkRFTEVU
RSBGUk9NIEluZGV4SW5mbyBXSEVSRSBpZCA9ID8gQU5EIG9iamVjdFN0b3JlSUQgPSA/OyJfcyk7
CiAgICAgICAgICAgICBpZiAoIXNxbApAQCAtMTg0Miw3ICsyMDk1LDcgQEAgSURCRXJyb3IgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVSYW5nZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWMKICAgICByZXR1cm4gZXJyb3I7CiB9CiAKLUlEQkVycm9yIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6dXBkYXRlT25lSW5kZXhGb3JBZGRSZWNvcmQoY29uc3QgSURCSW5kZXhJbmZv
JiBpbmZvLCBjb25zdCBJREJLZXlEYXRhJiBrZXksIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVy
JiB2YWx1ZSwgaW50NjRfdCByZWNvcmRJRCkKK0lEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6dXBkYXRlT25lSW5kZXhGb3JBZGRSZWNvcmQoSURCT2JqZWN0U3RvcmVJbmZvJiBvYmplY3RT
dG9yZUluZm8sIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgY29uc3QgSURCS2V5RGF0YSYga2V5
LCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWUsIGludDY0X3QgcmVjb3JkSUQpCiB7
CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcihtX3NlcmlhbGl6YXRpb25Db250ZXh0LT52bSgpKTsK
IApAQCAtMTg1MSw5ICsyMTA0LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1
cGRhdGVPbmVJbmRleEZvckFkZFJlY29yZChjb25zdCBJREJJbmRleEluZm8mIGkKICAgICAgICAg
cmV0dXJuIElEQkVycm9yIHsgfTsKIAogICAgIEluZGV4S2V5IGluZGV4S2V5OwotICAgIGF1dG8q
IG9iamVjdFN0b3JlSW5mbyA9IGluZm9Gb3JPYmplY3RTdG9yZShpbmZvLm9iamVjdFN0b3JlSWRl
bnRpZmllcigpKTsKLSAgICBBU1NFUlQob2JqZWN0U3RvcmVJbmZvKTsKLSAgICBnZW5lcmF0ZUlu
ZGV4S2V5Rm9yVmFsdWUobV9zZXJpYWxpemF0aW9uQ29udGV4dC0+ZXhlY1N0YXRlKCksIGluZm8s
IGpzVmFsdWUsIGluZGV4S2V5LCBvYmplY3RTdG9yZUluZm8tPmtleVBhdGgoKSwga2V5KTsKKyAg
ICBnZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUobV9zZXJpYWxpemF0aW9uQ29udGV4dC0+ZXhlY1N0
YXRlKCksIGluZm8sIGpzVmFsdWUsIGluZGV4S2V5LCBvYmplY3RTdG9yZUluZm8ua2V5UGF0aCgp
LCBrZXkpOwogCiAgICAgaWYgKGluZGV4S2V5LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gSURC
RXJyb3IgeyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDBlNDc3YmZiYWNl
MjVmZWVlNzIwMDNmNDg3YWUxZWVmNTZjNTE2ZWEuLmFkNTYxMzAyNjRhNWNjMzdjZWQ2M2I4ZGYx
MGMzODFiYjBhMjczMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKQEAgLTEyNyw3
ICsxMjcsNyBAQCBwcml2YXRlOgogICAgIElEQkVycm9yIHVuY2hlY2tlZFNldEtleUdlbmVyYXRv
clZhbHVlKGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgdWludDY0X3QgdmFsdWUpOwogCiAgICAgSURC
RXJyb3IgdXBkYXRlQWxsSW5kZXhlc0ZvckFkZFJlY29yZChjb25zdCBJREJPYmplY3RTdG9yZUlu
Zm8mLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgSW5kZXhJRFRvSW5kZXhLZXlNYXAmLCBpbnQ2
NF90IHJlY29yZElEKTsKLSAgICBJREJFcnJvciB1cGRhdGVPbmVJbmRleEZvckFkZFJlY29yZChj
b25zdCBJREJJbmRleEluZm8mLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgVGhyZWFkU2FmZURh
dGFCdWZmZXImIHZhbHVlLCBpbnQ2NF90IHJlY29yZElEKTsKKyAgICBJREJFcnJvciB1cGRhdGVP
bmVJbmRleEZvckFkZFJlY29yZChJREJPYmplY3RTdG9yZUluZm8mLCBjb25zdCBJREJJbmRleElu
Zm8mLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVl
LCBpbnQ2NF90IHJlY29yZElEKTsKICAgICBJREJFcnJvciB1bmNoZWNrZWRQdXRJbmRleEtleShj
b25zdCBJREJJbmRleEluZm8mLCBjb25zdCBJREJLZXlEYXRhJiBrZXlWYWx1ZSwgY29uc3QgSW5k
ZXhLZXkmLCBpbnQ2NF90IHJlY29yZElEKTsKICAgICBJREJFcnJvciB1bmNoZWNrZWRQdXRJbmRl
eFJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCwgY29uc3QgSURC
S2V5RGF0YSYga2V5VmFsdWUsIGNvbnN0IElEQktleURhdGEmIGluZGV4S2V5LCBpbnQ2NF90IHJl
Y29yZElEKTsKICAgICBJREJFcnJvciB1bmNoZWNrZWRIYXNJbmRleFJlY29yZChjb25zdCBJREJJ
bmRleEluZm8mLCBjb25zdCBJREJLZXlEYXRhJiwgYm9vbCYgaGFzUmVjb3JkKTsKQEAgLTE0MSw2
ICsxNDEsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNsb3NlU1FMaXRlREIoKTsKICAgICB2b2lk
IGNsb3NlKCkgZmluYWw7CiAKKyAgICBib29sIG1pZ3JhdGVJbmRleEluZm9UYWJsZUZvcklEVXBk
YXRlKGNvbnN0IEhhc2hNYXA8c3RkOjpwYWlyPHVpbnQ2NF90LCB1aW50NjRfdD4sIHVpbnQ2NF90
PiYgaW5kZXhJRE1hcCk7CisgICAgYm9vbCBtaWdyYXRlSW5kZXhSZWNvcmRzVGFibGVGb3JJRFVw
ZGF0ZShjb25zdCBIYXNoTWFwPHN0ZDo6cGFpcjx1aW50NjRfdCwgdWludDY0X3Q+LCB1aW50NjRf
dD4mIGluZGV4SURNYXApOworCisgICAgYm9vbCByZW1vdmVFeGlzdGluZ0luZGV4KHVpbnQ2NF90
IGluZGV4SUQpOworICAgIGJvb2wgYWRkRXhpc3RpbmdJbmRleChJREJPYmplY3RTdG9yZUluZm8m
LCBjb25zdCBJREJJbmRleEluZm8mKTsKKyAgICBib29sIGhhbmRsZUR1cGxpY2F0ZUluZGV4SURz
KGNvbnN0IEhhc2hNYXA8dWludDY0X3QsIFZlY3RvcjxJREJJbmRleEluZm8+PiYsIElEQkRhdGFi
YXNlSW5mbyYpOworCiAgICAgZW51bSBjbGFzcyBTUUwgOiBzaXplX3QgewogICAgICAgICBDcmVh
dGVPYmplY3RTdG9yZUluZm8sCiAgICAgICAgIENyZWF0ZU9iamVjdFN0b3JlS2V5R2VuZXJhdG9y
LApAQCAtMTU0LDkgKzE2MSwxMiBAQCBwcml2YXRlOgogICAgICAgICBDbGVhck9iamVjdFN0b3Jl
UmVjb3JkcywKICAgICAgICAgQ2xlYXJPYmplY3RTdG9yZUluZGV4UmVjb3JkcywKICAgICAgICAg
Q3JlYXRlSW5kZXhJbmZvLAorICAgICAgICBDcmVhdGVUZW1wSW5kZXhJbmZvLAogICAgICAgICBE
ZWxldGVJbmRleEluZm8sCisgICAgICAgIFJlbW92ZUluZGV4SW5mbywKICAgICAgICAgSGFzSW5k
ZXhSZWNvcmQsCiAgICAgICAgIFB1dEluZGV4UmVjb3JkLAorICAgICAgICBQdXRUZW1wSW5kZXhS
ZWNvcmQsCiAgICAgICAgIEdldEluZGV4UmVjb3JkRm9yT25lS2V5LAogICAgICAgICBEZWxldGVJ
bmRleFJlY29yZHMsCiAgICAgICAgIFJlbmFtZUluZGV4LApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkluZGV4SW5mby5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkluZGV4SW5mby5oCmluZGV4IDg1Mzdh
YzZmYzJkMTU4NDAyYjViMDEyOGQwNDkwZWU5ZTY5Yzk0OGYuLjI5MDdkOTJmYjE4OGQwZGJlOTYx
ODA2MjY4NDc3M2NkZTkwNzBjYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleEluZm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZvLmgKQEAgLTU5LDYgKzU5LDcgQEAgcHVi
bGljOgogICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIG5lZWQgZm9yIHRoaXMuCiAgICAgc3RhdGlj
IGNvbnN0IGludDY0X3QgSW52YWxpZElkID0gLTE7CiAKKyAgICB2b2lkIHNldElkZW50aWZpZXIo
dWludDY0X3QgaWRlbnRpZmllcikgeyBtX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOyB9CiBwcml2
YXRlOgogICAgIHVpbnQ2NF90IG1faWRlbnRpZmllciB7IDAgfTsKICAgICB1aW50NjRfdCBtX29i
amVjdFN0b3JlSWRlbnRpZmllciB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmplY3RTdG9yZUluZm8uY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5jcHAKaW5k
ZXggNGVhZDM4YmZiYzkxMTc4OWRiMjU3Njg5YzY1ZTAyOGFlZGZjYWM1Ny4uM2NhNTc1MmQyNjVm
N2U3NGZhZTVmMDM0ZjY5YTc0ZGM5MDE0MmE3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5j
cHAKQEAgLTUyLDcgKzUyLDggQEAgSURCSW5kZXhJbmZvIElEQk9iamVjdFN0b3JlSW5mbzo6Y3Jl
YXRlTmV3SW5kZXgodWludDY0X3QgaW5kZXhJRCwgY29uc3QgU3RyaW5nJgogCiB2b2lkIElEQk9i
amVjdFN0b3JlSW5mbzo6YWRkRXhpc3RpbmdJbmRleChjb25zdCBJREJJbmRleEluZm8mIGluZm8p
CiB7Ci0gICAgQVNTRVJUKCFtX2luZGV4TWFwLmNvbnRhaW5zKGluZm8uaWRlbnRpZmllcigpKSk7
CisgICAgaWYgKG1faW5kZXhNYXAuY29udGFpbnMoaW5mby5pZGVudGlmaWVyKCkpKQorICAgICAg
ICBMT0dfRVJST1IoIkFkZGluZyBhbiBpbmRleCAnJXMnIHdpdGggZXhpc3RpbmcgSW5kZXggSUQi
LCBpbmZvLm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIG1faW5kZXhNYXAuc2V0KGluZm8u
aWRlbnRpZmllcigpLCBpbmZvKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCA5ZTYwYzUzNmRiNzYzYmQ3ODdiOTAwZmM0YzY1MmQ0YmZlZjQ1
MWVhLi43Yzc1MjEwZDUyODk5YTIyMjdmYTAzZDc1ZTUwYWFhZWVjODE3OTcwIDEwMDY0NAotLS0g
YS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMjAtMDktMjggIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAg
SW5kZXhlZERCIEluZGV4IENvcnJ1cHRpb24gYWZ0ZXIgdXBncmFkZSBmcm9tIGlPUyAxMyB0byBp
T1MgMTQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
Njk2MgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjk1ODcwMDQ+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW06CisgICAgICAgIChydW5N
dWx0aXBsZUluZGljZXNUZXN0V2l0aERhdGFiYXNlKToKKyAgICAgICAgKFRFU1QpOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMldp
dGhNdWx0aXBsZUluZGljZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JbmRleFVwZ3JhZGVXaXRoTXVsdGlwbGVJbmRpY2VzLnNxbGl0ZTM6
IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhV
cGdyYWRlV2l0aE11bHRpcGxlSW5kaWNlc0hhdmVTYW1lSUQuc3FsaXRlMzogQWRkZWQuCisKIDIw
MjAtMDktMjcgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92
ZSBydW4td2Via2l0LXRlc3RzIGNvZGUgdGhhdCBzdHJpcHMgdHJhaWxpbmcgc3BhY2VzIHdoZW4g
Y29tcGFyaW5nIGV4cGVjdGVkLnR4dCBmaWxlcwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0
MWM0YTE3NTRlMDMxYTExYTAzMDE0MmIzZjE2MzhhNTc5M2YxYjBlLi5hZDJjZTA1MzJmMjY2ZTQ0
YjNkOTMyODcwZmNmMWUzMzgyNDYwOGVlIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODEw
LDYgKzgxMCw5IEBACiAJCTkzOTlCQTA0MjM3MTExNDAwMDgzOTJCRiAvKiBJbmRleGVkREJJblBh
Z2VDYWNoZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzOTlCQTAxMjM3MTEwQUUwMDgzOTJCRiAvKiBJbmRleGVkREJJblBhZ2VDYWNoZS5tbSAqLzsg
fTsKIAkJOTM5OUJBMDUyMzcxMTE0RjAwODM5MkJGIC8qIEluZGV4ZWREQkluUGFnZUNhY2hlLmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTM5OUJBMDIyMzcxMTBCRjAwODM5MkJGIC8qIEluZGV4ZWREQkluUGFnZUNhY2hlLmh0bWwgKi87
IH07CiAJCTkzOTlCQTA2MjM3MTExNEYwMDgzOTJCRiAvKiBJbmRleGVkREJOb3RJblBhZ2VDYWNo
ZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzOTlCQTAzMjM3MTEwQkYwMDgzOTJCRiAvKiBJbmRleGVkREJOb3RJblBhZ2VDYWNoZS5o
dG1sICovOyB9OworCQk5M0EyNzQ5RDI1MUVGOTA3MDBBMUI2RDQgLyogSURCSW5kZXhVcGdyYWRl
VG9WMldpdGhNdWx0aXBsZUluZGljZXMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0EyNzQ5QTI1MUVGNTJBMDBBMUI2RDQgLyogSURC
SW5kZXhVcGdyYWRlVG9WMldpdGhNdWx0aXBsZUluZGljZXMuaHRtbCAqLzsgfTsKKwkJOTNBMjc0
QTIyNTIxNjNFRTAwQTFCNkQ0IC8qIEluZGV4VXBncmFkZVdpdGhNdWx0aXBsZUluZGljZXMuc3Fs
aXRlMyBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5M0EyNzRBMTI1MjE2M0Q2MDBBMUI2RDQgLyogSW5kZXhVcGdyYWRlV2l0aE11bHRpcGxlSW5k
aWNlcy5zcWxpdGUzICovOyB9OworCQk5M0EyNzRBNTI1MjI0MURFMDBBMUI2RDQgLyogSW5kZXhV
cGdyYWRlV2l0aE11bHRpcGxlSW5kaWNlc0hhdmVTYW1lSUQuc3FsaXRlMyBpbiBDb3B5IFJlc291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0EyNzRBNDI1MjI0MUQw
MDBBMUI2RDQgLyogSW5kZXhVcGdyYWRlV2l0aE11bHRpcGxlSW5kaWNlc0hhdmVTYW1lSUQuc3Fs
aXRlMyAqLzsgfTsKIAkJOTNBRjRFQ0UxNTA2RjA2NDAwN0ZENTdFIC8qIE5ld0ZpcnN0VmlzdWFs
bHlOb25FbXB0eUxheW91dEZvckltYWdlc19CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBRjRFQ0QxNTA2RjA2NDAwN0ZENTdFIC8qIE5l
d0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckltYWdlc19CdW5kbGUuY3BwICovOyB9Owog
CQk5M0FGNEVEMTE1MDZGMTMwMDA3RkQ1N0UgLyogbG90cy1vZi1pbWFnZXMuaHRtbCBpbiBDb3B5
IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0FGNEVDRjE1
MDZGMTIzMDA3RkQ1N0UgLyogbG90cy1vZi1pbWFnZXMuaHRtbCAqLzsgfTsKIAkJOTNCQ0JDODMy
M0NDNkYyQTAwQ0EyMjIxIC8qIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCQ0JDODAyM0NDNkVF
ODAwQ0EyMjIxIC8qIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tICovOyB9OwpAQCAt
MTQyMSw2ICsxNDI0LDcgQEAKIAkJCQk1MTA0Nzc3MzFEMjk4REREMDA5NzQ3RUIgLyogSURCRGVs
ZXRlUmVjb3Zlcnkuc3FsaXRlMy1zaG0gaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJNTEwNDc3
NzQxRDI5OERERDAwOTc0N0VCIC8qIElEQkRlbGV0ZVJlY292ZXJ5LnNxbGl0ZTMtd2FsIGluIENv
cHkgUmVzb3VyY2VzICovLAogCQkJCTUxMTBGQ0YxMUUwMUNENjQwMDZGOEQwQiAvKiBJREJJbmRl
eFVwZ3JhZGVUb1YyLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCisJCQkJOTNBMjc0OUQyNTFF
RjkwNzAwQTFCNkQ0IC8qIElEQkluZGV4VXBncmFkZVRvVjJXaXRoTXVsdGlwbGVJbmRpY2VzLmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJOTM3QjU2OUUyM0NEMjNEQjAwMkFFNjQwIC8q
IElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGUuc3FsaXRlMyBpbiBDb3B5IFJlc291cmNlcyAqLywK
IAkJCQk5M0JDQkM4NDIzQ0M2RjQ0MDBDQTIyMjEgLyogSURCT2JqZWN0U3RvcmVJbmZvVXBncmFk
ZVRvVjIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQkxQ0M4MENFQTI0NzRGMjQ5MDA0
REM0ODkgLyogaWRlbXBvdGVudC1tb2RlLWF1dG9zaXppbmctb25seS1ob25vcnMtcGVyY2VudGFn
ZXMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKQEAgLTE0NTgsNiArMTQ2Miw4IEBACiAJCQkJ
Q0E5N0IzOTUyMTkzNjY3QTAwNDVERjZGIC8qIEluZGV4ZWREQlVzZXJEZWxldGUuaHRtbCBpbiBD
b3B5IFJlc291cmNlcyAqLywKIAkJCQk1MTEwRkNGOTFFMDFDRDhBMDA2RjhEMEIgLyogSW5kZXhV
cGdyYWRlLmJsb2IgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJNTExMEZDRjYxRTAxQ0Q4MzAw
NkY4RDBCIC8qIEluZGV4VXBncmFkZS5zcWxpdGUzIGluIENvcHkgUmVzb3VyY2VzICovLAorCQkJ
CTkzQTI3NEEyMjUyMTYzRUUwMEExQjZENCAvKiBJbmRleFVwZ3JhZGVXaXRoTXVsdGlwbGVJbmRp
Y2VzLnNxbGl0ZTMgaW4gQ29weSBSZXNvdXJjZXMgKi8sCisJCQkJOTNBMjc0QTUyNTIyNDFERTAw
QTFCNkQ0IC8qIEluZGV4VXBncmFkZVdpdGhNdWx0aXBsZUluZGljZXNIYXZlU2FtZUlELnNxbGl0
ZTMgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJMkVGRjA2Q0QxRDhBNDI5QTAwMDRCQjMwIC8q
IGlucHV0LWZpZWxkLWluLXNjcm9sbGFibGUtZG9jdW1lbnQuaHRtbCBpbiBDb3B5IFJlc291cmNl
cyAqLywKIAkJCQlDRTM1MjRGQTFCMTQ0Mzg5MDAyOEE3QzUgLyogaW5wdXQtZm9jdXMtYmx1ci5o
dG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCUNFNkQwRUUzMjQyNkI5MzIwMDJBRDkwMSAv
KiBpbnNlcnQtdGV4dC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLApAQCAtMjM5NCw2ICsyNDAw
LDkgQEAKIAkJOTM5QkE5MTYxNDEwMzQxMjAwMUEwMUJEIC8qIERldmljZVNjYWxlRmFjdG9yT25C
YWNrLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGV2aWNlU2Nh
bGVGYWN0b3JPbkJhY2subW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzOUJGRTM5
MThFNTU0ODkwMDg4MzI3NSAvKiBTdHJpbmdUcnVuY2F0b3IubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTdHJpbmdUcnVuY2F0b3IubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTkzQTI1ODk4MUY5MkZGMTUwMDNFNTEwQyAvKiBUZXh0Q29kZWMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dENvZGVjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOTNBMjc0OUEyNTFFRjUyQTAwQTFCNkQ0IC8qIElEQkluZGV4VXBncmFkZVRvVjJX
aXRoTXVsdGlwbGVJbmRpY2VzLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBJREJJ
bmRleFVwZ3JhZGVUb1YyV2l0aE11bHRpcGxlSW5kaWNlcy5odG1sOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5M0EyNzRBMTI1MjE2M0Q2MDBBMUI2RDQgLyogSW5kZXhVcGdyYWRlV2l0
aE11bHRpcGxlSW5kaWNlcy5zcWxpdGUzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gZmlsZTsgcGF0aCA9IEluZGV4VXBncmFkZVdpdGhNdWx0aXBsZUlu
ZGljZXMuc3FsaXRlMzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNBMjc0QTQyNTIy
NDFEMDAwQTFCNkQ0IC8qIEluZGV4VXBncmFkZVdpdGhNdWx0aXBsZUluZGljZXNIYXZlU2FtZUlE
LnNxbGl0ZTMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBmaWxlOyBwYXRoID0gSW5kZXhVcGdyYWRlV2l0aE11bHRpcGxlSW5kaWNlc0hhdmVTYW1lSUQu
c3FsaXRlMzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNBNDI3QTgxODBEOUIwNzAw
Q0QyNEQ3IC8qIFJlZlB0ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZWZQdHIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0E0MjdBQTE4MERB
MjY0MDBDRDI0RDcgLyogUmVmLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlZi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQTQyN0FDMTgwREE2
MEYwMENEMjRENyAvKiBNb3ZlT25seS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb3ZlT25seS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzczNyw2ICszNzQ2LDcgQEAKIAkJCQk1MTA0Nzc3
MDFEMjk4RDg1MDA5NzQ3RUIgLyogSURCRGVsZXRlUmVjb3Zlcnkuc3FsaXRlMy1zaG0gKi8sCiAJ
CQkJNTEwNDc3NzExRDI5OEQ4NTAwOTc0N0VCIC8qIElEQkRlbGV0ZVJlY292ZXJ5LnNxbGl0ZTMt
d2FsICovLAogCQkJCTUxMTBGQ0YwMUUwMUNENTMwMDZGOEQwQiAvKiBJREJJbmRleFVwZ3JhZGVU
b1YyLmh0bWwgKi8sCisJCQkJOTNBMjc0OUEyNTFFRjUyQTAwQTFCNkQ0IC8qIElEQkluZGV4VXBn
cmFkZVRvVjJXaXRoTXVsdGlwbGVJbmRpY2VzLmh0bWwgKi8sCiAJCQkJOTNCQ0JDODEyM0NDNkVG
NTAwQ0EyMjIxIC8qIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGUuc3FsaXRlMyAqLywKIAkJCQk5
M0JDQkM4MjIzQ0M2RUY1MDBDQTIyMjEgLyogSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIu
aHRtbCAqLywKIAkJCQlGNDFBQjk5OTFFRjQ2OTJDMDA4M0ZBMDggLyogaW1hZ2UtYW5kLWNvbnRl
bnRlZGl0YWJsZS5odG1sICovLApAQCAtMzc3Miw2ICszNzgyLDggQEAKIAkJCQlDQTk3QjM5MzIx
OTM2NjQ3MDA0NURGNkYgLyogSW5kZXhlZERCVXNlckRlbGV0ZS5odG1sICovLAogCQkJCTUxMTBG
Q0YyMUUwMUNENzcwMDZGOEQwQiAvKiBJbmRleFVwZ3JhZGUuYmxvYiAqLywKIAkJCQk1MTEwRkNG
MzFFMDFDRDc3MDA2RjhEMEIgLyogSW5kZXhVcGdyYWRlLnNxbGl0ZTMgKi8sCisJCQkJOTNBMjc0
QTEyNTIxNjNENjAwQTFCNkQ0IC8qIEluZGV4VXBncmFkZVdpdGhNdWx0aXBsZUluZGljZXMuc3Fs
aXRlMyAqLywKKwkJCQk5M0EyNzRBNDI1MjI0MUQwMDBBMUI2RDQgLyogSW5kZXhVcGdyYWRlV2l0
aE11bHRpcGxlSW5kaWNlc0hhdmVTYW1lSUQuc3FsaXRlMyAqLywKIAkJCQkyRUZGMDZDQzFEOEE0
MjkxMDAwNEJCMzAgLyogaW5wdXQtZmllbGQtaW4tc2Nyb2xsYWJsZS1kb2N1bWVudC5odG1sICov
LAogCQkJCTkzN0E2Qzg4MjQzNTdCRjMwMEMzQTZCMCAvKiBLaWxsV2ViUHJvY2Vzc1dpdGhPcGVu
Q29ubmVjdGlvbi0xLmh0bWwgKi8sCiAJCQkJOTM3QTZDODkyNDM1N0JGMzAwQzNBNkIwIC8qIEtp
bGxXZWJQcm9jZXNzV2l0aE9wZW5Db25uZWN0aW9uLTIuaHRtbCAqLywKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMi5t
bSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRl
VG9WMi5tbQppbmRleCA5NWNjYTBjZTI4MTZmZjFhNmE0NTVhZDBiZDJjOGE0YWE0ZjI3ZmVkLi40
MTZjYTFmOWFiNDk1YmQ4NzgxMTllMWQzNDUzZTc2NThiZjA3NTEyIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW0K
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3Jh
ZGVUb1YyLm1tCkBAIC04MywzICs4Myw0MiBAQCBURVNUKEluZGV4ZWREQiwgSW5kZXhVcGdyYWRl
VG9WMikKIAogICAgIEVYUEVDVF9XS19TVFJFUShAIk9iamVjdCBleHBlY3RlZCB0byBiZSBhIGJs
b2I6IFtvYmplY3QgQmxvYl0iLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0pOwogfQorCitzdGF0
aWMgdm9pZCBydW5NdWx0aXBsZUluZGljZXNUZXN0V2l0aERhdGFiYXNlKE5TU3RyaW5nKiBkYXRh
YmFzZU5hbWUpCit7CisgICAgUmV0YWluUHRyPElEQkluZGV4VXBncmFkZVRvVjJNZXNzYWdlSGFu
ZGxlcj4gaGFuZGxlciA9IGFkb3B0TlMoW1tJREJJbmRleFVwZ3JhZGVUb1YyTWVzc2FnZUhhbmRs
ZXIgYWxsb2NdIGluaXRdKTsKKyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4g
Y29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBp
bml0XSk7CisgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2Ny
aXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKKwor
ICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJv
Y2Vzc107CisKKyAgICBOU1VSTCAqdXJsID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JS
ZXNvdXJjZTpkYXRhYmFzZU5hbWUgd2l0aEV4dGVuc2lvbjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9y
eTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisKKyAgICBOU1N0cmluZyAqaGFzaCA9IFdl
YkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmNvbXB1dGVIYXNoRm9yRmlsZU5hbWUoImluZGV4LXVw
Z3JhZGUtdGVzdCIpOworICAgIE5TU3RyaW5nICpvcmlnaW5EaXJlY3RvcnkgPSBAIn4vTGlicmFy
eS9XZWJLaXQvY29tLmFwcGxlLldlYktpdC5UZXN0V2ViS2l0QVBJL1dlYnNpdGVEYXRhL0luZGV4
ZWREQi92MS9maWxlX18wLyI7CisgICAgTlNTdHJpbmcgKmRhdGFiYXNlRGlyZWN0b3J5ID0gW1tv
cmlnaW5EaXJlY3Rvcnkgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6aGFzaF0gc3RyaW5nQnlFeHBh
bmRpbmdUaWxkZUluUGF0aF07CisgICAgTlNVUkwgKnRhcmdldFVSTCA9IFtOU1VSTCBmaWxlVVJM
V2l0aFBhdGg6ZGF0YWJhc2VEaXJlY3RvcnldOworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0
TWFuYWdlcl0gcmVtb3ZlSXRlbUF0VVJMOnRhcmdldFVSTCBlcnJvcjpuaWxdOworICAgIFtbTlNG
aWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gY3JlYXRlRGlyZWN0b3J5QXRVUkw6dGFyZ2V0VVJM
IHdpdGhJbnRlcm1lZGlhdGVEaXJlY3RvcmllczpZRVMgYXR0cmlidXRlczpuaWwgZXJyb3I6bmls
XTsKKworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gY29weUl0ZW1BdFVSTDp1
cmwgdG9VUkw6W3RhcmdldFVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJJbmRleGVk
REIuc3FsaXRlMyJdIGVycm9yOm5pbF07CisKKyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3ZWJW
aWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0
KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKwor
ICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6
W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIklEQkluZGV4VXBncmFkZVRv
VjJXaXRoTXVsdGlwbGVJbmRpY2VzIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5
OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXV07CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6
cmVxdWVzdF07CisKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0
TWVzc2FnZSk7CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoQCJHZXQgb2JqZWN0OiB7XCJuYW1lXCI6
XCJhcHBsZVwiLFwiY29sb3JcIjpcInJlZFwifSIsIFtsYXN0U2NyaXB0TWVzc2FnZSBib2R5XSk7
Cit9CisKK1RFU1QoSW5kZXhlZERCLCBJbmRleFVwZ3JhZGVUb1YyV2l0aE11bHRpcGxlSW5kaWNl
cykKK3sKKyAgICBydW5NdWx0aXBsZUluZGljZXNUZXN0V2l0aERhdGFiYXNlKEAiSW5kZXhVcGdy
YWRlV2l0aE11bHRpcGxlSW5kaWNlcyIpOworfQorCitURVNUKEluZGV4ZWREQiwgSW5kZXhVcGdy
YWRlVG9WMldpdGhNdWx0aXBsZUluZGljZXNIYXZlU2FtZUlEKQoreworICAgIHJ1bk11bHRpcGxl
SW5kaWNlc1Rlc3RXaXRoRGF0YWJhc2UoQCJJbmRleFVwZ3JhZGVXaXRoTXVsdGlwbGVJbmRpY2Vz
SGF2ZVNhbWVJRCIpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyV2l0aE11bHRpcGxlSW5kaWNlcy5odG1sIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1Yy
V2l0aE11bHRpcGxlSW5kaWNlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFjMDE2MGRlNzk0MTM2Yzg1ODI1
MDkwM2FjOTY1MjQ3ZmVkYTdiOTUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjJXaXRoTXVsdGlwbGVJbmRp
Y2VzLmh0bWwKQEAgLTAsMCArMSw0MCBAQAorPHNjcmlwdD4KKwordmFyIG9wZW5SZXF1ZXN0ID0g
aW5kZXhlZERCLm9wZW4oJ2luZGV4LXVwZ3JhZGUtdGVzdCcpOworb3BlblJlcXVlc3Qub251cGdy
YWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VI
YW5kbGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgnVW5leHBlY3RlZCB1cGdyYWRlbmVlZGVk
Jyk7CisgICAgcmV0dXJuOworCisgICAgLy8gVGhlIGNvZGUgYmVsb3cgd2FzIHVzZWQgdG8gZ2Vu
ZXJhdGUgZGF0YWJhc2UgZmlsZSBJbmRleFVwZ3JhZGVXaXRoTXVsdGlwbGVJbmRpY2VzLnNxbGl0
ZTMuCisgICAgLy8gSXQgc2hvdWxkIG5vdCBiZSByZWFjaGVkIGR1cmluZyB1cGdyYWRlIHRlc3Qg
YmVjYXVzZSBkYXRhYmFzZSBmaWxlIGFscmVhZHkgZXhpc3RzLgorICAgIGxldCBvczEgPSBkYi5j
cmVhdGVPYmplY3RTdG9yZSgnY29sb3JzJyk7CisgICAgb3MxLmNyZWF0ZUluZGV4KCduYW1lJywg
J25hbWUnKTsKKyAgICBsZXQgb3MyID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ2ZydWl0cycpOwor
ICAgIG9zMi5jcmVhdGVJbmRleCgnY29sb3InLCAnY29sb3InKTsKKyAgICBvczIuY3JlYXRlSW5k
ZXgoJ25hbWUnLCAnbmFtZScpOworICAgIG9zMi5wdXQoeyBuYW1lOidhcHBsZScsIGNvbG9yOidy
ZWQnIH0sIDEpOworfQorCitvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkg
eworICAgIGxldCBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgdHJ5IHsKKyAgICAgICAg
bGV0IHRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oWydmcnVpdHMnXSk7CisgICAgICAgIGxl
dCBjb2xvckluZGV4ID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ2ZydWl0cycpLmluZGV4KCdj
b2xvcicpOworICAgICAgICBsZXQgZ2V0UmVxdWVzdCA9IGNvbG9ySW5kZXguZ2V0KCdyZWQnKTsK
KyAgICAgICAgZ2V0UmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZXZlbnQpID0+IHsKKyAgICAgICAgICAg
IHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRlc3RIYW5kbGVyLnBvc3RNZXNzYWdlKCJH
ZXQgb2JqZWN0OiAiICsgIEpTT04uc3RyaW5naWZ5KGV2ZW50LnRhcmdldC5yZXN1bHQpKTsKKyAg
ICAgICAgfQorICAgICAgICBnZXRSZXF1ZXN0Lm9uZXJyb3IgPSAoZXZlbnQpID0+IHsKKyAgICAg
ICAgICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRlc3RIYW5kbGVyLnBvc3RNZXNz
YWdlKCdVbmV4cGVjdGVkIGdldCBlcnJvcicpOworICAgICAgICB9CisgICAgfSBjYXRjaChlKSB7
CisgICAgICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRlc3RIYW5kbGVyLnBvc3RN
ZXNzYWdlKCJVbmV4cGVjdGVkIGVycm9yIC0gIiArIGUpOworICAgIH0KK30KKworb3BlblJlcXVl
c3Qub25lcnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgd2luZG93LndlYmtpdC5tZXNzYWdl
SGFuZGxlcnMudGVzdEhhbmRsZXIucG9zdE1lc3NhZ2UoIlVuZXhwZWN0ZWQgZGF0YWJhc2UgZXJy
b3ItICIgKyBlKTsKK30KKworPC9zY3JpcHQ+CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhVcGdyYWRlV2l0aE11bHRpcGxlSW5kaWNlcy5z
cWxpdGUzIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleFVwZ3Jh
ZGVXaXRoTXVsdGlwbGVJbmRpY2VzLnNxbGl0ZTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDBjMTNkNGUzOWJiNTFk
ZTEwZmQ5OTA3MjZmM2Q5ZTljOGQ4ZjkxNgpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgNjk2MzIK
emNtZUkqT0slZkwwS29CYFVCezArU28zdEZzQTV3VGt1KnQqWChpTU8pYUdIM2gydGNTIT1zbjV1
e1lHPCprUWUpCnpmSztpcnhiKylVPlBQNV9HbmUrI1lrVGdjUWZ+LX0zdFU+TW9uM0U/P1olRSVB
cTQ0dmkwIz9lYzsrez15VWZtUgp6dmEqfmlJRl8rZHdsX2AzXygrSz1zO1ljJDc+YzUoQF54Nmdj
MCN8NTFhPkNtcilZfElpbUoqN2IzWTlZSzJWfjsKemZ9KzJGPTt4dHRoZWlmIzE3OGVZOGEmcDJk
dGZCfFVIPz8lWCgkJmdndkw4MSFoOGV9S21kV2FTZkZ9ZDU1LVFPCno3UFdKWnhuOHNgVGxYKG5D
Q2ZJUXZSIUdKaHxYbWFHdWVjWm90YUd+akZ2Xmxjek9Nbm0yKzApTXBrbShOVCMhaQp6T05vcTtV
ZCRUbClsfHdAT2RFNUg+NUhsNFQtTFphbFN+PF8+RSFaaXFHZigydjZQeWJPSDNLTFpRSGc9antK
dGIKejZQb3hXOGpMTlI3RH1PJXg5KE4kNnktXkMmRD9nJS10PH5hRjR5OE1sWlJeYDl9Mn16bylp
ITNCflE5M0J1ZzlSCnpNbnJFWmFidmJJVWRacEF2bml1d1pkeWgqYVpNVUBhK29zcTJ7JmNqdyhj
KlAmWD5rKVlIX3coIWlDQ2VzYz5pOAp6PkxzVX0rZU4zNENePmQ3OzxjckxQOzdFaUppT3tQbjhs
YD1tdzBXSGdEciRAM3RKJFVHUmNMUiV5cnsoOyhGJnwKej9iZEdHX1M2JTA9WiQrY2JzSlcpbDxT
R3FseEBqdlAoQURvNkJtWXB2RXw4NWprcnkxP1FHa09MbCp9M3Z3NkkyCnpeUCVjPSNILU5TVlhz
MXleUng0JmpGfWI3K1okUlpgJiVsc1pDenRyTzc3OSpjZExjUXU3QjRvJGA7I3dwUDlKTwp6LT50
WjlTejMjPyVeMFlqM3dwYks/U2ZhXyo8eU05VnhlZU44aig7LTVnVzZPQHBaWkNZOV9UdXsmcCox
eV5VX2oKenVTeEhIUTBTRHZMXzhkZkJ+RXJ+Q1hJfSlvb3olVEBsYkRAIzJjSDA8KztwI0RiKjh3
cTFkVFlxRlFNPFd2cEQ7CnomVTtkUkgyNXpvZT9pTUJBeWZYVW13bCE7LS0lS242I0g7WVJGNDx4
TXtLIzVgQ3NaRXFGPkpGXlJ0JnMmbks9Swp6LXMwdn0tU2JjTE9uRUA2QDNZPXZjRk9SWTwzI09L
RWZnQ1lZZEtGZXJ7YyMwRWZsKlorWTNVdT4zR2AxdkJTJTAKenkrekl+cmMmKytTfm1FdTJUe0xW
YGB4SDFXQXpnRWJaRVB3TzFsd0o5cjkjJVZiZ3B6fDk9R2FucmRGcHR0NVpDCnpyQk5tNHl8UGJL
UzQxY19HOXFlVWQrcFI7KSZFZGlEck5VJWRhMEdoYWMjZklUfjdWQnc+TEVASGt8P3xoVTZZNwp6
XmRBLVpMcUdybDFRMCp+MFIjfDAwMDlJTEttZFVeUl5ZdG82UWctS1Q1cl58YDBUVGdqSHEmP3t1
XzU+QWxmRyoKej1HSW94YXdFQk52MX5eKjhNQ2VZLSFpeV5gYSp4RSRSN2QlMnExc30wdGdfMDAw
SWFnZkIqc3I5MXNDTEFWd29pCnoqOXpTNmVecjAxPSljUTEwcztzaWZCKnNyQWI8YkAycTFzfTB0
bWMkMGBJOW9BKk4tMlVSNz8kKFM1fkt3JmNIfQp6VmtzfGcyNiRIbEJWeD8kXldUdWV7KSNPWj05
P0N+PE52Q0F8TmtGNjByMktrRmdaZDEwUiN8MDAwOUlMS21ZKioKejVJfHJAVjY7ek8wdVd1VTBI
YEI8NXFTWSVfeGBeLXt4NSYmOXt+WGI1SV9JezFRMCp+MFIjfDAwMDlJSnVtSnU0CnoxNjtXajRG
TG9ZS21ZKio1SV9JezFRMCp+MGJqdHF8RFctSG5nYXB8QWI8YkAycTFzfTB0Z18wMDBJWUZmZDJv
JQp6dTN0KXIwMElhZ2ZCKnNyQWI8YkAycTF1ZkU4eVAkQUpEJjdeZTZoeWBYZD0zQWI8YkAycTFz
fTB0Z18wMDBJYWcKemZXWWUmSTJPPlJeIyR8WjtgJUtzPWQzdG8rZSomSWs4MFlhSzVzaGF4Pj5R
VlNhempRRjJ6U3haN2pZc0dpYDJLCnpnO0woU0hAJkBlKD5DK2d2fTBBQXFlNT1DVV4hLTlabzlM
Y0pOX1RnQTFWNThValA1Oz5uJE1QaDUhTnhBYjxiQAp6MnExc30wdGdfMDAwSkVaaiVtfVB7aH5u
TnM1VThmeThuTFBVVzttRGpkfGBSMHJpTUI4RUx4ITtFdztSYFU2Rk8KekVaK3pTQWI8YkAycTFz
fTB0Z18wMDBJYWdAUU1YeSlTeG5hSHlxeHV3K2x7WGVYQ2ZnSUFfbE1CR2p5TmY2SXowCno7UXt+
OEAoSk84dih9Yl9CUXY2Jk02TyZjK3k1O0ljbD0rflVudSV0QHtORTEwdGdfMDAwSWFnZkIqc3JB
YjxiQAp6MlN9aCM2R0J4ckVmVDVzfERQIU8zO29GZkRqLUVjMDA5SUxLbVkqKjVJX0l7MVEwO3J8
MD5ZMDRVNzhDMjVMa2IKemo/YH0mYVBSLXViWEMhUig2N281MHM7c2lmQipzckFiPGJAMnExc30w
dFp4Sk1HSzRMcUl4MTZSIWk8ZkA7aTZwCnp8MCt+MTtONlJWclErQ3koI0AjSXgre2MtanRxfn5F
Z0U7YF9xRXY9U3Y0R3FpUndHeXUtREQqbWd1VXRNbFkkMwp6RXtreUZjKk09Qm5+XyhOKGZhZk0m
bFVZb3tkcnA8bV96XnAxUTAqfjBSI3wwMDA5SUxLbWRXYVNzPFdsQX1uODgKakIrVD53Wip4Vkdj
TFdlWDAwOUlMS21ZKio1SV9JezFpQV5sZUUkQyo9c0xIZAoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAx
CgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRl
eFVwZ3JhZGVXaXRoTXVsdGlwbGVJbmRpY2VzSGF2ZVNhbWVJRC5zcWxpdGUzIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleFVwZ3JhZGVXaXRoTXVsdGlwbGVJbmRp
Y2VzSGF2ZVNhbWVJRC5zcWxpdGUzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmZTc2Nzg3MTM3NjYxNmZiMTgxNjUz
MGQ4OGQxOWRhODI4OWIzYjgKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDg2MDE2CnpjbWVJKS0q
NE4tMGxASilRbkV6SEhXbU08N0k7fGJ2X2BEaS1sfWR1KDZ2RWhUU18yUXVAbkREK3Iyb25NUiNm
eAp6JCkpSG5ETFNuM19PfTBeSz5INkFkK1BIQlk8dWJKX1BpRzhiNU5pXyhMUVZnd2opST1xR0hL
ZlFUSz1Qcjdoe20KekJhZTVWSk16UnwrUEdPUGR5Y2hOYk1NLW9eKXJ6WW5rS0dUbUptVyR1UE9C
ITMmWnxyT3VkYzxjQCpnSnNmKFlpCnp7QjFQKGp5TX5DUG5iVSpgKjhGUnF0aGRZWE1RPHlaRGV4
eiZZOWBOP29jQH43eXJufSNvc2dIQG9XQkhrTXhLXwp6MEQpNSFOV0xSNG9uckVYbnpZKSh5PnRw
P3lGNCtKekJ3O054bXQ0VyluQml1VUc9dG87TUljaD9Ye2lQb0x6NmoKenRHUTAweD53dUljMSlP
VDctdGpkPVZvUSZnPHllI3BVUyRrVFhSZUc9MGBCNGVlKEZxZFZYbSRaeHZRXmBJb0tzCnpuNj9H
MXdiZStKSENKb1BOcDhWdjh4MHJCV2c1PyRpUykmYl42LSpwP15LKUBvJWAzRXNeaSkhX3d+cH5E
JEsmPgp6KHNENnhNV1EtWnE7azJMem17TE9SQFhNSSl2YVJEJilDWV4+ZVhVbFd6KUw0UjQ3X290
QSgzZWBOO0oze0VneiQKek5gQXJHSiNieTg+WnZ1SG9LV1czKUtMMlIjY25rYiQ+bng3R0o1diM9
Vk9XVmBTYkdrJjYwPWFkJG1AO2pGaC1GCnoqX3RidFBSYGthUmtpT3IpQEpAP1d6ZndiUVlEMzRL
ZElodj8lJU16VXM9bj13ZEd6M20rTT5BXjZManFLV1d9UQp6c0NlYWspcFBxMUE5KypVSWZZSD94
RmohNnt5JkA5R2FafVIpWnRVKGlTKyF1e01+UFpycmk8VUYqKl5jPjxiO1MKejdiMkJAVzQmO0ZZ
NWYpSiNyIU1YdEtoZ2M/empFRThiPGVwYD5sVX1jVH1rRW8/UUt6Iy1iNTA5aTkhQzNjMk4rCnp0
d01HXipuNCUxNG84P2VCQ1I9PHlBenVIYVYyWVFgZnUxMyluYT5aR252Yzd5Oz87X21iU0FVNlY1
YSk0RiNNMQp6O3BMI1glYXoqQilwRXREdypyWXM1bkdlM3hnOW1AKV9VPVR7MmY9b1gxKHZKKXZU
VnBRfE9qSkNZdX5lPWcpV0IKeipSP1hie1kpIXBXRTFAQGw1SClMUjIhb0k1eylPfmlTKDBDJTB8
OEE2IXVhNnlrVChZNXZ3cEYoan4wZGV0bUt+CnpUKEVaZl4zN0NaaVMkb1o9USZtT2Bee2p0OUlp
Q25NTCtDSzw2LXQ1P0tYcDFBTUcla052Zl89SFJKXj1YcFdofgp6VSs5VlM+fTtmO1hrVEYlanp1
V2l2IShWT0t+RFNIenRgSGs/MChjKm83fkQ7dV40PHUkU3dFV0ZAQCE3SHNrJm0KellSZyEmI1Fw
U0ZuY0pHT28wZzV5ZlohTjVKIUF7TjVqMVA2ZUxsYUUhdHFGPkRsfV47KTdYJVNeel5obXs3dWtL
CnohJiQ9KkVtQTRSQ3YmUkVKLVU4M197UF8hKncoRk5NJTVONSZBJHJ1Jnd1fnwycTFzfTB0Z18w
MDBJYWdmQip2RAp6UyVLJGVUK1duKUNhaClfS1lKbWUwLUN4fnxGKForQVFle3VkdzsqO188YE04
clJKdjhtSG9GfXJ9U1NuNDZBdmkKemBJJTd2Mzx3fkEwMElhZ2ZCKnNyQWI8YkAycH0qWjAlbENr
NztXYllNJEohelgxKilUY2c7VHlORChPcDB0Z18wCnowMElhZ2ZCKnNyQWI8YkAtIUZrNSRzczlj
WEFFNXZ4QmFLX1VFenE1Y3pCYHpmfk1qWm9BSylFek9jbzxgbTNuOQp6OT9xakNwWUtzPnxONmdY
e3phR3t0MllKJjVJX0l7MVEwKn4wUiN8MDAwOUlMXypNbTs/WTh6RyMpQzVpJERiZ1cKemlMMjhD
UVd2K29vZ0w4cD1sfDdAe3hLa2MwMElhZ2ZCKnNyQWI8YkAycTF2SzAxSSZaS2Zza3MoR1dsWTBS
I3wwCnowMDlJTEttWSoqNUN7ZVFgflNLQVBqZiYzMFIjfDAwMDlJTEttWSoqNUl8dEMxdnZnNj9F
MG0yMnExc30wdGdfMAp6MDBJYWdmQipzcl95WWRAfDF0bWZ7fndxaW5qZmVEMHxFI2pmQipzckFi
PGJAMnExc30wdGtHdzArVFUpKFkkV28KelRpYmNmKzRWTk9uKEd2RCokR3tySCo+YVVAN1EoY21n
Q21Ud1E2PW8oYFUwczZJYm9LUFB0bGc/a3loZHp2fGowCnpYVkcpJi1oQD1rVTNXYVlxP1NFZSZj
RlUyR2R+ZEtLWkUxe1BydW0kdk5pK3xLbVkqKjVJX0l7MVEwKn4wUiN9fQp6QX4yfmglRmRHbHU/
Yy0lOXYlTE4kTSQra3BLVlJeUFlHel9gbj1JYDApWEhEPiFRcUwxUTAqfjBSI3wwMDA5SUwKektt
WSoqMjF0UEN7fEJmdERHQ0F6QWI8YkAycTFzfTB0Z18wMDBPLVFHIV5hTjNOWEBwSGV3TSMwMDlJ
TEttWSoqCno1SV9JezFRMDtyYHpTREt6OWpVcV9sNWIjdkcrfj9FQzIlbjJxMXN9MHRnXzAwMElh
Z2ZCKnZEdUUzVS1seGYtYwp6S3tCY0QpKyNrdSt1NSZfPil6OCh8M2hrZVl9MzJIQDckXztabl5x
dU5eUypuQnVCXjNPKmI8d1d0alBSTTxIZjUKel5yVzFValZEeUhSc1NMUjk7dDVuR3hVP0ZyQi1z
UVY/fCVYPXVNZTRyVkt4O2VuITVRalFTVi1IUy1IJHsjKDU8CnpBYjxiQDJxMXN9MHRnXzAwMElh
Z2ZXWTdnIzU3JGQpa2A7JHtgM0V1YEsyKWJxdXYtMEttWSoqNUlfSXsxUTAqfgp6MFIjfDBWMU5Z
VHh8RXV4PnhSKWh7e0xLPHwxdil4cGFOMTkxUTAqfjBSI3wwMDA5SUxLbVkqKjkoUkdFbV45U1UK
emVfVllTVEohJEB3fWttO15SMzRuaFZtblQwMElhZ2ZCKnNyQWI8YkAycTE3ODAjfiVTSVFLPyEm
cGp4Nl5gb2N4Cnp8MVAhUXJ3bWRlY18hNmRZd05jUV5wMEdOVXkocnkhSCpxJHdHX0RqenImUEsx
UTAqfjBSI3wwMDA5SUxLbVkqKgp6MjFjT3N7e0lLVXtMKnxkRnZYKUYycTFzfTB0Z18wMDBJYWdm
QipzckppWT9NYFo/TFcqRlpEJGI0SyV+ZiZUJTkKQ3p+Kyh3CgpsaXRlcmFsIDAKSGNtVj9kMDAw
MDEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409924</attachid>
            <date>2020-09-28 14:28:12 -0700</date>
            <delta_ts>2020-09-28 16:28:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216962-20200928142811.patch</filename>
            <type>text/plain</type>
            <size>42416</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NjY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzU0ZTAyMzlhMmMwNDM2
ODU0OTBhMDcwMDg3OWU4ZjdhYTQzNzEzOC4uNzAyNjAwNmE3NWE2MzVmMDJiMmZhYWQwZmM2MjY4
YjYyYmViMDhiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDIwLTA5LTI4ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQiBJbmRleCBD
b3JydXB0aW9uIGFmdGVyIHVwZ3JhZGUgZnJvbSBpT1MgMTMgdG8gaU9TIDE0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY5NjIKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY5NTg3MDA0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoZXJlIGlzIGFuIGltcGxlbWVudGF0aW9uIGVycm9yIGluIHIyNTUz
MTgsIHdoaWNoIHVwZGF0ZWQgaW5kZXggSUQgaW4gZGF0YWJhc2UgSW5kZXhJbmZvIGFuZCBJbmRl
eFJlY29yZHMgCisgICAgICAgIHRhYmxlczogaXQgbWFkZSBjaGFuZ2VzIHRvIG9yaWdpbmFsIHRh
YmxlIHdoaWxlIGl0ZXJhdGluZyByZWNvcmRzIG9mIGl0LiBUaGlzIG1lYW5zIG1vZGlmaWVkIHJl
Y29yZHMgY2FuCisgICAgICAgIGJlIG1vZGlmaWVkIGFnYWluLCB3aGljaCBsZWFkcyB0byB0aGF0
IHR3byBpbmRpY2VzIGhhdmUgdGhlIHNhbWUgaW5kZXggSUQuIEFzIGluZGV4IElEIGlzIHN1cHBv
c2VkIHRvIGJlIHVuaXF1ZSwKKyAgICAgICAgc29tZSBpbmRpY2VzIGFuZCBpbmRleCByZWNvcmRz
IGNhbm5vdCBiZSBwb3B1bGF0ZWQgYW5kIGNsaWVudHMgd2lsbCBmaW5kIHNvbWUgaW5kaWNlcyBh
cmUgbWlzc2luZy4KKworICAgICAgICBUbyBmaXggdGhpcywgd2UgbmVlZCB0byBjaGFuZ2UgdGhl
IGltcGxlbWVudGF0aW9uIG9mIElEIHVwZGF0ZSBhbmQgZGVhbCB3aXRoIGFscmVhZHkgY29ycnVw
dGVkIHRhYmxlcy4gRm9yIGluZGV4CisgICAgICAgIElEIHVwZGF0ZSwgbm93IHdlIGNyZWF0ZSBh
IHRlbXBvcmFyeSB0YWJsZSBmb3Igc3RvcmluZyB0aGUgdXBkYXRlZCByZWNvcmRzLCBhbmQgcmVw
bGFjZSB0aGUgb3JpZ2luYWwgdGFibGUgd2l0aCAKKyAgICAgICAgdGVtcG9yYXJ5IHRhYmxlIGF0
IHRoZSBlbmQgb2YgaXRlcmF0aW9uLiBGb3IgdGhlIGNvcnJ1cHRpb24gaXNzdWUsIHdlIGNoZWNr
IGlmIEluZGV4SW5mbyB0YWJsZSBoYXMgZHVwbGljYXRlIAorICAgICAgICBpbmRleCBJRHMuIElm
IGl0IGhhcywgd2UgdHJ5IHJlY292ZXJpbmcgSW5kZXhJbmZvIGFuZCBJbmRleFJlY29yZHMgdGFi
bGUgYnkgcmVtb3ZpbmcgcmVjb3JkcyB3aXRoIGR1cGxpY2F0ZSAKKyAgICAgICAgaW5kZXggSURz
LCBhc3NpZ25pbmcgbmV3IElEcyB0byBkdXBsaWNhdGUgaW5kaWNlcywgYW5kIGFkZGluZyByZWNv
cmRzIHdpdGggdXBkYXRlZCBpbmRleCBJRHMuCisKKyAgICAgICAgQVBJIHRlc3RzOiBJbmRleGVk
REIuSW5kZXhVcGdyYWRlVG9WMldpdGhNdWx0aXBsZUluZGljZXMKKyAgICAgICAgICAgICAgICAg
ICBJbmRleGVkREIuSW5kZXhVcGdyYWRlVG9WMldpdGhNdWx0aXBsZUluZGljZXNIYXZlU2FtZUlE
CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0
b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6aW5kZXhJbmZvVGFibGVTY2hl
bWEpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbERhdGFiYXNlSW5mbyk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6bWlncmF0ZUluZGV4SW5mb1RhYmxl
Rm9ySURVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNr
aW5nU3RvcmU6Om1pZ3JhdGVJbmRleFJlY29yZHNUYWJsZUZvcklEVXBkYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZW1vdmVFeGlzdGlu
Z0luZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0
b3JlOjphZGRFeGlzdGluZ0luZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FM
aXRlSURCQmFja2luZ1N0b3JlOjpoYW5kbGVEdXBsaWNhdGVJbmRleElEcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5n
RGF0YWJhc2VJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFj
a2luZ1N0b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6dXBkYXRlT25lSW5kZXhGb3JBZGRSZWNvcmQpOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaDoKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZvLmg6CisgICAgICAg
IChXZWJDb3JlOjpJREJJbmRleEluZm86OnNldElkZW50aWZpZXIpOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmplY3RTdG9yZUluZm8uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmVJbmZvOjphZGRFeGlzdGluZ0luZGV4KToKKwogMjAyMC0wOS0y
NyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQu
IENhbGwgc2hvd0xheW91dFRyZWUgb25seSB3aGVuIHRyZWVzIGFyZSBtaXNtYXRjaGluZy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJ
REJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggNGY5N2RlNzIxM2QwNjgxMTQ1MTY5
ZDMwYWM0NzFjMTg3NDFmNTNkYS4uZmRjODhhMmU1MDkyNjNkZjdjOGQ1ZjhiOWE2MDJjZDgzZWEy
NjlhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTIzOSw2ICsyMzks
MTEgQEAgc3RhdGljIFN0cmluZyBjcmVhdGVWMk9iamVjdFN0b3JlSW5mb1NjaGVtYShBU0NJSUxp
dGVyYWwgdGFibGVOYW1lKQogICAgIHJldHVybiBtYWtlU3RyaW5nKCJDUkVBVEUgVEFCTEUgIiwg
dGFibGVOYW1lLCAiIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIE5PVCBOVUxMIE9OIENPTkZMSUNU
IEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUwsIG5hbWUgVEVYVCBOT1QgTlVMTCBPTiBDT05G
TElDVCBGQUlMIFVOSVFVRSBPTiBDT05GTElDVCBGQUlMLCBrZXlQYXRoIEJMT0IgTk9UIE5VTEwg
T04gQ09ORkxJQ1QgRkFJTCwgYXV0b0luYyBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZB
SUwpIik7CiB9CiAKK3N0YXRpYyBTdHJpbmcgaW5kZXhJbmZvVGFibGVTY2hlbWEoY29uc3QgU3Ry
aW5nJiB0YWJsZU5hbWUpCit7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIkNSRUFURSBUQUJMRSAi
LCB0YWJsZU5hbWUsICIgKGlkIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgbmFt
ZSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIG9iamVjdFN0b3JlSUQgSU5URUdFUiBO
T1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCBrZXlQYXRoIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJ
Q1QgRkFJTCwgaXNVbmlxdWUgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCBtdWx0
aUVudHJ5IElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiKTsKK30KKwogU1FMaXRl
SURCQmFja2luZ1N0b3JlOjpTUUxpdGVJREJCYWNraW5nU3RvcmUoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0IFN0
cmluZyYgZGF0YWJhc2VSb290RGlyZWN0b3J5KQogICAgIDogbV9zZXNzaW9uSUQoc2Vzc2lvbklE
KQogICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCkBAIC02MDcsNyArNjEyLDcgQEAgc3Rk
Ojp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVh
dGVBbmRQb3B1bGF0ZUluaXRpYWwKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0g
ICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIEluZGV4SW5m
byAoaWQgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCBuYW1lIFRFWFQgTk9UIE5V
TEwgT04gQ09ORkxJQ1QgRkFJTCwgb2JqZWN0U3RvcmVJRCBJTlRFR0VSIE5PVCBOVUxMIE9OIENP
TkZMSUNUIEZBSUwsIGtleVBhdGggQkxPQiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCBpc1Vu
aXF1ZSBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIG11bHRpRW50cnkgSU5URUdF
UiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKTsiKSkgeworICAgIGlmICghbV9zcWxpdGVEQi0+
ZXhlY3V0ZUNvbW1hbmQoaW5kZXhJbmZvVGFibGVTY2hlbWEoIkluZGV4SW5mbyIpKSkgewogICAg
ICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgSW5kZXhJbmZvIHRhYmxlIGluIGRhdGFi
YXNlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0
RXJyb3JNc2coKSk7CiAgICAgICAgIGNsb3NlU1FMaXRlREIoKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CkBAIC03MjMsNiArNzI4LDI1OSBAQCBPcHRpb25hbDxJc1NjaGVtYVVwZ3JhZGVkPiBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkT2JqZWN0U3RvcmVJbmZvVGFibAogICAg
IHJldHVybiB7IElzU2NoZW1hVXBncmFkZWQ6OlllcyB9OwogfQogCitib29sIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6bWlncmF0ZUluZGV4SW5mb1RhYmxlRm9ySURVcGRhdGUoY29uc3QgSGFzaE1h
cDxzdGQ6OnBhaXI8dWludDY0X3QsIHVpbnQ2NF90PiwgdWludDY0X3Q+JiBpbmRleElETWFwKQor
eworICAgIFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSA9ICptX3NxbGl0ZURCOworICAgIFNRTGl0
ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKGRhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdp
bigpOworCisgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29tbWFuZChpbmRleEluZm9UYWJsZVNj
aGVtYSgiX1RlbXBfSW5kZXhJbmZvIikpKSB7CisgICAgICAgIExPR19FUlJPUigiRXJyb3IgY3Jl
YXRpbmcgX1RlbXBfSW5kZXhJbmZvIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIGRhdGFi
YXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQoZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG5hbWUsIG9iamVjdFN0b3JlSUQsIGtleVBhdGgsIGlz
VW5pcXVlLCBtdWx0aUVudHJ5IEZST00gSW5kZXhJbmZvOyJfcyk7CisgICAgICAgIGlmIChzdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJF
cnJvciBwcmVwYXJpbmcgc3RhdGVtZW50IHRvIGZldGNoIHJlY29yZHMgZnJvbSBJbmRleEluZm8g
dGFibGUgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAg
IGludCByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgICAgICB3aGlsZSAocmVzdWx0ID09
IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGlkID0gc3RhdGVtZW50LmdldENv
bHVtbkludDY0KDApOworICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZW1lbnQuZ2V0Q29s
dW1uVGV4dCgxKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50NjQoMik7CisgICAgICAgICAgICB1aW50NjRfdCBuZXdJRCA9IGluZGV4
SURNYXAuZ2V0KHsgb2JqZWN0U3RvcmVJRCwgaWQgfSk7CisgICAgICAgICAgICBWZWN0b3I8dWlu
dDhfdD4ga2V5UGF0aEJ1ZmZlcjsKKyAgICAgICAgICAgIHN0YXRlbWVudC5nZXRDb2x1bW5CbG9i
QXNWZWN0b3IoMywga2V5UGF0aEJ1ZmZlcik7CisgICAgICAgICAgICBib29sIHVuaXF1ZSA9IHN0
YXRlbWVudC5nZXRDb2x1bW5JbnQoNCk7CisgICAgICAgICAgICBib29sIG11bHRpRW50cnkgPSBz
dGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDUpOworCisgICAgICAgICAgICBhdXRvIHNxbCA9IGNhY2hl
ZFN0YXRlbWVudChTUUw6OkNyZWF0ZVRlbXBJbmRleEluZm8sICJJTlNFUlQgSU5UTyBfVGVtcF9J
bmRleEluZm8gVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/KTsiX3MpOworICAgICAgICAgICAgaWYg
KCFzcWwKKyAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgxLCBuZXdJRCkgIT0gU1FM
SVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3FsLT5iaW5kVGV4dCgyLCBuYW1lKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgzLCBvYmplY3RTdG9yZUlE
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRCbG9iKDQsIGtleVBh
dGhCdWZmZXIuZGF0YSgpLCBrZXlQYXRoQnVmZmVyLnNpemUoKSkgIT0gU1FMSVRFX09LCisgICAg
ICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50KDUsIHVuaXF1ZSkgIT0gU1FMSVRFX09LCisgICAg
ICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50KDYsIG11bHRpRW50cnkpICE9IFNRTElURV9PSwor
ICAgICAgICAgICAgICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAg
ICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBhZGRpbmcgaW5kZXggJyVzJyB0byBfVGVtcF9JbmRl
eEluZm8gdGFibGUgKCVpKSAtICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBkYXRhYmFzZS5sYXN0
RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50
LnN0ZXAoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUp
IHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZmV0Y2hpbmcgaW5kaWNlcyBmcm9tIElu
ZGV4SW5mbyB0YWJsZSAoJWkpIC0gJXMiLCAgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmICghZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkRST1AgVEFCTEUgSW5k
ZXhJbmZvIikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBkcm9wcGluZyBleGlzdGluZyBJ
bmRleEluZm8gdGFibGUgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlm
ICghZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkFMVEVSIFRBQkxFIF9UZW1wX0luZGV4SW5mbyBS
RU5BTUUgVE8gSW5kZXhJbmZvIikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJFcnJvciByZW5hbWlu
ZyBfVGVtcF9JbmRleEluZm8gdGFibGUgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCks
IGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6bWlncmF0ZUluZGV4UmVjb3Jkc1RhYmxlRm9ySURVcGRh
dGUoY29uc3QgSGFzaE1hcDxzdGQ6OnBhaXI8dWludDY0X3QsIHVpbnQ2NF90PiwgdWludDY0X3Q+
JiBpbmRleElETWFwKQoreworICAgIFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSA9ICptX3NxbGl0
ZURCOworICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKGRhdGFiYXNlKTsKKyAgICB0
cmFuc2FjdGlvbi5iZWdpbigpOworCisgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29tbWFuZCh2
M0luZGV4UmVjb3Jkc1RhYmxlU2NoZW1hKCJfVGVtcF9JbmRleFJlY29yZHMiKSkpIHsKKyAgICAg
ICAgTE9HX0VSUk9SKCJFcnJvciBjcmVhdGluZyBfVGVtcF9JbmRleFJlY29yZHMgdGFibGUgaW4g
ZGF0YWJhc2UgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHsKKyAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChkYXRhYmFzZSwgIlNFTEVDVCBpbmRleElELCBv
YmplY3RTdG9yZUlELCBrZXksIHZhbHVlLCBvYmplY3RTdG9yZVJlY29yZElEIEZST00gSW5kZXhS
ZWNvcmRzOyJfcyk7CisgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBwcmVwYXJpbmcgc3RhdGVtZW50IHRv
IGZldGNoIHJlY29yZHMgZnJvbSB0aGUgSW5kZXhSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIGRh
dGFiYXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpbnQgcmVzdWx0ID0gc3RhdGVt
ZW50LnN0ZXAoKTsKKyAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7CisgICAg
ICAgICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAg
ICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQo
MSk7CisgICAgICAgICAgICB1aW50NjRfdCBuZXdJRCA9IGluZGV4SURNYXAuZ2V0KHsgb2JqZWN0
U3RvcmVJRCwgaWQgfSk7CisgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4ga2V5QnVmZmVyOwor
ICAgICAgICAgICAgc3RhdGVtZW50LmdldENvbHVtbkJsb2JBc1ZlY3RvcigyLCBrZXlCdWZmZXIp
OworICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlQnVmZmVyOworICAgICAgICAgICAg
c3RhdGVtZW50LmdldENvbHVtbkJsb2JBc1ZlY3RvcigzLCB2YWx1ZUJ1ZmZlcik7CisgICAgICAg
ICAgICB1aW50NjRfdCByZWNvcmRJRCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCg0KTsKKwor
ICAgICAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpQdXRUZW1wSW5kZXhS
ZWNvcmQsICJJTlNFUlQgSU5UTyBfVGVtcF9JbmRleFJlY29yZHMgVkFMVUVTICg/LCA/LCBDQVNU
KD8gQVMgVEVYVCksIENBU1QoPyBBUyBURVhUKSwgPyk7Il9zKTsKKyAgICAgICAgICAgIGlmICgh
c3FsCisgICAgICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoMSwgbmV3SUQpICE9IFNRTElU
RV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDIsIG9iamVjdFN0b3JlSUQp
ICE9IFNRTElURV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZEJsb2IoMywga2V5QnVm
ZmVyLmRhdGEoKSwga2V5QnVmZmVyLnNpemUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAg
ICAgfHwgc3FsLT5iaW5kQmxvYig0LCB2YWx1ZUJ1ZmZlci5kYXRhKCksIHZhbHVlQnVmZmVyLnNp
emUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoNSwg
cmVjb3JkSUQpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC0+c3RlcCgpICE9
IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBhZGRpbmcg
aW5kZXggcmVjb3JkIHRvIF9UZW1wX0luZGV4UmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBkYXRh
YmFzZS5sYXN0RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVzdWx0ID0g
c3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FM
SVRFX0RPTkUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZmV0Y2hpbmcgaW5kZXgg
cmVjb3JkIGZyb20gZGF0YWJhc2Ugb24gZGlzayAoJWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0RXJy
b3IoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgi
RFJPUCBUQUJMRSBJbmRleFJlY29yZHMiKSkgeworICAgICAgICBMT0dfRVJST1IoIkVycm9yIGRy
b3BwaW5nIGV4aXN0aW5nIEluZGV4UmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBkYXRhYmFzZS5s
YXN0RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiQUxURVIgVEFC
TEUgX1RlbXBfSW5kZXhSZWNvcmRzIFJFTkFNRSBUTyBJbmRleFJlY29yZHMiKSkgeworICAgICAg
ICBMT0dfRVJST1IoIkVycm9yIHJlbmFtaW5nIHRlbXBvcmFyeSBJbmRleFJlY29yZHMgdGFibGUg
KCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHRyYW5zYWN0aW9uLmNvbW1p
dCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
cmVtb3ZlRXhpc3RpbmdJbmRleCh1aW50NjRfdCBpbmRleElEKQoreworICAgIFNRTGl0ZVRyYW5z
YWN0aW9uIHRyYW5zYWN0aW9uKCptX3NxbGl0ZURCKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigp
OworCisgICAgeworICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OlJlbW92
ZUluZGV4SW5mbywgIkRFTEVURSBGUk9NIEluZGV4SW5mbyBXSEVSRSBpZCA9ID87Il9zKTsKKyAg
ICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDEsIGluZGV4SUQp
ICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHJlbW92ZSBleGlzdGluZyBpbmRl
eCBmcm9tIEluZGV4SW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3Io
KSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0
YXRlbWVudChTUUw6OkRlbGV0ZUluZGV4UmVjb3JkcywgIkRFTEVURSBGUk9NIEluZGV4UmVjb3Jk
cyBXSEVSRSBpbmRleElEID0gPzsiX3MpOworICAgICAgICBpZiAoIXNxbAorICAgICAgICAgICAg
fHwgc3FsLT5iaW5kSW50NjQoMSwgaW5kZXhJRCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8
fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gcmVtb3ZlIGV4aXN0aW5nIGluZGV4IGZyb20gSW5kZXhSZWNvcmRzIHRhYmxlICgl
aSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmFkZEV4aXN0aW5nSW5kZXgoSURCT2JqZWN0U3RvcmVJbmZvJiBv
YmplY3RTdG9yZUluZm8sIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbykKK3sKKyAgICBTUUxpdGVU
cmFuc2FjdGlvbiB0cmFuc2FjdGlvbigqbV9zcWxpdGVEQik7CisgICAgdHJhbnNhY3Rpb24uYmVn
aW4oKTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGtleVBhdGhCbG9iID0gc2VyaWFsaXpl
SURCS2V5UGF0aChpbmZvLmtleVBhdGgoKSk7CisgICAgaWYgKCFrZXlQYXRoQmxvYikgeworICAg
ICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBzZXJpYWxpemUgSURCS2V5UGF0aCB0byBzYXZlIGlu
IGRhdGFiYXNlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB7CisgICAg
ICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6Q3JlYXRlSW5kZXhJbmZvLCAiSU5T
RVJUIElOVE8gSW5kZXhJbmZvIFZBTFVFUyAoPywgPywgPywgPywgPywgPyk7Il9zKTsKKyAgICAg
ICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDEsIGluZm8uaWRlbnRp
ZmllcigpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMiwgaW5m
by5uYW1lKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoMywg
aW5mby5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8
fCBzcWwtPmJpbmRCbG9iKDQsIGtleVBhdGhCbG9iLT5kYXRhKCksIGtleVBhdGhCbG9iLT5zaXpl
KCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50KDUsIGluZm8udW5p
cXVlKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50KDYsIGluZm8u
bXVsdGlFbnRyeSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC0+c3RlcCgpICE9
IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBhZGQgaW5k
ZXggJyVzJyB0byBJbmRleEluZm8gdGFibGUgKCVpKSAtICVzIiwgaW5mby5uYW1lKCkudXRmOCgp
LmRhdGEoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1z
ZygpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHsKKyAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRPYmplY3RTdG9y
ZVJlY29yZHMsICJTRUxFQ1Qga2V5LCB2YWx1ZSwgcmVjb3JkSUQgRlJPTSBSZWNvcmRzIFdIRVJF
IG9iamVjdFN0b3JlSUQgPSA/OyJfcyk7CisgICAgICAgIGlmICghc3FsCisgICAgICAgICAgICB8
fCBzcWwtPmJpbmRJbnQ2NCgxLCBpbmZvLm9iamVjdFN0b3JlSWRlbnRpZmllcigpKSAhPSBTUUxJ
VEVfT0spIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVt
ZW50IG9yIGJpbmQgdmFsdWVzICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBt
X3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICBpbnQgcmVzdWx0ID0gc3FsLT5zdGVwKCk7CisgICAgICAgIHdo
aWxlIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+
IGtleUJ1ZmZlcjsKKyAgICAgICAgICAgIElEQktleURhdGEga2V5RGF0YTsKKyAgICAgICAgICAg
IHNxbC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDAsIGtleUJ1ZmZlcik7CisgICAgICAgICAgICBp
ZiAoIWRlc2VyaWFsaXplSURCS2V5RGF0YShrZXlCdWZmZXIuZGF0YSgpLCBrZXlCdWZmZXIuc2l6
ZSgpLCBrZXlEYXRhKSkgeworICAgICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGRl
c2VyaWFsaXplIGtleSBkYXRhIGZyb20gZGF0YWJhc2Ugd2hpbGUgZ2V0dGluZyBhbGwgcmVjb3Jk
cyIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlQnVmZmVyOworICAgICAgICAgICAgc3FsLT5n
ZXRDb2x1bW5CbG9iQXNWZWN0b3IoMSwgdmFsdWVCdWZmZXIpOworICAgICAgICAgICAgYXV0byB2
YWx1ZSA9IFRocmVhZFNhZmVEYXRhQnVmZmVyOjpjcmVhdGUoV1RGTW92ZSh2YWx1ZUJ1ZmZlcikp
OworCisgICAgICAgICAgICB1aW50NjRfdCByZWNvcmRJRCA9IHNxbC0+Z2V0Q29sdW1uSW50NjQo
Mik7CisgICAgICAgICAgICBJREJFcnJvciBlcnJvciA9IHVwZGF0ZU9uZUluZGV4Rm9yQWRkUmVj
b3JkKG9iamVjdFN0b3JlSW5mbywgaW5mbywga2V5RGF0YSwgdmFsdWUsIHJlY29yZElEKTsKKyAg
ICAgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgICAgICByZXN1bHQgPSBzcWwtPnN0ZXAoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgIExPR19FUlJP
UigiRXJyb3IgZmV0Y2hpbmcgb2JqZWN0IHJlY29yZHMgZnJvbSBSZWNvcmRzIHRhYmxlIG9uIGRp
c2siKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6aGFuZGxlRHVwbGljYXRlSW5kZXhJRHMoY29uc3QgSGFzaE1hcDx1
aW50NjRfdCwgVmVjdG9yPElEQkluZGV4SW5mbz4+JiBpbmRleEluZm9NYXAsIElEQkRhdGFiYXNl
SW5mbyYgZGF0YWJhc2VJbmZvKQoreworICAgIGZvciAoYXV0byYgW2luZGV4SUQsIGluZm9zXSA6
IGluZGV4SW5mb01hcCkgeworICAgICAgICBpZiAoaW5mb3Muc2l6ZSgpID09IDEpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoIXJlbW92ZUV4aXN0aW5nSW5kZXgoaW5kZXhJ
RCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZm9yIChhdXRvIGluZm8g
OiBpbmZvcykgeworICAgICAgICAgICAgYXV0byBvYmplY3RTdG9yZUluZm8gPSBkYXRhYmFzZUlu
Zm8uaW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUoaW5mby5vYmplY3RTdG9yZUlkZW50aWZpZXIo
KSk7CisgICAgICAgICAgICBBU1NFUlQob2JqZWN0U3RvcmVJbmZvKTsKKyAgICAgICAgICAgIG9i
amVjdFN0b3JlSW5mby0+ZGVsZXRlSW5kZXgoaW5mby5pZGVudGlmaWVyKCkpOworCisgICAgICAg
ICAgICAvLyBBIG5ldyBpbmRleCB3aXRoIHRoZSBzYW1lIG5hbWUgbWF5IGJlIGFkZGVkLgorICAg
ICAgICAgICAgaWYgKG9iamVjdFN0b3JlSW5mby0+aGFzSW5kZXgoaW5mby5uYW1lKCkpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpbmZvLnNldElkZW50aWZpZXIo
ZGF0YWJhc2VJbmZvLmdlbmVyYXRlTmV4dEluZGV4SUQoKSk7CisgICAgICAgICAgICBpZiAoIWFk
ZEV4aXN0aW5nSW5kZXgoKm9iamVjdFN0b3JlSW5mbywgaW5mbykpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBvYmplY3RTdG9yZUluZm8tPmFkZEV4aXN0aW5n
SW5kZXgoaW5mbyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwog
c3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpl
eHRyYWN0RXhpc3RpbmdEYXRhYmFzZUluZm8oKQogewogICAgIEFTU0VSVChtX3NxbGl0ZURCKTsK
QEAgLTc5Nyw2ICsxMDU1LDcgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FM
aXRlSURCQmFja2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKIAogICAgIHVpbnQ2
NF90IG1heEluZGV4SUQgPSAwOwogICAgIEhhc2hNYXA8c3RkOjpwYWlyPHVpbnQ2NF90LCB1aW50
NjRfdD4sIHVpbnQ2NF90PiBpbmRleElETWFwOworICAgIEhhc2hNYXA8dWludDY0X3QsIFZlY3Rv
cjxJREJJbmRleEluZm8+PiBpbmRleEluZm9NYXA7CiAgICAgewogICAgICAgICBTUUxpdGVTdGF0
ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiU0VMRUNUIGlkLCBuYW1lLCBvYmplY3RTdG9yZUlELCBr
ZXlQYXRoLCBpc1VuaXF1ZSwgbXVsdGlFbnRyeSBGUk9NIEluZGV4SW5mbzsiX3MpOwogICAgICAg
ICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKQEAgLTgzNyw3ICsxMDk2LDE1IEBA
IHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAgICAgICAgICAgICAgICAgaW5kZXhJRCA9IG1heElu
ZGV4SUQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG9iamVjdFN0b3JlLT5hZGRFeGlz
dGluZ0luZGV4KHsgaW5kZXhJRCwgb2JqZWN0U3RvcmVJRCwgaW5kZXhOYW1lLCBXVEZNb3ZlKGlu
ZGV4S2V5UGF0aC52YWx1ZSgpKSwgdW5pcXVlLCBtdWx0aUVudHJ5IH0pOworICAgICAgICAgICAg
YXV0byBpbmRleEluZm8gPSBJREJJbmRleEluZm8geyBpbmRleElELCBvYmplY3RTdG9yZUlELCBp
bmRleE5hbWUsIFdURk1vdmUoaW5kZXhLZXlQYXRoLnZhbHVlKCkpLCB1bmlxdWUsIG11bHRpRW50
cnkgfTsKKyAgICAgICAgICAgIGlmICghc2hvdWxkVXBkYXRlSW5kZXhJRCkgeworICAgICAgICAg
ICAgICAgIGF1dG8mIGluZGV4SW5mb3MgPSBpbmRleEluZm9NYXAuZW5zdXJlKGluZGV4SUQsIFtd
KCkgLT4gVmVjdG9yPElEQkluZGV4SW5mbz4geworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
eyB9OworICAgICAgICAgICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgICAg
ICBpbmRleEluZm9zLmFwcGVuZChpbmRleEluZm8pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBvYmplY3RTdG9yZS0+YWRkRXhpc3RpbmdJbmRleChpbmRleEluZm8pOwogICAgICAgICAg
ICAgbWF4SW5kZXhJRCA9IG1heEluZGV4SUQgPCBpbmRleElEID8gaW5kZXhJRCA6IG1heEluZGV4
SUQ7CiAKICAgICAgICAgICAgIHJlc3VsdCA9IHNxbC5zdGVwKCk7CkBAIC04NDgsMzEgKzExMTUs
MTQgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0
b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgICAgICB9CiAgICAgICAgIGRhdGFiYXNlSW5mby0+c2V0TWF4SW5kZXhJRChtYXhJbmRl
eElEKTsKKyAgICB9CiAKLSAgICAgICAgaWYgKCFzaG91bGRVcGRhdGVJbmRleElEKQotICAgICAg
ICAgICAgcmV0dXJuIGRhdGFiYXNlSW5mbzsKLQotICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDog
aW5kZXhJRE1hcCkgewotICAgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVE
QiwgIlVQREFURSBJbmRleEluZm8gU0VUIGlkID0gPyBXSEVSRSBpZCA9ID8gQU5EIG9iamVjdFN0
b3JlSUQgPSA/OyJfcyk7Ci0gICAgICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVf
T0sKLSAgICAgICAgICAgICAgICB8fCBzcWwuYmluZEludDY0KDEsIGVudHJ5LnZhbHVlKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgICAgICAgICB8fCBzcWwuYmluZEludDY0KDIsIGVudHJ5LmtleS5z
ZWNvbmQpICE9IFNRTElURV9PSwotICAgICAgICAgICAgICAgIHx8IHNxbC5iaW5kSW50NjQoMywg
ZW50cnkua2V5LmZpcnN0KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgICAgICB8fCBzcWwuc3Rl
cCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUg
dG8gdXBkYXRlIGlkIG9mIEluZGV4SW5mbyB0YWJsZSIpOwotICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQg
cmVjb3JkU3FsKCptX3NxbGl0ZURCLCAiVVBEQVRFIEluZGV4UmVjb3JkcyBTRVQgaW5kZXhJRCA9
ID8gV0hFUkUgaW5kZXhJRCA9ID8gQU5EIG9iamVjdFN0b3JlSUQgPSA/OyJfcyk7Ci0gICAgICAg
ICAgICBpZiAocmVjb3JkU3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgICAg
ICB8fCByZWNvcmRTcWwuYmluZEludDY0KDEsIGVudHJ5LnZhbHVlKSAhPSBTUUxJVEVfT0sKLSAg
ICAgICAgICAgICAgICB8fCByZWNvcmRTcWwuYmluZEludDY0KDIsIGVudHJ5LmtleS5zZWNvbmQp
ICE9IFNRTElURV9PSwotICAgICAgICAgICAgICAgIHx8IHJlY29yZFNxbC5iaW5kSW50NjQoMywg
ZW50cnkua2V5LmZpcnN0KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgICAgICB8fCByZWNvcmRT
cWwuc3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gdXBkYXRlIGluZGV4SUQgb2YgSW5kZXhSZWNvcmRzIHRhYmxlIik7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBp
ZiAoc2hvdWxkVXBkYXRlSW5kZXhJRCkgeworICAgICAgICBpZiAoIW1pZ3JhdGVJbmRleEluZm9U
YWJsZUZvcklEVXBkYXRlKGluZGV4SURNYXApIHx8ICFtaWdyYXRlSW5kZXhSZWNvcmRzVGFibGVG
b3JJRFVwZGF0ZShpbmRleElETWFwKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0gZWxzZSB7CisgICAgICAgIGlmICghaGFuZGxlRHVwbGljYXRlSW5kZXhJRHMoaW5kZXhJbmZv
TWFwLCAqZGF0YWJhc2VJbmZvKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
IAogICAgIHJldHVybiBkYXRhYmFzZUluZm87CkBAIC0xMzgwLDcgKzE2MzAsOSBAQCBJREJFcnJv
ciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhYwogCiAgICAgICAgIEFTU0VSVChjdXJzb3ItPmN1cnJlbnRSZWNvcmRS
b3dJRCgpKTsKIAotICAgICAgICBJREJFcnJvciBlcnJvciA9IHVwZGF0ZU9uZUluZGV4Rm9yQWRk
UmVjb3JkKGluZm8sIGtleSwgdmFsdWVCdWZmZXIsIGN1cnNvci0+Y3VycmVudFJlY29yZFJvd0lE
KCkpOworICAgICAgICBhdXRvKiBvYmplY3RTdG9yZUluZm8gPSBpbmZvRm9yT2JqZWN0U3RvcmUo
aW5mby5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSk7CisgICAgICAgIEFTU0VSVChvYmplY3RTdG9y
ZUluZm8pOworICAgICAgICBJREJFcnJvciBlcnJvciA9IHVwZGF0ZU9uZUluZGV4Rm9yQWRkUmVj
b3JkKCpvYmplY3RTdG9yZUluZm8sIGluZm8sIGtleSwgdmFsdWVCdWZmZXIsIGN1cnNvci0+Y3Vy
cmVudFJlY29yZFJvd0lEKCkpOwogICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7CiAgICAg
ICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkRlbGV0ZUluZGV4SW5mbywg
IkRFTEVURSBGUk9NIEluZGV4SW5mbyBXSEVSRSBpZCA9ID8gQU5EIG9iamVjdFN0b3JlSUQgPSA/
OyJfcyk7CiAgICAgICAgICAgICBpZiAoIXNxbApAQCAtMTg0Miw3ICsyMDk0LDcgQEAgSURCRXJy
b3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVSYW5nZShjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWMKICAgICByZXR1cm4gZXJyb3I7CiB9CiAKLUlEQkVycm9yIFNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6dXBkYXRlT25lSW5kZXhGb3JBZGRSZWNvcmQoY29uc3QgSURCSW5k
ZXhJbmZvJiBpbmZvLCBjb25zdCBJREJLZXlEYXRhJiBrZXksIGNvbnN0IFRocmVhZFNhZmVEYXRh
QnVmZmVyJiB2YWx1ZSwgaW50NjRfdCByZWNvcmRJRCkKK0lEQkVycm9yIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6dXBkYXRlT25lSW5kZXhGb3JBZGRSZWNvcmQoSURCT2JqZWN0U3RvcmVJbmZvJiBv
YmplY3RTdG9yZUluZm8sIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgY29uc3QgSURCS2V5RGF0
YSYga2V5LCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWUsIGludDY0X3QgcmVjb3Jk
SUQpCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcihtX3NlcmlhbGl6YXRpb25Db250ZXh0LT52
bSgpKTsKIApAQCAtMTg1MSw5ICsyMTAzLDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0
b3JlOjp1cGRhdGVPbmVJbmRleEZvckFkZFJlY29yZChjb25zdCBJREJJbmRleEluZm8mIGkKICAg
ICAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKIAogICAgIEluZGV4S2V5IGluZGV4S2V5OwotICAg
IGF1dG8qIG9iamVjdFN0b3JlSW5mbyA9IGluZm9Gb3JPYmplY3RTdG9yZShpbmZvLm9iamVjdFN0
b3JlSWRlbnRpZmllcigpKTsKLSAgICBBU1NFUlQob2JqZWN0U3RvcmVJbmZvKTsKLSAgICBnZW5l
cmF0ZUluZGV4S2V5Rm9yVmFsdWUobV9zZXJpYWxpemF0aW9uQ29udGV4dC0+ZXhlY1N0YXRlKCks
IGluZm8sIGpzVmFsdWUsIGluZGV4S2V5LCBvYmplY3RTdG9yZUluZm8tPmtleVBhdGgoKSwga2V5
KTsKKyAgICBnZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUobV9zZXJpYWxpemF0aW9uQ29udGV4dC0+
ZXhlY1N0YXRlKCksIGluZm8sIGpzVmFsdWUsIGluZGV4S2V5LCBvYmplY3RTdG9yZUluZm8ua2V5
UGF0aCgpLCBrZXkpOwogCiAgICAgaWYgKGluZGV4S2V5LmlzTnVsbCgpKQogICAgICAgICByZXR1
cm4gSURCRXJyb3IgeyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDBlNDc3
YmZiYWNlMjVmZWVlNzIwMDNmNDg3YWUxZWVmNTZjNTE2ZWEuLmY2MDFjNmNjMGI0YTBlN2Q0OTJh
YWZiZDZkNWQzZWU5NTdjYmJlODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKQEAg
LTEyNyw3ICsxMjcsNyBAQCBwcml2YXRlOgogICAgIElEQkVycm9yIHVuY2hlY2tlZFNldEtleUdl
bmVyYXRvclZhbHVlKGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgdWludDY0X3QgdmFsdWUpOwogCiAg
ICAgSURCRXJyb3IgdXBkYXRlQWxsSW5kZXhlc0ZvckFkZFJlY29yZChjb25zdCBJREJPYmplY3RT
dG9yZUluZm8mLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgSW5kZXhJRFRvSW5kZXhLZXlNYXAm
LCBpbnQ2NF90IHJlY29yZElEKTsKLSAgICBJREJFcnJvciB1cGRhdGVPbmVJbmRleEZvckFkZFJl
Y29yZChjb25zdCBJREJJbmRleEluZm8mLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgVGhyZWFk
U2FmZURhdGFCdWZmZXImIHZhbHVlLCBpbnQ2NF90IHJlY29yZElEKTsKKyAgICBJREJFcnJvciB1
cGRhdGVPbmVJbmRleEZvckFkZFJlY29yZChJREJPYmplY3RTdG9yZUluZm8mLCBjb25zdCBJREJJ
bmRleEluZm8mLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXIm
IHZhbHVlLCBpbnQ2NF90IHJlY29yZElEKTsKICAgICBJREJFcnJvciB1bmNoZWNrZWRQdXRJbmRl
eEtleShjb25zdCBJREJJbmRleEluZm8mLCBjb25zdCBJREJLZXlEYXRhJiBrZXlWYWx1ZSwgY29u
c3QgSW5kZXhLZXkmLCBpbnQ2NF90IHJlY29yZElEKTsKICAgICBJREJFcnJvciB1bmNoZWNrZWRQ
dXRJbmRleFJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCwgY29u
c3QgSURCS2V5RGF0YSYga2V5VmFsdWUsIGNvbnN0IElEQktleURhdGEmIGluZGV4S2V5LCBpbnQ2
NF90IHJlY29yZElEKTsKICAgICBJREJFcnJvciB1bmNoZWNrZWRIYXNJbmRleFJlY29yZChjb25z
dCBJREJJbmRleEluZm8mLCBjb25zdCBJREJLZXlEYXRhJiwgYm9vbCYgaGFzUmVjb3JkKTsKQEAg
LTE0MSw2ICsxNDEsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNsb3NlU1FMaXRlREIoKTsKICAg
ICB2b2lkIGNsb3NlKCkgZmluYWw7CiAKKyAgICBib29sIG1pZ3JhdGVJbmRleEluZm9UYWJsZUZv
cklEVXBkYXRlKGNvbnN0IEhhc2hNYXA8c3RkOjpwYWlyPHVpbnQ2NF90LCB1aW50NjRfdD4sIHVp
bnQ2NF90PiYgaW5kZXhJRE1hcCk7CisgICAgYm9vbCBtaWdyYXRlSW5kZXhSZWNvcmRzVGFibGVG
b3JJRFVwZGF0ZShjb25zdCBIYXNoTWFwPHN0ZDo6cGFpcjx1aW50NjRfdCwgdWludDY0X3Q+LCB1
aW50NjRfdD4mIGluZGV4SURNYXApOworCisgICAgYm9vbCByZW1vdmVFeGlzdGluZ0luZGV4KHVp
bnQ2NF90IGluZGV4SUQpOworICAgIGJvb2wgYWRkRXhpc3RpbmdJbmRleChJREJPYmplY3RTdG9y
ZUluZm8mLCBjb25zdCBJREJJbmRleEluZm8mKTsKKyAgICBib29sIGhhbmRsZUR1cGxpY2F0ZUlu
ZGV4SURzKGNvbnN0IEhhc2hNYXA8dWludDY0X3QsIFZlY3RvcjxJREJJbmRleEluZm8+PiYsIElE
QkRhdGFiYXNlSW5mbyYpOworCiAgICAgZW51bSBjbGFzcyBTUUwgOiBzaXplX3QgewogICAgICAg
ICBDcmVhdGVPYmplY3RTdG9yZUluZm8sCiAgICAgICAgIENyZWF0ZU9iamVjdFN0b3JlS2V5R2Vu
ZXJhdG9yLApAQCAtMTU0LDkgKzE2MSwxMiBAQCBwcml2YXRlOgogICAgICAgICBDbGVhck9iamVj
dFN0b3JlUmVjb3JkcywKICAgICAgICAgQ2xlYXJPYmplY3RTdG9yZUluZGV4UmVjb3JkcywKICAg
ICAgICAgQ3JlYXRlSW5kZXhJbmZvLAorICAgICAgICBDcmVhdGVUZW1wSW5kZXhJbmZvLAogICAg
ICAgICBEZWxldGVJbmRleEluZm8sCisgICAgICAgIFJlbW92ZUluZGV4SW5mbywKICAgICAgICAg
SGFzSW5kZXhSZWNvcmQsCiAgICAgICAgIFB1dEluZGV4UmVjb3JkLAorICAgICAgICBQdXRUZW1w
SW5kZXhSZWNvcmQsCiAgICAgICAgIEdldEluZGV4UmVjb3JkRm9yT25lS2V5LAogICAgICAgICBE
ZWxldGVJbmRleFJlY29yZHMsCiAgICAgICAgIFJlbmFtZUluZGV4LApAQCAtMTc0LDYgKzE4NCw3
IEBAIHByaXZhdGU6CiAgICAgICAgIEdldEJsb2JVUkwsCiAgICAgICAgIEdldEtleUdlbmVyYXRv
clZhbHVlLAogICAgICAgICBTZXRLZXlHZW5lcmF0b3JWYWx1ZSwKKyAgICAgICAgR2V0T2JqZWN0
U3RvcmVSZWNvcmRzLAogICAgICAgICBHZXRBbGxLZXlSZWNvcmRzTG93ZXJPcGVuVXBwZXJPcGVu
LAogICAgICAgICBHZXRBbGxLZXlSZWNvcmRzTG93ZXJPcGVuVXBwZXJDbG9zZWQsCiAgICAgICAg
IEdldEFsbEtleVJlY29yZHNMb3dlckNsb3NlZFVwcGVyT3BlbiwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleEluZm8uaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleEluZm8uaAppbmRleCA4
NTM3YWM2ZmMyZDE1ODQwMmI1YjAxMjhkMDQ5MGVlOWU2OWM5NDhmLi4yOTA3ZDkyZmIxODhkMGRi
ZTk2MTgwNjI2ODQ3NzNjZGU5MDcwY2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkluZGV4SW5mby5oCkBAIC01OSw2ICs1OSw3IEBA
IHB1YmxpYzoKICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBuZWVkIGZvciB0aGlzLgogICAgIHN0
YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IC0xOwogCisgICAgdm9pZCBzZXRJZGVudGlm
aWVyKHVpbnQ2NF90IGlkZW50aWZpZXIpIHsgbV9pZGVudGlmaWVyID0gaWRlbnRpZmllcjsgfQog
cHJpdmF0ZToKICAgICB1aW50NjRfdCBtX2lkZW50aWZpZXIgeyAwIH07CiAgICAgdWludDY0X3Qg
bV9vYmplY3RTdG9yZUlkZW50aWZpZXIgeyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmplY3RTdG9yZUluZm8uY3Bw
CmluZGV4IDRlYWQzOGJmYmM5MTE3ODlkYjI1NzY4OWM2NWUwMjhhZWRmY2FjNTcuLjNjYTU3NTJk
MjY1ZjdlNzRmYWU1ZjAzNGY2OWE3NGRjOTAxNDJhNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmplY3RTdG9yZUluZm8uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmplY3RTdG9yZUlu
Zm8uY3BwCkBAIC01Miw3ICs1Miw4IEBAIElEQkluZGV4SW5mbyBJREJPYmplY3RTdG9yZUluZm86
OmNyZWF0ZU5ld0luZGV4KHVpbnQ2NF90IGluZGV4SUQsIGNvbnN0IFN0cmluZyYKIAogdm9pZCBJ
REJPYmplY3RTdG9yZUluZm86OmFkZEV4aXN0aW5nSW5kZXgoY29uc3QgSURCSW5kZXhJbmZvJiBp
bmZvKQogewotICAgIEFTU0VSVCghbV9pbmRleE1hcC5jb250YWlucyhpbmZvLmlkZW50aWZpZXIo
KSkpOworICAgIGlmIChtX2luZGV4TWFwLmNvbnRhaW5zKGluZm8uaWRlbnRpZmllcigpKSkKKyAg
ICAgICAgTE9HX0VSUk9SKCJBZGRpbmcgYW4gaW5kZXggJyVzJyB3aXRoIGV4aXN0aW5nIEluZGV4
IElEIiwgaW5mby5uYW1lKCkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBtX2luZGV4TWFwLnNldChp
bmZvLmlkZW50aWZpZXIoKSwgaW5mbyk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOWU2MGM1MzZkYjc2M2JkNzg3YjkwMGZjNGM2NTJkNGJm
ZWY0NTFlYS4uN2M3NTIxMGQ1Mjg5OWEyMjI3ZmEwM2Q3NWU1MGFhYWVlYzgxNzk3MCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5
IEBACisyMDIwLTA5LTI4ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAg
ICAgIEluZGV4ZWREQiBJbmRleCBDb3JydXB0aW9uIGFmdGVyIHVwZ3JhZGUgZnJvbSBpT1MgMTMg
dG8gaU9TIDE0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTY5NjIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY5NTg3MDA0PgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tOgorICAgICAgICAo
cnVuTXVsdGlwbGVJbmRpY2VzVGVzdFdpdGhEYXRhYmFzZSk6CisgICAgICAgIChURVNUKToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRv
VjJXaXRoTXVsdGlwbGVJbmRpY2VzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhVcGdyYWRlV2l0aE11bHRpcGxlSW5kaWNlcy5zcWxp
dGUzOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lu
ZGV4VXBncmFkZVdpdGhNdWx0aXBsZUluZGljZXNIYXZlU2FtZUlELnNxbGl0ZTM6IEFkZGVkLgor
CiAyMDIwLTA5LTI3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZW1vdmUgcnVuLXdlYmtpdC10ZXN0cyBjb2RlIHRoYXQgc3RyaXBzIHRyYWlsaW5nIHNwYWNlcyB3
aGVuIGNvbXBhcmluZyBleHBlY3RlZC50eHQgZmlsZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggNDFjNGExNzU0ZTAzMWExMWEwMzAxNDJiM2YxNjM4YTU3OTNmMWIwZS4uYWQyY2UwNTMyZjI2
NmU0NGIzZDkzMjg3MGZjZjFlMzM4MjQ2MDhlZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTgxMCw2ICs4MTAsOSBAQAogCQk5Mzk5QkEwNDIzNzExMTQwMDA4MzkyQkYgLyogSW5kZXhlZERC
SW5QYWdlQ2FjaGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5Mzk5QkEwMTIzNzExMEFFMDA4MzkyQkYgLyogSW5kZXhlZERCSW5QYWdlQ2FjaGUubW0g
Ki87IH07CiAJCTkzOTlCQTA1MjM3MTExNEYwMDgzOTJCRiAvKiBJbmRleGVkREJJblBhZ2VDYWNo
ZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzOTlCQTAyMjM3MTEwQkYwMDgzOTJCRiAvKiBJbmRleGVkREJJblBhZ2VDYWNoZS5odG1s
ICovOyB9OwogCQk5Mzk5QkEwNjIzNzExMTRGMDA4MzkyQkYgLyogSW5kZXhlZERCTm90SW5QYWdl
Q2FjaGUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5Mzk5QkEwMzIzNzExMEJGMDA4MzkyQkYgLyogSW5kZXhlZERCTm90SW5QYWdlQ2Fj
aGUuaHRtbCAqLzsgfTsKKwkJOTNBMjc0OUQyNTFFRjkwNzAwQTFCNkQ0IC8qIElEQkluZGV4VXBn
cmFkZVRvVjJXaXRoTXVsdGlwbGVJbmRpY2VzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBMjc0OUEyNTFFRjUyQTAwQTFCNkQ0IC8q
IElEQkluZGV4VXBncmFkZVRvVjJXaXRoTXVsdGlwbGVJbmRpY2VzLmh0bWwgKi87IH07CisJCTkz
QTI3NEEyMjUyMTYzRUUwMEExQjZENCAvKiBJbmRleFVwZ3JhZGVXaXRoTXVsdGlwbGVJbmRpY2Vz
LnNxbGl0ZTMgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTNBMjc0QTEyNTIxNjNENjAwQTFCNkQ0IC8qIEluZGV4VXBncmFkZVdpdGhNdWx0aXBs
ZUluZGljZXMuc3FsaXRlMyAqLzsgfTsKKwkJOTNBMjc0QTUyNTIyNDFERTAwQTFCNkQ0IC8qIElu
ZGV4VXBncmFkZVdpdGhNdWx0aXBsZUluZGljZXNIYXZlU2FtZUlELnNxbGl0ZTMgaW4gQ29weSBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBMjc0QTQyNTIy
NDFEMDAwQTFCNkQ0IC8qIEluZGV4VXBncmFkZVdpdGhNdWx0aXBsZUluZGljZXNIYXZlU2FtZUlE
LnNxbGl0ZTMgKi87IH07CiAJCTkzQUY0RUNFMTUwNkYwNjQwMDdGRDU3RSAvKiBOZXdGaXJzdFZp
c3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQUY0RUNEMTUwNkYwNjQwMDdGRDU3RSAv
KiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcCAqLzsg
fTsKIAkJOTNBRjRFRDExNTA2RjEzMDAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBRjRF
Q0YxNTA2RjEyMzAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwgKi87IH07CiAJCTkzQkNC
QzgzMjNDQzZGMkEwMENBMjIyMSAvKiBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQkNCQzgwMjND
QzZFRTgwMENBMjIyMSAvKiBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbSAqLzsgfTsK
QEAgLTE0MjEsNiArMTQyNCw3IEBACiAJCQkJNTEwNDc3NzMxRDI5OERERDAwOTc0N0VCIC8qIElE
QkRlbGV0ZVJlY292ZXJ5LnNxbGl0ZTMtc2htIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTUx
MDQ3Nzc0MUQyOThEREQwMDk3NDdFQiAvKiBJREJEZWxldGVSZWNvdmVyeS5zcWxpdGUzLXdhbCBp
biBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1MTEwRkNGMTFFMDFDRDY0MDA2RjhEMEIgLyogSURC
SW5kZXhVcGdyYWRlVG9WMi5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAorCQkJCTkzQTI3NDlE
MjUxRUY5MDcwMEExQjZENCAvKiBJREJJbmRleFVwZ3JhZGVUb1YyV2l0aE11bHRpcGxlSW5kaWNl
cy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTkzN0I1NjlFMjNDRDIzREIwMDJBRTY0
MCAvKiBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlLnNxbGl0ZTMgaW4gQ29weSBSZXNvdXJjZXMg
Ki8sCiAJCQkJOTNCQ0JDODQyM0NDNkY0NDAwQ0EyMjIxIC8qIElEQk9iamVjdFN0b3JlSW5mb1Vw
Z3JhZGVUb1YyLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJMUNDODBDRUEyNDc0RjI0
OTAwNERDNDg5IC8qIGlkZW1wb3RlbnQtbW9kZS1hdXRvc2l6aW5nLW9ubHktaG9ub3JzLXBlcmNl
bnRhZ2VzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCkBAIC0xNDU4LDYgKzE0NjIsOCBAQAog
CQkJCUNBOTdCMzk1MjE5MzY2N0EwMDQ1REY2RiAvKiBJbmRleGVkREJVc2VyRGVsZXRlLmh0bWwg
aW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJNTExMEZDRjkxRTAxQ0Q4QTAwNkY4RDBCIC8qIElu
ZGV4VXBncmFkZS5ibG9iIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTUxMTBGQ0Y2MUUwMUNE
ODMwMDZGOEQwQiAvKiBJbmRleFVwZ3JhZGUuc3FsaXRlMyBpbiBDb3B5IFJlc291cmNlcyAqLywK
KwkJCQk5M0EyNzRBMjI1MjE2M0VFMDBBMUI2RDQgLyogSW5kZXhVcGdyYWRlV2l0aE11bHRpcGxl
SW5kaWNlcy5zcWxpdGUzIGluIENvcHkgUmVzb3VyY2VzICovLAorCQkJCTkzQTI3NEE1MjUyMjQx
REUwMEExQjZENCAvKiBJbmRleFVwZ3JhZGVXaXRoTXVsdGlwbGVJbmRpY2VzSGF2ZVNhbWVJRC5z
cWxpdGUzIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTJFRkYwNkNEMUQ4QTQyOUEwMDA0QkIz
MCAvKiBpbnB1dC1maWVsZC1pbi1zY3JvbGxhYmxlLWRvY3VtZW50Lmh0bWwgaW4gQ29weSBSZXNv
dXJjZXMgKi8sCiAJCQkJQ0UzNTI0RkExQjE0NDM4OTAwMjhBN0M1IC8qIGlucHV0LWZvY3VzLWJs
dXIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQlDRTZEMEVFMzI0MjZCOTMyMDAyQUQ5
MDEgLyogaW5zZXJ0LXRleHQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKQEAgLTIzOTQsNiAr
MjQwMCw5IEBACiAJCTkzOUJBOTE2MTQxMDM0MTIwMDFBMDFCRCAvKiBEZXZpY2VTY2FsZUZhY3Rv
ck9uQmFjay5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERldmlj
ZVNjYWxlRmFjdG9yT25CYWNrLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzlC
RkUzOTE4RTU1NDg5MDA4ODMyNzUgLyogU3RyaW5nVHJ1bmNhdG9yLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU3RyaW5nVHJ1bmNhdG9yLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5M0EyNTg5ODFGOTJGRjE1MDAzRTUxMEMgLyogVGV4dENvZGVj
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRDb2RlYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTkzQTI3NDlBMjUxRUY1MkEwMEExQjZENCAvKiBJREJJbmRleFVwZ3JhZGVU
b1YyV2l0aE11bHRpcGxlSW5kaWNlcy5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0g
SURCSW5kZXhVcGdyYWRlVG9WMldpdGhNdWx0aXBsZUluZGljZXMuaHRtbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJOTNBMjc0QTEyNTIxNjNENjAwQTFCNkQ0IC8qIEluZGV4VXBncmFk
ZVdpdGhNdWx0aXBsZUluZGljZXMuc3FsaXRlMyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IHBhdGggPSBJbmRleFVwZ3JhZGVXaXRoTXVsdGlw
bGVJbmRpY2VzLnNxbGl0ZTM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzQTI3NEE0
MjUyMjQxRDAwMEExQjZENCAvKiBJbmRleFVwZ3JhZGVXaXRoTXVsdGlwbGVJbmRpY2VzSGF2ZVNh
bWVJRC5zcWxpdGUzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gZmlsZTsgcGF0aCA9IEluZGV4VXBncmFkZVdpdGhNdWx0aXBsZUluZGljZXNIYXZlU2Ft
ZUlELnNxbGl0ZTM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQTQyN0E4MTgwRDlC
MDcwMENEMjRENyAvKiBSZWZQdHIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVmUHRyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNBNDI3QUEx
ODBEQTI2NDAwQ0QyNEQ3IC8qIFJlZi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZWYuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0E0MjdBQzE4
MERBNjBGMDBDRDI0RDcgLyogTW92ZU9ubHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW92ZU9ubHkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3MzcsNiArMzc0Niw3IEBACiAJCQkJNTEw
NDc3NzAxRDI5OEQ4NTAwOTc0N0VCIC8qIElEQkRlbGV0ZVJlY292ZXJ5LnNxbGl0ZTMtc2htICov
LAogCQkJCTUxMDQ3NzcxMUQyOThEODUwMDk3NDdFQiAvKiBJREJEZWxldGVSZWNvdmVyeS5zcWxp
dGUzLXdhbCAqLywKIAkJCQk1MTEwRkNGMDFFMDFDRDUzMDA2RjhEMEIgLyogSURCSW5kZXhVcGdy
YWRlVG9WMi5odG1sICovLAorCQkJCTkzQTI3NDlBMjUxRUY1MkEwMEExQjZENCAvKiBJREJJbmRl
eFVwZ3JhZGVUb1YyV2l0aE11bHRpcGxlSW5kaWNlcy5odG1sICovLAogCQkJCTkzQkNCQzgxMjND
QzZFRjUwMENBMjIyMSAvKiBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlLnNxbGl0ZTMgKi8sCiAJ
CQkJOTNCQ0JDODIyM0NDNkVGNTAwQ0EyMjIxIC8qIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVU
b1YyLmh0bWwgKi8sCiAJCQkJRjQxQUI5OTkxRUY0NjkyQzAwODNGQTA4IC8qIGltYWdlLWFuZC1j
b250ZW50ZWRpdGFibGUuaHRtbCAqLywKQEAgLTM3NzIsNiArMzc4Miw4IEBACiAJCQkJQ0E5N0Iz
OTMyMTkzNjY0NzAwNDVERjZGIC8qIEluZGV4ZWREQlVzZXJEZWxldGUuaHRtbCAqLywKIAkJCQk1
MTEwRkNGMjFFMDFDRDc3MDA2RjhEMEIgLyogSW5kZXhVcGdyYWRlLmJsb2IgKi8sCiAJCQkJNTEx
MEZDRjMxRTAxQ0Q3NzAwNkY4RDBCIC8qIEluZGV4VXBncmFkZS5zcWxpdGUzICovLAorCQkJCTkz
QTI3NEExMjUyMTYzRDYwMEExQjZENCAvKiBJbmRleFVwZ3JhZGVXaXRoTXVsdGlwbGVJbmRpY2Vz
LnNxbGl0ZTMgKi8sCisJCQkJOTNBMjc0QTQyNTIyNDFEMDAwQTFCNkQ0IC8qIEluZGV4VXBncmFk
ZVdpdGhNdWx0aXBsZUluZGljZXNIYXZlU2FtZUlELnNxbGl0ZTMgKi8sCiAJCQkJMkVGRjA2Q0Mx
RDhBNDI5MTAwMDRCQjMwIC8qIGlucHV0LWZpZWxkLWluLXNjcm9sbGFibGUtZG9jdW1lbnQuaHRt
bCAqLywKIAkJCQk5MzdBNkM4ODI0MzU3QkYzMDBDM0E2QjAgLyogS2lsbFdlYlByb2Nlc3NXaXRo
T3BlbkNvbm5lY3Rpb24tMS5odG1sICovLAogCQkJCTkzN0E2Qzg5MjQzNTdCRjMwMEMzQTZCMCAv
KiBLaWxsV2ViUHJvY2Vzc1dpdGhPcGVuQ29ubmVjdGlvbi0yLmh0bWwgKi8sCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRv
VjIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBn
cmFkZVRvVjIubW0KaW5kZXggOTVjY2EwY2UyODE2ZmYxYTZhNDU1YWQwYmQyYzhhNGFhNGYyN2Zl
ZC4uNDE2Y2ExZjlhYjQ5NWJkODc4MTE5ZTFkMzQ1M2U3NjU4YmYwNzUxMiAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1Yy
Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhV
cGdyYWRlVG9WMi5tbQpAQCAtODMsMyArODMsNDIgQEAgVEVTVChJbmRleGVkREIsIEluZGV4VXBn
cmFkZVRvVjIpCiAKICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJPYmplY3QgZXhwZWN0ZWQgdG8gYmUg
YSBibG9iOiBbb2JqZWN0IEJsb2JdIiwgW2xhc3RTY3JpcHRNZXNzYWdlIGJvZHldKTsKIH0KKwor
c3RhdGljIHZvaWQgcnVuTXVsdGlwbGVJbmRpY2VzVGVzdFdpdGhEYXRhYmFzZShOU1N0cmluZyog
ZGF0YWJhc2VOYW1lKQoreworICAgIFJldGFpblB0cjxJREJJbmRleFVwZ3JhZGVUb1YyTWVzc2Fn
ZUhhbmRsZXI+IGhhbmRsZXIgPSBhZG9wdE5TKFtbSURCSW5kZXhVcGdyYWRlVG9WMk1lc3NhZ2VI
YW5kbGVyIGFsbG9jXSBpbml0XSk7CisgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRp
b24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxv
Y10gaW5pdF0pOworICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFk
ZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07
CisKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29y
a1Byb2Nlc3NdOworCisgICAgTlNVUkwgKnVybCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJM
Rm9yUmVzb3VyY2U6ZGF0YWJhc2VOYW1lIHdpdGhFeHRlbnNpb246QCJzcWxpdGUzIiBzdWJkaXJl
Y3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworCisgICAgTlNTdHJpbmcgKmhhc2gg
PSBXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpjb21wdXRlSGFzaEZvckZpbGVOYW1lKCJpbmRl
eC11cGdyYWRlLXRlc3QiKTsKKyAgICBOU1N0cmluZyAqb3JpZ2luRGlyZWN0b3J5ID0gQCJ+L0xp
YnJhcnkvV2ViS2l0L2NvbS5hcHBsZS5XZWJLaXQuVGVzdFdlYktpdEFQSS9XZWJzaXRlRGF0YS9J
bmRleGVkREIvdjEvZmlsZV9fMC8iOworICAgIE5TU3RyaW5nICpkYXRhYmFzZURpcmVjdG9yeSA9
IFtbb3JpZ2luRGlyZWN0b3J5IHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOmhhc2hdIHN0cmluZ0J5
RXhwYW5kaW5nVGlsZGVJblBhdGhdOworICAgIE5TVVJMICp0YXJnZXRVUkwgPSBbTlNVUkwgZmls
ZVVSTFdpdGhQYXRoOmRhdGFiYXNlRGlyZWN0b3J5XTsKKyAgICBbW05TRmlsZU1hbmFnZXIgZGVm
YXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFVSTDp0YXJnZXRVUkwgZXJyb3I6bmlsXTsKKyAgICBb
W05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNyZWF0ZURpcmVjdG9yeUF0VVJMOnRhcmdl
dFVSTCB3aXRoSW50ZXJtZWRpYXRlRGlyZWN0b3JpZXM6WUVTIGF0dHJpYnV0ZXM6bmlsIGVycm9y
Om5pbF07CisKKyAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNvcHlJdGVtQXRV
Ukw6dXJsIHRvVVJMOlt0YXJnZXRVUkwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiSW5k
ZXhlZERCLnNxbGl0ZTMiXSBlcnJvcjpuaWxdOworCisgICAgUmV0YWluUHRyPFdLV2ViVmlldz4g
d2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtl
UmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7
CisKKyAgICBOU1VSTFJlcXVlc3QgKnJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRo
VVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJJbmRleFVwZ3Jh
ZGVUb1YyV2l0aE11bHRpcGxlSW5kaWNlcyIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVj
dG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1
ZXN0OnJlcXVlc3RdOworCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNj
cmlwdE1lc3NhZ2UpOworCisgICAgRVhQRUNUX1dLX1NUUkVRKEAiR2V0IG9iamVjdDoge1wibmFt
ZVwiOlwiYXBwbGVcIixcImNvbG9yXCI6XCJyZWRcIn0iLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9k
eV0pOworfQorCitURVNUKEluZGV4ZWREQiwgSW5kZXhVcGdyYWRlVG9WMldpdGhNdWx0aXBsZUlu
ZGljZXMpCit7CisgICAgcnVuTXVsdGlwbGVJbmRpY2VzVGVzdFdpdGhEYXRhYmFzZShAIkluZGV4
VXBncmFkZVdpdGhNdWx0aXBsZUluZGljZXMiKTsKK30KKworVEVTVChJbmRleGVkREIsIEluZGV4
VXBncmFkZVRvVjJXaXRoTXVsdGlwbGVJbmRpY2VzSGF2ZVNhbWVJRCkKK3sKKyAgICBydW5NdWx0
aXBsZUluZGljZXNUZXN0V2l0aERhdGFiYXNlKEAiSW5kZXhVcGdyYWRlV2l0aE11bHRpcGxlSW5k
aWNlc0hhdmVTYW1lSUQiKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRlVG9WMldpdGhNdWx0aXBsZUluZGljZXMuaHRt
bCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5kZXhVcGdyYWRl
VG9WMldpdGhNdWx0aXBsZUluZGljZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYzAxNjBkZTc5NDEzNmM4
NTgyNTA5MDNhYzk2NTI0N2ZlZGE3Yjk1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyV2l0aE11bHRpcGxl
SW5kaWNlcy5odG1sCkBAIC0wLDAgKzEsNDAgQEAKKzxzY3JpcHQ+CisKK3ZhciBvcGVuUmVxdWVz
dCA9IGluZGV4ZWREQi5vcGVuKCdpbmRleC11cGdyYWRlLXRlc3QnKTsKK29wZW5SZXF1ZXN0Lm9u
dXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgd2luZG93LndlYmtpdC5tZXNz
YWdlSGFuZGxlcnMudGVzdEhhbmRsZXIucG9zdE1lc3NhZ2UoJ1VuZXhwZWN0ZWQgdXBncmFkZW5l
ZWRlZCcpOworICAgIHJldHVybjsKKworICAgIC8vIFRoZSBjb2RlIGJlbG93IHdhcyB1c2VkIHRv
IGdlbmVyYXRlIGRhdGFiYXNlIGZpbGUgSW5kZXhVcGdyYWRlV2l0aE11bHRpcGxlSW5kaWNlcy5z
cWxpdGUzLgorICAgIC8vIEl0IHNob3VsZCBub3QgYmUgcmVhY2hlZCBkdXJpbmcgdXBncmFkZSB0
ZXN0IGJlY2F1c2UgZGF0YWJhc2UgZmlsZSBhbHJlYWR5IGV4aXN0cy4KKyAgICBsZXQgb3MxID0g
ZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ2NvbG9ycycpOworICAgIG9zMS5jcmVhdGVJbmRleCgnbmFt
ZScsICduYW1lJyk7CisgICAgbGV0IG9zMiA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdmcnVpdHMn
KTsKKyAgICBvczIuY3JlYXRlSW5kZXgoJ2NvbG9yJywgJ2NvbG9yJyk7CisgICAgb3MyLmNyZWF0
ZUluZGV4KCduYW1lJywgJ25hbWUnKTsKKyAgICBvczIucHV0KHsgbmFtZTonYXBwbGUnLCBjb2xv
cjoncmVkJyB9LCAxKTsKK30KKworb3BlblJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oZXZl
bnQpIHsKKyAgICBsZXQgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgIHRyeSB7CisgICAg
ICAgIGxldCB0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKFsnZnJ1aXRzJ10pOworICAgICAg
ICBsZXQgY29sb3JJbmRleCA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdmcnVpdHMnKS5pbmRl
eCgnY29sb3InKTsKKyAgICAgICAgbGV0IGdldFJlcXVlc3QgPSBjb2xvckluZGV4LmdldCgncmVk
Jyk7CisgICAgICAgIGdldFJlcXVlc3Qub25zdWNjZXNzID0gKGV2ZW50KSA9PiB7CisgICAgICAg
ICAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2Fn
ZSgiR2V0IG9iamVjdDogIiArICBKU09OLnN0cmluZ2lmeShldmVudC50YXJnZXQucmVzdWx0KSk7
CisgICAgICAgIH0KKyAgICAgICAgZ2V0UmVxdWVzdC5vbmVycm9yID0gKGV2ZW50KSA9PiB7Cisg
ICAgICAgICAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5wb3N0
TWVzc2FnZSgnVW5leHBlY3RlZCBnZXQgZXJyb3InKTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2go
ZSkgeworICAgICAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5w
b3N0TWVzc2FnZSgiVW5leHBlY3RlZCBlcnJvciAtICIgKyBlKTsKKyAgICB9Cit9CisKK29wZW5S
ZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkgeworICAgIHdpbmRvdy53ZWJraXQubWVz
c2FnZUhhbmRsZXJzLnRlc3RIYW5kbGVyLnBvc3RNZXNzYWdlKCJVbmV4cGVjdGVkIGRhdGFiYXNl
IGVycm9yLSAiICsgZSk7Cit9CisKKzwvc2NyaXB0PgorCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4VXBncmFkZVdpdGhNdWx0aXBsZUluZGlj
ZXMuc3FsaXRlMyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhV
cGdyYWRlV2l0aE11bHRpcGxlSW5kaWNlcy5zcWxpdGUzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwYzEzZDRlMzli
YjUxZGUxMGZkOTkwNzI2ZjNkOWU5YzhkOGY5MTYKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDY5
NjMyCnpjbWVJKk9LJWZMMEtvQmBVQnswK1NvM3RGc0E1d1RrdSp0KlgoaU1PKWFHSDNoMnRjUyE9
c241dXtZRzwqa1FlKQp6Zks7aXJ4YispVT5QUDVfR25lKyNZa1RnY1Fmfi19M3RVPk1vbjNFPz9a
JUUlQXE0NHZpMCM/ZWM7K3s9eVVmbVIKenZhKn5pSUZfK2R3bF9gM18oK0s9cztZYyQ3PmM1KEBe
eDZnYzAjfDUxYT5DbXIpWXxJaW1KKjdiM1k5WUsyVn47CnpmfSsyRj07eHR0aGVpZiMxNzhlWThh
JnAyZHRmQnxVSD8/JVgoJCZnZ3ZMODEhaDhlfUttZFdhU2ZGfWQ1NS1RTwp6N1BXSlp4bjhzYFRs
WChuQ0NmSVF2UiFHSmh8WG1hR3VlY1pvdGFHfmpGdl5sY3pPTW5tMiswKU1wa20oTlQjIWkKek9O
b3E7VWQkVGwpbHx3QE9kRTVIPjVIbDRULUxaYWxTfjxfPkUhWmlxR2YoMnY2UHliT0gzS0xaUUhn
PWp7SnRiCno2UG94VzhqTE5SN0R9TyV4OShOJDZ5LV5DJkQ/ZyUtdDx+YUY0eThNbFpSXmA5fTJ9
em8paSEzQn5ROTNCdWc5Ugp6TW5yRVphYnZiSVVkWnBBdm5pdXdaZHloKmFaTVVAYStvc3EyeyZj
ancoYypQJlg+aylZSF93KCFpQ0Nlc2M+aTgKej5Mc1V9K2VOMzRDXj5kNzs8Y3JMUDs3RWlKaU97
UG44bGA9bXcwV0hnRHIkQDN0SiRVR1JjTFIleXJ7KDsoRiZ8Cno/YmRHR19TNiUwPVokK2Nic0pX
KWw8U0dxbHhAanZQKEFEbzZCbVlwdkV8ODVqa3J5MT9RR2tPTGwqfTN2dzZJMgp6XlAlYz0jSC1O
U1ZYczF5XlJ4NCZqRn1iNytaJFJaYCYlbHNaQ3p0ck83NzkqY2RMY1F1N0I0byRgOyN3cFA5Sk8K
ei0+dFo5U3ozIz8lXjBZajN3cGJLP1NmYV8qPHlNOVZ4ZWVOOGooOy01Z1c2T0BwWlpDWTlfVHV7
JnAqMXleVV9qCnp1U3hISFEwU0R2TF84ZGZCfkVyfkNYSX0pb296JVRAbGJEQCMyY0gwPCs7cCNE
Yio4d3ExZFRZcUZRTTxXdnBEOwp6JlU7ZFJIMjV6b2U/aU1CQXlmWFVtd2whOy0tJUtuNiNIO1lS
RjQ8eE17SyM1YENzWkVxRj5KRl5SdCZzJm5LPUsKei1zMHZ9LVNiY0xPbkVANkAzWT12Y0ZPUlk8
MyNPS0VmZ0NZWWRLRmVye2MjMEVmbCpaK1kzVXU+M0dgMXZCUyUwCnp5K3pJfnJjJisrU35tRXUy
VHtMVmBgeEgxV0F6Z0ViWkVQd08xbHdKOXI5IyVWYmdwenw5PUdhbnJkRnB0dDVaQwp6ckJObTR5
fFBiS1M0MWNfRzlxZVVkK3BSOykmRWRpRHJOVSVkYTBHaGFjI2ZJVH43VkJ3PkxFQEhrfD98aFU2
WTcKel5kQS1aTHFHcmwxUTAqfjBSI3wwMDA5SUxLbWRVXlJeWXRvNlFnLUtUNXJefGAwVFRnakhx
Jj97dV81PkFsZkcqCno9R0lveGF3RUJOdjF+Xio4TUNlWS0haXleYGEqeEUkUjdkJTJxMXN9MHRn
XzAwMElhZ2ZCKnNyOTFzQ0xBVndvaQp6Kjl6UzZlXnIwMT0pY1ExMHM7c2lmQipzckFiPGJAMnEx
c30wdG1jJDBgSTlvQSpOLTJVUjc/JChTNX5LdyZjSH0KelZrc3xnMjYkSGxCVng/JF5XVHVleykj
T1o9OT9DfjxOdkNBfE5rRjYwcjJLa0ZnWmQxMFIjfDAwMDlJTEttWSoqCno1SXxyQFY2O3pPMHVX
dVUwSGBCPDVxU1klX3hgXi17eDUmJjl7flhiNUlfSXsxUTAqfjBSI3wwMDA5SUp1bUp1NAp6MTY7
V2o0RkxvWUttWSoqNUlfSXsxUTAqfjBianRxfERXLUhuZ2FwfEFiPGJAMnExc30wdGdfMDAwSVlG
ZmQybyUKenUzdClyMDBJYWdmQipzckFiPGJAMnExdWZFOHlQJEFKRCY3XmU2aHlgWGQ9M0FiPGJA
MnExc30wdGdfMDAwSWFnCnpmV1llJkkyTz5SXiMkfFo7YCVLcz1kM3RvK2UqJklrODBZYUs1c2hh
eD4+UVZTYXpqUUYyelN4WjdqWXNHaWAySwp6ZztMKFNIQCZAZSg+Qytndn0wQUFxZTU9Q1VeIS05
Wm85TGNKTl9UZ0ExVjU4VWpQNTs+biRNUGg1IU54QWI8YkAKejJxMXN9MHRnXzAwMEpFWmolbX1Q
e2h+bk5zNVU4Znk4bkxQVVc7bURqZHxgUjByaU1COEVMeCE7RXc7UmBVNkZPCnpFWit6U0FiPGJA
MnExc30wdGdfMDAwSWFnQFFNWHkpU3huYUh5cXh1dytse1hlWENmZ0lBX2xNQkdqeU5mNkl6MAp6
O1F7fjhAKEpPOHYofWJfQlF2NiZNNk8mYyt5NTtJY2w9K35VbnUldEB7TkUxMHRnXzAwMElhZ2ZC
KnNyQWI8YkAKejJTfWgjNkdCeHJFZlQ1c3xEUCFPMztvRmZEai1FYzAwOUlMS21ZKio1SV9JezFR
MDtyfDA+WTA0VTc4QzI1TGtiCnpqP2B9JmFQUi11YlhDIVIoNjdvNTBzO3NpZkIqc3JBYjxiQDJx
MXN9MHRaeEpNR0s0THFJeDE2UiFpPGZAO2k2cAp6fDArfjE7TjZSVnJRK0N5KCNAI0l4K3tjLWp0
cX5+RWdFO2BfcUV2PVN2NEdxaVJ3R3l1LUREKm1ndVV0TWxZJDMKekV7a3lGYypNPUJufl8oTihm
YWZNJmxVWW97ZHJwPG1fel5wMVEwKn4wUiN8MDAwOUlMS21kV2FTczxXbEF9bjg4CmpCK1Q+d1oq
eFZHY0xXZVgwMDlJTEttWSoqNUlfSXsxaUFebGVFJEMqPXNMSGQKCmxpdGVyYWwgMApIY21WP2Qw
MDAwMQoKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW5kZXhVcGdyYWRlV2l0aE11bHRpcGxlSW5kaWNlc0hhdmVTYW1lSUQuc3FsaXRlMyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhVcGdyYWRlV2l0aE11bHRpcGxl
SW5kaWNlc0hhdmVTYW1lSUQuc3FsaXRlMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZmU3Njc4NzEzNzY2MTZmYjE4
MTY1MzBkODhkMTlkYTgyODliM2I4CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA4NjAxNgp6Y21l
SSktKjROLTBsQEopUW5FekhIV21NPDdJO3xidl9gRGktbH1kdSg2dkVoVFNfMlF1QG5ERCtyMm9u
TVIjZngKeiQpKUhuRExTbjNfT30wXks+SDZBZCtQSEJZPHViSl9QaUc4YjVOaV8oTFFWZ3dqKUk9
cUdIS2ZRVEs9UHI3aHttCnpCYWU1VkpNelJ8K1BHT1BkeWNoTmJNTS1vXilyellua0tHVG1KbVck
dVBPQiEzJlp8ck91ZGM8Y0AqZ0pzZihZaQp6e0IxUChqeU1+Q1BuYlUqYCo4RlJxdGhkWVhNUTx5
WkRleHomWTlgTj9vY0B+N3lybn0jb3NnSEBvV0JIa014S18KejBEKTUhTldMUjRvbnJFWG56WSko
eT50cD95RjQrSnpCdztOeG10NFcpbkJpdVVHPXRvO01JY2g/WHtpUG9MejZqCnp0R1EwMHg+d3VJ
YzEpT1Q3LXRqZD1Wb1EmZzx5ZSNwVVMka1RYUmVHPTBgQjRlZShGcWRWWG0kWnh2UV5gSW9Lcwp6
bjY/RzF3YmUrSkhDSm9QTnA4VnY4eDByQldnNT8kaVMpJmJeNi0qcD9eSylAbyVgM0VzXmkpIV93
fnB+RCRLJj4KeihzRDZ4TVdRLVpxO2syTHpte0xPUkBYTUkpdmFSRCYpQ1lePmVYVWxXeilMNFI0
N19vdEEoM2VgTjtKM3tFZ3okCnpOYEFyR0ojYnk4Plp2dUhvS1dXMylLTDJSI2Nua2IkPm54N0dK
NXYjPVZPV1ZgU2JHayY2MD1hZCRtQDtqRmgtRgp6Kl90YnRQUmBrYVJraU9yKUBKQD9XemZ3YlFZ
RDM0S2RJaHY/JSVNelVzPW49d2RHejNtK00+QV42TGpxS1dXfVEKenNDZWFrKXBQcTFBOSsqVUlm
WUg/eEZqITZ7eSZAOUdhWn1SKVp0VShpUyshdXtNflBacnJpPFVGKipeYz48YjtTCno3YjJCQFc0
JjtGWTVmKUojciFNWHRLaGdjP3pqRUU4YjxlcGA+bFV9Y1R9a0VvP1FLeiMtYjUwOWk5IUMzYzJO
Kwp6dHdNR14qbjQlMTRvOD9lQkNSPTx5QXp1SGFWMllRYGZ1MTMpbmE+WkdudmM3eTs/O19tYlNB
VTZWNWEpNEYjTTEKejtwTCNYJWF6KkIpcEV0RHcqcllzNW5HZTN4ZzltQClfVT1UezJmPW9YMSh2
Sil2VFZwUXxPakpDWXV+ZT1nKVdCCnoqUj9YYntZKSFwV0UxQEBsNUgpTFIyIW9JNXspT35pUygw
QyUwfDhBNiF1YTZ5a1QoWTV2d3BGKGp+MGRldG1Lfgp6VChFWmZeMzdDWmlTJG9aPVEmbU9gXntq
dDlJaUNuTUwrQ0s8Ni10NT9LWHAxQU1HJWtOdmZfPUhSSl49WHBXaH4KelUrOVZTPn07ZjtYa1RG
JWp6dVdpdiEoVk9LfkRTSHp0YEhrPzAoYypvN35EO3VeNDx1JFN3RVdGQEAhN0hzayZtCnpZUmch
JiNRcFNGbmNKR09vMGc1eWZaIU41SiFBe041ajFQNmVMbGFFIXRxRj5EbH1eOyk3WCVTXnpeaG17
N3VrSwp6ISYkPSpFbUE0UkN2JlJFSi1VODNfe1BfISp3KEZOTSU1TjUmQSRydSZ3dX58MnExc30w
dGdfMDAwSWFnZkIqdkQKelMlSyRlVCtXbilDYWgpX0tZSm1lMC1DeH58RihaK0FRZXt1ZHc7Kjtf
PGBNOHJSSnY4bUhvRn1yfVNTbjQ2QXZpCnpgSSU3djM8d35BMDBJYWdmQipzckFiPGJAMnB9Klow
JWxDazc7V2JZTSRKIXpYMSopVGNnO1R5TkQoT3AwdGdfMAp6MDBJYWdmQipzckFiPGJALSFGazUk
c3M5Y1hBRTV2eEJhS19VRXpxNWN6QmB6Zn5NalpvQUspRXpPY288YG0zbjkKejk/cWpDcFlLcz58
TjZnWHt6YUd7dDJZSiY1SV9JezFRMCp+MFIjfDAwMDlJTF8qTW07P1k4ekcjKUM1aSREYmdXCnpp
TDI4Q1FXditvb2dMOHA9bHw3QHt4S2tjMDBJYWdmQipzckFiPGJAMnExdkswMUkmWktmc2tzKEdX
bFkwUiN8MAp6MDA5SUxLbVkqKjVDe2VRYH5TS0FQamYmMzBSI3wwMDA5SUxLbVkqKjVJfHRDMXZ2
ZzY/RTBtMjJxMXN9MHRnXzAKejAwSWFnZkIqc3JfeVlkQHwxdG1me353cWluamZlRDB8RSNqZkIq
c3JBYjxiQDJxMXN9MHRrR3cwK1RVKShZJFdvCnpUaWJjZis0Vk5PbihHdkQqJEd7ckgqPmFVQDdR
KGNtZ0NtVHdRNj1vKGBVMHM2SWJvS1BQdGxnP2t5aGR6dnxqMAp6WFZHKSYtaEA9a1UzV2FZcT9T
RWUmY0ZVMkdkfmRLS1pFMXtQcnVtJHZOaSt8S21ZKio1SV9JezFRMCp+MFIjfX0KekF+Mn5oJUZk
R2x1P2MtJTl2JUxOJE0kK2twS1ZSXlBZR3pfYG49SWAwKVhIRD4hUXFMMVEwKn4wUiN8MDAwOUlM
CnpLbVkqKjIxdFBDe3xCZnRER0NBekFiPGJAMnExc30wdGdfMDAwTy1RRyFeYU4zTlhAcEhld00j
MDA5SUxLbVkqKgp6NUlfSXsxUTA7cmB6U0RLejlqVXFfbDViI3ZHK34/RUMyJW4ycTFzfTB0Z18w
MDBJYWdmQip2RHVFM1UtbHhmLWMKekt7QmNEKSsja3UrdTUmXz4pejgofDNoa2VZfTMySEA3JF87
Wm5ecXVOXlMqbkJ1Ql4zTypiPHdXdGpQUk08SGY1CnpeclcxVWpWRHlIUnNTTFI5O3Q1bkd4VT9G
ckItc1FWP3wlWD11TWU0clZLeDtlbiE1UWpRU1YtSFMtSCR7Iyg1PAp6QWI8YkAycTFzfTB0Z18w
MDBJYWdmV1k3ZyM1NyRkKWtgOyR7YDNFdWBLMilicXV2LTBLbVkqKjVJX0l7MVEwKn4KejBSI3ww
VjFOWVR4fEV1eD54Uiloe3tMSzx8MXYpeHBhTjE5MVEwKn4wUiN8MDAwOUlMS21ZKio5KFJHRW1e
OVNVCnplX1ZZU1RKISRAd31rbTteUjM0bmhWbW5UMDBJYWdmQipzckFiPGJAMnExNzgwI34lU0lR
Sz8hJnBqeDZeYG9jeAp6fDFQIVFyd21kZWNfITZkWXdOY1FecDBHTlV5KHJ5IUgqcSR3R19Eanpy
JlBLMVEwKn4wUiN8MDAwOUlMS21ZKioKejIxY09ze3tJS1V7TCp8ZEZ2WClGMnExc30wdGdfMDAw
SWFnZkIqc3JKaVk/TWBaP0xXKkZaRCRiNEslfmYmVCU5CkN6fisodwoKbGl0ZXJhbCAwCkhjbVY/
ZDAwMDAxCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409928</attachid>
            <date>2020-09-28 16:28:21 -0700</date>
            <delta_ts>2020-09-29 11:00:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216962-20200928162820.patch</filename>
            <type>text/plain</type>
            <size>42427</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NjY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzU0ZTAyMzlhMmMwNDM2
ODU0OTBhMDcwMDg3OWU4ZjdhYTQzNzEzOC4uNzAyNjAwNmE3NWE2MzVmMDJiMmZhYWQwZmM2MjY4
YjYyYmViMDhiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDIwLTA5LTI4ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQiBJbmRleCBD
b3JydXB0aW9uIGFmdGVyIHVwZ3JhZGUgZnJvbSBpT1MgMTMgdG8gaU9TIDE0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY5NjIKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY5NTg3MDA0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoZXJlIGlzIGFuIGltcGxlbWVudGF0aW9uIGVycm9yIGluIHIyNTUz
MTgsIHdoaWNoIHVwZGF0ZWQgaW5kZXggSUQgaW4gZGF0YWJhc2UgSW5kZXhJbmZvIGFuZCBJbmRl
eFJlY29yZHMgCisgICAgICAgIHRhYmxlczogaXQgbWFkZSBjaGFuZ2VzIHRvIG9yaWdpbmFsIHRh
YmxlIHdoaWxlIGl0ZXJhdGluZyByZWNvcmRzIG9mIGl0LiBUaGlzIG1lYW5zIG1vZGlmaWVkIHJl
Y29yZHMgY2FuCisgICAgICAgIGJlIG1vZGlmaWVkIGFnYWluLCB3aGljaCBsZWFkcyB0byB0aGF0
IHR3byBpbmRpY2VzIGhhdmUgdGhlIHNhbWUgaW5kZXggSUQuIEFzIGluZGV4IElEIGlzIHN1cHBv
c2VkIHRvIGJlIHVuaXF1ZSwKKyAgICAgICAgc29tZSBpbmRpY2VzIGFuZCBpbmRleCByZWNvcmRz
IGNhbm5vdCBiZSBwb3B1bGF0ZWQgYW5kIGNsaWVudHMgd2lsbCBmaW5kIHNvbWUgaW5kaWNlcyBh
cmUgbWlzc2luZy4KKworICAgICAgICBUbyBmaXggdGhpcywgd2UgbmVlZCB0byBjaGFuZ2UgdGhl
IGltcGxlbWVudGF0aW9uIG9mIElEIHVwZGF0ZSBhbmQgZGVhbCB3aXRoIGFscmVhZHkgY29ycnVw
dGVkIHRhYmxlcy4gRm9yIGluZGV4CisgICAgICAgIElEIHVwZGF0ZSwgbm93IHdlIGNyZWF0ZSBh
IHRlbXBvcmFyeSB0YWJsZSBmb3Igc3RvcmluZyB0aGUgdXBkYXRlZCByZWNvcmRzLCBhbmQgcmVw
bGFjZSB0aGUgb3JpZ2luYWwgdGFibGUgd2l0aCAKKyAgICAgICAgdGVtcG9yYXJ5IHRhYmxlIGF0
IHRoZSBlbmQgb2YgaXRlcmF0aW9uLiBGb3IgdGhlIGNvcnJ1cHRpb24gaXNzdWUsIHdlIGNoZWNr
IGlmIEluZGV4SW5mbyB0YWJsZSBoYXMgZHVwbGljYXRlIAorICAgICAgICBpbmRleCBJRHMuIElm
IGl0IGhhcywgd2UgdHJ5IHJlY292ZXJpbmcgSW5kZXhJbmZvIGFuZCBJbmRleFJlY29yZHMgdGFi
bGUgYnkgcmVtb3ZpbmcgcmVjb3JkcyB3aXRoIGR1cGxpY2F0ZSAKKyAgICAgICAgaW5kZXggSURz
LCBhc3NpZ25pbmcgbmV3IElEcyB0byBkdXBsaWNhdGUgaW5kaWNlcywgYW5kIGFkZGluZyByZWNv
cmRzIHdpdGggdXBkYXRlZCBpbmRleCBJRHMuCisKKyAgICAgICAgQVBJIHRlc3RzOiBJbmRleGVk
REIuSW5kZXhVcGdyYWRlVG9WMldpdGhNdWx0aXBsZUluZGljZXMKKyAgICAgICAgICAgICAgICAg
ICBJbmRleGVkREIuSW5kZXhVcGdyYWRlVG9WMldpdGhNdWx0aXBsZUluZGljZXNIYXZlU2FtZUlE
CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0
b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6aW5kZXhJbmZvVGFibGVTY2hl
bWEpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbERhdGFiYXNlSW5mbyk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6bWlncmF0ZUluZGV4SW5mb1RhYmxl
Rm9ySURVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNr
aW5nU3RvcmU6Om1pZ3JhdGVJbmRleFJlY29yZHNUYWJsZUZvcklEVXBkYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZW1vdmVFeGlzdGlu
Z0luZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0
b3JlOjphZGRFeGlzdGluZ0luZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FM
aXRlSURCQmFja2luZ1N0b3JlOjpoYW5kbGVEdXBsaWNhdGVJbmRleElEcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5n
RGF0YWJhc2VJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFj
a2luZ1N0b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6dXBkYXRlT25lSW5kZXhGb3JBZGRSZWNvcmQpOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaDoKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZvLmg6CisgICAgICAg
IChXZWJDb3JlOjpJREJJbmRleEluZm86OnNldElkZW50aWZpZXIpOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmplY3RTdG9yZUluZm8uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmVJbmZvOjphZGRFeGlzdGluZ0luZGV4KToKKwogMjAyMC0wOS0y
NyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQu
IENhbGwgc2hvd0xheW91dFRyZWUgb25seSB3aGVuIHRyZWVzIGFyZSBtaXNtYXRjaGluZy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJ
REJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggNGY5N2RlNzIxM2QwNjgxMTQ1MTY5
ZDMwYWM0NzFjMTg3NDFmNTNkYS4uMTEyNzllMDFjN2I5ODI5N2I4YzI5Zjg5NDcxNWE0OWMwZGY5
ODI4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTIzOSw2ICsyMzks
MTEgQEAgc3RhdGljIFN0cmluZyBjcmVhdGVWMk9iamVjdFN0b3JlSW5mb1NjaGVtYShBU0NJSUxp
dGVyYWwgdGFibGVOYW1lKQogICAgIHJldHVybiBtYWtlU3RyaW5nKCJDUkVBVEUgVEFCTEUgIiwg
dGFibGVOYW1lLCAiIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIE5PVCBOVUxMIE9OIENPTkZMSUNU
IEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUwsIG5hbWUgVEVYVCBOT1QgTlVMTCBPTiBDT05G
TElDVCBGQUlMIFVOSVFVRSBPTiBDT05GTElDVCBGQUlMLCBrZXlQYXRoIEJMT0IgTk9UIE5VTEwg
T04gQ09ORkxJQ1QgRkFJTCwgYXV0b0luYyBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZB
SUwpIik7CiB9CiAKK3N0YXRpYyBTdHJpbmcgaW5kZXhJbmZvVGFibGVTY2hlbWEoQVNDSUlMaXRl
cmFsIHRhYmxlTmFtZSkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiQ1JFQVRFIFRBQkxFICIs
IHRhYmxlTmFtZSwgIiAoaWQgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCBuYW1l
IFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgb2JqZWN0U3RvcmVJRCBJTlRFR0VSIE5P
VCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIGtleVBhdGggQkxPQiBOT1QgTlVMTCBPTiBDT05GTElD
VCBGQUlMLCBpc1VuaXF1ZSBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIG11bHRp
RW50cnkgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKSIpOworfQorCiBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZShQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZVJvb3REaXJlY3RvcnkpCiAgICAgOiBtX3Nlc3Npb25JRChzZXNzaW9uSUQp
CiAgICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKQEAgLTYwNyw3ICs2MTIsNyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0
ZUFuZFBvcHVsYXRlSW5pdGlhbAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAg
ICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgSW5kZXhJbmZv
IChpZCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIG5hbWUgVEVYVCBOT1QgTlVM
TCBPTiBDT05GTElDVCBGQUlMLCBvYmplY3RTdG9yZUlEIElOVEVHRVIgTk9UIE5VTEwgT04gQ09O
RkxJQ1QgRkFJTCwga2V5UGF0aCBCTE9CIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIGlzVW5p
cXVlIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgbXVsdGlFbnRyeSBJTlRFR0VS
IE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpOyIpKSB7CisgICAgaWYgKCFtX3NxbGl0ZURCLT5l
eGVjdXRlQ29tbWFuZChpbmRleEluZm9UYWJsZVNjaGVtYSgiSW5kZXhJbmZvIl9zKSkpIHsKICAg
ICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIEluZGV4SW5mbyB0YWJsZSBpbiBkYXRh
YmFzZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFz
dEVycm9yTXNnKCkpOwogICAgICAgICBjbG9zZVNRTGl0ZURCKCk7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwpAQCAtNzIzLDYgKzcyOCwyNTkgQEAgT3B0aW9uYWw8SXNTY2hlbWFVcGdyYWRlZD4g
U1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZE9iamVjdFN0b3JlSW5mb1RhYmwKICAg
ICByZXR1cm4geyBJc1NjaGVtYVVwZ3JhZGVkOjpZZXMgfTsKIH0KIAorYm9vbCBTUUxpdGVJREJC
YWNraW5nU3RvcmU6Om1pZ3JhdGVJbmRleEluZm9UYWJsZUZvcklEVXBkYXRlKGNvbnN0IEhhc2hN
YXA8c3RkOjpwYWlyPHVpbnQ2NF90LCB1aW50NjRfdD4sIHVpbnQ2NF90PiYgaW5kZXhJRE1hcCkK
K3sKKyAgICBTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UgPSAqbV9zcWxpdGVEQjsKKyAgICBTUUxp
dGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihkYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVn
aW4oKTsKKworICAgIGlmICghZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoaW5kZXhJbmZvVGFibGVT
Y2hlbWEoIl9UZW1wX0luZGV4SW5mbyJfcykpKSB7CisgICAgICAgIExPR19FUlJPUigiRXJyb3Ig
Y3JlYXRpbmcgX1RlbXBfSW5kZXhJbmZvIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIGRh
dGFiYXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0
ZW1lbnQoZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG5hbWUsIG9iamVjdFN0b3JlSUQsIGtleVBhdGgs
IGlzVW5pcXVlLCBtdWx0aUVudHJ5IEZST00gSW5kZXhJbmZvOyJfcyk7CisgICAgICAgIGlmIChz
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgTE9HX0VSUk9S
KCJFcnJvciBwcmVwYXJpbmcgc3RhdGVtZW50IHRvIGZldGNoIHJlY29yZHMgZnJvbSBJbmRleElu
Zm8gdGFibGUgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgICAgICB3aGlsZSAocmVzdWx0
ID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGlkID0gc3RhdGVtZW50Lmdl
dENvbHVtbkludDY0KDApOworICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZW1lbnQuZ2V0
Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0
ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMik7CisgICAgICAgICAgICB1aW50NjRfdCBuZXdJRCA9IGlu
ZGV4SURNYXAuZ2V0KHsgb2JqZWN0U3RvcmVJRCwgaWQgfSk7CisgICAgICAgICAgICBWZWN0b3I8
dWludDhfdD4ga2V5UGF0aEJ1ZmZlcjsKKyAgICAgICAgICAgIHN0YXRlbWVudC5nZXRDb2x1bW5C
bG9iQXNWZWN0b3IoMywga2V5UGF0aEJ1ZmZlcik7CisgICAgICAgICAgICBib29sIHVuaXF1ZSA9
IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoNCk7CisgICAgICAgICAgICBib29sIG11bHRpRW50cnkg
PSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDUpOworCisgICAgICAgICAgICBhdXRvIHNxbCA9IGNh
Y2hlZFN0YXRlbWVudChTUUw6OkNyZWF0ZVRlbXBJbmRleEluZm8sICJJTlNFUlQgSU5UTyBfVGVt
cF9JbmRleEluZm8gVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/KTsiX3MpOworICAgICAgICAgICAg
aWYgKCFzcWwKKyAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgxLCBuZXdJRCkgIT0g
U1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3FsLT5iaW5kVGV4dCgyLCBuYW1lKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgzLCBvYmplY3RTdG9y
ZUlEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRCbG9iKDQsIGtl
eVBhdGhCdWZmZXIuZGF0YSgpLCBrZXlQYXRoQnVmZmVyLnNpemUoKSkgIT0gU1FMSVRFX09LCisg
ICAgICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50KDUsIHVuaXF1ZSkgIT0gU1FMSVRFX09LCisg
ICAgICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50KDYsIG11bHRpRW50cnkpICE9IFNRTElURV9P
SworICAgICAgICAgICAgICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAg
ICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBhZGRpbmcgaW5kZXggJyVzJyB0byBfVGVtcF9J
bmRleEluZm8gdGFibGUgKCVpKSAtICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBkYXRhYmFzZS5s
YXN0RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVzdWx0ID0gc3RhdGVt
ZW50LnN0ZXAoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RP
TkUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZmV0Y2hpbmcgaW5kaWNlcyBmcm9t
IEluZGV4SW5mbyB0YWJsZSAoJWkpIC0gJXMiLCAgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmICghZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkRST1AgVEFCTEUg
SW5kZXhJbmZvIikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBkcm9wcGluZyBleGlzdGlu
ZyBJbmRleEluZm8gdGFibGUgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGlmICghZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkFMVEVSIFRBQkxFIF9UZW1wX0luZGV4SW5m
byBSRU5BTUUgVE8gSW5kZXhJbmZvIikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJFcnJvciByZW5h
bWluZyBfVGVtcF9JbmRleEluZm8gdGFibGUgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9y
KCksIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6bWlncmF0ZUluZGV4UmVjb3Jkc1RhYmxlRm9ySURV
cGRhdGUoY29uc3QgSGFzaE1hcDxzdGQ6OnBhaXI8dWludDY0X3QsIHVpbnQ2NF90PiwgdWludDY0
X3Q+JiBpbmRleElETWFwKQoreworICAgIFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSA9ICptX3Nx
bGl0ZURCOworICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKGRhdGFiYXNlKTsKKyAg
ICB0cmFuc2FjdGlvbi5iZWdpbigpOworCisgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29tbWFu
ZCh2M0luZGV4UmVjb3Jkc1RhYmxlU2NoZW1hKCJfVGVtcF9JbmRleFJlY29yZHMiKSkpIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJFcnJvciBjcmVhdGluZyBfVGVtcF9JbmRleFJlY29yZHMgdGFibGUg
aW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHsKKyAg
ICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChkYXRhYmFzZSwgIlNFTEVDVCBpbmRleElE
LCBvYmplY3RTdG9yZUlELCBrZXksIHZhbHVlLCBvYmplY3RTdG9yZVJlY29yZElEIEZST00gSW5k
ZXhSZWNvcmRzOyJfcyk7CisgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElU
RV9PSykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBwcmVwYXJpbmcgc3RhdGVtZW50
IHRvIGZldGNoIHJlY29yZHMgZnJvbSB0aGUgSW5kZXhSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIs
IGRhdGFiYXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpbnQgcmVzdWx0ID0gc3Rh
dGVtZW50LnN0ZXAoKTsKKyAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Cisg
ICAgICAgICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAg
ICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50
NjQoMSk7CisgICAgICAgICAgICB1aW50NjRfdCBuZXdJRCA9IGluZGV4SURNYXAuZ2V0KHsgb2Jq
ZWN0U3RvcmVJRCwgaWQgfSk7CisgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4ga2V5QnVmZmVy
OworICAgICAgICAgICAgc3RhdGVtZW50LmdldENvbHVtbkJsb2JBc1ZlY3RvcigyLCBrZXlCdWZm
ZXIpOworICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlQnVmZmVyOworICAgICAgICAg
ICAgc3RhdGVtZW50LmdldENvbHVtbkJsb2JBc1ZlY3RvcigzLCB2YWx1ZUJ1ZmZlcik7CisgICAg
ICAgICAgICB1aW50NjRfdCByZWNvcmRJRCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCg0KTsK
KworICAgICAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpQdXRUZW1wSW5k
ZXhSZWNvcmQsICJJTlNFUlQgSU5UTyBfVGVtcF9JbmRleFJlY29yZHMgVkFMVUVTICg/LCA/LCBD
QVNUKD8gQVMgVEVYVCksIENBU1QoPyBBUyBURVhUKSwgPyk7Il9zKTsKKyAgICAgICAgICAgIGlm
ICghc3FsCisgICAgICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoMSwgbmV3SUQpICE9IFNR
TElURV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDIsIG9iamVjdFN0b3Jl
SUQpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZEJsb2IoMywga2V5
QnVmZmVyLmRhdGEoKSwga2V5QnVmZmVyLnNpemUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAg
ICAgICAgfHwgc3FsLT5iaW5kQmxvYig0LCB2YWx1ZUJ1ZmZlci5kYXRhKCksIHZhbHVlQnVmZmVy
LnNpemUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQo
NSwgcmVjb3JkSUQpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC0+c3RlcCgp
ICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBhZGRp
bmcgaW5kZXggcmVjb3JkIHRvIF9UZW1wX0luZGV4UmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBk
YXRhYmFzZS5sYXN0RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVzdWx0
ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXN1bHQgIT0g
U1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZmV0Y2hpbmcgaW5k
ZXggcmVjb3JkIGZyb20gZGF0YWJhc2Ugb24gZGlzayAoJWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0
RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29tbWFu
ZCgiRFJPUCBUQUJMRSBJbmRleFJlY29yZHMiKSkgeworICAgICAgICBMT0dfRVJST1IoIkVycm9y
IGRyb3BwaW5nIGV4aXN0aW5nIEluZGV4UmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBkYXRhYmFz
ZS5sYXN0RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiQUxURVIg
VEFCTEUgX1RlbXBfSW5kZXhSZWNvcmRzIFJFTkFNRSBUTyBJbmRleFJlY29yZHMiKSkgeworICAg
ICAgICBMT0dfRVJST1IoIkVycm9yIHJlbmFtaW5nIHRlbXBvcmFyeSBJbmRleFJlY29yZHMgdGFi
bGUgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHRyYW5zYWN0aW9uLmNv
bW1pdCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6cmVtb3ZlRXhpc3RpbmdJbmRleCh1aW50NjRfdCBpbmRleElEKQoreworICAgIFNRTGl0ZVRy
YW5zYWN0aW9uIHRyYW5zYWN0aW9uKCptX3NxbGl0ZURCKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdp
bigpOworCisgICAgeworICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OlJl
bW92ZUluZGV4SW5mbywgIkRFTEVURSBGUk9NIEluZGV4SW5mbyBXSEVSRSBpZCA9ID87Il9zKTsK
KyAgICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDEsIGluZGV4
SUQpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RP
TkUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHJlbW92ZSBleGlzdGluZyBp
bmRleCBmcm9tIEluZGV4SW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJy
b3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvIHNxbCA9IGNhY2hl
ZFN0YXRlbWVudChTUUw6OkRlbGV0ZUluZGV4UmVjb3JkcywgIkRFTEVURSBGUk9NIEluZGV4UmVj
b3JkcyBXSEVSRSBpbmRleElEID0gPzsiX3MpOworICAgICAgICBpZiAoIXNxbAorICAgICAgICAg
ICAgfHwgc3FsLT5iaW5kSW50NjQoMSwgaW5kZXhJRCkgIT0gU1FMSVRFX09LCisgICAgICAgICAg
ICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gcmVtb3ZlIGV4aXN0aW5nIGluZGV4IGZyb20gSW5kZXhSZWNvcmRzIHRhYmxl
ICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJy
b3JNc2coKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZEV4aXN0aW5nSW5kZXgoSURCT2JqZWN0U3RvcmVJbmZv
JiBvYmplY3RTdG9yZUluZm8sIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbykKK3sKKyAgICBTUUxp
dGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbigqbV9zcWxpdGVEQik7CisgICAgdHJhbnNhY3Rpb24u
YmVnaW4oKTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGtleVBhdGhCbG9iID0gc2VyaWFs
aXplSURCS2V5UGF0aChpbmZvLmtleVBhdGgoKSk7CisgICAgaWYgKCFrZXlQYXRoQmxvYikgewor
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBzZXJpYWxpemUgSURCS2V5UGF0aCB0byBzYXZl
IGluIGRhdGFiYXNlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6Q3JlYXRlSW5kZXhJbmZvLCAi
SU5TRVJUIElOVE8gSW5kZXhJbmZvIFZBTFVFUyAoPywgPywgPywgPywgPywgPyk7Il9zKTsKKyAg
ICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDEsIGluZm8uaWRl
bnRpZmllcigpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMiwg
aW5mby5uYW1lKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQo
MywgaW5mby5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAg
ICB8fCBzcWwtPmJpbmRCbG9iKDQsIGtleVBhdGhCbG9iLT5kYXRhKCksIGtleVBhdGhCbG9iLT5z
aXplKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50KDUsIGluZm8u
dW5pcXVlKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50KDYsIGlu
Zm8ubXVsdGlFbnRyeSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC0+c3RlcCgp
ICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBhZGQg
aW5kZXggJyVzJyB0byBJbmRleEluZm8gdGFibGUgKCVpKSAtICVzIiwgaW5mby5uYW1lKCkudXRm
OCgpLmRhdGEoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJv
ck1zZygpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHsKKyAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRPYmplY3RT
dG9yZVJlY29yZHMsICJTRUxFQ1Qga2V5LCB2YWx1ZSwgcmVjb3JkSUQgRlJPTSBSZWNvcmRzIFdI
RVJFIG9iamVjdFN0b3JlSUQgPSA/OyJfcyk7CisgICAgICAgIGlmICghc3FsCisgICAgICAgICAg
ICB8fCBzcWwtPmJpbmRJbnQ2NCgxLCBpbmZvLm9iamVjdFN0b3JlSWRlbnRpZmllcigpKSAhPSBT
UUxJVEVfT0spIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3Rh
dGVtZW50IG9yIGJpbmQgdmFsdWVzICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigp
LCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKworICAgICAgICBpbnQgcmVzdWx0ID0gc3FsLT5zdGVwKCk7CisgICAgICAg
IHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+IGtleUJ1ZmZlcjsKKyAgICAgICAgICAgIElEQktleURhdGEga2V5RGF0YTsKKyAgICAgICAg
ICAgIHNxbC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDAsIGtleUJ1ZmZlcik7CisgICAgICAgICAg
ICBpZiAoIWRlc2VyaWFsaXplSURCS2V5RGF0YShrZXlCdWZmZXIuZGF0YSgpLCBrZXlCdWZmZXIu
c2l6ZSgpLCBrZXlEYXRhKSkgeworICAgICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRv
IGRlc2VyaWFsaXplIGtleSBkYXRhIGZyb20gZGF0YWJhc2Ugd2hpbGUgZ2V0dGluZyBhbGwgcmVj
b3JkcyIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlQnVmZmVyOworICAgICAgICAgICAgc3Fs
LT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMSwgdmFsdWVCdWZmZXIpOworICAgICAgICAgICAgYXV0
byB2YWx1ZSA9IFRocmVhZFNhZmVEYXRhQnVmZmVyOjpjcmVhdGUoV1RGTW92ZSh2YWx1ZUJ1ZmZl
cikpOworCisgICAgICAgICAgICB1aW50NjRfdCByZWNvcmRJRCA9IHNxbC0+Z2V0Q29sdW1uSW50
NjQoMik7CisgICAgICAgICAgICBJREJFcnJvciBlcnJvciA9IHVwZGF0ZU9uZUluZGV4Rm9yQWRk
UmVjb3JkKG9iamVjdFN0b3JlSW5mbywgaW5mbywga2V5RGF0YSwgdmFsdWUsIHJlY29yZElEKTsK
KyAgICAgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgICAgICByZXN1bHQgPSBzcWwtPnN0ZXAoKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgIExPR19F
UlJPUigiRXJyb3IgZmV0Y2hpbmcgb2JqZWN0IHJlY29yZHMgZnJvbSBSZWNvcmRzIHRhYmxlIG9u
IGRpc2siKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6aGFuZGxlRHVwbGljYXRlSW5kZXhJRHMoY29uc3QgSGFzaE1h
cDx1aW50NjRfdCwgVmVjdG9yPElEQkluZGV4SW5mbz4+JiBpbmRleEluZm9NYXAsIElEQkRhdGFi
YXNlSW5mbyYgZGF0YWJhc2VJbmZvKQoreworICAgIGZvciAoYXV0byYgW2luZGV4SUQsIGluZm9z
XSA6IGluZGV4SW5mb01hcCkgeworICAgICAgICBpZiAoaW5mb3Muc2l6ZSgpID09IDEpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoIXJlbW92ZUV4aXN0aW5nSW5kZXgoaW5k
ZXhJRCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZm9yIChhdXRvIGlu
Zm8gOiBpbmZvcykgeworICAgICAgICAgICAgYXV0byBvYmplY3RTdG9yZUluZm8gPSBkYXRhYmFz
ZUluZm8uaW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUoaW5mby5vYmplY3RTdG9yZUlkZW50aWZp
ZXIoKSk7CisgICAgICAgICAgICBBU1NFUlQob2JqZWN0U3RvcmVJbmZvKTsKKyAgICAgICAgICAg
IG9iamVjdFN0b3JlSW5mby0+ZGVsZXRlSW5kZXgoaW5mby5pZGVudGlmaWVyKCkpOworCisgICAg
ICAgICAgICAvLyBBIG5ldyBpbmRleCB3aXRoIHRoZSBzYW1lIG5hbWUgbWF5IGFscmVhZHkgYmUg
YWRkZWQuCisgICAgICAgICAgICBpZiAob2JqZWN0U3RvcmVJbmZvLT5oYXNJbmRleChpbmZvLm5h
bWUoKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGluZm8uc2V0
SWRlbnRpZmllcihkYXRhYmFzZUluZm8uZ2VuZXJhdGVOZXh0SW5kZXhJRCgpKTsKKyAgICAgICAg
ICAgIGlmICghYWRkRXhpc3RpbmdJbmRleCgqb2JqZWN0U3RvcmVJbmZvLCBpbmZvKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIG9iamVjdFN0b3JlSW5mby0+
YWRkRXhpc3RpbmdJbmRleChpbmZvKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCiBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSW5mbygpCiB7CiAgICAgQVNTRVJUKG1f
c3FsaXRlREIpOwpAQCAtNzk3LDYgKzEwNTUsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJh
c2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSQog
CiAgICAgdWludDY0X3QgbWF4SW5kZXhJRCA9IDA7CiAgICAgSGFzaE1hcDxzdGQ6OnBhaXI8dWlu
dDY0X3QsIHVpbnQ2NF90PiwgdWludDY0X3Q+IGluZGV4SURNYXA7CisgICAgSGFzaE1hcDx1aW50
NjRfdCwgVmVjdG9yPElEQkluZGV4SW5mbz4+IGluZGV4SW5mb01hcDsKICAgICB7CiAgICAgICAg
IFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJTRUxFQ1QgaWQsIG5hbWUsIG9iamVj
dFN0b3JlSUQsIGtleVBhdGgsIGlzVW5pcXVlLCBtdWx0aUVudHJ5IEZST00gSW5kZXhJbmZvOyJf
cyk7CiAgICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9PSykgewpAQCAtODM3LDcg
KzEwOTYsMTUgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFj
a2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICAgICAgICAgICAgICBpbmRl
eElEID0gbWF4SW5kZXhJRDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgb2JqZWN0U3Rv
cmUtPmFkZEV4aXN0aW5nSW5kZXgoeyBpbmRleElELCBvYmplY3RTdG9yZUlELCBpbmRleE5hbWUs
IFdURk1vdmUoaW5kZXhLZXlQYXRoLnZhbHVlKCkpLCB1bmlxdWUsIG11bHRpRW50cnkgfSk7Cisg
ICAgICAgICAgICBhdXRvIGluZGV4SW5mbyA9IElEQkluZGV4SW5mbyB7IGluZGV4SUQsIG9iamVj
dFN0b3JlSUQsIGluZGV4TmFtZSwgV1RGTW92ZShpbmRleEtleVBhdGgudmFsdWUoKSksIHVuaXF1
ZSwgbXVsdGlFbnRyeSB9OworICAgICAgICAgICAgaWYgKCFzaG91bGRVcGRhdGVJbmRleElEKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgaW5kZXhJbmZvcyA9IGluZGV4SW5mb01hcC5lbnN1cmUo
aW5kZXhJRCwgW10oKSAtPiBWZWN0b3I8SURCSW5kZXhJbmZvPiB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB7IH07CisgICAgICAgICAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlOworICAg
ICAgICAgICAgICAgIGluZGV4SW5mb3MuYXBwZW5kKGluZGV4SW5mbyk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIG9iamVjdFN0b3JlLT5hZGRFeGlzdGluZ0luZGV4KGluZGV4SW5mbyk7
CiAgICAgICAgICAgICBtYXhJbmRleElEID0gbWF4SW5kZXhJRCA8IGluZGV4SUQgPyBpbmRleElE
IDogbWF4SW5kZXhJRDsKIAogICAgICAgICAgICAgcmVzdWx0ID0gc3FsLnN0ZXAoKTsKQEAgLTg0
OCwzMSArMTExNSwxNCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSQogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICAgICAgZGF0YWJhc2VJbmZvLT5zZXRNYXhJbmRl
eElEKG1heEluZGV4SUQpOworICAgIH0KIAotICAgICAgICBpZiAoIXNob3VsZFVwZGF0ZUluZGV4
SUQpCi0gICAgICAgICAgICByZXR1cm4gZGF0YWJhc2VJbmZvOwotCi0gICAgICAgIGZvciAoYXV0
byYgZW50cnkgOiBpbmRleElETWFwKSB7Ci0gICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3Fs
KCptX3NxbGl0ZURCLCAiVVBEQVRFIEluZGV4SW5mbyBTRVQgaWQgPSA/IFdIRVJFIGlkID0gPyBB
TkQgb2JqZWN0U3RvcmVJRCA9ID87Il9zKTsKLSAgICAgICAgICAgIGlmIChzcWwucHJlcGFyZSgp
ICE9IFNRTElURV9PSwotICAgICAgICAgICAgICAgIHx8IHNxbC5iaW5kSW50NjQoMSwgZW50cnku
dmFsdWUpICE9IFNRTElURV9PSwotICAgICAgICAgICAgICAgIHx8IHNxbC5iaW5kSW50NjQoMiwg
ZW50cnkua2V5LnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICAgICAgfHwgc3FsLmJp
bmRJbnQ2NCgzLCBlbnRyeS5rZXkuZmlyc3QpICE9IFNRTElURV9PSwotICAgICAgICAgICAgICAg
IHx8IHNxbC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgICAgICBMT0dfRVJS
T1IoIlVuYWJsZSB0byB1cGRhdGUgaWQgb2YgSW5kZXhJbmZvIHRhYmxlIik7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNRTGl0
ZVN0YXRlbWVudCByZWNvcmRTcWwoKm1fc3FsaXRlREIsICJVUERBVEUgSW5kZXhSZWNvcmRzIFNF
VCBpbmRleElEID0gPyBXSEVSRSBpbmRleElEID0gPyBBTkQgb2JqZWN0U3RvcmVJRCA9ID87Il9z
KTsKLSAgICAgICAgICAgIGlmIChyZWNvcmRTcWwucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAg
ICAgICAgICAgICAgIHx8IHJlY29yZFNxbC5iaW5kSW50NjQoMSwgZW50cnkudmFsdWUpICE9IFNR
TElURV9PSwotICAgICAgICAgICAgICAgIHx8IHJlY29yZFNxbC5iaW5kSW50NjQoMiwgZW50cnku
a2V5LnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICAgICAgfHwgcmVjb3JkU3FsLmJp
bmRJbnQ2NCgzLCBlbnRyeS5rZXkuZmlyc3QpICE9IFNRTElURV9PSwotICAgICAgICAgICAgICAg
IHx8IHJlY29yZFNxbC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgICAgICBM
T0dfRVJST1IoIlVuYWJsZSB0byB1cGRhdGUgaW5kZXhJRCBvZiBJbmRleFJlY29yZHMgdGFibGUi
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQorICAgIGlmIChzaG91bGRVcGRhdGVJbmRleElEKSB7CisgICAgICAgIGlmICghbWlncmF0
ZUluZGV4SW5mb1RhYmxlRm9ySURVcGRhdGUoaW5kZXhJRE1hcCkgfHwgIW1pZ3JhdGVJbmRleFJl
Y29yZHNUYWJsZUZvcklEVXBkYXRlKGluZGV4SURNYXApKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFoYW5kbGVEdXBsaWNhdGVJbmRleElE
cyhpbmRleEluZm9NYXAsICpkYXRhYmFzZUluZm8pKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogCiAgICAgcmV0dXJuIGRhdGFiYXNlSW5mbzsKQEAgLTEzODAsNyArMTYzMCw5
IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjCiAKICAgICAgICAgQVNTRVJUKGN1cnNvci0+Y3Vy
cmVudFJlY29yZFJvd0lEKCkpOwogCi0gICAgICAgIElEQkVycm9yIGVycm9yID0gdXBkYXRlT25l
SW5kZXhGb3JBZGRSZWNvcmQoaW5mbywga2V5LCB2YWx1ZUJ1ZmZlciwgY3Vyc29yLT5jdXJyZW50
UmVjb3JkUm93SUQoKSk7CisgICAgICAgIGF1dG8qIG9iamVjdFN0b3JlSW5mbyA9IGluZm9Gb3JP
YmplY3RTdG9yZShpbmZvLm9iamVjdFN0b3JlSWRlbnRpZmllcigpKTsKKyAgICAgICAgQVNTRVJU
KG9iamVjdFN0b3JlSW5mbyk7CisgICAgICAgIElEQkVycm9yIGVycm9yID0gdXBkYXRlT25lSW5k
ZXhGb3JBZGRSZWNvcmQoKm9iamVjdFN0b3JlSW5mbywgaW5mbywga2V5LCB2YWx1ZUJ1ZmZlciwg
Y3Vyc29yLT5jdXJyZW50UmVjb3JkUm93SUQoKSk7CiAgICAgICAgIGlmICghZXJyb3IuaXNOdWxs
KCkpIHsKICAgICAgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6RGVsZXRl
SW5kZXhJbmZvLCAiREVMRVRFIEZST00gSW5kZXhJbmZvIFdIRVJFIGlkID0gPyBBTkQgb2JqZWN0
U3RvcmVJRCA9ID87Il9zKTsKICAgICAgICAgICAgIGlmICghc3FsCkBAIC0xODQyLDcgKzIwOTQs
NyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRlbGV0ZVJhbmdlKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwogICAgIHJldHVybiBlcnJvcjsKIH0KIAotSURC
RXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1cGRhdGVPbmVJbmRleEZvckFkZFJlY29yZChj
b25zdCBJREJJbmRleEluZm8mIGluZm8sIGNvbnN0IElEQktleURhdGEmIGtleSwgY29uc3QgVGhy
ZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlLCBpbnQ2NF90IHJlY29yZElEKQorSURCRXJyb3IgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjp1cGRhdGVPbmVJbmRleEZvckFkZFJlY29yZChJREJPYmplY3RT
dG9yZUluZm8mIG9iamVjdFN0b3JlSW5mbywgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvLCBjb25z
dCBJREJLZXlEYXRhJiBrZXksIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZSwgaW50
NjRfdCByZWNvcmRJRCkKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKG1fc2VyaWFsaXphdGlv
bkNvbnRleHQtPnZtKCkpOwogCkBAIC0xODUxLDkgKzIxMDMsNyBAQCBJREJFcnJvciBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OnVwZGF0ZU9uZUluZGV4Rm9yQWRkUmVjb3JkKGNvbnN0IElEQkluZGV4
SW5mbyYgaQogICAgICAgICByZXR1cm4gSURCRXJyb3IgeyB9OwogCiAgICAgSW5kZXhLZXkgaW5k
ZXhLZXk7Ci0gICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0gaW5mb0Zvck9iamVjdFN0b3JlKGlu
Zm8ub2JqZWN0U3RvcmVJZGVudGlmaWVyKCkpOwotICAgIEFTU0VSVChvYmplY3RTdG9yZUluZm8p
OwotICAgIGdlbmVyYXRlSW5kZXhLZXlGb3JWYWx1ZShtX3NlcmlhbGl6YXRpb25Db250ZXh0LT5l
eGVjU3RhdGUoKSwgaW5mbywganNWYWx1ZSwgaW5kZXhLZXksIG9iamVjdFN0b3JlSW5mby0+a2V5
UGF0aCgpLCBrZXkpOworICAgIGdlbmVyYXRlSW5kZXhLZXlGb3JWYWx1ZShtX3NlcmlhbGl6YXRp
b25Db250ZXh0LT5leGVjU3RhdGUoKSwgaW5mbywganNWYWx1ZSwgaW5kZXhLZXksIG9iamVjdFN0
b3JlSW5mby5rZXlQYXRoKCksIGtleSk7CiAKICAgICBpZiAoaW5kZXhLZXkuaXNOdWxsKCkpCiAg
ICAgICAgIHJldHVybiBJREJFcnJvciB7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgK
aW5kZXggMGU0NzdiZmJhY2UyNWZlZWU3MjAwM2Y0ODdhZTFlZWY1NmM1MTZlYS4uZjYwMWM2Y2Mw
YjRhMGU3ZDQ5MmFhZmJkNmQ1ZDNlZTk1N2NiYmU4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5n
U3RvcmUuaApAQCAtMTI3LDcgKzEyNyw3IEBAIHByaXZhdGU6CiAgICAgSURCRXJyb3IgdW5jaGVj
a2VkU2V0S2V5R2VuZXJhdG9yVmFsdWUoaW50NjRfdCBvYmplY3RTdG9yZUlELCB1aW50NjRfdCB2
YWx1ZSk7CiAKICAgICBJREJFcnJvciB1cGRhdGVBbGxJbmRleGVzRm9yQWRkUmVjb3JkKGNvbnN0
IElEQk9iamVjdFN0b3JlSW5mbyYsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJbmRleElEVG9J
bmRleEtleU1hcCYsIGludDY0X3QgcmVjb3JkSUQpOwotICAgIElEQkVycm9yIHVwZGF0ZU9uZUlu
ZGV4Rm9yQWRkUmVjb3JkKGNvbnN0IElEQkluZGV4SW5mbyYsIGNvbnN0IElEQktleURhdGEmLCBj
b25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWUsIGludDY0X3QgcmVjb3JkSUQpOworICAg
IElEQkVycm9yIHVwZGF0ZU9uZUluZGV4Rm9yQWRkUmVjb3JkKElEQk9iamVjdFN0b3JlSW5mbyYs
IGNvbnN0IElEQkluZGV4SW5mbyYsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBUaHJlYWRTYWZl
RGF0YUJ1ZmZlciYgdmFsdWUsIGludDY0X3QgcmVjb3JkSUQpOwogICAgIElEQkVycm9yIHVuY2hl
Y2tlZFB1dEluZGV4S2V5KGNvbnN0IElEQkluZGV4SW5mbyYsIGNvbnN0IElEQktleURhdGEmIGtl
eVZhbHVlLCBjb25zdCBJbmRleEtleSYsIGludDY0X3QgcmVjb3JkSUQpOwogICAgIElEQkVycm9y
IHVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBp
bmRleElELCBjb25zdCBJREJLZXlEYXRhJiBrZXlWYWx1ZSwgY29uc3QgSURCS2V5RGF0YSYgaW5k
ZXhLZXksIGludDY0X3QgcmVjb3JkSUQpOwogICAgIElEQkVycm9yIHVuY2hlY2tlZEhhc0luZGV4
UmVjb3JkKGNvbnN0IElEQkluZGV4SW5mbyYsIGNvbnN0IElEQktleURhdGEmLCBib29sJiBoYXNS
ZWNvcmQpOwpAQCAtMTQxLDYgKzE0MSwxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xvc2VTUUxp
dGVEQigpOwogICAgIHZvaWQgY2xvc2UoKSBmaW5hbDsKIAorICAgIGJvb2wgbWlncmF0ZUluZGV4
SW5mb1RhYmxlRm9ySURVcGRhdGUoY29uc3QgSGFzaE1hcDxzdGQ6OnBhaXI8dWludDY0X3QsIHVp
bnQ2NF90PiwgdWludDY0X3Q+JiBpbmRleElETWFwKTsKKyAgICBib29sIG1pZ3JhdGVJbmRleFJl
Y29yZHNUYWJsZUZvcklEVXBkYXRlKGNvbnN0IEhhc2hNYXA8c3RkOjpwYWlyPHVpbnQ2NF90LCB1
aW50NjRfdD4sIHVpbnQ2NF90PiYgaW5kZXhJRE1hcCk7CisKKyAgICBib29sIHJlbW92ZUV4aXN0
aW5nSW5kZXgodWludDY0X3QgaW5kZXhJRCk7CisgICAgYm9vbCBhZGRFeGlzdGluZ0luZGV4KElE
Qk9iamVjdFN0b3JlSW5mbyYsIGNvbnN0IElEQkluZGV4SW5mbyYpOworICAgIGJvb2wgaGFuZGxl
RHVwbGljYXRlSW5kZXhJRHMoY29uc3QgSGFzaE1hcDx1aW50NjRfdCwgVmVjdG9yPElEQkluZGV4
SW5mbz4+JiwgSURCRGF0YWJhc2VJbmZvJik7CisKICAgICBlbnVtIGNsYXNzIFNRTCA6IHNpemVf
dCB7CiAgICAgICAgIENyZWF0ZU9iamVjdFN0b3JlSW5mbywKICAgICAgICAgQ3JlYXRlT2JqZWN0
U3RvcmVLZXlHZW5lcmF0b3IsCkBAIC0xNTQsOSArMTYxLDEyIEBAIHByaXZhdGU6CiAgICAgICAg
IENsZWFyT2JqZWN0U3RvcmVSZWNvcmRzLAogICAgICAgICBDbGVhck9iamVjdFN0b3JlSW5kZXhS
ZWNvcmRzLAogICAgICAgICBDcmVhdGVJbmRleEluZm8sCisgICAgICAgIENyZWF0ZVRlbXBJbmRl
eEluZm8sCiAgICAgICAgIERlbGV0ZUluZGV4SW5mbywKKyAgICAgICAgUmVtb3ZlSW5kZXhJbmZv
LAogICAgICAgICBIYXNJbmRleFJlY29yZCwKICAgICAgICAgUHV0SW5kZXhSZWNvcmQsCisgICAg
ICAgIFB1dFRlbXBJbmRleFJlY29yZCwKICAgICAgICAgR2V0SW5kZXhSZWNvcmRGb3JPbmVLZXks
CiAgICAgICAgIERlbGV0ZUluZGV4UmVjb3JkcywKICAgICAgICAgUmVuYW1lSW5kZXgsCkBAIC0x
NzQsNiArMTg0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgR2V0QmxvYlVSTCwKICAgICAgICAgR2V0
S2V5R2VuZXJhdG9yVmFsdWUsCiAgICAgICAgIFNldEtleUdlbmVyYXRvclZhbHVlLAorICAgICAg
ICBHZXRPYmplY3RTdG9yZVJlY29yZHMsCiAgICAgICAgIEdldEFsbEtleVJlY29yZHNMb3dlck9w
ZW5VcHBlck9wZW4sCiAgICAgICAgIEdldEFsbEtleVJlY29yZHNMb3dlck9wZW5VcHBlckNsb3Nl
ZCwKICAgICAgICAgR2V0QWxsS2V5UmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJPcGVuLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkluZGV4SW5m
by5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkluZGV4SW5m
by5oCmluZGV4IDg1MzdhYzZmYzJkMTU4NDAyYjViMDEyOGQwNDkwZWU5ZTY5Yzk0OGYuLjI5MDdk
OTJmYjE4OGQwZGJlOTYxODA2MjY4NDc3M2NkZTkwNzBjYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleEluZm8uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZvLmgKQEAgLTU5
LDYgKzU5LDcgQEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIG5lZWQgZm9yIHRo
aXMuCiAgICAgc3RhdGljIGNvbnN0IGludDY0X3QgSW52YWxpZElkID0gLTE7CiAKKyAgICB2b2lk
IHNldElkZW50aWZpZXIodWludDY0X3QgaWRlbnRpZmllcikgeyBtX2lkZW50aWZpZXIgPSBpZGVu
dGlmaWVyOyB9CiBwcml2YXRlOgogICAgIHVpbnQ2NF90IG1faWRlbnRpZmllciB7IDAgfTsKICAg
ICB1aW50NjRfdCBtX29iamVjdFN0b3JlSWRlbnRpZmllciB7IDAgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmplY3RTdG9yZUluZm8u
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0
b3JlSW5mby5jcHAKaW5kZXggNGVhZDM4YmZiYzkxMTc4OWRiMjU3Njg5YzY1ZTAyOGFlZGZjYWM1
Ny4uM2NhNTc1MmQyNjVmN2U3NGZhZTVmMDM0ZjY5YTc0ZGM5MDE0MmE3MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5m
by5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9i
amVjdFN0b3JlSW5mby5jcHAKQEAgLTUyLDcgKzUyLDggQEAgSURCSW5kZXhJbmZvIElEQk9iamVj
dFN0b3JlSW5mbzo6Y3JlYXRlTmV3SW5kZXgodWludDY0X3QgaW5kZXhJRCwgY29uc3QgU3RyaW5n
JgogCiB2b2lkIElEQk9iamVjdFN0b3JlSW5mbzo6YWRkRXhpc3RpbmdJbmRleChjb25zdCBJREJJ
bmRleEluZm8mIGluZm8pCiB7Ci0gICAgQVNTRVJUKCFtX2luZGV4TWFwLmNvbnRhaW5zKGluZm8u
aWRlbnRpZmllcigpKSk7CisgICAgaWYgKG1faW5kZXhNYXAuY29udGFpbnMoaW5mby5pZGVudGlm
aWVyKCkpKQorICAgICAgICBMT0dfRVJST1IoIkFkZGluZyBhbiBpbmRleCAnJXMnIHdpdGggZXhp
c3RpbmcgSW5kZXggSUQiLCBpbmZvLm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIG1faW5k
ZXhNYXAuc2V0KGluZm8uaWRlbnRpZmllcigpLCBpbmZvKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5ZTYwYzUzNmRiNzYzYmQ3ODdiOTAw
ZmM0YzY1MmQ0YmZlZjQ1MWVhLi43Yzc1MjEwZDUyODk5YTIyMjdmYTAzZDc1ZTUwYWFhZWVjODE3
OTcwIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMjAtMDktMjggIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5j
b20+CisKKyAgICAgICAgSW5kZXhlZERCIEluZGV4IENvcnJ1cHRpb24gYWZ0ZXIgdXBncmFkZSBm
cm9tIGlPUyAxMyB0byBpT1MgMTQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxNjk2MgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjk1ODcwMDQ+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjIubW06
CisgICAgICAgIChydW5NdWx0aXBsZUluZGljZXNUZXN0V2l0aERhdGFiYXNlKToKKyAgICAgICAg
KFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5k
ZXhVcGdyYWRlVG9WMldpdGhNdWx0aXBsZUluZGljZXMuaHRtbDogQWRkZWQuCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleFVwZ3JhZGVXaXRoTXVsdGlwbGVJ
bmRpY2VzLnNxbGl0ZTM6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5kZXhVcGdyYWRlV2l0aE11bHRpcGxlSW5kaWNlc0hhdmVTYW1lSUQuc3FsaXRl
MzogQWRkZWQuCisKIDIwMjAtMDktMjcgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFJlbW92ZSBydW4td2Via2l0LXRlc3RzIGNvZGUgdGhhdCBzdHJpcHMgdHJhaWxp
bmcgc3BhY2VzIHdoZW4gY29tcGFyaW5nIGV4cGVjdGVkLnR4dCBmaWxlcwpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCA0MWM0YTE3NTRlMDMxYTExYTAzMDE0MmIzZjE2MzhhNTc5M2YxYjBlLi5h
ZDJjZTA1MzJmMjY2ZTQ0YjNkOTMyODcwZmNmMWUzMzgyNDYwOGVlIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtODEwLDYgKzgxMCw5IEBACiAJCTkzOTlCQTA0MjM3MTExNDAwMDgzOTJCRiAv
KiBJbmRleGVkREJJblBhZ2VDYWNoZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzOTlCQTAxMjM3MTEwQUUwMDgzOTJCRiAvKiBJbmRleGVkREJJblBh
Z2VDYWNoZS5tbSAqLzsgfTsKIAkJOTM5OUJBMDUyMzcxMTE0RjAwODM5MkJGIC8qIEluZGV4ZWRE
QkluUGFnZUNhY2hlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTM5OUJBMDIyMzcxMTBCRjAwODM5MkJGIC8qIEluZGV4ZWREQkluUGFn
ZUNhY2hlLmh0bWwgKi87IH07CiAJCTkzOTlCQTA2MjM3MTExNEYwMDgzOTJCRiAvKiBJbmRleGVk
REJOb3RJblBhZ2VDYWNoZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzOTlCQTAzMjM3MTEwQkYwMDgzOTJCRiAvKiBJbmRleGVkREJO
b3RJblBhZ2VDYWNoZS5odG1sICovOyB9OworCQk5M0EyNzQ5RDI1MUVGOTA3MDBBMUI2RDQgLyog
SURCSW5kZXhVcGdyYWRlVG9WMldpdGhNdWx0aXBsZUluZGljZXMuaHRtbCBpbiBDb3B5IFJlc291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0EyNzQ5QTI1MUVGNTJB
MDBBMUI2RDQgLyogSURCSW5kZXhVcGdyYWRlVG9WMldpdGhNdWx0aXBsZUluZGljZXMuaHRtbCAq
LzsgfTsKKwkJOTNBMjc0QTIyNTIxNjNFRTAwQTFCNkQ0IC8qIEluZGV4VXBncmFkZVdpdGhNdWx0
aXBsZUluZGljZXMuc3FsaXRlMyBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5M0EyNzRBMTI1MjE2M0Q2MDBBMUI2RDQgLyogSW5kZXhVcGdyYWRl
V2l0aE11bHRpcGxlSW5kaWNlcy5zcWxpdGUzICovOyB9OworCQk5M0EyNzRBNTI1MjI0MURFMDBB
MUI2RDQgLyogSW5kZXhVcGdyYWRlV2l0aE11bHRpcGxlSW5kaWNlc0hhdmVTYW1lSUQuc3FsaXRl
MyBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0EyNzRBNDI1MjI0MUQwMDBBMUI2RDQgLyogSW5kZXhVcGdyYWRlV2l0aE11bHRpcGxlSW5kaWNl
c0hhdmVTYW1lSUQuc3FsaXRlMyAqLzsgfTsKIAkJOTNBRjRFQ0UxNTA2RjA2NDAwN0ZENTdFIC8q
IE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckltYWdlc19CdW5kbGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBRjRFQ0QxNTA2RjA2
NDAwN0ZENTdFIC8qIE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckltYWdlc19CdW5k
bGUuY3BwICovOyB9OwogCQk5M0FGNEVEMTE1MDZGMTMwMDA3RkQ1N0UgLyogbG90cy1vZi1pbWFn
ZXMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5M0FGNEVDRjE1MDZGMTIzMDA3RkQ1N0UgLyogbG90cy1vZi1pbWFnZXMuaHRtbCAqLzsg
fTsKIAkJOTNCQ0JDODMyM0NDNkYyQTAwQ0EyMjIxIC8qIElEQk9iamVjdFN0b3JlSW5mb1VwZ3Jh
ZGVUb1YyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNCQ0JDODAyM0NDNkVFODAwQ0EyMjIxIC8qIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1Yy
Lm1tICovOyB9OwpAQCAtMTQyMSw2ICsxNDI0LDcgQEAKIAkJCQk1MTA0Nzc3MzFEMjk4REREMDA5
NzQ3RUIgLyogSURCRGVsZXRlUmVjb3Zlcnkuc3FsaXRlMy1zaG0gaW4gQ29weSBSZXNvdXJjZXMg
Ki8sCiAJCQkJNTEwNDc3NzQxRDI5OERERDAwOTc0N0VCIC8qIElEQkRlbGV0ZVJlY292ZXJ5LnNx
bGl0ZTMtd2FsIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTUxMTBGQ0YxMUUwMUNENjQwMDZG
OEQwQiAvKiBJREJJbmRleFVwZ3JhZGVUb1YyLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCisJ
CQkJOTNBMjc0OUQyNTFFRjkwNzAwQTFCNkQ0IC8qIElEQkluZGV4VXBncmFkZVRvVjJXaXRoTXVs
dGlwbGVJbmRpY2VzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJOTM3QjU2OUUyM0NE
MjNEQjAwMkFFNjQwIC8qIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGUuc3FsaXRlMyBpbiBDb3B5
IFJlc291cmNlcyAqLywKIAkJCQk5M0JDQkM4NDIzQ0M2RjQ0MDBDQTIyMjEgLyogSURCT2JqZWN0
U3RvcmVJbmZvVXBncmFkZVRvVjIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQkxQ0M4
MENFQTI0NzRGMjQ5MDA0REM0ODkgLyogaWRlbXBvdGVudC1tb2RlLWF1dG9zaXppbmctb25seS1o
b25vcnMtcGVyY2VudGFnZXMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKQEAgLTE0NTgsNiAr
MTQ2Miw4IEBACiAJCQkJQ0E5N0IzOTUyMTkzNjY3QTAwNDVERjZGIC8qIEluZGV4ZWREQlVzZXJE
ZWxldGUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1MTEwRkNGOTFFMDFDRDhBMDA2
RjhEMEIgLyogSW5kZXhVcGdyYWRlLmJsb2IgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJNTEx
MEZDRjYxRTAxQ0Q4MzAwNkY4RDBCIC8qIEluZGV4VXBncmFkZS5zcWxpdGUzIGluIENvcHkgUmVz
b3VyY2VzICovLAorCQkJCTkzQTI3NEEyMjUyMTYzRUUwMEExQjZENCAvKiBJbmRleFVwZ3JhZGVX
aXRoTXVsdGlwbGVJbmRpY2VzLnNxbGl0ZTMgaW4gQ29weSBSZXNvdXJjZXMgKi8sCisJCQkJOTNB
Mjc0QTUyNTIyNDFERTAwQTFCNkQ0IC8qIEluZGV4VXBncmFkZVdpdGhNdWx0aXBsZUluZGljZXNI
YXZlU2FtZUlELnNxbGl0ZTMgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJMkVGRjA2Q0QxRDhB
NDI5QTAwMDRCQjMwIC8qIGlucHV0LWZpZWxkLWluLXNjcm9sbGFibGUtZG9jdW1lbnQuaHRtbCBp
biBDb3B5IFJlc291cmNlcyAqLywKIAkJCQlDRTM1MjRGQTFCMTQ0Mzg5MDAyOEE3QzUgLyogaW5w
dXQtZm9jdXMtYmx1ci5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCUNFNkQwRUUzMjQy
NkI5MzIwMDJBRDkwMSAvKiBpbnNlcnQtdGV4dC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLApA
QCAtMjM5NCw2ICsyNDAwLDkgQEAKIAkJOTM5QkE5MTYxNDEwMzQxMjAwMUEwMUJEIC8qIERldmlj
ZVNjYWxlRmFjdG9yT25CYWNrLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gRGV2aWNlU2NhbGVGYWN0b3JPbkJhY2subW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzOUJGRTM5MThFNTU0ODkwMDg4MzI3NSAvKiBTdHJpbmdUcnVuY2F0b3IubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTdHJpbmdUcnVuY2F0b3IubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQTI1ODk4MUY5MkZGMTUwMDNFNTEwQyAv
KiBUZXh0Q29kZWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dENvZGVjLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNBMjc0OUEyNTFFRjUyQTAwQTFCNkQ0IC8qIElEQklu
ZGV4VXBncmFkZVRvVjJXaXRoTXVsdGlwbGVJbmRpY2VzLmh0bWwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0
bWw7IHBhdGggPSBJREJJbmRleFVwZ3JhZGVUb1YyV2l0aE11bHRpcGxlSW5kaWNlcy5odG1sOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0EyNzRBMTI1MjE2M0Q2MDBBMUI2RDQgLyog
SW5kZXhVcGdyYWRlV2l0aE11bHRpcGxlSW5kaWNlcy5zcWxpdGUzICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZmlsZTsgcGF0aCA9IEluZGV4VXBncmFk
ZVdpdGhNdWx0aXBsZUluZGljZXMuc3FsaXRlMzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTNBMjc0QTQyNTIyNDFEMDAwQTFCNkQ0IC8qIEluZGV4VXBncmFkZVdpdGhNdWx0aXBsZUlu
ZGljZXNIYXZlU2FtZUlELnNxbGl0ZTMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBmaWxlOyBwYXRoID0gSW5kZXhVcGdyYWRlV2l0aE11bHRpcGxlSW5k
aWNlc0hhdmVTYW1lSUQuc3FsaXRlMzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNB
NDI3QTgxODBEOUIwNzAwQ0QyNEQ3IC8qIFJlZlB0ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSZWZQdHIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5M0E0MjdBQTE4MERBMjY0MDBDRDI0RDcgLyogUmVmLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlZi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTkzQTQyN0FDMTgwREE2MEYwMENEMjRENyAvKiBNb3ZlT25seS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
b3ZlT25seS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzczNyw2ICszNzQ2LDcg
QEAKIAkJCQk1MTA0Nzc3MDFEMjk4RDg1MDA5NzQ3RUIgLyogSURCRGVsZXRlUmVjb3Zlcnkuc3Fs
aXRlMy1zaG0gKi8sCiAJCQkJNTEwNDc3NzExRDI5OEQ4NTAwOTc0N0VCIC8qIElEQkRlbGV0ZVJl
Y292ZXJ5LnNxbGl0ZTMtd2FsICovLAogCQkJCTUxMTBGQ0YwMUUwMUNENTMwMDZGOEQwQiAvKiBJ
REJJbmRleFVwZ3JhZGVUb1YyLmh0bWwgKi8sCisJCQkJOTNBMjc0OUEyNTFFRjUyQTAwQTFCNkQ0
IC8qIElEQkluZGV4VXBncmFkZVRvVjJXaXRoTXVsdGlwbGVJbmRpY2VzLmh0bWwgKi8sCiAJCQkJ
OTNCQ0JDODEyM0NDNkVGNTAwQ0EyMjIxIC8qIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGUuc3Fs
aXRlMyAqLywKIAkJCQk5M0JDQkM4MjIzQ0M2RUY1MDBDQTIyMjEgLyogSURCT2JqZWN0U3RvcmVJ
bmZvVXBncmFkZVRvVjIuaHRtbCAqLywKIAkJCQlGNDFBQjk5OTFFRjQ2OTJDMDA4M0ZBMDggLyog
aW1hZ2UtYW5kLWNvbnRlbnRlZGl0YWJsZS5odG1sICovLApAQCAtMzc3Miw2ICszNzgyLDggQEAK
IAkJCQlDQTk3QjM5MzIxOTM2NjQ3MDA0NURGNkYgLyogSW5kZXhlZERCVXNlckRlbGV0ZS5odG1s
ICovLAogCQkJCTUxMTBGQ0YyMUUwMUNENzcwMDZGOEQwQiAvKiBJbmRleFVwZ3JhZGUuYmxvYiAq
LywKIAkJCQk1MTEwRkNGMzFFMDFDRDc3MDA2RjhEMEIgLyogSW5kZXhVcGdyYWRlLnNxbGl0ZTMg
Ki8sCisJCQkJOTNBMjc0QTEyNTIxNjNENjAwQTFCNkQ0IC8qIEluZGV4VXBncmFkZVdpdGhNdWx0
aXBsZUluZGljZXMuc3FsaXRlMyAqLywKKwkJCQk5M0EyNzRBNDI1MjI0MUQwMDBBMUI2RDQgLyog
SW5kZXhVcGdyYWRlV2l0aE11bHRpcGxlSW5kaWNlc0hhdmVTYW1lSUQuc3FsaXRlMyAqLywKIAkJ
CQkyRUZGMDZDQzFEOEE0MjkxMDAwNEJCMzAgLyogaW5wdXQtZmllbGQtaW4tc2Nyb2xsYWJsZS1k
b2N1bWVudC5odG1sICovLAogCQkJCTkzN0E2Qzg4MjQzNTdCRjMwMEMzQTZCMCAvKiBLaWxsV2Vi
UHJvY2Vzc1dpdGhPcGVuQ29ubmVjdGlvbi0xLmh0bWwgKi8sCiAJCQkJOTM3QTZDODkyNDM1N0JG
MzAwQzNBNkIwIC8qIEtpbGxXZWJQcm9jZXNzV2l0aE9wZW5Db25uZWN0aW9uLTIuaHRtbCAqLywK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURCSW5k
ZXhVcGdyYWRlVG9WMi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SURCSW5kZXhVcGdyYWRlVG9WMi5tbQppbmRleCA5NWNjYTBjZTI4MTZmZjFhNmE0NTVhZDBiZDJj
OGE0YWE0ZjI3ZmVkLi40MTZjYTFmOWFiNDk1YmQ4NzgxMTllMWQzNDUzZTc2NThiZjA3NTEyIDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4
VXBncmFkZVRvVjIubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9JREJJbmRleFVwZ3JhZGVUb1YyLm1tCkBAIC04MywzICs4Myw0MiBAQCBURVNUKEluZGV4ZWRE
QiwgSW5kZXhVcGdyYWRlVG9WMikKIAogICAgIEVYUEVDVF9XS19TVFJFUShAIk9iamVjdCBleHBl
Y3RlZCB0byBiZSBhIGJsb2I6IFtvYmplY3QgQmxvYl0iLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9k
eV0pOwogfQorCitzdGF0aWMgdm9pZCBydW5NdWx0aXBsZUluZGljZXNUZXN0V2l0aERhdGFiYXNl
KE5TU3RyaW5nKiBkYXRhYmFzZU5hbWUpCit7CisgICAgUmV0YWluUHRyPElEQkluZGV4VXBncmFk
ZVRvVjJNZXNzYWdlSGFuZGxlcj4gaGFuZGxlciA9IGFkb3B0TlMoW1tJREJJbmRleFVwZ3JhZGVU
b1YyTWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKKyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3
Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1
cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29u
dHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVz
dEhhbmRsZXIiXTsKKworICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF90ZXJt
aW5hdGVOZXR3b3JrUHJvY2Vzc107CisKKyAgICBOU1VSTCAqdXJsID0gW1tOU0J1bmRsZSBtYWlu
QnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpkYXRhYmFzZU5hbWUgd2l0aEV4dGVuc2lvbjpAInNxbGl0
ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisKKyAgICBOU1N0
cmluZyAqaGFzaCA9IFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmNvbXB1dGVIYXNoRm9yRmls
ZU5hbWUoImluZGV4LXVwZ3JhZGUtdGVzdCIpOworICAgIE5TU3RyaW5nICpvcmlnaW5EaXJlY3Rv
cnkgPSBAIn4vTGlicmFyeS9XZWJLaXQvY29tLmFwcGxlLldlYktpdC5UZXN0V2ViS2l0QVBJL1dl
YnNpdGVEYXRhL0luZGV4ZWREQi92MS9maWxlX18wLyI7CisgICAgTlNTdHJpbmcgKmRhdGFiYXNl
RGlyZWN0b3J5ID0gW1tvcmlnaW5EaXJlY3Rvcnkgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6aGFz
aF0gc3RyaW5nQnlFeHBhbmRpbmdUaWxkZUluUGF0aF07CisgICAgTlNVUkwgKnRhcmdldFVSTCA9
IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6ZGF0YWJhc2VEaXJlY3RvcnldOworICAgIFtbTlNGaWxl
TWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gcmVtb3ZlSXRlbUF0VVJMOnRhcmdldFVSTCBlcnJvcjpu
aWxdOworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gY3JlYXRlRGlyZWN0b3J5
QXRVUkw6dGFyZ2V0VVJMIHdpdGhJbnRlcm1lZGlhdGVEaXJlY3RvcmllczpZRVMgYXR0cmlidXRl
czpuaWwgZXJyb3I6bmlsXTsKKworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0g
Y29weUl0ZW1BdFVSTDp1cmwgdG9VUkw6W3RhcmdldFVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21w
b25lbnQ6QCJJbmRleGVkREIuc3FsaXRlMyJdIGVycm9yOm5pbF07CisKKyAgICBSZXRhaW5QdHI8
V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRp
b24uZ2V0KCldKTsKKworICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3Qg
cmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIklE
QkluZGV4VXBncmFkZVRvVjJXaXRoTXVsdGlwbGVJbmRpY2VzIiB3aXRoRXh0ZW5zaW9uOkAiaHRt
bCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXV07CisgICAgW3dlYlZp
ZXcgbG9hZFJlcXVlc3Q6cmVxdWVzdF07CisKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoQCJHZXQgb2Jq
ZWN0OiB7XCJuYW1lXCI6XCJhcHBsZVwiLFwiY29sb3JcIjpcInJlZFwifSIsIFtsYXN0U2NyaXB0
TWVzc2FnZSBib2R5XSk7Cit9CisKK1RFU1QoSW5kZXhlZERCLCBJbmRleFVwZ3JhZGVUb1YyV2l0
aE11bHRpcGxlSW5kaWNlcykKK3sKKyAgICBydW5NdWx0aXBsZUluZGljZXNUZXN0V2l0aERhdGFi
YXNlKEAiSW5kZXhVcGdyYWRlV2l0aE11bHRpcGxlSW5kaWNlcyIpOworfQorCitURVNUKEluZGV4
ZWREQiwgSW5kZXhVcGdyYWRlVG9WMldpdGhNdWx0aXBsZUluZGljZXNIYXZlU2FtZUlEKQorewor
ICAgIHJ1bk11bHRpcGxlSW5kaWNlc1Rlc3RXaXRoRGF0YWJhc2UoQCJJbmRleFVwZ3JhZGVXaXRo
TXVsdGlwbGVJbmRpY2VzSGF2ZVNhbWVJRCIpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJbmRleFVwZ3JhZGVUb1YyV2l0aE11bHRpcGxl
SW5kaWNlcy5odG1sIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJJ
bmRleFVwZ3JhZGVUb1YyV2l0aE11bHRpcGxlSW5kaWNlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFjMDE2
MGRlNzk0MTM2Yzg1ODI1MDkwM2FjOTY1MjQ3ZmVkYTdiOTUKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQkluZGV4VXBncmFkZVRvVjJX
aXRoTXVsdGlwbGVJbmRpY2VzLmh0bWwKQEAgLTAsMCArMSw0MCBAQAorPHNjcmlwdD4KKwordmFy
IG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oJ2luZGV4LXVwZ3JhZGUtdGVzdCcpOworb3Bl
blJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICB3aW5kb3cu
d2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgnVW5leHBlY3Rl
ZCB1cGdyYWRlbmVlZGVkJyk7CisgICAgcmV0dXJuOworCisgICAgLy8gVGhlIGNvZGUgYmVsb3cg
d2FzIHVzZWQgdG8gZ2VuZXJhdGUgZGF0YWJhc2UgZmlsZSBJbmRleFVwZ3JhZGVXaXRoTXVsdGlw
bGVJbmRpY2VzLnNxbGl0ZTMuCisgICAgLy8gSXQgc2hvdWxkIG5vdCBiZSByZWFjaGVkIGR1cmlu
ZyB1cGdyYWRlIHRlc3QgYmVjYXVzZSBkYXRhYmFzZSBmaWxlIGFscmVhZHkgZXhpc3RzLgorICAg
IGxldCBvczEgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnY29sb3JzJyk7CisgICAgb3MxLmNyZWF0
ZUluZGV4KCduYW1lJywgJ25hbWUnKTsKKyAgICBsZXQgb3MyID0gZGIuY3JlYXRlT2JqZWN0U3Rv
cmUoJ2ZydWl0cycpOworICAgIG9zMi5jcmVhdGVJbmRleCgnY29sb3InLCAnY29sb3InKTsKKyAg
ICBvczIuY3JlYXRlSW5kZXgoJ25hbWUnLCAnbmFtZScpOworICAgIG9zMi5wdXQoeyBuYW1lOidh
cHBsZScsIGNvbG9yOidyZWQnIH0sIDEpOworfQorCitvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBm
dW5jdGlvbihldmVudCkgeworICAgIGxldCBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAg
dHJ5IHsKKyAgICAgICAgbGV0IHRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oWydmcnVpdHMn
XSk7CisgICAgICAgIGxldCBjb2xvckluZGV4ID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ2Zy
dWl0cycpLmluZGV4KCdjb2xvcicpOworICAgICAgICBsZXQgZ2V0UmVxdWVzdCA9IGNvbG9ySW5k
ZXguZ2V0KCdyZWQnKTsKKyAgICAgICAgZ2V0UmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZXZlbnQpID0+
IHsKKyAgICAgICAgICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRlc3RIYW5kbGVy
LnBvc3RNZXNzYWdlKCJHZXQgb2JqZWN0OiAiICsgIEpTT04uc3RyaW5naWZ5KGV2ZW50LnRhcmdl
dC5yZXN1bHQpKTsKKyAgICAgICAgfQorICAgICAgICBnZXRSZXF1ZXN0Lm9uZXJyb3IgPSAoZXZl
bnQpID0+IHsKKyAgICAgICAgICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRlc3RI
YW5kbGVyLnBvc3RNZXNzYWdlKCdVbmV4cGVjdGVkIGdldCBlcnJvcicpOworICAgICAgICB9Cisg
ICAgfSBjYXRjaChlKSB7CisgICAgICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRl
c3RIYW5kbGVyLnBvc3RNZXNzYWdlKCJVbmV4cGVjdGVkIGVycm9yIC0gIiArIGUpOworICAgIH0K
K30KKworb3BlblJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgd2luZG93
LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMudGVzdEhhbmRsZXIucG9zdE1lc3NhZ2UoIlVuZXhwZWN0
ZWQgZGF0YWJhc2UgZXJyb3ItICIgKyBlKTsKK30KKworPC9zY3JpcHQ+CisKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhVcGdyYWRlV2l0aE11
bHRpcGxlSW5kaWNlcy5zcWxpdGUzIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JbmRleFVwZ3JhZGVXaXRoTXVsdGlwbGVJbmRpY2VzLnNxbGl0ZTMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NDBjMTNkNGUzOWJiNTFkZTEwZmQ5OTA3MjZmM2Q5ZTljOGQ4ZjkxNgpHSVQgYmluYXJ5IHBhdGNo
CmxpdGVyYWwgNjk2MzIKemNtZUkqT0slZkwwS29CYFVCezArU28zdEZzQTV3VGt1KnQqWChpTU8p
YUdIM2gydGNTIT1zbjV1e1lHPCprUWUpCnpmSztpcnhiKylVPlBQNV9HbmUrI1lrVGdjUWZ+LX0z
dFU+TW9uM0U/P1olRSVBcTQ0dmkwIz9lYzsrez15VWZtUgp6dmEqfmlJRl8rZHdsX2AzXygrSz1z
O1ljJDc+YzUoQF54NmdjMCN8NTFhPkNtcilZfElpbUoqN2IzWTlZSzJWfjsKemZ9KzJGPTt4dHRo
ZWlmIzE3OGVZOGEmcDJkdGZCfFVIPz8lWCgkJmdndkw4MSFoOGV9S21kV2FTZkZ9ZDU1LVFPCno3
UFdKWnhuOHNgVGxYKG5DQ2ZJUXZSIUdKaHxYbWFHdWVjWm90YUd+akZ2Xmxjek9Nbm0yKzApTXBr
bShOVCMhaQp6T05vcTtVZCRUbClsfHdAT2RFNUg+NUhsNFQtTFphbFN+PF8+RSFaaXFHZigydjZQ
eWJPSDNLTFpRSGc9antKdGIKejZQb3hXOGpMTlI3RH1PJXg5KE4kNnktXkMmRD9nJS10PH5hRjR5
OE1sWlJeYDl9Mn16bylpITNCflE5M0J1ZzlSCnpNbnJFWmFidmJJVWRacEF2bml1d1pkeWgqYVpN
VUBhK29zcTJ7JmNqdyhjKlAmWD5rKVlIX3coIWlDQ2VzYz5pOAp6PkxzVX0rZU4zNENePmQ3Ozxj
ckxQOzdFaUppT3tQbjhsYD1tdzBXSGdEciRAM3RKJFVHUmNMUiV5cnsoOyhGJnwKej9iZEdHX1M2
JTA9WiQrY2JzSlcpbDxTR3FseEBqdlAoQURvNkJtWXB2RXw4NWprcnkxP1FHa09MbCp9M3Z3Nkky
CnpeUCVjPSNILU5TVlhzMXleUng0JmpGfWI3K1okUlpgJiVsc1pDenRyTzc3OSpjZExjUXU3QjRv
JGA7I3dwUDlKTwp6LT50WjlTejMjPyVeMFlqM3dwYks/U2ZhXyo8eU05VnhlZU44aig7LTVnVzZP
QHBaWkNZOV9UdXsmcCoxeV5VX2oKenVTeEhIUTBTRHZMXzhkZkJ+RXJ+Q1hJfSlvb3olVEBsYkRA
IzJjSDA8KztwI0RiKjh3cTFkVFlxRlFNPFd2cEQ7CnomVTtkUkgyNXpvZT9pTUJBeWZYVW13bCE7
LS0lS242I0g7WVJGNDx4TXtLIzVgQ3NaRXFGPkpGXlJ0JnMmbks9Swp6LXMwdn0tU2JjTE9uRUA2
QDNZPXZjRk9SWTwzI09LRWZnQ1lZZEtGZXJ7YyMwRWZsKlorWTNVdT4zR2AxdkJTJTAKenkrekl+
cmMmKytTfm1FdTJUe0xWYGB4SDFXQXpnRWJaRVB3TzFsd0o5cjkjJVZiZ3B6fDk9R2FucmRGcHR0
NVpDCnpyQk5tNHl8UGJLUzQxY19HOXFlVWQrcFI7KSZFZGlEck5VJWRhMEdoYWMjZklUfjdWQnc+
TEVASGt8P3xoVTZZNwp6XmRBLVpMcUdybDFRMCp+MFIjfDAwMDlJTEttZFVeUl5ZdG82UWctS1Q1
cl58YDBUVGdqSHEmP3t1XzU+QWxmRyoKej1HSW94YXdFQk52MX5eKjhNQ2VZLSFpeV5gYSp4RSRS
N2QlMnExc30wdGdfMDAwSWFnZkIqc3I5MXNDTEFWd29pCnoqOXpTNmVecjAxPSljUTEwcztzaWZC
KnNyQWI8YkAycTFzfTB0bWMkMGBJOW9BKk4tMlVSNz8kKFM1fkt3JmNIfQp6VmtzfGcyNiRIbEJW
eD8kXldUdWV7KSNPWj05P0N+PE52Q0F8TmtGNjByMktrRmdaZDEwUiN8MDAwOUlMS21ZKioKejVJ
fHJAVjY7ek8wdVd1VTBIYEI8NXFTWSVfeGBeLXt4NSYmOXt+WGI1SV9JezFRMCp+MFIjfDAwMDlJ
SnVtSnU0CnoxNjtXajRGTG9ZS21ZKio1SV9JezFRMCp+MGJqdHF8RFctSG5nYXB8QWI8YkAycTFz
fTB0Z18wMDBJWUZmZDJvJQp6dTN0KXIwMElhZ2ZCKnNyQWI8YkAycTF1ZkU4eVAkQUpEJjdeZTZo
eWBYZD0zQWI8YkAycTFzfTB0Z18wMDBJYWcKemZXWWUmSTJPPlJeIyR8WjtgJUtzPWQzdG8rZSom
SWs4MFlhSzVzaGF4Pj5RVlNhempRRjJ6U3haN2pZc0dpYDJLCnpnO0woU0hAJkBlKD5DK2d2fTBB
QXFlNT1DVV4hLTlabzlMY0pOX1RnQTFWNThValA1Oz5uJE1QaDUhTnhBYjxiQAp6MnExc30wdGdf
MDAwSkVaaiVtfVB7aH5uTnM1VThmeThuTFBVVzttRGpkfGBSMHJpTUI4RUx4ITtFdztSYFU2Rk8K
ekVaK3pTQWI8YkAycTFzfTB0Z18wMDBJYWdAUU1YeSlTeG5hSHlxeHV3K2x7WGVYQ2ZnSUFfbE1C
R2p5TmY2SXowCno7UXt+OEAoSk84dih9Yl9CUXY2Jk02TyZjK3k1O0ljbD0rflVudSV0QHtORTEw
dGdfMDAwSWFnZkIqc3JBYjxiQAp6MlN9aCM2R0J4ckVmVDVzfERQIU8zO29GZkRqLUVjMDA5SUxL
bVkqKjVJX0l7MVEwO3J8MD5ZMDRVNzhDMjVMa2IKemo/YH0mYVBSLXViWEMhUig2N281MHM7c2lm
QipzckFiPGJAMnExc30wdFp4Sk1HSzRMcUl4MTZSIWk8ZkA7aTZwCnp8MCt+MTtONlJWclErQ3ko
I0AjSXgre2MtanRxfn5FZ0U7YF9xRXY9U3Y0R3FpUndHeXUtREQqbWd1VXRNbFkkMwp6RXtreUZj
Kk09Qm5+XyhOKGZhZk0mbFVZb3tkcnA8bV96XnAxUTAqfjBSI3wwMDA5SUxLbWRXYVNzPFdsQX1u
ODgKakIrVD53Wip4VkdjTFdlWDAwOUlMS21ZKio1SV9JezFpQV5sZUUkQyo9c0xIZAoKbGl0ZXJh
bCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JbmRleFVwZ3JhZGVXaXRoTXVsdGlwbGVJbmRpY2VzSGF2ZVNhbWVJRC5zcWxp
dGUzIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleFVwZ3JhZGVX
aXRoTXVsdGlwbGVJbmRpY2VzSGF2ZVNhbWVJRC5zcWxpdGUzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmZTc2Nzg3
MTM3NjYxNmZiMTgxNjUzMGQ4OGQxOWRhODI4OWIzYjgKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFs
IDg2MDE2CnpjbWVJKS0qNE4tMGxASilRbkV6SEhXbU08N0k7fGJ2X2BEaS1sfWR1KDZ2RWhUU18y
UXVAbkREK3Iyb25NUiNmeAp6JCkpSG5ETFNuM19PfTBeSz5INkFkK1BIQlk8dWJKX1BpRzhiNU5p
XyhMUVZnd2opST1xR0hLZlFUSz1Qcjdoe20KekJhZTVWSk16UnwrUEdPUGR5Y2hOYk1NLW9eKXJ6
WW5rS0dUbUptVyR1UE9CITMmWnxyT3VkYzxjQCpnSnNmKFlpCnp7QjFQKGp5TX5DUG5iVSpgKjhG
UnF0aGRZWE1RPHlaRGV4eiZZOWBOP29jQH43eXJufSNvc2dIQG9XQkhrTXhLXwp6MEQpNSFOV0xS
NG9uckVYbnpZKSh5PnRwP3lGNCtKekJ3O054bXQ0VyluQml1VUc9dG87TUljaD9Ye2lQb0x6NmoK
enRHUTAweD53dUljMSlPVDctdGpkPVZvUSZnPHllI3BVUyRrVFhSZUc9MGBCNGVlKEZxZFZYbSRa
eHZRXmBJb0tzCnpuNj9HMXdiZStKSENKb1BOcDhWdjh4MHJCV2c1PyRpUykmYl42LSpwP15LKUBv
JWAzRXNeaSkhX3d+cH5EJEsmPgp6KHNENnhNV1EtWnE7azJMem17TE9SQFhNSSl2YVJEJilDWV4+
ZVhVbFd6KUw0UjQ3X290QSgzZWBOO0oze0VneiQKek5gQXJHSiNieTg+WnZ1SG9LV1czKUtMMlIj
Y25rYiQ+bng3R0o1diM9Vk9XVmBTYkdrJjYwPWFkJG1AO2pGaC1GCnoqX3RidFBSYGthUmtpT3Ip
QEpAP1d6ZndiUVlEMzRLZElodj8lJU16VXM9bj13ZEd6M20rTT5BXjZManFLV1d9UQp6c0NlYWsp
cFBxMUE5KypVSWZZSD94RmohNnt5JkA5R2FafVIpWnRVKGlTKyF1e01+UFpycmk8VUYqKl5jPjxi
O1MKejdiMkJAVzQmO0ZZNWYpSiNyIU1YdEtoZ2M/empFRThiPGVwYD5sVX1jVH1rRW8/UUt6Iy1i
NTA5aTkhQzNjMk4rCnp0d01HXipuNCUxNG84P2VCQ1I9PHlBenVIYVYyWVFgZnUxMyluYT5aR252
Yzd5Oz87X21iU0FVNlY1YSk0RiNNMQp6O3BMI1glYXoqQilwRXREdypyWXM1bkdlM3hnOW1AKV9V
PVR7MmY9b1gxKHZKKXZUVnBRfE9qSkNZdX5lPWcpV0IKeipSP1hie1kpIXBXRTFAQGw1SClMUjIh
b0k1eylPfmlTKDBDJTB8OEE2IXVhNnlrVChZNXZ3cEYoan4wZGV0bUt+CnpUKEVaZl4zN0NaaVMk
b1o9USZtT2Bee2p0OUlpQ25NTCtDSzw2LXQ1P0tYcDFBTUcla052Zl89SFJKXj1YcFdofgp6VSs5
VlM+fTtmO1hrVEYlanp1V2l2IShWT0t+RFNIenRgSGs/MChjKm83fkQ7dV40PHUkU3dFV0ZAQCE3
SHNrJm0KellSZyEmI1FwU0ZuY0pHT28wZzV5ZlohTjVKIUF7TjVqMVA2ZUxsYUUhdHFGPkRsfV47
KTdYJVNeel5obXs3dWtLCnohJiQ9KkVtQTRSQ3YmUkVKLVU4M197UF8hKncoRk5NJTVONSZBJHJ1
Jnd1fnwycTFzfTB0Z18wMDBJYWdmQip2RAp6UyVLJGVUK1duKUNhaClfS1lKbWUwLUN4fnxGKFor
QVFle3VkdzsqO188YE04clJKdjhtSG9GfXJ9U1NuNDZBdmkKemBJJTd2Mzx3fkEwMElhZ2ZCKnNy
QWI8YkAycH0qWjAlbENrNztXYllNJEohelgxKilUY2c7VHlORChPcDB0Z18wCnowMElhZ2ZCKnNy
QWI8YkAtIUZrNSRzczljWEFFNXZ4QmFLX1VFenE1Y3pCYHpmfk1qWm9BSylFek9jbzxgbTNuOQp6
OT9xakNwWUtzPnxONmdYe3phR3t0MllKJjVJX0l7MVEwKn4wUiN8MDAwOUlMXypNbTs/WTh6RyMp
QzVpJERiZ1cKemlMMjhDUVd2K29vZ0w4cD1sfDdAe3hLa2MwMElhZ2ZCKnNyQWI8YkAycTF2SzAx
SSZaS2Zza3MoR1dsWTBSI3wwCnowMDlJTEttWSoqNUN7ZVFgflNLQVBqZiYzMFIjfDAwMDlJTEtt
WSoqNUl8dEMxdnZnNj9FMG0yMnExc30wdGdfMAp6MDBJYWdmQipzcl95WWRAfDF0bWZ7fndxaW5q
ZmVEMHxFI2pmQipzckFiPGJAMnExc30wdGtHdzArVFUpKFkkV28KelRpYmNmKzRWTk9uKEd2RCok
R3tySCo+YVVAN1EoY21nQ21Ud1E2PW8oYFUwczZJYm9LUFB0bGc/a3loZHp2fGowCnpYVkcpJi1o
QD1rVTNXYVlxP1NFZSZjRlUyR2R+ZEtLWkUxe1BydW0kdk5pK3xLbVkqKjVJX0l7MVEwKn4wUiN9
fQp6QX4yfmglRmRHbHU/Yy0lOXYlTE4kTSQra3BLVlJeUFlHel9gbj1JYDApWEhEPiFRcUwxUTAq
fjBSI3wwMDA5SUwKekttWSoqMjF0UEN7fEJmdERHQ0F6QWI8YkAycTFzfTB0Z18wMDBPLVFHIV5h
TjNOWEBwSGV3TSMwMDlJTEttWSoqCno1SV9JezFRMDtyYHpTREt6OWpVcV9sNWIjdkcrfj9FQzIl
bjJxMXN9MHRnXzAwMElhZ2ZCKnZEdUUzVS1seGYtYwp6S3tCY0QpKyNrdSt1NSZfPil6OCh8M2hr
ZVl9MzJIQDckXztabl5xdU5eUypuQnVCXjNPKmI8d1d0alBSTTxIZjUKel5yVzFValZEeUhSc1NM
Ujk7dDVuR3hVP0ZyQi1zUVY/fCVYPXVNZTRyVkt4O2VuITVRalFTVi1IUy1IJHsjKDU8CnpBYjxi
QDJxMXN9MHRnXzAwMElhZ2ZXWTdnIzU3JGQpa2A7JHtgM0V1YEsyKWJxdXYtMEttWSoqNUlfSXsx
UTAqfgp6MFIjfDBWMU5ZVHh8RXV4PnhSKWh7e0xLPHwxdil4cGFOMTkxUTAqfjBSI3wwMDA5SUxL
bVkqKjkoUkdFbV45U1UKemVfVllTVEohJEB3fWttO15SMzRuaFZtblQwMElhZ2ZCKnNyQWI8YkAy
cTE3ODAjfiVTSVFLPyEmcGp4Nl5gb2N4Cnp8MVAhUXJ3bWRlY18hNmRZd05jUV5wMEdOVXkocnkh
SCpxJHdHX0RqenImUEsxUTAqfjBSI3wwMDA5SUxLbVkqKgp6MjFjT3N7e0lLVXtMKnxkRnZYKUYy
cTFzfTB0Z18wMDBJYWdmQipzckppWT9NYFo/TFcqRlpEJGI0SyV+ZiZUJTkKQ3p+Kyh3CgpsaXRl
cmFsIDAKSGNtVj9kMDAwMDEKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>