<?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>165114</bug_id>
          
          <creation_ts>2016-11-28 14:15:31 -0800</creation_ts>
          <short_desc>Add a new project for recording and playing back editing commands in editable web content</short_desc>
          <delta_ts>2016-12-07 12:41:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>ap</cc>
    
    <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>lforschler</cc>
    
    <cc>mitz</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1253999</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2016-11-28 14:15:31 -0800</bug_when>
    <thetext>Add a new project for recording and playing back editing commands in editable web content</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254002</commentid>
    <comment_count>1</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2016-11-28 14:18:11 -0800</bug_when>
    <thetext>&lt;rdar://problem/29408135&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254034</commentid>
    <comment_count>2</comment_count>
      <attachid>295537</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2016-11-28 14:57:03 -0800</bug_when>
    <thetext>Created attachment 295537
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254042</commentid>
    <comment_count>3</comment_count>
      <attachid>295537</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2016-11-28 15:08:12 -0800</bug_when>
    <thetext>Comment on attachment 295537
Patch

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

&gt; Tools/ChangeLog:19
&gt; +        2. Extract the JSON-serialized editing history data and load the playback harness with this data.

Whoops, there are two 2s here :| I&apos;ll fix this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254076</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-11-28 15:56:34 -0800</bug_when>
    <thetext>How is the playback part going to be used? WebKitTestRunner has JS functions to simulate text input functions, will this be different?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254166</commentid>
    <comment_count>5</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2016-11-28 19:15:59 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; How is the playback part going to be used? WebKitTestRunner has JS functions
&gt; to simulate text input functions, will this be different?

The purpose of this project is to provide a means for clients to remember DOM changes that occurred due to editing, and later replay these DOM changes in a separate page that allows the user to step through each of the editing actions and DOM changes that occurred, one by one. Thus, the EditingHistory project is unrelated to our testing infrastructure (e.g. TestWebKitAPI and WebKitTestRunner).

The playback part happens when the user opens the playback harness and loads a .json file containing editing history. This allows the user to &apos;seek&apos; through the editing that occurred, an input at a time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254547</commentid>
    <comment_count>6</comment_count>
      <attachid>295662</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2016-11-29 16:07:49 -0800</bug_when>
    <thetext>Created attachment 295662
Added highlight-able nodes in the playback harness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255976</commentid>
    <comment_count>7</comment_count>
      <attachid>296025</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2016-12-02 17:04:06 -0800</bug_when>
    <thetext>Created attachment 296025
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255980</commentid>
    <comment_count>8</comment_count>
      <attachid>296025</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2016-12-02 17:13:22 -0800</bug_when>
    <thetext>Comment on attachment 296025
Patch

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

&gt; Tools/EditingHistory/DumpEditingHistory.js:1
&gt; +(() =&gt; {

Whoops, this file isn&apos;t supposed to be here. I&apos;ll remove it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255984</commentid>
    <comment_count>9</comment_count>
      <attachid>296028</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2016-12-02 17:22:45 -0800</bug_when>
    <thetext>Created attachment 296028
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1257287</commentid>
    <comment_count>10</comment_count>
      <attachid>296028</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-12-07 11:33:49 -0800</bug_when>
    <thetext>Comment on attachment 296028
Patch

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

One nit!

&gt; Source/WebCore/ChangeLog:10
&gt; +        scripts to the internal system directory when ionstalling. See the Tools ChangeLog and individual comments below

ionstalling -&gt; installing :-P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1257293</commentid>
    <comment_count>11</comment_count>
      <attachid>296404</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2016-12-07 11:41:38 -0800</bug_when>
    <thetext>Created attachment 296404
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1257308</commentid>
    <comment_count>12</comment_count>
      <attachid>296404</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-07 12:41:11 -0800</bug_when>
    <thetext>Comment on attachment 296404
Patch for landing

Clearing flags on attachment: 296404

Committed r209470: &lt;http://trac.webkit.org/changeset/209470&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1257309</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-07 12:41:16 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295537</attachid>
            <date>2016-11-28 14:57:03 -0800</date>
            <delta_ts>2016-11-29 16:07:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165114-20161128145640.patch</filename>
            <type>text/plain</type>
            <size>100394</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4OTkzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZjdmNjE3MTUwNTU4Y2QxM2NiMDc1ZDZjNWIzNGJjMzhm
Y2ViZWQzZi4uOGM2OGIzMjRiMTU1OTA1YTFhZmM2NzUxY2UyOGFkZDUyNTMzY2E0MSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4
NiBAQAorMjAxNi0xMS0yOCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4K
KworICAgICAgICBBZGQgYSBuZXcgcHJvamVjdCBmb3IgcmVjb3JkaW5nIGFuZCBwbGF5aW5nIGJh
Y2sgZWRpdGluZyBjb21tYW5kcyBpbiBlZGl0YWJsZSB3ZWIgY29udGVudAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MTE0CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8yOTQwODEzNT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRzIGEgbmV3IFhjb2RlIHByb2plY3QgY29udGFpbmluZyB3b3JrIHRv
d2FyZHMgcmV3aW5kaW5nIGFuZCBwbGF5aW5nIGJhY2sgZWRpdGluZyBjb21tYW5kcy4gVGhpcyB3
b3JrIGlzCisgICAgICAgIHdyYXBwZWQgaW4gYW4gWGNvZGUgcHJvamVjdCB0byB0YWtlIGFkdmFu
dGFnZSBvZiB0aGUgWENUZXN0IGZyYW1ld29yay4gVG8gbWFudWFsbHkgdGVzdCByZWNvcmRpbmcs
IG9wZW4gdGhlCisgICAgICAgIGNhcHR1cmUgdGVzdCBoYXJuZXNzLCBlZGl0IHRoZSBjb250ZW50
ZWRpdGFibGUgYm9keSwgYW5kIHRoZW4gaGl0IGNtZC1TLiBUaGlzIGRvd25sb2FkcyBhIC5qc29u
IGZpbGUgd2hpY2ggbWF5CisgICAgICAgIHRoZW4gYmUgZHJhZ2dlZCBpbnRvIHRoZSBwbGF5YmFj
ayB0ZXN0IGhhcm5lc3MuCisKKyAgICAgICAgQWxzbyBhZGRzIDMgbmV3IHVuaXQgdGVzdHMgaW4g
RWRpdGluZ0hpc3RvcnlUZXN0cy9SZXdpbmRBbmRQbGF5YmFja1Rlc3RzLm0uIFRoZXNlIHRlc3Rz
IGNhcnJ5IG91dCB0aGUgZm9sbG93aW5nCisgICAgICAgIHN0ZXBzOgorCisgICAgICAgIDEuIExv
YWQgdGhlIGNhcHR1cmUgaGFybmVzcyBhbmQgcGVyZm9ybSB0ZXN0LXNwZWNpZmljIGVkaXRpbmcg
b24gdGhlIHdlYiB2aWV3LgorICAgICAgICAyLiBMZXQgb3JpZ2luYWxTdGF0ZSBiZSBhIGR1bXAg
b2YgdGhlIERPTSBhdCB0aGlzIHBvaW50IGluIHRpbWUuCisgICAgICAgIDIuIEV4dHJhY3QgdGhl
IEpTT04tc2VyaWFsaXplZCBlZGl0aW5nIGhpc3RvcnkgZGF0YSBhbmQgbG9hZCB0aGUgcGxheWJh
Y2sgaGFybmVzcyB3aXRoIHRoaXMgZGF0YS4KKyAgICAgICAgMy4gUmV3aW5kIGFsbCBlZGl0aW5n
IHRvIHRoZSBiZWdpbm5pbmcuCisgICAgICAgIDQuIFBsYXliYWNrIGFsbCBlZGl0aW5nIHRvIHRo
ZSBlbmQuCisgICAgICAgIDUuIER1bXAgdGhlIHN0YXRlIG9mIHRoZSBET00uIFRoaXMgc2hvdWxk
IGJlIGlkZW50aWNhbCB0byBvcmlnaW5hbFN0YXRlLgorCisgICAgICAgICogRWRpdGluZ0hpc3Rv
cnkvRWRpdGluZ0hpc3RvcnkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkZWQuCisgICAg
ICAgICogRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvSW5mby5wbGlzdDogQWRkZWQuCisg
ICAgICAgICogRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvUmVzb3VyY2VzL0NhcHR1cmVU
ZXN0SGFybmVzcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBFZGl0aW5nSGlzdG9yeS9FZGl0aW5n
SGlzdG9yeS9SZXNvdXJjZXMvRE9NVGVzdGluZ1V0aWwuanM6IEFkZGVkLgorICAgICAgICAqIEVk
aXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Jlc291cmNlcy9EdW1wRWRpdGluZ0hpc3Rvcnku
anM6IEFkZGVkLgorICAgICAgICAoYmVnaW5Qcm9jZXNzaW5nVG9wTGV2ZWxVcGRhdGUpOgorICAg
ICAgICAoZW5kUHJvY2Vzc2luZ1RvcExldmVsVXBkYXRlKToKKyAgICAgICAgKGFwcGVuZERPTVVw
ZGF0ZXNGcm9tUmVjb3Jkcyk6CisgICAgICAgIChhcHBlbmRTZWxlY3Rpb25VcGRhdGVJZk5lY2Vz
c2FyeSk6CisKKyAgICAgICAgQWRkcyBuZXcgZW50cmllcyBpbnRvIHRoZSB0b3AtbGV2ZWwgbGlz
dCBvZiBET00gdXBkYXRlcyBjYXB0dXJlZCB3aGVuIGVkaXRpbmcuIFJlc3BlY3RpdmVseSwgdGhl
c2UgYXJlIGlucHV0CisgICAgICAgIGV2ZW50cyBhbmQgc2VsZWN0aW9uIGNoYW5nZXMuCisKKyAg
ICAgICAgKEVkaXRpbmdIaXN0b3J5LmdldEVkaXRpbmdIaXN0b3J5QXNKU09OU3RyaW5nKToKKyAg
ICAgICAgKiBFZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9SZXNvdXJjZXMvRWRpdGluZ0hp
c3RvcnlVdGlsLmpzOiBBZGRlZC4KKyAgICAgICAgKHByb3RvdHlwZS5fc2NyYW1ibGUpOgorICAg
ICAgICAocHJvdG90eXBlLmFwcGx5VG9UZXh0KToKKyAgICAgICAgKHByb3RvdHlwZS5hcHBseVRv
RmlsZW5hbWUpOgorICAgICAgICAocHJvdG90eXBlLl9zY3JhbWJlZE51bWJlckluZGV4Rm9yQ29k
ZSk6CisgICAgICAgIChwcm90b3R5cGUuX3NjcmFtYmVkTG93ZXJjYXNlSW5kZXhGb3JDb2RlKToK
KyAgICAgICAgKHByb3RvdHlwZS5fc2NyYW1iZWRVcHBlcmNhc2VJbmRleEZvckNvZGUpOgorCisg
ICAgICAgIE5haXZlIGltcGxlbWVudGF0aW9uIG9mIGFuIG9iZnVzY2F0b3IuIEN1cnJlbnRseSwg
dGhpcyBvbmx5IGFmZmVjdHMgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuCisKKyAgICAgICAgKGVs
ZW1lbnRGcm9tTWFya2Rvd24pOgorICAgICAgICAoR2xvYmFsTm9kZU1hcCk6CisgICAgICAgIChH
bG9iYWxOb2RlTWFwLnByb3RvdHlwZS5ub2Rlc0ZvckdVSURzKToKKyAgICAgICAgKEdsb2JhbE5v
ZGVNYXAucHJvdG90eXBlLmd1aWRzRm9yTm9kZXMpOgorICAgICAgICAoR2xvYmFsTm9kZU1hcC5w
cm90b3R5cGUubm9kZUZvckdVSUQpOgorICAgICAgICAoR2xvYmFsTm9kZU1hcC5wcm90b3R5cGUu
Z3VpZEZvck5vZGUpOgorICAgICAgICAoR2xvYmFsTm9kZU1hcC5wcm90b3R5cGUuaGFzR1VJREZv
ck5vZGUpOgorICAgICAgICAoR2xvYmFsTm9kZU1hcC5wcm90b3R5cGUubm9kZXMpOgorICAgICAg
ICAoR2xvYmFsTm9kZU1hcC5wcm90b3R5cGUudG9PYmplY3QpOgorICAgICAgICAoR2xvYmFsTm9k
ZU1hcC5mcm9tT2JqZWN0KToKKyAgICAgICAgKEdsb2JhbE5vZGVNYXAuZGF0YUZvck5vZGUpOgor
ICAgICAgICAoR2xvYmFsTm9kZU1hcC5lbGVtZW50RnJvbVRhZ05hbWUpOgorICAgICAgICAoR2xv
YmFsTm9kZU1hcC5ub2RlQXR0cmlidXRlc1RvT2JqZWN0KToKKworICAgICAgICBUaGUgR2xvYmFs
Tm9kZU1hcCBrZWVwcyB0cmFjayBvZiBldmVyeSBub2RlIHRoYXQgaGFzIGFwcGVhcmVkIGluIHRo
ZSBET00sIGFzc2lnbmluZyBlYWNoIG5vZGUgYSBnbG9iYWxseSB1bmlxdWUKKyAgICAgICAgaWRl
bnRpZmllciAoR1VJRCkuIFRoaXMgR1VJRCBpcyB1c2VkIHdoZW4gcmVjb25zdHJ1Y3RpbmcgdGhl
IERPTSwgYXMgd2VsbCBhcyB1bmFwcGx5aW5nIG9yIGFwcGx5aW5nIGVkaXRpbmcuCisKKyAgICAg
ICAgKFNlbGVjdGlvblN0YXRlKToKKyAgICAgICAgKFNlbGVjdGlvblN0YXRlLnByb3RvdHlwZS5p
c0VxdWFsKToKKyAgICAgICAgKFNlbGVjdGlvblN0YXRlLnByb3RvdHlwZS5hcHBseVRvU2VsZWN0
aW9uKToKKyAgICAgICAgKFNlbGVjdGlvblN0YXRlLmZyb21TZWxlY3Rpb24pOgorICAgICAgICAo
U2VsZWN0aW9uU3RhdGUucHJvdG90eXBlLnRvT2JqZWN0KToKKyAgICAgICAgKFNlbGVjdGlvblN0
YXRlLmZyb21PYmplY3QpOgorCisgICAgICAgIFJlcHJlc2VudHMgYSBzbmFwc2hvdCBvZiB0aGUg
U2VsZWN0aW9uIHN0YXRlIChkZXRlcm1pbmVkIGJ5IGdldFNlbGVjdGlvbigpKS4KKworICAgICAg
ICAoRE9NVXBkYXRlKToKKyAgICAgICAgKERPTVVwZGF0ZS5wcm90b3R5cGUuYXBwbHkpOgorICAg
ICAgICAoRE9NVXBkYXRlLnByb3RvdHlwZS51bmFwcGx5KToKKyAgICAgICAgKERPTVVwZGF0ZS5w
cm90b3R5cGUudGFyZ2V0Tm9kZSk6CisgICAgICAgIChET01VcGRhdGUucHJvdG90eXBlLmRldGFp
bHNFbGVtZW50KToKKyAgICAgICAgKERPTVVwZGF0ZS5vZlR5cGUpOgorICAgICAgICAoRE9NVXBk
YXRlLmZyb21SZWNvcmRzKToKKworICAgICAgICBBIERPTVVwZGF0ZSBpcyBhbiBhYnN0cmFjdCBv
YmplY3QgcmVwcmVzZW50aW5nIGEgY2hhbmdlIGluIHRoZSBET00gdGhhdCBtYXkgYmUgYXBwbGll
ZCBhbmQgdW5hcHBsaWVkLiBUaGVzZSBhcmUKKyAgICAgICAgYWxzbyBzZXJpYWxpemFibGUgYXMg
aGFzaGVzLCB3aGljaCBtYXkgdGhlbiBiZSBjb252ZXJ0ZWQgdG8gSlNPTiB3aGVuIGdlbmVyYXRp
bmcgZWRpdGluZyBoaXN0b3J5IGRhdGEuCisKKyAgICAgICAgKENoaWxkTGlzdFVwZGF0ZSk6Cisg
ICAgICAgIChDaGlsZExpc3RVcGRhdGUucHJvdG90eXBlLmFwcGx5KToKKyAgICAgICAgKENoaWxk
TGlzdFVwZGF0ZS5wcm90b3R5cGUudW5hcHBseSk6CisgICAgICAgIChDaGlsZExpc3RVcGRhdGUu
cHJvdG90eXBlLl9uZXh0U2libGluZyk6CisgICAgICAgIChDaGlsZExpc3RVcGRhdGUucHJvdG90
eXBlLl9yZW1vdmVkTm9kZXMpOgorICAgICAgICAoQ2hpbGRMaXN0VXBkYXRlLnByb3RvdHlwZS5f
YWRkZWROb2Rlcyk6CisgICAgICAgIChDaGlsZExpc3RVcGRhdGUucHJvdG90eXBlLnRvT2JqZWN0
KToKKyAgICAgICAgKENoaWxkTGlzdFVwZGF0ZS5wcm90b3R5cGUuZGV0YWlsc0VsZW1lbnQpOgor
ICAgICAgICAoQ2hpbGRMaXN0VXBkYXRlLmZyb21PYmplY3QpOgorICAgICAgICAoQ2hhcmFjdGVy
RGF0YVVwZGF0ZSk6CisgICAgICAgIChDaGFyYWN0ZXJEYXRhVXBkYXRlLnByb3RvdHlwZS5hcHBs
eSk6CisgICAgICAgIChDaGFyYWN0ZXJEYXRhVXBkYXRlLnByb3RvdHlwZS51bmFwcGx5KToKKyAg
ICAgICAgKENoYXJhY3RlckRhdGFVcGRhdGUucHJvdG90eXBlLmRldGFpbHNFbGVtZW50KToKKyAg
ICAgICAgKENoYXJhY3RlckRhdGFVcGRhdGUucHJvdG90eXBlLnRvT2JqZWN0KToKKyAgICAgICAg
KENoYXJhY3RlckRhdGFVcGRhdGUuZnJvbU9iamVjdCk6CisgICAgICAgIChBdHRyaWJ1dGVVcGRh
dGUpOgorICAgICAgICAoQXR0cmlidXRlVXBkYXRlLnByb3RvdHlwZS5hcHBseSk6CisgICAgICAg
IChBdHRyaWJ1dGVVcGRhdGUucHJvdG90eXBlLnVuYXBwbHkpOgorICAgICAgICAoQXR0cmlidXRl
VXBkYXRlLnByb3RvdHlwZS5kZXRhaWxzRWxlbWVudCk6CisgICAgICAgIChBdHRyaWJ1dGVVcGRh
dGUucHJvdG90eXBlLnRvT2JqZWN0KToKKyAgICAgICAgKEF0dHJpYnV0ZVVwZGF0ZS5mcm9tT2Jq
ZWN0KToKKworICAgICAgICBUaGVzZSB0aHJlZSB1cGRhdGUgdHlwZXMgY29ycmVzcG9uZCB0byB0
aGUgdGhyZWUgdHlwZXMgb2YgRE9NIG11dGF0aW9ucy4gVGhlc2UgbWF5IGFwcGVhciBhcyB0b3At
bGV2ZWwgdXBkYXRlcworICAgICAgICBpZiB0aGV5IGFyZSBub3QgY2FwdHVyZWQgZHVyaW5nIGFu
IGlucHV0IGV2ZW50LCBidXQgZm9yIHRoZSBtYWpvcml0eSBvZiB1c2VyLWlucHV0LWRyaXZlbiBj
aGFuZ2VzLCB0aGV5IHdpbGwgYmUKKyAgICAgICAgY2hpbGRyZW4gb2YgYW4gaW5wdXQgZXZlbnQu
CisKKyAgICAgICAgKFNlbGVjdGlvblVwZGF0ZSk6CisgICAgICAgIChTZWxlY3Rpb25VcGRhdGUu
cHJvdG90eXBlLmFwcGx5KToKKyAgICAgICAgKFNlbGVjdGlvblVwZGF0ZS5wcm90b3R5cGUudW5h
cHBseSk6CisgICAgICAgIChTZWxlY3Rpb25VcGRhdGUucHJvdG90eXBlLnRvT2JqZWN0KToKKyAg
ICAgICAgKFNlbGVjdGlvblVwZGF0ZS5mcm9tT2JqZWN0KToKKyAgICAgICAgKFNlbGVjdGlvblVw
ZGF0ZS5wcm90b3R5cGUuX3JhbmdlRGVzY3JpcHRpb24pOgorICAgICAgICAoU2VsZWN0aW9uVXBk
YXRlLnByb3RvdHlwZS5fYW5jaG9yRGVzY3JpcHRpb24pOgorICAgICAgICAoU2VsZWN0aW9uVXBk
YXRlLnByb3RvdHlwZS5fZm9jdXNEZXNjcmlwdGlvbik6CisgICAgICAgIChTZWxlY3Rpb25VcGRh
dGUucHJvdG90eXBlLmRldGFpbHNFbGVtZW50KToKKworICAgICAgICBSZXByZXNlbnRzIGEgY2hh
bmdlIGluIHRoZSBTZWxlY3Rpb24uIFdoaWxlIG5vIGNoYW5nZXMgdG8gdGhlIERPTSBzdHJ1Y3R1
cmUgb2NjdXIgYXMgYSByZXN1bHQgb2YgYQorICAgICAgICBTZWxlY3Rpb25VcGRhdGUsIHRoZSBp
bmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlc2UgdXBkYXRlcyBpcyB1c2VkIHRvIGRldGVybWlu
ZSB3aGVyZSB0aGUgc2VsZWN0aW9uIHNob3VsZCBiZQorICAgICAgICB3aGVuIHJld2luZGluZyBv
ciBwbGF5aW5nIGJhY2sgdGhlIGVkaXRpbmcgaGlzdG9yeS4KKworICAgICAgICAoSW5wdXRFdmVu
dFVwZGF0ZSk6CisgICAgICAgIChJbnB1dEV2ZW50VXBkYXRlLnByb3RvdHlwZS5fb2JmdXNjYXRl
ZERhdGEpOgorICAgICAgICAoSW5wdXRFdmVudFVwZGF0ZS5wcm90b3R5cGUuYXBwbHkpOgorICAg
ICAgICAoSW5wdXRFdmVudFVwZGF0ZS5wcm90b3R5cGUudW5hcHBseSk6CisgICAgICAgIChJbnB1
dEV2ZW50VXBkYXRlLnByb3RvdHlwZS50b09iamVjdCk6CisgICAgICAgIChJbnB1dEV2ZW50VXBk
YXRlLmZyb21PYmplY3QpOgorICAgICAgICAoSW5wdXRFdmVudFVwZGF0ZS5wcm90b3R5cGUuZGV0
YWlsc0VsZW1lbnQpOgorCisgICAgICAgIFJlcHJlc2VudHMgYW4gdXBkYXRlIGR1ZSB0byB1c2Vy
IGlucHV0LCB3aGljaCBjb25zaXN0cyBvZiBzb21lIG51bWJlciBvZiBjaGlsZCBET00gbXV0YXRp
b24gdXBkYXRlcy4KKworICAgICAgICAqIEVkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Jl
c291cmNlcy9QbGF5YmFja1Rlc3RIYXJuZXNzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIEVkaXRp
bmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Rlc3RSdW5uZXIuaDogQWRkZWQuCisgICAgICAgICog
RWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvVGVzdFJ1bm5lci5tOiBBZGRlZC4KKyAgICAg
ICAgKGluamVjdGVkTWVzc2FnZUV2ZW50SGFuZGxlclNjcmlwdCk6CisgICAgICAgICgtW1Rlc3RS
dW5uZXIgaW5pdF0pOgorICAgICAgICAoLVtUZXN0UnVubmVyIGRlbGV0ZUJhY2t3YXJkczpdKToK
KyAgICAgICAgKC1bVGVzdFJ1bm5lciB0eXBlU3RyaW5nOl0pOgorICAgICAgICAoLVtUZXN0UnVu
bmVyIGJvZHlFbGVtZW50U3VidHJlZV0pOgorICAgICAgICAoLVtUZXN0UnVubmVyIGJvZHlUZXh0
Q29udGVudF0pOgorICAgICAgICAoLVtUZXN0UnVubmVyIGVkaXRpbmdIaXN0b3J5SlNPTl0pOgor
ICAgICAgICAoLVtUZXN0UnVubmVyIGxvYWRQbGF5YmFja1Rlc3RIYXJuZXNzV2l0aEpTT046XSk6
CisgICAgICAgICgtW1Rlc3RSdW5uZXIgbnVtYmVyT2ZVcGRhdGVzXSk6CisgICAgICAgICgtW1Rl
c3RSdW5uZXIganVtcFRvVXBkYXRlSW5kZXg6XSk6CisgICAgICAgICgtW1Rlc3RSdW5uZXIgZXhw
ZWN0RXZlbnRzOmFmdGVyUGVyZm9ybWluZzpdKToKKyAgICAgICAgKC1bVGVzdFJ1bm5lciBsb2Fk
Q2FwdHVyZVRlc3RIYXJuZXNzXSk6CisgICAgICAgICgtW1Rlc3RSdW5uZXIgc2V0VGV4dE9iZnVz
Y2F0aW9uRW5hYmxlZDpdKToKKyAgICAgICAgKC1bVGVzdFJ1bm5lciBpc0RvbmVXYWl0aW5nRm9y
UGVuZGluZ0V2ZW50c10pOgorICAgICAgICAoLVtUZXN0UnVubmVyIHVzZXJDb250ZW50Q29udHJv
bGxlcjpkaWRSZWNlaXZlU2NyaXB0TWVzc2FnZTpdKToKKyAgICAgICAgCisgICAgICAgIFRoZSBU
ZXN0UnVubmVyIHByb3ZpZGVzIHV0aWxpdGllcyB0aGF0IGEgdW5pdCB0ZXN0IHNob3VsZCB1c2Ug
dG8gZHJpdmUgdGhlIHRlc3QgZm9yd2FyZCAoZS5nLiBsb2FkaW5nIGhhcm5lc3NlcykKKyAgICAg
ICAgb3IgaW5zcGVjdCB0aGUgc3RhdGUgb2YgdGhlIGxvYWRlZCBwYWdlIChlLmcuIGV4dHJhY3Rp
bmcgSlNPTiBlZGl0aW5nIGhpc3RvcnkgZGF0YSBmcm9tIHRoZSBjYXB0dXJlIGhhcm5lc3MpLgor
CisgICAgICAgICogRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvVGVzdFV0aWwuaDogQWRk
ZWQuCisgICAgICAgICogRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvVGVzdFV0aWwubTog
QWRkZWQuCisgICAgICAgICh3YWl0VW50aWxXaXRoVGltZW91dCk6CisgICAgICAgICh3YWl0VW50
aWwpOgorCisgICAgICAgIFByb3ZpZGVzIHV0aWxpdGllcyBmb3IgcnVubmluZyB0ZXN0cy4gRm9y
IG5vdywgdGhpcyBpcyBqdXN0IHNwaW5uaW5nIHRoZSBydW5sb29wIG9uIGEgZ2l2ZW4gY29uZGl0
aW9uLgorCisgICAgICAgICogRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvV0tXZWJWaWV3
QWRkaXRpb25zLmg6IEFkZGVkLgorICAgICAgICAqIEVkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0
b3J5L1dLV2ViVmlld0FkZGl0aW9ucy5tOiBBZGRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IGxv
YWRQYWdlRnJvbUJ1bmRsZU5hbWVkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgdHlwZUNoYXJh
Y3RlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGtleVByZXNzV2l0aENoYXJhY3RlcnM6a2V5
Q29kZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHRGcm9tU3RyaW5nOl0pOgorICAgICAgICAKKyAgICAgICAgUHJvdmlkZXMgdXRpbGl0aWVzIGZv
ciBzaW11bGF0aW5nIGludGVyYWN0aW9uIGluIGEgd2ViIHZpZXcuCisgICAgICAgIAorICAgICAg
ICAqIEVkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L21haW4ubTogQWRkZWQuCisgICAgICAg
ICogRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnlUZXN0cy9JbmZvLnBsaXN0OiBBZGRlZC4K
KyAgICAgICAgKiBFZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeVRlc3RzL1Jld2luZEFuZFBs
YXliYWNrVGVzdHMubTogQWRkZWQuCisgICAgICAgICgtW1Jld2luZEFuZFBsYXliYWNrVGVzdHMg
c2V0VXBdKToKKyAgICAgICAgKC1bUmV3aW5kQW5kUGxheWJhY2tUZXN0cyB0ZWFyRG93bl0pOgor
ICAgICAgICAoLVtSZXdpbmRBbmRQbGF5YmFja1Rlc3RzIHRlc3RUeXBpbmdTaW5nbGVMaW5lT2ZU
ZXh0XSk6CisgICAgICAgICgtW1Jld2luZEFuZFBsYXliYWNrVGVzdHMgdGVzdFR5cGluZ011bHRp
cGxlTGluZXNPZlRleHRdKToKKyAgICAgICAgKC1bUmV3aW5kQW5kUGxheWJhY2tUZXN0cyB0ZXN0
VHlwaW5nQW5kRGVsZXRpbmdUZXh0XSk6CisgICAgICAgICgtW1Jld2luZEFuZFBsYXliYWNrVGVz
dHMgcmV3aW5kQW5kUGxheWJhY2tFZGl0aW5nSW5QbGF5YmFja1Rlc3RIYXJuZXNzXSk6CisgICAg
ICAgICgtW1Jld2luZEFuZFBsYXliYWNrVGVzdHMgb3JpZ2luYWxCb2R5U3VidHJlZTppc0VxdWFs
VG9GaW5hbFN1YnRyZWU6XSk6CisKIDIwMTYtMTEtMjcgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZy
YXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgQW5vdGhlciBmaXggZm9yIENNYWtlLgpkaWZmIC0t
Z2l0IGEvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjMzZjFhMTk0MmIyNGNmMDhmMjNlNjI4Njdj
ZGY5NmQxMDZkN2YwYQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0Vk
aXRpbmdIaXN0b3J5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTAsMCArMSw0MjcgQEAK
Ky8vICEkKlVURjgqJCEKK3sKKwlhcmNoaXZlVmVyc2lvbiA9IDE7CisJY2xhc3NlcyA9IHsKKwl9
OworCW9iamVjdFZlcnNpb24gPSA0NjsKKwlvYmplY3RzID0geworCisvKiBCZWdpbiBQQlhCdWls
ZEZpbGUgc2VjdGlvbiAqLworCQk1MTZBREJFMjFERTE1NkE5MDBFMkI5OEQgLyogQ2FwdHVyZVRl
c3RIYXJuZXNzLmh0bWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxNkFEQkE4MURFMTU1QUIwMEUyQjk4RCAvKiBDYXB0dXJlVGVzdEhhcm5lc3MuaHRt
bCAqLzsgfTsKKwkJNTE2QURCRTMxREUxNTZBOTAwRTJCOThEIC8qIER1bXBFZGl0aW5nSGlzdG9y
eS5qcyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2
QURCQTkxREUxNTVBQjAwRTJCOThEIC8qIER1bXBFZGl0aW5nSGlzdG9yeS5qcyAqLzsgfTsKKwkJ
NTE2QURCRTQxREUxNTZBOTAwRTJCOThEIC8qIEVkaXRpbmdIaXN0b3J5VXRpbC5qcyBpbiBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2QURCQUExREUxNTVB
QjAwRTJCOThEIC8qIEVkaXRpbmdIaXN0b3J5VXRpbC5qcyAqLzsgfTsKKwkJNTE2QURCRTUxREUx
NTZBOTAwRTJCOThEIC8qIFBsYXliYWNrVGVzdEhhcm5lc3MuaHRtbCBpbiBSZXNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2QURCQUIxREUxNTVBQjAwRTJCOThE
IC8qIFBsYXliYWNrVGVzdEhhcm5lc3MuaHRtbCAqLzsgfTsKKwkJNTE2QURCRTYxREUxNTZCQjAw
RTJCOThEIC8qIG1haW4ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxNkFEQkIxMURFMTU1QkQwMEUyQjk4RCAvKiBtYWluLm0gKi87IH07CisJCTUxNkFE
QkU3MURFMTU2QkIwMEUyQjk4RCAvKiBUZXN0UnVubmVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTZBREJCMzFERTE1NUJEMDBFMkI5OEQgLyogVGVz
dFJ1bm5lci5tICovOyB9OworCQk1MTZBREJFODFERTE1NkJCMDBFMkI5OEQgLyogVGVzdFV0aWwu
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNkFEQkI1
MURFMTU1QkQwMEUyQjk4RCAvKiBUZXN0VXRpbC5tICovOyB9OworCQk1MTZBREJFOTFERTE1NkJC
MDBFMkI5OEQgLyogV0tXZWJWaWV3QWRkaXRpb25zLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTZBREJCNzFERTE1NUJEMDBFMkI5OEQgLyogV0tXZWJW
aWV3QWRkaXRpb25zLm0gKi87IH07CisJCTUxNkFEQkYzMURFMTU3QUQwMEUyQjk4RCAvKiBSZXdp
bmRBbmRQbGF5YmFja1Rlc3RzLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTZBREJGMjFERTE1N0FEMDBFMkI5OEQgLyogUmV3aW5kQW5kUGxheWJhY2tU
ZXN0cy5tICovOyB9OworCQk1MTdGRDkzQzFERTE4REM5MDBBNzM2NzMgLyogRE9NVGVzdGluZ1V0
aWwuanMgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
N0ZEOTNCMURFMThEQzkwMEE3MzY3MyAvKiBET01UZXN0aW5nVXRpbC5qcyAqLzsgfTsKKy8qIEVu
ZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJv
eHkgc2VjdGlvbiAqLworCQk1MTZBREJGNTFERTE1N0FEMDBFMkI5OEQgLyogUEJYQ29udGFpbmVy
SXRlbVByb3h5ICovID0geworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29u
dGFpbmVyUG9ydGFsID0gNTEyRDdBOEIxREUwRkJFRjAwMjhGMEU2IC8qIFByb2plY3Qgb2JqZWN0
ICovOworCQkJcHJveHlUeXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gNTE2QURC
QzAxREUxNTVGQzAwRTJCOThEOworCQkJcmVtb3RlSW5mbyA9IEVkaXRpbmdIaXN0b3J5OworCQl9
OworLyogRW5kIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBC
WEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLworCQk1MTZBREJBODFERTE1NUFCMDBFMkI5OEQgLyog
Q2FwdHVyZVRlc3RIYXJuZXNzLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IG5hbWUgPSBDYXB0
dXJlVGVzdEhhcm5lc3MuaHRtbDsgcGF0aCA9IEVkaXRpbmdIaXN0b3J5L1Jlc291cmNlcy9DYXB0
dXJlVGVzdEhhcm5lc3MuaHRtbDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk1MTZB
REJBOTFERTE1NUFCMDBFMkI5OEQgLyogRHVtcEVkaXRpbmdIaXN0b3J5LmpzICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gRHVtcEVkaXRpbmdIaXN0b3J5LmpzOyBwYXRo
ID0gRWRpdGluZ0hpc3RvcnkvUmVzb3VyY2VzL0R1bXBFZGl0aW5nSGlzdG9yeS5qczsgc291cmNl
VHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk1MTZBREJBQTFERTE1NUFCMDBFMkI5OEQgLyogRWRp
dGluZ0hpc3RvcnlVdGlsLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1l
ID0gRWRpdGluZ0hpc3RvcnlVdGlsLmpzOyBwYXRoID0gRWRpdGluZ0hpc3RvcnkvUmVzb3VyY2Vz
L0VkaXRpbmdIaXN0b3J5VXRpbC5qczsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk1
MTZBREJBQjFERTE1NUFCMDBFMkI5OEQgLyogUGxheWJhY2tUZXN0SGFybmVzcy5odG1sICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5odG1sOyBuYW1lID0gUGxheWJhY2tUZXN0SGFybmVzcy5odG1sOyBwYXRoID0g
RWRpdGluZ0hpc3RvcnkvUmVzb3VyY2VzL1BsYXliYWNrVGVzdEhhcm5lc3MuaHRtbDsgc291cmNl
VHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk1MTZBREJCMDFERTE1NUJEMDBFMkI5OEQgLyogSW5m
by5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QueG1sOyBuYW1lID0gSW5mby5wbGlzdDsgcGF0
aCA9IEVkaXRpbmdIaXN0b3J5L0luZm8ucGxpc3Q7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsg
fTsKKwkJNTE2QURCQjExREUxNTVCRDAwRTJCOThEIC8qIG1haW4ubSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5vYmpjOyBuYW1lID0gbWFpbi5tOyBwYXRoID0gRWRpdGluZ0hpc3RvcnkvbWFpbi5t
OyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTUxNkFEQkIyMURFMTU1QkQwMEUyQjk4
RCAvKiBUZXN0UnVubmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRlc3RS
dW5uZXIuaDsgcGF0aCA9IEVkaXRpbmdIaXN0b3J5L1Rlc3RSdW5uZXIuaDsgc291cmNlVHJlZSA9
IFNPVVJDRV9ST09UOyB9OworCQk1MTZBREJCMzFERTE1NUJEMDBFMkI5OEQgLyogVGVzdFJ1bm5l
ci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IG5hbWUgPSBUZXN0UnVubmVyLm07IHBh
dGggPSBFZGl0aW5nSGlzdG9yeS9UZXN0UnVubmVyLm07IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9P
VDsgfTsKKwkJNTE2QURCQjQxREUxNTVCRDAwRTJCOThEIC8qIFRlc3RVdGlsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRlc3RVdGlsLmg7IHBhdGggPSBFZGl0aW5nSGlzdG9y
eS9UZXN0VXRpbC5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTUxNkFEQkI1MURF
MTU1QkQwMEUyQjk4RCAvKiBUZXN0VXRpbC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7
IG5hbWUgPSBUZXN0VXRpbC5tOyBwYXRoID0gRWRpdGluZ0hpc3RvcnkvVGVzdFV0aWwubTsgc291
cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk1MTZBREJCNjFERTE1NUJEMDBFMkI5OEQgLyog
V0tXZWJWaWV3QWRkaXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdL
V2ViVmlld0FkZGl0aW9ucy5oOyBwYXRoID0gRWRpdGluZ0hpc3RvcnkvV0tXZWJWaWV3QWRkaXRp
b25zLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNTE2QURCQjcxREUxNTVCRDAw
RTJCOThEIC8qIFdLV2ViVmlld0FkZGl0aW9ucy5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9i
amM7IG5hbWUgPSBXS1dlYlZpZXdBZGRpdGlvbnMubTsgcGF0aCA9IEVkaXRpbmdIaXN0b3J5L1dL
V2ViVmlld0FkZGl0aW9ucy5tOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTUxNkFE
QkMxMURFMTU1RkMwMEUyQjk4RCAvKiBFZGl0aW5nSGlzdG9yeS5hcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHdyYXBwZXIuYXBwbGljYXRpb247IGlu
Y2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IEVkaXRpbmdIaXN0b3J5LmFwcDsgc291cmNlVHJlZSA9
IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJNTE2QURCRjAxREUxNTdBRDAwRTJCOThEIC8qIEVk
aXRpbmdIaXN0b3J5VGVzdHMueGN0ZXN0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4
cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmNmYnVuZGxlOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBh
dGggPSBFZGl0aW5nSGlzdG9yeVRlc3RzLnhjdGVzdDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKKwkJNTE2QURCRjIxREUxNTdBRDAwRTJCOThEIC8qIFJld2luZEFuZFBsYXli
YWNrVGVzdHMubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gUmV3aW5kQW5kUGxheWJhY2tUZXN0cy5tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTZBREJGNDFERTE1N0FEMDBFMkI5OEQgLyog
SW5mby5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQucGxpc3QueG1sOyBwYXRoID0gSW5mby5wbGlzdDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTE3RkQ5M0IxREUxOERDOTAwQTczNjczIC8qIERPTVRlc3RpbmdVdGlsLmpz
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gRE9NVGVzdGluZ1V0aWwu
anM7IHBhdGggPSBFZGl0aW5nSGlzdG9yeS9SZXNvdXJjZXMvRE9NVGVzdGluZ1V0aWwuanM7IHNv
dXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKy8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rp
b24gKi8KKworLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQk1
MTZBREJCRTFERTE1NUZDMDBFMkI5OEQgLyogRnJhbWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBC
WEZyYW1ld29ya3NCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsK
KwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOworCQl9OworCQk1MTZBREJFRDFERTE1N0FEMDBFMkI5OEQgLyogRnJhbWV3b3JrcyAq
LyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25N
YXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworLyogRW5kIFBCWEZyYW1ld29ya3NCdWls
ZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYR3JvdXAgc2VjdGlvbiAqLworCQk1MTJE
N0E4QTFERTBGQkVGMDAyOEYwRTYgPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCTUxMkQ3QTk1MURFMEZCRUYwMDI4RjBFNiAvKiBFZGl0aW5nSGlzdG9yeSAqLywK
KwkJCQk1MTZBREJGMTFERTE1N0FEMDBFMkI5OEQgLyogRWRpdGluZ0hpc3RvcnlUZXN0cyAqLywK
KwkJCQk1MTJEN0E5NDFERTBGQkVGMDAyOEYwRTYgLyogUHJvZHVjdHMgKi8sCisJCQkpOworCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNTEyRDdBOTQxREUwRkJFRjAwMjhGMEU2
IC8qIFByb2R1Y3RzICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgK
KwkJCQk1MTZBREJDMTFERTE1NUZDMDBFMkI5OEQgLyogRWRpdGluZ0hpc3RvcnkuYXBwICovLAor
CQkJCTUxNkFEQkYwMURFMTU3QUQwMEUyQjk4RCAvKiBFZGl0aW5nSGlzdG9yeVRlc3RzLnhjdGVz
dCAqLywKKwkJCSk7CisJCQluYW1lID0gUHJvZHVjdHM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOworCQl9OworCQk1MTJEN0E5NTFERTBGQkVGMDAyOEYwRTYgLyogRWRpdGluZ0hpc3Rvcnkg
Ki8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTUxNkFEQkIw
MURFMTU1QkQwMEUyQjk4RCAvKiBJbmZvLnBsaXN0ICovLAorCQkJCTUxNkFEQkIxMURFMTU1QkQw
MEUyQjk4RCAvKiBtYWluLm0gKi8sCisJCQkJNTE2QURCQjIxREUxNTVCRDAwRTJCOThEIC8qIFRl
c3RSdW5uZXIuaCAqLywKKwkJCQk1MTZBREJCMzFERTE1NUJEMDBFMkI5OEQgLyogVGVzdFJ1bm5l
ci5tICovLAorCQkJCTUxNkFEQkI0MURFMTU1QkQwMEUyQjk4RCAvKiBUZXN0VXRpbC5oICovLAor
CQkJCTUxNkFEQkI1MURFMTU1QkQwMEUyQjk4RCAvKiBUZXN0VXRpbC5tICovLAorCQkJCTUxNkFE
QkI2MURFMTU1QkQwMEUyQjk4RCAvKiBXS1dlYlZpZXdBZGRpdGlvbnMuaCAqLywKKwkJCQk1MTZB
REJCNzFERTE1NUJEMDBFMkI5OEQgLyogV0tXZWJWaWV3QWRkaXRpb25zLm0gKi8sCisJCQkJNTEy
RDdBQjUxREUwRkM1OTAwMjhGMEU2IC8qIFJlc291cmNlcyAqLywKKwkJCSk7CisJCQluYW1lID0g
RWRpdGluZ0hpc3Rvcnk7CisJCQlwYXRoID0gRWRpdGluZ0hpc3RvcnlUZXN0OworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNTEyRDdBQjUxREUwRkM1OTAwMjhGMEU2IC8qIFJl
c291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJ
NTE3RkQ5M0IxREUxOERDOTAwQTczNjczIC8qIERPTVRlc3RpbmdVdGlsLmpzICovLAorCQkJCTUx
NkFEQkE4MURFMTU1QUIwMEUyQjk4RCAvKiBDYXB0dXJlVGVzdEhhcm5lc3MuaHRtbCAqLywKKwkJ
CQk1MTZBREJBOTFERTE1NUFCMDBFMkI5OEQgLyogRHVtcEVkaXRpbmdIaXN0b3J5LmpzICovLAor
CQkJCTUxNkFEQkFBMURFMTU1QUIwMEUyQjk4RCAvKiBFZGl0aW5nSGlzdG9yeVV0aWwuanMgKi8s
CisJCQkJNTE2QURCQUIxREUxNTVBQjAwRTJCOThEIC8qIFBsYXliYWNrVGVzdEhhcm5lc3MuaHRt
bCAqLywKKwkJCSk7CisJCQluYW1lID0gUmVzb3VyY2VzOworCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKKwkJfTsKKwkJNTE2QURCRjExREUxNTdBRDAwRTJCOThEIC8qIEVkaXRpbmdIaXN0b3J5
VGVzdHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTUx
NkFEQkYyMURFMTU3QUQwMEUyQjk4RCAvKiBSZXdpbmRBbmRQbGF5YmFja1Rlc3RzLm0gKi8sCisJ
CQkJNTE2QURCRjQxREUxNTdBRDAwRTJCOThEIC8qIEluZm8ucGxpc3QgKi8sCisJCQkpOworCQkJ
cGF0aCA9IEVkaXRpbmdIaXN0b3J5VGVzdHM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwor
CQl9OworLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYTmF0aXZlVGFy
Z2V0IHNlY3Rpb24gKi8KKwkJNTE2QURCQzAxREUxNTVGQzAwRTJCOThEIC8qIEVkaXRpbmdIaXN0
b3J5ICovID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0
aW9uTGlzdCA9IDUxNkFEQkRBMURFMTU1RkMwMEUyQjk4RCAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiRWRpdGluZ0hpc3RvcnkiICovOworCQkJYnVpbGRQ
aGFzZXMgPSAoCisJCQkJNTE2QURCQkQxREUxNTVGQzAwRTJCOThEIC8qIFNvdXJjZXMgKi8sCisJ
CQkJNTE2QURCQkUxREUxNTVGQzAwRTJCOThEIC8qIEZyYW1ld29ya3MgKi8sCisJCQkJNTE2QURC
QkYxREUxNTVGQzAwRTJCOThEIC8qIFJlc291cmNlcyAqLywKKwkJCSk7CisJCQlidWlsZFJ1bGVz
ID0gKAorCQkJKTsKKwkJCWRlcGVuZGVuY2llcyA9ICgKKwkJCSk7CisJCQluYW1lID0gRWRpdGlu
Z0hpc3Rvcnk7CisJCQlwcm9kdWN0TmFtZSA9IEVkaXRpbmdIaXN0b3J5OworCQkJcHJvZHVjdFJl
ZmVyZW5jZSA9IDUxNkFEQkMxMURFMTU1RkMwMEUyQjk4RCAvKiBFZGl0aW5nSGlzdG9yeS5hcHAg
Ki87CisJCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmFwcGxpY2F0aW9u
IjsKKwkJfTsKKwkJNTE2QURCRUYxREUxNTdBRDAwRTJCOThEIC8qIEVkaXRpbmdIaXN0b3J5VGVz
dHMgKi8gPSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRp
b25MaXN0ID0gNTE2QURCRjcxREUxNTdBRDAwRTJCOThEIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24g
bGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJFZGl0aW5nSGlzdG9yeVRlc3RzIiAqLzsKKwkJCWJ1
aWxkUGhhc2VzID0gKAorCQkJCTUxNkFEQkVDMURFMTU3QUQwMEUyQjk4RCAvKiBTb3VyY2VzICov
LAorCQkJCTUxNkFEQkVEMURFMTU3QUQwMEUyQjk4RCAvKiBGcmFtZXdvcmtzICovLAorCQkJCTUx
NkFEQkVFMURFMTU3QUQwMEUyQjk4RCAvKiBSZXNvdXJjZXMgKi8sCisJCQkpOworCQkJYnVpbGRS
dWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkJNTE2QURCRjYxREUxNTdB
RDAwRTJCOThEIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCisJCQkpOworCQkJbmFtZSA9IEVk
aXRpbmdIaXN0b3J5VGVzdHM7CisJCQlwcm9kdWN0TmFtZSA9IEVkaXRpbmdIaXN0b3J5VGVzdHM7
CisJCQlwcm9kdWN0UmVmZXJlbmNlID0gNTE2QURCRjAxREUxNTdBRDAwRTJCOThEIC8qIEVkaXRp
bmdIaXN0b3J5VGVzdHMueGN0ZXN0ICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnBy
b2R1Y3QtdHlwZS5idW5kbGUudW5pdC10ZXN0IjsKKwkJfTsKKy8qIEVuZCBQQlhOYXRpdmVUYXJn
ZXQgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KKwkJNTEyRDdB
OEIxREUwRkJFRjAwMjhGMEU2IC8qIFByb2plY3Qgb2JqZWN0ICovID0geworCQkJaXNhID0gUEJY
UHJvamVjdDsKKwkJCWF0dHJpYnV0ZXMgPSB7CisJCQkJTGFzdFVwZ3JhZGVDaGVjayA9IDA4MjA7
CisJCQkJVGFyZ2V0QXR0cmlidXRlcyA9IHsKKwkJCQkJNTE2QURCQzAxREUxNTVGQzAwRTJCOThE
ID0geworCQkJCQkJQ3JlYXRlZE9uVG9vbHNWZXJzaW9uID0gOC4yOworCQkJCQkJUHJvdmlzaW9u
aW5nU3R5bGUgPSBBdXRvbWF0aWM7CisJCQkJCX07CisJCQkJCTUxNkFEQkVGMURFMTU3QUQwMEUy
Qjk4RCA9IHsKKwkJCQkJCUNyZWF0ZWRPblRvb2xzVmVyc2lvbiA9IDguMjsKKwkJCQkJCVByb3Zp
c2lvbmluZ1N0eWxlID0gQXV0b21hdGljOworCQkJCQkJVGVzdFRhcmdldElEID0gNTE2QURCQzAx
REUxNTVGQzAwRTJCOThEOworCQkJCQl9OworCQkJCX07CisJCQl9OworCQkJYnVpbGRDb25maWd1
cmF0aW9uTGlzdCA9IDUxMkQ3QThFMURFMEZCRUYwMDI4RjBFNiAvKiBCdWlsZCBjb25maWd1cmF0
aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIkVkaXRpbmdIaXN0b3J5IiAqLzsKKwkJCWNvbXBhdGli
aWxpdHlWZXJzaW9uID0gIlhjb2RlIDMuMiI7CisJCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xp
c2g7CisJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMDsKKwkJCWtub3duUmVnaW9ucyA9ICgK
KwkJCQllbiwKKwkJCQlCYXNlLAorCQkJKTsKKwkJCW1haW5Hcm91cCA9IDUxMkQ3QThBMURFMEZC
RUYwMDI4RjBFNjsKKwkJCXByb2R1Y3RSZWZHcm91cCA9IDUxMkQ3QTk0MURFMEZCRUYwMDI4RjBF
NiAvKiBQcm9kdWN0cyAqLzsKKwkJCXByb2plY3REaXJQYXRoID0gIiI7CisJCQlwcm9qZWN0Um9v
dCA9ICIiOworCQkJdGFyZ2V0cyA9ICgKKwkJCQk1MTZBREJDMDFERTE1NUZDMDBFMkI5OEQgLyog
RWRpdGluZ0hpc3RvcnkgKi8sCisJCQkJNTE2QURCRUYxREUxNTdBRDAwRTJCOThEIC8qIEVkaXRp
bmdIaXN0b3J5VGVzdHMgKi8sCisJCQkpOworCQl9OworLyogRW5kIFBCWFByb2plY3Qgc2VjdGlv
biAqLworCisvKiBCZWdpbiBQQlhSZXNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJNTE2
QURCQkYxREUxNTVGQzAwRTJCOThEIC8qIFJlc291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWFJl
c291cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJ
ZmlsZXMgPSAoCisJCQkJNTE2QURCRTIxREUxNTZBOTAwRTJCOThEIC8qIENhcHR1cmVUZXN0SGFy
bmVzcy5odG1sIGluIFJlc291cmNlcyAqLywKKwkJCQk1MTdGRDkzQzFERTE4REM5MDBBNzM2NzMg
LyogRE9NVGVzdGluZ1V0aWwuanMgaW4gUmVzb3VyY2VzICovLAorCQkJCTUxNkFEQkUzMURFMTU2
QTkwMEUyQjk4RCAvKiBEdW1wRWRpdGluZ0hpc3RvcnkuanMgaW4gUmVzb3VyY2VzICovLAorCQkJ
CTUxNkFEQkU0MURFMTU2QTkwMEUyQjk4RCAvKiBFZGl0aW5nSGlzdG9yeVV0aWwuanMgaW4gUmVz
b3VyY2VzICovLAorCQkJCTUxNkFEQkU1MURFMTU2QTkwMEUyQjk4RCAvKiBQbGF5YmFja1Rlc3RI
YXJuZXNzLmh0bWwgaW4gUmVzb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworCQk1MTZBREJFRTFERTE1N0FEMDBFMkI5OEQg
LyogUmVzb3VyY2VzICovID0geworCQkJaXNhID0gUEJYUmVzb3VyY2VzQnVpbGRQaGFzZTsKKwkJ
CWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKy8qIEVuZCBQQlhS
ZXNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYU291cmNlc0J1aWxk
UGhhc2Ugc2VjdGlvbiAqLworCQk1MTZBREJCRDFERTE1NUZDMDBFMkI5OEQgLyogU291cmNlcyAq
LyA9IHsKKwkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCTUxNkFEQkU2MURFMTU2QkIwMEUyQjk4
RCAvKiBtYWluLm0gaW4gU291cmNlcyAqLywKKwkJCQk1MTZBREJFNzFERTE1NkJCMDBFMkI5OEQg
LyogVGVzdFJ1bm5lci5tIGluIFNvdXJjZXMgKi8sCisJCQkJNTE2QURCRTgxREUxNTZCQjAwRTJC
OThEIC8qIFRlc3RVdGlsLm0gaW4gU291cmNlcyAqLywKKwkJCQk1MTZBREJFOTFERTE1NkJCMDBF
MkI5OEQgLyogV0tXZWJWaWV3QWRkaXRpb25zLm0gaW4gU291cmNlcyAqLywKKwkJCSk7CisJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKwkJNTE2QURCRUMx
REUxNTdBRDAwRTJCOThEIC8qIFNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTb3VyY2VzQnVp
bGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgK
KwkJCQk1MTZBREJGMzFERTE1N0FEMDBFMkI5OEQgLyogUmV3aW5kQW5kUGxheWJhY2tUZXN0cy5t
IGluIFNvdXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CisJCX07CisvKiBFbmQgUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwor
CisvKiBCZWdpbiBQQlhUYXJnZXREZXBlbmRlbmN5IHNlY3Rpb24gKi8KKwkJNTE2QURCRjYxREUx
NTdBRDAwRTJCOThEIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CisJCQlpc2EgPSBQQlhU
YXJnZXREZXBlbmRlbmN5OworCQkJdGFyZ2V0ID0gNTE2QURCQzAxREUxNTVGQzAwRTJCOThEIC8q
IEVkaXRpbmdIaXN0b3J5ICovOworCQkJdGFyZ2V0UHJveHkgPSA1MTZBREJGNTFERTE1N0FEMDBF
MkI5OEQgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovOworCQl9OworLyogRW5kIFBCWFRhcmdl
dERlcGVuZGVuY3kgc2VjdGlvbiAqLworCisvKiBCZWdpbiBYQ0J1aWxkQ29uZmlndXJhdGlvbiBz
ZWN0aW9uICovCisJCTUxMkQ3QUEyMURFMEZCRUYwMDI4RjBFNiAvKiBEZWJ1ZyAqLyA9IHsKKwkJ
CWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlB
TFdBWVNfU0VBUkNIX1VTRVJfUEFUSFMgPSBOTzsKKwkJCQlDTEFOR19BTkFMWVpFUl9OT05OVUxM
ID0gWUVTOworCQkJCUNMQU5HX0NYWF9MQU5HVUFHRV9TVEFOREFSRCA9ICJnbnUrKzB4IjsKKwkJ
CQlDTEFOR19DWFhfTElCUkFSWSA9ICJsaWJjKysiOworCQkJCUNMQU5HX0VOQUJMRV9NT0RVTEVT
ID0gWUVTOworCQkJCUNMQU5HX0VOQUJMRV9PQkpDX0FSQyA9IFlFUzsKKwkJCQlDTEFOR19XQVJO
X0JPT0xfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0NPTlNUQU5UX0NPTlZFUlNJ
T04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9ESVJFQ1RfT0JKQ19JU0FfVVNBR0UgPSBZRVNfRVJS
T1I7CisJCQkJQ0xBTkdfV0FSTl9ET0NVTUVOVEFUSU9OX0NPTU1FTlRTID0gWUVTOworCQkJCUNM
QU5HX1dBUk5fRU1QVFlfQk9EWSA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0VOVU1fQ09OVkVSU0lP
TiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0lORklOSVRFX1JFQ1VSU0lPTiA9IFlFUzsKKwkJCQlD
TEFOR19XQVJOX0lOVF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fT0JKQ19ST09U
X0NMQVNTID0gWUVTX0VSUk9SOworCQkJCUNMQU5HX1dBUk5fU1VTUElDSU9VU19NT1ZFID0gWUVT
OworCQkJCUNMQU5HX1dBUk5fVU5SRUFDSEFCTEVfQ09ERSA9IFlFUzsKKwkJCQlDTEFOR19XQVJO
X19EVVBMSUNBVEVfTUVUSE9EX01BVENIID0gWUVTOworCQkJCUNPREVfU0lHTl9JREVOVElUWSA9
ICItIjsKKwkJCQlDT1BZX1BIQVNFX1NUUklQID0gTk87CisJCQkJREVCVUdfSU5GT1JNQVRJT05f
Rk9STUFUID0gZHdhcmY7CisJCQkJRU5BQkxFX1NUUklDVF9PQkpDX01TR1NFTkQgPSBZRVM7CisJ
CQkJRU5BQkxFX1RFU1RBQklMSVRZID0gWUVTOworCQkJCUdDQ19DX0xBTkdVQUdFX1NUQU5EQVJE
ID0gZ251OTk7CisJCQkJR0NDX0RZTkFNSUNfTk9fUElDID0gTk87CisJCQkJR0NDX05PX0NPTU1P
Tl9CTE9DS1MgPSBZRVM7CisJCQkJR0NDX09QVElNSVpBVElPTl9MRVZFTCA9IDA7CisJCQkJR0ND
X1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgKKwkJCQkJIkRFQlVHPTEiLAorCQkJCQkiJChp
bmhlcml0ZWQpIiwKKwkJCQkpOworCQkJCUdDQ19XQVJOXzY0X1RPXzMyX0JJVF9DT05WRVJTSU9O
ID0gWUVTOworCQkJCUdDQ19XQVJOX0FCT1VUX1JFVFVSTl9UWVBFID0gWUVTX0VSUk9SOworCQkJ
CUdDQ19XQVJOX1VOREVDTEFSRURfU0VMRUNUT1IgPSBZRVM7CisJCQkJR0NDX1dBUk5fVU5JTklU
SUFMSVpFRF9BVVRPUyA9IFlFU19BR0dSRVNTSVZFOworCQkJCUdDQ19XQVJOX1VOVVNFRF9GVU5D
VElPTiA9IFlFUzsKKwkJCQlHQ0NfV0FSTl9VTlVTRURfVkFSSUFCTEUgPSBZRVM7CisJCQkJTUFD
T1NYX0RFUExPWU1FTlRfVEFSR0VUID0gMTAuMTM7CisJCQkJTVRMX0VOQUJMRV9ERUJVR19JTkZP
ID0gWUVTOworCQkJCU9OTFlfQUNUSVZFX0FSQ0ggPSBZRVM7CisJCQkJU0RLUk9PVCA9IG1hY29z
eDsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTUxMkQ3QUEzMURFMEZCRUYwMDI4
RjBFNiAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJ
CQlidWlsZFNldHRpbmdzID0geworCQkJCUFMV0FZU19TRUFSQ0hfVVNFUl9QQVRIUyA9IE5POwor
CQkJCUNMQU5HX0FOQUxZWkVSX05PTk5VTEwgPSBZRVM7CisJCQkJQ0xBTkdfQ1hYX0xBTkdVQUdF
X1NUQU5EQVJEID0gImdudSsrMHgiOworCQkJCUNMQU5HX0NYWF9MSUJSQVJZID0gImxpYmMrKyI7
CisJCQkJQ0xBTkdfRU5BQkxFX01PRFVMRVMgPSBZRVM7CisJCQkJQ0xBTkdfRU5BQkxFX09CSkNf
QVJDID0gWUVTOworCQkJCUNMQU5HX1dBUk5fQk9PTF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNM
QU5HX1dBUk5fQ09OU1RBTlRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0RJUkVD
VF9PQkpDX0lTQV9VU0FHRSA9IFlFU19FUlJPUjsKKwkJCQlDTEFOR19XQVJOX0RPQ1VNRU5UQVRJ
T05fQ09NTUVOVFMgPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9FTVBUWV9CT0RZID0gWUVTOworCQkJ
CUNMQU5HX1dBUk5fRU5VTV9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fSU5GSU5J
VEVfUkVDVVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fSU5UX0NPTlZFUlNJT04gPSBZRVM7
CisJCQkJQ0xBTkdfV0FSTl9PQkpDX1JPT1RfQ0xBU1MgPSBZRVNfRVJST1I7CisJCQkJQ0xBTkdf
V0FSTl9TVVNQSUNJT1VTX01PVkUgPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9VTlJFQUNIQUJMRV9D
T0RFID0gWUVTOworCQkJCUNMQU5HX1dBUk5fX0RVUExJQ0FURV9NRVRIT0RfTUFUQ0ggPSBZRVM7
CisJCQkJQ09ERV9TSUdOX0lERU5USVRZID0gIi0iOworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBO
TzsKKwkJCQlERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSAiZHdhcmYtd2l0aC1kc3ltIjsKKwkJ
CQlFTkFCTEVfTlNfQVNTRVJUSU9OUyA9IE5POworCQkJCUVOQUJMRV9TVFJJQ1RfT0JKQ19NU0dT
RU5EID0gWUVTOworCQkJCUdDQ19DX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251OTk7CisJCQkJR0ND
X05PX0NPTU1PTl9CTE9DS1MgPSBZRVM7CisJCQkJR0NDX1dBUk5fNjRfVE9fMzJfQklUX0NPTlZF
UlNJT04gPSBZRVM7CisJCQkJR0NDX1dBUk5fQUJPVVRfUkVUVVJOX1RZUEUgPSBZRVNfRVJST1I7
CisJCQkJR0NDX1dBUk5fVU5ERUNMQVJFRF9TRUxFQ1RPUiA9IFlFUzsKKwkJCQlHQ0NfV0FSTl9V
TklOSVRJQUxJWkVEX0FVVE9TID0gWUVTX0FHR1JFU1NJVkU7CisJCQkJR0NDX1dBUk5fVU5VU0VE
X0ZVTkNUSU9OID0gWUVTOworCQkJCUdDQ19XQVJOX1VOVVNFRF9WQVJJQUJMRSA9IFlFUzsKKwkJ
CQlNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgPSAxMC4xMzsKKwkJCQlNVExfRU5BQkxFX0RFQlVH
X0lORk8gPSBOTzsKKwkJCQlTREtST09UID0gbWFjb3N4OworCQkJfTsKKwkJCW5hbWUgPSBSZWxl
YXNlOworCQl9OworCQk1MTZBREJEQjFERTE1NUZDMDBFMkI5OEQgLyogRGVidWcgKi8gPSB7CisJ
CQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJ
QVNTRVRDQVRBTE9HX0NPTVBJTEVSX0FQUElDT05fTkFNRSA9IEFwcEljb247CisJCQkJQ09NQklO
RV9ISURQSV9JTUFHRVMgPSBZRVM7CisJCQkJSU5GT1BMSVNUX0ZJTEUgPSBFZGl0aW5nSGlzdG9y
eS9JbmZvLnBsaXN0OworCQkJCUxEX1JVTlBBVEhfU0VBUkNIX1BBVEhTID0gIiQoaW5oZXJpdGVk
KSBAZXhlY3V0YWJsZV9wYXRoLy4uL0ZyYW1ld29ya3MiOworCQkJCVBST0RVQ1RfQlVORExFX0lE
RU5USUZJRVIgPSBjb20uYXBwbGUuRWRpdGluZ0hpc3Rvcnk7CisJCQkJUFJPRFVDVF9OQU1FID0g
IiQoVEFSR0VUX05BTUUpIjsKKwkJCQlTREtST09UID0gbWFjb3N4LmludGVybmFsOworCQkJfTsK
KwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsKKwkJNTE2QURCREMxREUxNTVGQzAwRTJCOThEIC8qIFJl
bGVhc2UgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0
dGluZ3MgPSB7CisJCQkJQVNTRVRDQVRBTE9HX0NPTVBJTEVSX0FQUElDT05fTkFNRSA9IEFwcElj
b247CisJCQkJQ09NQklORV9ISURQSV9JTUFHRVMgPSBZRVM7CisJCQkJSU5GT1BMSVNUX0ZJTEUg
PSBFZGl0aW5nSGlzdG9yeS9JbmZvLnBsaXN0OworCQkJCUxEX1JVTlBBVEhfU0VBUkNIX1BBVEhT
ID0gIiQoaW5oZXJpdGVkKSBAZXhlY3V0YWJsZV9wYXRoLy4uL0ZyYW1ld29ya3MiOworCQkJCVBS
T0RVQ1RfQlVORExFX0lERU5USUZJRVIgPSBjb20uYXBwbGUuRWRpdGluZ0hpc3Rvcnk7CisJCQkJ
UFJPRFVDVF9OQU1FID0gIiQoVEFSR0VUX05BTUUpIjsKKwkJCQlTREtST09UID0gbWFjb3N4Lmlu
dGVybmFsOworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNlOworCQl9OworCQk1MTZBREJGODFERTE1
N0FEMDBFMkI5OEQgLyogRGVidWcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlv
bjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQlVORExFX0xPQURFUiA9ICIkKFRFU1RfSE9T
VCkiOworCQkJCUNPTUJJTkVfSElEUElfSU1BR0VTID0gWUVTOworCQkJCUlORk9QTElTVF9GSUxF
ID0gRWRpdGluZ0hpc3RvcnlUZXN0cy9JbmZvLnBsaXN0OworCQkJCUxEX1JVTlBBVEhfU0VBUkNI
X1BBVEhTID0gIiQoaW5oZXJpdGVkKSBAZXhlY3V0YWJsZV9wYXRoLy4uL0ZyYW1ld29ya3MgQGxv
YWRlcl9wYXRoLy4uL0ZyYW1ld29ya3MiOworCQkJCVBST0RVQ1RfQlVORExFX0lERU5USUZJRVIg
PSBjb20uYXBwbGUuRWRpdGluZ0hpc3RvcnlUZXN0czsKKwkJCQlQUk9EVUNUX05BTUUgPSAiJChU
QVJHRVRfTkFNRSkiOworCQkJCVRFU1RfSE9TVCA9ICIkKEJVSUxUX1BST0RVQ1RTX0RJUikvRWRp
dGluZ0hpc3RvcnkuYXBwL0NvbnRlbnRzL01hY09TL0VkaXRpbmdIaXN0b3J5IjsKKwkJCX07CisJ
CQluYW1lID0gRGVidWc7CisJCX07CisJCTUxNkFEQkY5MURFMTU3QUQwMEUyQjk4RCAvKiBSZWxl
YXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRp
bmdzID0geworCQkJCUJVTkRMRV9MT0FERVIgPSAiJChURVNUX0hPU1QpIjsKKwkJCQlDT01CSU5F
X0hJRFBJX0lNQUdFUyA9IFlFUzsKKwkJCQlJTkZPUExJU1RfRklMRSA9IEVkaXRpbmdIaXN0b3J5
VGVzdHMvSW5mby5wbGlzdDsKKwkJCQlMRF9SVU5QQVRIX1NFQVJDSF9QQVRIUyA9ICIkKGluaGVy
aXRlZCkgQGV4ZWN1dGFibGVfcGF0aC8uLi9GcmFtZXdvcmtzIEBsb2FkZXJfcGF0aC8uLi9GcmFt
ZXdvcmtzIjsKKwkJCQlQUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSID0gY29tLmFwcGxlLkVkaXRp
bmdIaXN0b3J5VGVzdHM7CisJCQkJUFJPRFVDVF9OQU1FID0gIiQoVEFSR0VUX05BTUUpIjsKKwkJ
CQlURVNUX0hPU1QgPSAiJChCVUlMVF9QUk9EVUNUU19ESVIpL0VkaXRpbmdIaXN0b3J5LmFwcC9D
b250ZW50cy9NYWNPUy9FZGl0aW5nSGlzdG9yeSI7CisJCQl9OworCQkJbmFtZSA9IFJlbGVhc2U7
CisJCX07CisvKiBFbmQgWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLworCisvKiBCZWdp
biBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KKwkJNTEyRDdBOEUxREUwRkJFRjAwMjhG
MEU2IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiRWRpdGluZ0hp
c3RvcnkiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29u
ZmlndXJhdGlvbnMgPSAoCisJCQkJNTEyRDdBQTIxREUwRkJFRjAwMjhGMEU2IC8qIERlYnVnICov
LAorCQkJCTUxMkQ3QUEzMURFMEZCRUYwMDI4RjBFNiAvKiBSZWxlYXNlICovLAorCQkJKTsKKwkJ
CWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKKwkJCWRlZmF1bHRDb25maWd1cmF0
aW9uTmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTUxNkFEQkRBMURFMTU1RkMwMEUyQjk4RCAvKiBC
dWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiRWRpdGluZ0hpc3Rv
cnkiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmln
dXJhdGlvbnMgPSAoCisJCQkJNTE2QURCREIxREUxNTVGQzAwRTJCOThEIC8qIERlYnVnICovLAor
CQkJCTUxNkFEQkRDMURFMTU1RkMwMEUyQjk4RCAvKiBSZWxlYXNlICovLAorCQkJKTsKKwkJCWRl
ZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9u
TmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTUxNkFEQkY3MURFMTU3QUQwMEUyQjk4RCAvKiBCdWls
ZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiRWRpdGluZ0hpc3RvcnlU
ZXN0cyIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25m
aWd1cmF0aW9ucyA9ICgKKwkJCQk1MTZBREJGODFERTE1N0FEMDBFMkI5OEQgLyogRGVidWcgKi8s
CisJCQkJNTE2QURCRjkxREUxNTdBRDAwRTJCOThEIC8qIFJlbGVhc2UgKi8sCisJCQkpOworCQkJ
ZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJZGVmYXVsdENvbmZpZ3VyYXRp
b25OYW1lID0gUmVsZWFzZTsKKwkJfTsKKy8qIEVuZCBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rp
b24gKi8KKwl9OworCXJvb3RPYmplY3QgPSA1MTJEN0E4QjFERTBGQkVGMDAyOEYwRTYgLyogUHJv
amVjdCBvYmplY3QgKi87Cit9CmRpZmYgLS1naXQgYS9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0
aW5nSGlzdG9yeS9JbmZvLnBsaXN0IGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3Rv
cnkvSW5mby5wbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMTAyNDY5YmIxMzc1ZWZlMmU5YWE4MmZlZjU4ZWIx
M2NiMTBhYWRmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGlu
Z0hpc3RvcnkvSW5mby5wbGlzdApAQCAtMCwwICsxLDMwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAi
IGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RU
RCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3Qt
MS4wLmR0ZCI+Cis8cGxpc3QgdmVyc2lvbj0iMS4wIj4KKzxkaWN0PgorCTxrZXk+Q0ZCdW5kbGVE
ZXZlbG9wbWVudFJlZ2lvbjwva2V5PgorCTxzdHJpbmc+ZW48L3N0cmluZz4KKwk8a2V5PkNGQnVu
ZGxlRXhlY3V0YWJsZTwva2V5PgorCTxzdHJpbmc+JChFWEVDVVRBQkxFX05BTUUpPC9zdHJpbmc+
CisJPGtleT5DRkJ1bmRsZUljb25GaWxlPC9rZXk+CisJPHN0cmluZz48L3N0cmluZz4KKwk8a2V5
PkNGQnVuZGxlSWRlbnRpZmllcjwva2V5PgorCTxzdHJpbmc+JChQUk9EVUNUX0JVTkRMRV9JREVO
VElGSUVSKTwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVJbmZvRGljdGlvbmFyeVZlcnNpb248L2tl
eT4KKwk8c3RyaW5nPjYuMDwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVOYW1lPC9rZXk+CisJPHN0
cmluZz4kKFBST0RVQ1RfTkFNRSk8L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlUGFja2FnZVR5cGU8
L2tleT4KKwk8c3RyaW5nPkFQUEw8L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlU2hvcnRWZXJzaW9u
U3RyaW5nPC9rZXk+CisJPHN0cmluZz4xLjA8L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlVmVyc2lv
bjwva2V5PgorCTxzdHJpbmc+MTwvc3RyaW5nPgorCTxrZXk+TFNNaW5pbXVtU3lzdGVtVmVyc2lv
bjwva2V5PgorCTxzdHJpbmc+JChNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQpPC9zdHJpbmc+CisJ
PGtleT5OU0h1bWFuUmVhZGFibGVDb3B5cmlnaHQ8L2tleT4KKwk8c3RyaW5nPkNvcHlyaWdodCDC
qSAyMDE2IHdlbnNvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48L3N0cmluZz4KKwk8a2V5Pk5TUHJp
bmNpcGFsQ2xhc3M8L2tleT4KKwk8c3RyaW5nPk5TQXBwbGljYXRpb248L3N0cmluZz4KKzwvZGlj
dD4KKzwvcGxpc3Q+CmRpZmYgLS1naXQgYS9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlz
dG9yeS9SZXNvdXJjZXMvQ2FwdHVyZVRlc3RIYXJuZXNzLmh0bWwgYi9Ub29scy9FZGl0aW5nSGlz
dG9yeS9FZGl0aW5nSGlzdG9yeS9SZXNvdXJjZXMvQ2FwdHVyZVRlc3RIYXJuZXNzLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMGEwMjI4Y2YzOTE3OWVjN2E1YjkyZTUwOTk3MjEyN2FlM2E3MWQ5NAotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Jlc291cmNl
cy9DYXB0dXJlVGVzdEhhcm5lc3MuaHRtbApAQCAtMCwwICsxLDE0IEBACis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9IkRPTVRlc3RpbmdVdGlsLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJFZGl0aW5nSGlzdG9yeVV0aWwuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3dpbmRvdy5hZGRF
dmVudExpc3RlbmVyKCJsb2FkIiwgKCkgPT4geworICAgIGxldCBzY3JpcHRFbGVtZW50ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CisgICAgc2NyaXB0RWxlbWVudC5zcmMgPSAi
RHVtcEVkaXRpbmdIaXN0b3J5LmpzIjsKKyAgICBzY3JpcHRFbGVtZW50LmFkZEV2ZW50TGlzdGVu
ZXIoImxvYWQiLCAoKSA9PiBkb2N1bWVudC5ib2R5LmZvY3VzKCkpOworICAgIGRvY3VtZW50Lmhl
YWQuYXBwZW5kQ2hpbGQoc2NyaXB0RWxlbWVudCk7Cit9KTsKKzwvc2NyaXB0PgorPC9oZWFkPgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3Rvcnkv
UmVzb3VyY2VzL0RPTVRlc3RpbmdVdGlsLmpzIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGlu
Z0hpc3RvcnkvUmVzb3VyY2VzL0RPTVRlc3RpbmdVdGlsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMyYzk5MzQ4
ZDljODZkNzViNzM3MjA0MzVjZGJkNGVmNmYxMGQ3YTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9SZXNvdXJjZXMvRE9NVGVzdGluZ1V0aWwu
anMKQEAgLTAsMCArMSwyNCBAQAorKCgpID0+IHsKKyAgICBmdW5jdGlvbiBzdWJ0cmVlQXNTdHJp
bmcobm9kZSwgY3VycmVudERlcHRoID0gMCkgeworICAgICAgICBsZXQgY2hpbGROb2Rlc0FzU3Ry
aW5ncyA9IEFycmF5LmZyb20obm9kZS5jaGlsZE5vZGVzKS5tYXAoY2hpbGQgPT4gc3VidHJlZUFz
U3RyaW5nKGNoaWxkLCBjdXJyZW50RGVwdGggKyAxKSk7CisgICAgICAgIGxldCBub2RlQXNTdHJp
bmcgPSBub2RlLm5vZGVOYW1lOworICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSBOb2RlLkVM
RU1FTlRfTk9ERSkgeworICAgICAgICAgICAgbm9kZUFzU3RyaW5nID0gYDwke25vZGVBc1N0cmlu
Z30+YAorICAgICAgICAgICAgbGV0IGF0dHJpYnV0ZURlc2NyaXB0aW9ucyA9IFtdOworICAgICAg
ICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgICAgICBsZXQgYXR0cmlidXRlID0gbm9kZS5hdHRyaWJ1dGVzLml0ZW0oaSk7
CisgICAgICAgICAgICAgICAgYXR0cmlidXRlRGVzY3JpcHRpb25zLnB1c2goYCR7YXR0cmlidXRl
LmxvY2FsTmFtZX09JHthdHRyaWJ1dGUudmFsdWV9YCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBub2RlQXNTdHJpbmcgKz0gYDogJHthdHRyaWJ1dGVEZXNjcmlwdGlvbnMuam9pbigiLCAi
KX1gOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gTm9kZS5URVhU
X05PREUpCisgICAgICAgICAgICBub2RlQXNTdHJpbmcgKz0gYDogJyR7bm9kZS50ZXh0Q29udGVu
dC5yZXBsYWNlKC9ccy9nLCAiICIpfSdgOworCisgICAgICAgIHJldHVybiBgJHsiICAgICIucmVw
ZWF0KGN1cnJlbnREZXB0aCl9JHtub2RlQXNTdHJpbmd9XG4ke2NoaWxkTm9kZXNBc1N0cmluZ3Mu
am9pbigiXG4iKX1gCisgICAgfQorCisgICAgd2luZG93LkRPTVV0aWwgPSB7CisgICAgICAgIHN1
YnRyZWVBc1N0cmluZworICAgIH07Cit9KSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRWRpdGluZ0hp
c3RvcnkvRWRpdGluZ0hpc3RvcnkvUmVzb3VyY2VzL0R1bXBFZGl0aW5nSGlzdG9yeS5qcyBiL1Rv
b2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Jlc291cmNlcy9EdW1wRWRpdGluZ0hp
c3RvcnkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOTFhOWY4ZmE0Njc5ZDBjNWNiMzc1YzBkN2U1NDZhZmM2N2Ux
NTBkNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0
b3J5L1Jlc291cmNlcy9EdW1wRWRpdGluZ0hpc3RvcnkuanMKQEAgLTAsMCArMSw5MyBAQAorKCgp
ID0+IHsKKyAgICBsZXQgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBsZXQgZ2xvYmFsTm9kZU1h
cCA9IG5ldyBFZGl0aW5nSGlzdG9yeS5HbG9iYWxOb2RlTWFwKCk7CisgICAgbGV0IHRvcExldmVs
VXBkYXRlcyA9IFtdOworICAgIGxldCBjdXJyZW50Q2hpbGRVcGRhdGVzID0gW107CisgICAgbGV0
IGlzUHJvY2Vzc2luZ1RvcExldmVsVXBkYXRlID0gZmFsc2U7CisgICAgbGV0IGxhc3RLbm93blNl
bGVjdGlvblN0YXRlID0gbnVsbDsKKyAgICBsZXQgbXV0YXRpb25PYnNlcnZlciA9IG5ldyBNdXRh
dGlvbk9ic2VydmVyKHJlY29yZHMgPT4gYXBwZW5kRE9NVXBkYXRlc0Zyb21SZWNvcmRzKHJlY29y
ZHMpKTsKKworICAgIGZ1bmN0aW9uIGJlZ2luUHJvY2Vzc2luZ1RvcExldmVsVXBkYXRlKCkgewor
ICAgICAgICBpc1Byb2Nlc3NpbmdUb3BMZXZlbFVwZGF0ZSA9IHRydWU7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gZW5kUHJvY2Vzc2luZ1RvcExldmVsVXBkYXRlKHRvcExldmVsVXBkYXRlKSB7Cisg
ICAgICAgIHRvcExldmVsVXBkYXRlcy5wdXNoKHRvcExldmVsVXBkYXRlKTsKKyAgICAgICAgY3Vy
cmVudENoaWxkVXBkYXRlcyA9IFtdOworICAgICAgICBpc1Byb2Nlc3NpbmdUb3BMZXZlbFVwZGF0
ZSA9IGZhbHNlOworICAgIH0KKworICAgIGZ1bmN0aW9uIGFwcGVuZERPTVVwZGF0ZXNGcm9tUmVj
b3JkcyhyZWNvcmRzKSB7CisgICAgICAgIGlmICghcmVjb3Jkcy5sZW5ndGgpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgbGV0IG5ld1VwZGF0ZXMgPSBFZGl0aW5nSGlzdG9yeS5ET01V
cGRhdGUuZnJvbVJlY29yZHMocmVjb3JkcywgZ2xvYmFsTm9kZU1hcCk7CisgICAgICAgIGlmIChp
c1Byb2Nlc3NpbmdUb3BMZXZlbFVwZGF0ZSkKKyAgICAgICAgICAgIGN1cnJlbnRDaGlsZFVwZGF0
ZXMgPSBjdXJyZW50Q2hpbGRVcGRhdGVzLmNvbmNhdChuZXdVcGRhdGVzKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgdG9wTGV2ZWxVcGRhdGVzID0gdG9wTGV2ZWxVcGRhdGVzLmNvbmNhdChu
ZXdVcGRhdGVzKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBhcHBlbmRTZWxlY3Rpb25VcGRhdGVJ
Zk5lY2Vzc2FyeSgpIHsKKyAgICAgICAgbGV0IG5ld1NlbGVjdGlvblN0YXRlID0gRWRpdGluZ0hp
c3RvcnkuU2VsZWN0aW9uU3RhdGUuZnJvbVNlbGVjdGlvbihnZXRTZWxlY3Rpb24oKSwgZ2xvYmFs
Tm9kZU1hcCk7CisgICAgICAgIGlmIChuZXdTZWxlY3Rpb25TdGF0ZS5pc0VxdWFsKGxhc3RLbm93
blNlbGVjdGlvblN0YXRlKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBsZXQgdXBk
YXRlID0gbmV3IEVkaXRpbmdIaXN0b3J5LlNlbGVjdGlvblVwZGF0ZShnbG9iYWxOb2RlTWFwLCBu
ZXdTZWxlY3Rpb25TdGF0ZSk7CisgICAgICAgIGlmIChpc1Byb2Nlc3NpbmdUb3BMZXZlbFVwZGF0
ZSkKKyAgICAgICAgICAgIGN1cnJlbnRDaGlsZFVwZGF0ZXMucHVzaCh1cGRhdGUpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICB0b3BMZXZlbFVwZGF0ZXMucHVzaCh1cGRhdGUpOworICAgICAg
ICBsYXN0S25vd25TZWxlY3Rpb25TdGF0ZSA9IG5ld1NlbGVjdGlvblN0YXRlOworICAgIH0KKwor
ICAgIGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCB0cnVlKTsK
KyAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4geworICAg
ICAgICBpZiAoaW5pdGlhbGl6ZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaW5p
dGlhbGl6ZWQgPSB0cnVlOworCisgICAgICAgIEVkaXRpbmdIaXN0b3J5LmdldEVkaXRpbmdIaXN0
b3J5QXNKU09OU3RyaW5nID0gKGZvcm1hdHRlZCkgPT4geworICAgICAgICAgICAgbGV0IHJlY29y
ZCA9IHt9OworICAgICAgICAgICAgcmVjb3JkLnVwZGF0ZXMgPSB0b3BMZXZlbFVwZGF0ZXMubWFw
KHVwZGF0ZSA9PiB1cGRhdGUudG9PYmplY3QoKSk7CisgICAgICAgICAgICByZWNvcmQuZ2xvYmFs
Tm9kZU1hcCA9IGdsb2JhbE5vZGVNYXAudG9PYmplY3QoKTsKKyAgICAgICAgICAgIHJldHVybiBm
b3JtYXR0ZWQgPyBKU09OLnN0cmluZ2lmeShyZWNvcmQsIG51bGwsIDQpIDogSlNPTi5zdHJpbmdp
ZnkocmVjb3JkKTsKKyAgICAgICAgfTsKKworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3Rl
bmVyKCJzZWxlY3Rpb25jaGFuZ2UiLCAoKSA9PiB7CisgICAgICAgICAgICBhcHBlbmRTZWxlY3Rp
b25VcGRhdGVJZk5lY2Vzc2FyeSgpOworICAgICAgICB9KTsKKyAgICAgICAgZG9jdW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigiYmVmb3JlaW5wdXQiLCBldmVudCA9PiB7CisgICAgICAgICAgICBhcHBl
bmRET01VcGRhdGVzRnJvbVJlY29yZHMobXV0YXRpb25PYnNlcnZlci50YWtlUmVjb3JkcygpKTsK
KyAgICAgICAgICAgIGJlZ2luUHJvY2Vzc2luZ1RvcExldmVsVXBkYXRlKCk7CisgICAgICAgIH0p
OworCisgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgZXZlbnQgPT4g
eworICAgICAgICAgICAgYXBwZW5kRE9NVXBkYXRlc0Zyb21SZWNvcmRzKG11dGF0aW9uT2JzZXJ2
ZXIudGFrZVJlY29yZHMoKSk7CisgICAgICAgICAgICBsZXQgZXZlbnREYXRhID0gZXZlbnQuZGF0
YVRyYW5zZmVyID8gZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEoInRleHQvcGxhaW4iKSA6IGV2
ZW50LmRhdGE7CisgICAgICAgICAgICBsYXN0S25vd25TZWxlY3Rpb25TdGF0ZSA9IG51bGw7Cisg
ICAgICAgICAgICBlbmRQcm9jZXNzaW5nVG9wTGV2ZWxVcGRhdGUobmV3IEVkaXRpbmdIaXN0b3J5
LklucHV0RXZlbnRVcGRhdGUoZ2xvYmFsTm9kZU1hcCwgY3VycmVudENoaWxkVXBkYXRlcywgZXZl
bnQuaW5wdXRUeXBlLCBldmVudERhdGEsIGV2ZW50LnRpbWVTdGFtcCkpOworICAgICAgICB9KTsK
KworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgZXZlbnQgPT4g
eworICAgICAgICAgICAgaWYgKGV2ZW50LmtleSAhPT0gInMiIHx8ICFldmVudC5tZXRhS2V5KQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgbGV0IGZha2VMaW5rID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOworICAgICAgICAgICAgZmFrZUxpbmsuc2V0QXR0cmli
dXRlKCJocmVmIiwgImRhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04LCIgKyBlbmNvZGVVUklD
b21wb25lbnQoRWRpdGluZ0hpc3RvcnkuZ2V0RWRpdGluZ0hpc3RvcnlBc0pTT05TdHJpbmcoKSkp
OworICAgICAgICAgICAgZmFrZUxpbmsuc2V0QXR0cmlidXRlKCJkb3dubG9hZCIsICJyZWNvcmQu
anNvbiIpOworICAgICAgICAgICAgZmFrZUxpbmsuY2xpY2soKTsKKyAgICAgICAgICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgIH0pOworCisgICAgICAgIG11dGF0aW9uT2JzZXJ2
ZXIub2JzZXJ2ZShkb2N1bWVudCwgeworICAgICAgICAgICAgY2hpbGRMaXN0OiB0cnVlLAorICAg
ICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSwKKyAgICAgICAgICAgIGNoYXJhY3RlckRhdGE6IHRy
dWUsCisgICAgICAgICAgICBzdWJ0cmVlOiB0cnVlLAorICAgICAgICAgICAgYXR0cmlidXRlT2xk
VmFsdWU6IHRydWUsCisgICAgICAgICAgICBjaGFyYWN0ZXJEYXRhT2xkVmFsdWU6IHRydWUsCisg
ICAgICAgIH0pOworICAgIH0pOworfSkoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0VkaXRpbmdIaXN0
b3J5L0VkaXRpbmdIaXN0b3J5L1Jlc291cmNlcy9FZGl0aW5nSGlzdG9yeVV0aWwuanMgYi9Ub29s
cy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9SZXNvdXJjZXMvRWRpdGluZ0hpc3RvcnlV
dGlsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjNiOTgzMTBhOTM2NjZkZTE5MmJiZjc0OTMxMDE1ZGFiMmVhNjkw
MmIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9y
eS9SZXNvdXJjZXMvRWRpdGluZ0hpc3RvcnlVdGlsLmpzCkBAIC0wLDAgKzEsNjgzIEBACisoKCkg
PT4geworICAgIGNsYXNzIE9iZnVzY2F0b3IgeworICAgICAgICBjb25zdHJ1Y3RvcigpIHsKKyAg
ICAgICAgICAgIHRoaXMuX3NjcmFtYmxlZExvd2VyY2FzZUxldHRlcnMgPSB0aGlzLl9zY3JhbWJs
ZShBcnJheSgyNikuZmlsbCgpLm1hcCgoXywgaSkgPT4gOTcgKyBpKSk7CisgICAgICAgICAgICB0
aGlzLl9zY3JhbWJsZWRVcHBlcmNhc2VMZXR0ZXJzID0gdGhpcy5fc2NyYW1ibGUoQXJyYXkoMjYp
LmZpbGwoKS5tYXAoKF8sIGkpID0+IDY1ICsgaSkpOworICAgICAgICAgICAgdGhpcy5fc2NyYW1i
bGVkTnVtYmVycyA9IHRoaXMuX3NjcmFtYmxlKEFycmF5KDEwKS5maWxsKCkubWFwKChfLCBpKSA9
PiA0OCArIGkpKTsKKyAgICAgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7CisgICAgICAgIH0K
KworICAgICAgICBfc2NyYW1ibGUoYXJyYXkpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSBh
cnJheS5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7CisgICAgICAgICAgICAgICAgbGV0IGogPSBN
YXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoaSArIDEpKTsKKyAgICAgICAgICAgICAgICBsZXQg
dGVtcCA9IGFycmF5W2ldOworICAgICAgICAgICAgICAgIGFycmF5W2ldID0gYXJyYXlbal07Cisg
ICAgICAgICAgICAgICAgYXJyYXlbal0gPSB0ZW1wOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIGFycmF5OworICAgICAgICB9CisKKyAgICAgICAgYXBwbHlUb1RleHQodGV4dCkg
eworICAgICAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgIXRleHQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRleHQ7CisKKyAgICAgICAgICAgIGxldCByZXN1bHQgPSAiIjsKKyAgICAgICAg
ICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0ZXh0Lmxlbmd0aDsgaW5kZXgrKykgewor
ICAgICAgICAgICAgICAgIGxldCBjb2RlID0gdGV4dC5jaGFyQ29kZUF0KGluZGV4KTsKKyAgICAg
ICAgICAgICAgICBsZXQgbnVtYmVySW5kZXggPSB0aGlzLl9zY3JhbWJlZE51bWJlckluZGV4Rm9y
Q29kZShjb2RlKTsKKyAgICAgICAgICAgICAgICBsZXQgbG93ZXJjYXNlSW5kZXggPSB0aGlzLl9z
Y3JhbWJlZExvd2VyY2FzZUluZGV4Rm9yQ29kZShjb2RlKTsKKyAgICAgICAgICAgICAgICBsZXQg
dXBwZXJjYXNlSW5kZXggPSB0aGlzLl9zY3JhbWJlZFVwcGVyY2FzZUluZGV4Rm9yQ29kZShjb2Rl
KTsKKworICAgICAgICAgICAgICAgIGlmIChudW1iZXJJbmRleCAhPSBudWxsKQorICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9zY3JhbWJsZWRO
dW1iZXJzW251bWJlckluZGV4XSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobG93ZXJjYXNl
SW5kZXggIT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9t
Q2hhckNvZGUodGhpcy5fc2NyYW1ibGVkTG93ZXJjYXNlTGV0dGVyc1tsb3dlcmNhc2VJbmRleF0p
OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVwcGVyY2FzZUluZGV4ICE9IG51bGwpCisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX3NjcmFt
YmxlZFVwcGVyY2FzZUxldHRlcnNbdXBwZXJjYXNlSW5kZXhdKTsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB0ZXh0LmNoYXJBdChpbmRleCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAg
ICAgICAgYXBwbHlUb0ZpbGVuYW1lKGZpbGVuYW1lKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMu
ZW5hYmxlZCB8fCAhZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVuYW1lOwor
CisgICAgICAgICAgICBsZXQgY29tcG9uZW50cyA9IGZpbGVuYW1lLnNwbGl0KCIuIik7CisgICAg
ICAgICAgICByZXR1cm4gY29tcG9uZW50cy5tYXAoKGNvbXBvbmVudCwgaW5kZXgpID0+IHsKKyAg
ICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gY29tcG9uZW50cy5sZW5ndGggLSAxKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY29tcG9uZW50OworCisgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMuYXBwbHlUb1RleHQoY29tcG9uZW50KTsKKyAgICAgICAgICAgIH0pLmpvaW4oIi4iKTsK
KyAgICAgICAgfQorCisgICAgICAgIF9zY3JhbWJlZE51bWJlckluZGV4Rm9yQ29kZShjb2RlKSB7
CisgICAgICAgICAgICByZXR1cm4gNDggPD0gY29kZSAmJiBjb2RlIDw9IDU3ID8gY29kZSAtIDQ4
IDogbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIF9zY3JhbWJlZExvd2VyY2FzZUluZGV4Rm9y
Q29kZShjb2RlKSB7CisgICAgICAgICAgICByZXR1cm4gOTcgPD0gY29kZSAmJiBjb2RlIDw9IDEy
MiA/IGNvZGUgLSA5NyA6IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBfc2NyYW1iZWRVcHBl
cmNhc2VJbmRleEZvckNvZGUoY29kZSkgeworICAgICAgICAgICAgcmV0dXJuIDY1IDw9IGNvZGUg
JiYgY29kZSA8PSA5MCA/IGNvZGUgLSA2NSA6IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBz
dGF0aWMgc2hhcmVkKCkgeworICAgICAgICAgICAgaWYgKCFPYmZ1c2NhdG9yLl9zaGFyZWRJbnN0
YW5jZSkKKyAgICAgICAgICAgICAgICBPYmZ1c2NhdG9yLl9zaGFyZWRJbnN0YW5jZSA9IG5ldyBP
YmZ1c2NhdG9yKCk7CisgICAgICAgICAgICByZXR1cm4gT2JmdXNjYXRvci5fc2hhcmVkSW5zdGFu
Y2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBlbGVtZW50RnJvbU1hcmtkb3du
KGh0bWwpIHsKKyAgICAgICAgbGV0IHRlbXBvcmFyeURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOworICAgICAgICB0ZW1wb3JhcnlEaXYuaW5uZXJIVE1MID0gaHRtbDsKKyAgICAg
ICAgcmV0dXJuIHRlbXBvcmFyeURpdi5jaGlsZHJlblswXTsKKyAgICB9CisKKyAgICBjbGFzcyBH
bG9iYWxOb2RlTWFwIHsKKyAgICAgICAgY29uc3RydWN0b3Iobm9kZXNCeUdVSUQpIHsKKyAgICAg
ICAgICAgIHRoaXMuX25vZGVzQnlHVUlEID0gbm9kZXNCeUdVSUQgPyBub2Rlc0J5R1VJRCA6IG5l
dyBNYXAoKTsKKyAgICAgICAgICAgIHRoaXMuX2d1aWRzQnlOb2RlID0gbmV3IE1hcCgpOworICAg
ICAgICAgICAgdGhpcy5fY3VycmVudEdVSUQgPSAwOworICAgICAgICAgICAgZm9yIChsZXQgW2d1
aWQsIG5vZGVdIG9mIHRoaXMuX25vZGVzQnlHVUlEKSB7CisgICAgICAgICAgICAgICAgdGhpcy5f
Z3VpZHNCeU5vZGUuc2V0KG5vZGUsIGd1aWQpOworICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJl
bnRHVUlEID0gTWF0aC5tYXgodGhpcy5fY3VycmVudEdVSUQsIGd1aWQpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdGhpcy5fY3VycmVudEdVSUQrKzsKKyAgICAgICAgfQorCisgICAgICAg
IG5vZGVzRm9yR1VJRHMoZ3VpZHMpIHsKKyAgICAgICAgICAgIGlmICghZ3VpZHMubWFwKQorICAg
ICAgICAgICAgICAgIGd1aWRzID0gQXJyYXkuZnJvbShndWlkcyk7CisgICAgICAgICAgICByZXR1
cm4gZ3VpZHMubWFwKGd1aWQgPT4gdGhpcy5ub2RlRm9yR1VJRChndWlkKSk7CisgICAgICAgIH0K
KworICAgICAgICBndWlkc0Zvck5vZGVzKG5vZGVzKSB7CisgICAgICAgICAgICBpZiAoIW5vZGVz
Lm1hcCkKKyAgICAgICAgICAgICAgICBub2RlcyA9IEFycmF5LmZyb20obm9kZXMpOworICAgICAg
ICAgICAgcmV0dXJuIG5vZGVzLm1hcChub2RlID0+IHRoaXMuZ3VpZEZvck5vZGUobm9kZSkpOwor
ICAgICAgICB9CisKKyAgICAgICAgbm9kZUZvckdVSUQoZ3VpZCkgeworICAgICAgICAgICAgaWYg
KCFndWlkKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fbm9kZXNCeUdVSUQuZ2V0KGd1aWQpOworICAgICAgICB9CisKKyAgICAgICAgZ3Vp
ZEZvck5vZGUobm9kZSkgeworICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgICAg
IHJldHVybiAwOworCisgICAgICAgICAgICBpZiAodGhpcy5oYXNHVUlERm9yTm9kZShub2RlKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ3VpZHNCeU5vZGUuZ2V0KG5vZGUpOworCisg
ICAgICAgICAgICBjb25zdCBndWlkID0gdGhpcy5fY3VycmVudEdVSUQ7CisgICAgICAgICAgICB0
aGlzLl9ndWlkc0J5Tm9kZS5zZXQobm9kZSwgZ3VpZCk7CisgICAgICAgICAgICB0aGlzLl9ub2Rl
c0J5R1VJRC5zZXQoZ3VpZCwgbm9kZSk7CisgICAgICAgICAgICB0aGlzLl9jdXJyZW50R1VJRCsr
OworICAgICAgICAgICAgcmV0dXJuIGd1aWQ7CisgICAgICAgIH0KKworICAgICAgICBoYXNHVUlE
Rm9yTm9kZShub2RlKSB7CisgICAgICAgICAgICByZXR1cm4gISF0aGlzLl9ndWlkc0J5Tm9kZS5n
ZXQobm9kZSk7CisgICAgICAgIH0KKworICAgICAgICBub2RlcygpIHsKKyAgICAgICAgICAgIHJl
dHVybiBBcnJheS5mcm9tKHRoaXMuX25vZGVzQnlHVUlELnZhbHVlcygpKTsKKyAgICAgICAgfQor
CisgICAgICAgIHRvT2JqZWN0KCkgeworICAgICAgICAgICAgbGV0IG5vZGVzQW5kR1VJRHNUb1By
b2Nlc3MgPSBbXSwgZ3VpZHNUb1Byb2Nlc3MgPSBuZXcgU2V0KCk7CisgICAgICAgICAgICBsZXQg
Z3VpZHNCeU5vZGVJdGVyYXRvciA9IHRoaXMuX2d1aWRzQnlOb2RlLmVudHJpZXMoKTsKKyAgICAg
ICAgICAgIGZvciAobGV0IGVudHJ5ID0gZ3VpZHNCeU5vZGVJdGVyYXRvci5uZXh0KCk7ICFlbnRy
eS5kb25lOyBlbnRyeSA9IGd1aWRzQnlOb2RlSXRlcmF0b3IubmV4dCgpKSB7CisgICAgICAgICAg
ICAgICAgbm9kZXNBbmRHVUlEc1RvUHJvY2Vzcy5wdXNoKGVudHJ5LnZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBndWlkc1RvUHJvY2Vzcy5hZGQoZW50cnkudmFsdWVbMV0pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBsZXQgaXRlcmF0b3IgPSBkb2N1bWVudC5jcmVhdGVOb2RlSXRlcmF0
b3IoZG9jdW1lbnQuYm9keSwgTm9kZUZpbHRlci5TSE9XX0FMTCk7CisgICAgICAgICAgICBmb3Ig
KGxldCBub2RlID0gaXRlcmF0b3IubmV4dE5vZGUoKTsgbm9kZTsgbm9kZSA9IGl0ZXJhdG9yLm5l
eHROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNHVUlERm9yTm9kZShub2Rl
KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBsZXQg
bmV3R1VJRCA9IHRoaXMuZ3VpZEZvck5vZGUobm9kZSk7CisgICAgICAgICAgICAgICAgbm9kZXNB
bmRHVUlEc1RvUHJvY2Vzcy5wdXNoKFtub2RlLCBuZXdHVUlEXSk7CisgICAgICAgICAgICAgICAg
Z3VpZHNUb1Byb2Nlc3MuYWRkKG5ld0dVSUQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBsZXQgbm9kZUluZm9BcnJheSA9IFtdOworICAgICAgICAgICAgd2hpbGUgKG5vZGVzQW5kR1VJ
RHNUb1Byb2Nlc3MubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgbGV0IFtub2RlLCBndWlkXSA9
IG5vZGVzQW5kR1VJRHNUb1Byb2Nlc3MucG9wKCk7CisgICAgICAgICAgICAgICAgbGV0IGluZm8g
PSB7fTsKKyAgICAgICAgICAgICAgICBpbmZvLmd1aWQgPSBndWlkOworICAgICAgICAgICAgICAg
IGluZm8udGFnTmFtZSA9IG5vZGUudGFnTmFtZTsKKyAgICAgICAgICAgICAgICBpbmZvLmF0dHJp
YnV0ZXMgPSBHbG9iYWxOb2RlTWFwLm5vZGVBdHRyaWJ1dGVzVG9PYmplY3Qobm9kZSk7CisgICAg
ICAgICAgICAgICAgaW5mby50eXBlID0gbm9kZS5ub2RlVHlwZTsKKyAgICAgICAgICAgICAgICBp
bmZvLmRhdGEgPSBHbG9iYWxOb2RlTWFwLmRhdGFGb3JOb2RlKG5vZGUpOworICAgICAgICAgICAg
ICAgIGlmIChub2RlLmhhc0NoaWxkTm9kZXMoKSkgeworICAgICAgICAgICAgICAgICAgICBpbmZv
LmNoaWxkR1VJRHMgPSB0aGlzLmd1aWRzRm9yTm9kZXMobm9kZS5jaGlsZE5vZGVzKTsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChsZXQgY2hpbGRHVUlEIG9mIGluZm8uY2hpbGRHVUlEcykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFndWlkc1RvUHJvY2Vzcy5oYXMoY2hpbGRHVUlE
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlc0FuZEdVSURzVG9Qcm9jZXNzLnB1
c2goW3RoaXMubm9kZUZvckdVSUQoY2hpbGRHVUlEKSwgY2hpbGRHVUlEXSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbm9kZUluZm9B
cnJheS5wdXNoKGluZm8pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbm9k
ZUluZm9BcnJheTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBmcm9tT2JqZWN0KG5vZGVJ
bmZvQXJyYXkpIHsKKyAgICAgICAgICAgIGxldCBub2Rlc0J5R1VJRCA9IG5ldyBNYXAoKTsKKyAg
ICAgICAgICAgIGZvciAobGV0IGluZm8gb2Ygbm9kZUluZm9BcnJheSkgeworICAgICAgICAgICAg
ICAgIGxldCBub2RlID0gbnVsbDsKKyAgICAgICAgICAgICAgICBpZiAoaW5mby50eXBlID09IE5v
ZGUuRUxFTUVOVF9OT0RFKQorICAgICAgICAgICAgICAgICAgICBub2RlID0gR2xvYmFsTm9kZU1h
cC5lbGVtZW50RnJvbVRhZ05hbWUoaW5mby50YWdOYW1lLCBpbmZvLmF0dHJpYnV0ZXMsIGluZm8u
ZGF0YSk7CisKKyAgICAgICAgICAgICAgICBpZiAoaW5mby50eXBlID09IE5vZGUuVEVYVF9OT0RF
KQorICAgICAgICAgICAgICAgICAgICBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoaW5m
by5kYXRhKTsKKworICAgICAgICAgICAgICAgIGlmIChpbmZvLnR5cGUgPT0gTm9kZS5ET0NVTUVO
VF9OT0RFKQorICAgICAgICAgICAgICAgICAgICBub2RlID0gZG9jdW1lbnQ7CisKKyAgICAgICAg
ICAgICAgICBjb25zb2xlLmFzc2VydChub2RlKTsKKyAgICAgICAgICAgICAgICBub2Rlc0J5R1VJ
RC5zZXQoaW5mby5ndWlkLCBub2RlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
VGhlbiwgc2V0IGNoaWxkIG5vZGVzIGZvciBhbGwgbm9kZXMgdGhhdCBkbyBub3QgYXBwZWFyIGlu
IHRoZSBET00uCisgICAgICAgICAgICBmb3IgKGxldCBpbmZvIG9mIG5vZGVJbmZvQXJyYXkuZmls
dGVyKGluZm8gPT4gISFpbmZvLmNoaWxkR1VJRHMpKSB7CisgICAgICAgICAgICAgICAgbGV0IG5v
ZGUgPSBub2Rlc0J5R1VJRC5nZXQoaW5mby5ndWlkKTsKKyAgICAgICAgICAgICAgICBmb3IgKGxl
dCBjaGlsZEdVSUQgb2YgaW5mby5jaGlsZEdVSURzKQorICAgICAgICAgICAgICAgICAgICAgbm9k
ZS5hcHBlbmRDaGlsZChub2Rlc0J5R1VJRC5nZXQoY2hpbGRHVUlEKSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybiBuZXcgR2xvYmFsTm9kZU1hcChub2Rlc0J5R1VJRCk7Cisg
ICAgICAgIH0KKworICAgICAgICBzdGF0aWMgZGF0YUZvck5vZGUobm9kZSkgeworICAgICAgICAg
ICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKQorICAgICAgICAgICAgICAg
IHJldHVybiBPYmZ1c2NhdG9yLnNoYXJlZCgpLmFwcGx5VG9UZXh0KG5vZGUuZGF0YSk7CisKKyAg
ICAgICAgICAgIGlmIChub2RlLnRhZ05hbWUgJiYgbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkg
PT09ICJhdHRhY2htZW50IikgeworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgICAgIHR5cGU6IG5vZGUuZmlsZS50eXBlLAorICAgICAgICAgICAgICAgICAgICBuYW1l
OiBPYmZ1c2NhdG9yLnNoYXJlZCgpLmFwcGx5VG9GaWxlbmFtZShub2RlLmZpbGUubmFtZSksCisg
ICAgICAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZDogbmV3IERhdGUoKS5nZXRUaW1lKCkKKyAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBlbGVtZW50RnJvbVRhZ05hbWUodGFnTmFt
ZSwgYXR0cmlidXRlcywgZGF0YSkgeworICAgICAgICAgICAgbGV0IG5vZGUgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KHRhZ05hbWUpOworICAgICAgICAgICAgZm9yIChsZXQgYXR0cmlidXRlTmFt
ZSBpbiBhdHRyaWJ1dGVzKQorICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHJp
YnV0ZU5hbWUsIGF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0pOworCisgICAgICAgICAgICBpZiAo
dGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICJhdHRhY2htZW50IikgeworICAgICAgICAgICAgICAg
IG5vZGUuZmlsZSA9IG5ldyBGaWxlKFtgRmlsZSBuYW1lZCAnJHtkYXRhLm5hbWV9J2BdLCBkYXRh
Lm5hbWUsIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogZGF0YS50eXBlLAorICAgICAgICAg
ICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IGRhdGEubGFzdE1vZGlmaWVkCisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gUmV0dXJucyBhbiBPYmplY3QgY29udGFpbmluZyBhdHRyaWJ1dGUg
bmFtZSA9PiBhdHRyaWJ1dGUgdmFsdWUKKyAgICAgICAgc3RhdGljIG5vZGVBdHRyaWJ1dGVzVG9P
YmplY3Qobm9kZSwgYXR0cmlidXRlc1RvRXhjbHVkZT1bXSkgeworICAgICAgICAgICAgY29uc3Qg
ZXhjbHVkZUF0dHJpYnV0ZXNTZXQgPSBuZXcgU2V0KGF0dHJpYnV0ZXNUb0V4Y2x1ZGUpOworICAg
ICAgICAgICAgaWYgKCFub2RlLmF0dHJpYnV0ZXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51
bGw7CisKKyAgICAgICAgICAgIGxldCBhdHRyaWJ1dGVNYXAgPSB7fTsKKyAgICAgICAgICAgIGZv
ciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBub2RlLmF0dHJpYnV0ZXMubGVuZ3RoOyBpbmRleCsr
KSB7CisgICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlID0gbm9kZS5hdHRyaWJ1dGVzLml0
ZW0oaW5kZXgpOworICAgICAgICAgICAgICAgIGNvbnN0IFtsb2NhbE5hbWUsIHZhbHVlXSA9IFth
dHRyaWJ1dGUubG9jYWxOYW1lLCBhdHRyaWJ1dGUudmFsdWVdOworICAgICAgICAgICAgICAgIGlm
IChleGNsdWRlQXR0cmlidXRlc1NldC5oYXMobG9jYWxOYW1lKSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVNYXBbbG9jYWxOYW1lXSA9
IHZhbHVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlTWFw
OworICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgU2VsZWN0aW9uU3RhdGUgeworICAgICAg
ICBjb25zdHJ1Y3Rvcihub2RlTWFwLCBzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBlbmROb2RlLCBl
bmRPZmZzZXQsIGFuY2hvck5vZGUsIGFuY2hvck9mZnNldCwgZm9jdXNOb2RlLCBmb2N1c09mZnNl
dCkgeworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQobm9kZU1hcCk7CisgICAgICAgICAgICB0
aGlzLm5vZGVNYXAgPSBub2RlTWFwOworICAgICAgICAgICAgdGhpcy5zdGFydEdVSUQgPSBub2Rl
TWFwLmd1aWRGb3JOb2RlKHN0YXJ0Tm9kZSk7CisgICAgICAgICAgICB0aGlzLnN0YXJ0T2Zmc2V0
ID0gc3RhcnRPZmZzZXQ7CisgICAgICAgICAgICB0aGlzLmVuZEdVSUQgPSBub2RlTWFwLmd1aWRG
b3JOb2RlKGVuZE5vZGUpOworICAgICAgICAgICAgdGhpcy5lbmRPZmZzZXQgPSBlbmRPZmZzZXQ7
CisgICAgICAgICAgICB0aGlzLmFuY2hvckdVSUQgPSBub2RlTWFwLmd1aWRGb3JOb2RlKGFuY2hv
ck5vZGUpOworICAgICAgICAgICAgdGhpcy5hbmNob3JPZmZzZXQgPSBhbmNob3JPZmZzZXQ7Cisg
ICAgICAgICAgICB0aGlzLmZvY3VzR1VJRCA9IG5vZGVNYXAuZ3VpZEZvck5vZGUoZm9jdXNOb2Rl
KTsKKyAgICAgICAgICAgIHRoaXMuZm9jdXNPZmZzZXQgPSBmb2N1c09mZnNldDsKKyAgICAgICAg
fQorCisgICAgICAgIGlzRXF1YWwob3RoZXJTZWxlY3Rpb25TdGF0ZSkgeworICAgICAgICAgICAg
cmV0dXJuIG90aGVyU2VsZWN0aW9uU3RhdGUKKyAgICAgICAgICAgICAgICAmJiB0aGlzLnN0YXJ0
R1VJRCA9PT0gb3RoZXJTZWxlY3Rpb25TdGF0ZS5zdGFydEdVSUQgJiYgdGhpcy5zdGFydE9mZnNl
dCA9PT0gb3RoZXJTZWxlY3Rpb25TdGF0ZS5zdGFydE9mZnNldAorICAgICAgICAgICAgICAgICYm
IHRoaXMuZW5kR1VJRCA9PT0gb3RoZXJTZWxlY3Rpb25TdGF0ZS5lbmRHVUlEICYmIHRoaXMuZW5k
T2Zmc2V0ID09PSBvdGhlclNlbGVjdGlvblN0YXRlLmVuZE9mZnNldAorICAgICAgICAgICAgICAg
ICYmIHRoaXMuYW5jaG9yR1VJRCA9PT0gb3RoZXJTZWxlY3Rpb25TdGF0ZS5hbmNob3JHVUlEICYm
IHRoaXMuYW5jaG9yT2Zmc2V0ID09PSBvdGhlclNlbGVjdGlvblN0YXRlLmFuY2hvck9mZnNldAor
ICAgICAgICAgICAgICAgICYmIHRoaXMuZm9jdXNHVUlEID09PSBvdGhlclNlbGVjdGlvblN0YXRl
LmZvY3VzR1VJRCAmJiB0aGlzLmZvY3VzT2Zmc2V0ID09PSBvdGhlclNlbGVjdGlvblN0YXRlLmZv
Y3VzT2Zmc2V0OworICAgICAgICB9CisKKyAgICAgICAgYXBwbHlUb1NlbGVjdGlvbihzZWxlY3Rp
b24pIHsKKyAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTsKKyAgICAgICAg
ICAgIGxldCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CisgICAgICAgICAgICByYW5n
ZS5zZXRTdGFydCh0aGlzLm5vZGVNYXAubm9kZUZvckdVSUQodGhpcy5zdGFydEdVSUQpLCB0aGlz
LnN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAgIHJhbmdlLnNldEVuZCh0aGlzLm5vZGVNYXAubm9k
ZUZvckdVSUQodGhpcy5lbmRHVUlEKSwgdGhpcy5lbmRPZmZzZXQpOworICAgICAgICAgICAgc2Vs
ZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTsKKyAgICAgICAgICAgIHNlbGVjdGlvbi5zZXRCYXNlQW5k
RXh0ZW50KHRoaXMubm9kZU1hcC5ub2RlRm9yR1VJRCh0aGlzLmFuY2hvckdVSUQpLCB0aGlzLmFu
Y2hvck9mZnNldCwgdGhpcy5ub2RlTWFwLm5vZGVGb3JHVUlEKHRoaXMuZm9jdXNHVUlEKSwgdGhp
cy5mb2N1c09mZnNldCk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgZnJvbVNlbGVjdGlv
bihzZWxlY3Rpb24sIG5vZGVNYXApIHsKKyAgICAgICAgICAgIGxldCBbc3RhcnROb2RlLCBzdGFy
dE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0XSA9IFtudWxsLCAwLCBudWxsLCAwXTsKKyAgICAg
ICAgICAgIGlmIChzZWxlY3Rpb24ucmFuZ2VDb3VudCkgeworICAgICAgICAgICAgICAgIGxldCBz
ZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7CisgICAgICAgICAgICAgICAg
c3RhcnROb2RlID0gc2VsZWN0ZWRSYW5nZS5zdGFydENvbnRhaW5lcjsKKyAgICAgICAgICAgICAg
ICBzdGFydE9mZnNldCA9IHNlbGVjdGVkUmFuZ2Uuc3RhcnRPZmZzZXQ7CisgICAgICAgICAgICAg
ICAgZW5kTm9kZSA9IHNlbGVjdGVkUmFuZ2UuZW5kQ29udGFpbmVyOworICAgICAgICAgICAgICAg
IGVuZE9mZnNldCA9IHNlbGVjdGVkUmFuZ2UuZW5kT2Zmc2V0OworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3Rpb25TdGF0ZSgKKyAgICAgICAgICAgICAgICBub2Rl
TWFwLCBzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBlbmROb2RlLCBlbmRPZmZzZXQsCisgICAgICAg
ICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsIHNl
bGVjdGlvbi5mb2N1c05vZGUsIHNlbGVjdGlvbi5mb2N1c09mZnNldAorICAgICAgICAgICAgKTsK
KyAgICAgICAgfQorCisgICAgICAgIHRvT2JqZWN0KCkgeworICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICBzdGFydEdVSUQ6IHRoaXMuc3RhcnRHVUlELCBzdGFydE9mZnNldDog
dGhpcy5zdGFydE9mZnNldCwgZW5kR1VJRDogdGhpcy5lbmRHVUlELCBlbmRPZmZzZXQ6IHRoaXMu
ZW5kT2Zmc2V0LAorICAgICAgICAgICAgICAgIGFuY2hvckdVSUQ6IHRoaXMuYW5jaG9yR1VJRCwg
YW5jaG9yT2Zmc2V0OiB0aGlzLmFuY2hvck9mZnNldCwgZm9jdXNHVUlEOiB0aGlzLmZvY3VzR1VJ
RCwgZm9jdXNPZmZzZXQ6IHRoaXMuZm9jdXNPZmZzZXQKKyAgICAgICAgICAgIH07CisgICAgICAg
IH0KKworICAgICAgICBzdGF0aWMgZnJvbU9iamVjdChqc29uLCBub2RlTWFwKSB7CisgICAgICAg
ICAgICBpZiAoIWpzb24pCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAg
ICAgIHJldHVybiBuZXcgU2VsZWN0aW9uU3RhdGUoCisgICAgICAgICAgICAgICAgbm9kZU1hcCwg
bm9kZU1hcC5ub2RlRm9yR1VJRChqc29uLnN0YXJ0R1VJRCksIGpzb24uc3RhcnRPZmZzZXQsIG5v
ZGVNYXAubm9kZUZvckdVSUQoanNvbi5lbmRHVUlEKSwganNvbi5lbmRPZmZzZXQsCisgICAgICAg
ICAgICAgICAgbm9kZU1hcC5ub2RlRm9yR1VJRChqc29uLmFuY2hvckdVSUQpLCBqc29uLmFuY2hv
ck9mZnNldCwgbm9kZU1hcC5ub2RlRm9yR1VJRChqc29uLmZvY3VzR1VJRCksIGpzb24uZm9jdXNP
ZmZzZXQKKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBET01V
cGRhdGUgeworICAgICAgICBjb25zdHJ1Y3Rvcihub2RlTWFwKSB7CisgICAgICAgICAgICBjb25z
b2xlLmFzc2VydChub2RlTWFwKTsKKyAgICAgICAgICAgIHRoaXMubm9kZU1hcCA9IG5vZGVNYXA7
CisgICAgICAgIH0KKworICAgICAgICBhcHBseSgpIHsKKyAgICAgICAgICAgIHRocm93ICJFeHBl
Y3RlZCBzdWJjbGFzcyBpbXBsZW1lbnRhdGlvbi4iOworICAgICAgICB9CisKKyAgICAgICAgdW5h
cHBseSgpIHsKKyAgICAgICAgICAgIHRocm93ICJFeHBlY3RlZCBzdWJjbGFzcyBpbXBsZW1lbnRh
dGlvbi4iOworICAgICAgICB9CisKKyAgICAgICAgdGFyZ2V0Tm9kZSgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLm5vZGVNYXAubm9kZUZvckdVSUQodGhpcy50YXJnZXRHVUlEKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGRldGFpbHNFbGVtZW50KCkgeworICAgICAgICAgICAgdGhyb3cgIkV4
cGVjdGVkIHN1YmNsYXNzIGltcGxlbWVudGF0aW9uLiI7CisgICAgICAgIH0KKworICAgICAgICBz
dGF0aWMgb2ZUeXBlKHR5cGUpIHsKKyAgICAgICAgICAgIGlmICghRE9NVXBkYXRlLl9hbGxUeXBl
cykKKyAgICAgICAgICAgICAgICBET01VcGRhdGUuX2FsbFR5cGVzID0geyBDaGlsZExpc3RVcGRh
dGUsIENoYXJhY3RlckRhdGFVcGRhdGUsIEF0dHJpYnV0ZVVwZGF0ZSwgSW5wdXRFdmVudFVwZGF0
ZSwgU2VsZWN0aW9uVXBkYXRlIH07CisgICAgICAgICAgICByZXR1cm4gRE9NVXBkYXRlLl9hbGxU
eXBlc1t0eXBlXTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBmcm9tUmVjb3JkcyhyZWNv
cmRzLCBub2RlTWFwKSB7CisgICAgICAgICAgICBsZXQgdXBkYXRlcyA9IFtdCisgICAgICAgICAg
ICAgICAgLCBjaGFyYWN0ZXJEYXRhVXBkYXRlcyA9IFtdCisgICAgICAgICAgICAgICAgLCBhdHRy
aWJ1dGVVcGRhdGVzID0gW107CisKKyAgICAgICAgICAgIGZvciAobGV0IHJlY29yZCBvZiByZWNv
cmRzKSB7CisgICAgICAgICAgICAgICAgbGV0IHRhcmdldCA9IHJlY29yZC50YXJnZXQ7CisgICAg
ICAgICAgICAgICAgc3dpdGNoIChyZWNvcmQudHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2Ug
ImNoYXJhY3RlckRhdGEiOgorICAgICAgICAgICAgICAgICAgICB2YXIgdXBkYXRlID0gbmV3IENo
YXJhY3RlckRhdGFVcGRhdGUobm9kZU1hcCwgbm9kZU1hcC5ndWlkRm9yTm9kZSh0YXJnZXQpLCBy
ZWNvcmQub2xkVmFsdWUsIHRhcmdldC5kYXRhKQorICAgICAgICAgICAgICAgICAgICB1cGRhdGVz
LnB1c2godXBkYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyRGF0YVVwZGF0ZXMu
cHVzaCh1cGRhdGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlICJjaGlsZExpc3QiOgorICAgICAgICAgICAgICAgICAgICB2YXIgdXBkYXRlID0gbmV3
IENoaWxkTGlzdFVwZGF0ZShub2RlTWFwLCBub2RlTWFwLmd1aWRGb3JOb2RlKHRhcmdldCksIG5v
ZGVNYXAuZ3VpZHNGb3JOb2RlcyhyZWNvcmQuYWRkZWROb2RlcyksIG5vZGVNYXAuZ3VpZHNGb3JO
b2RlcyhyZWNvcmQucmVtb3ZlZE5vZGVzKSwgbm9kZU1hcC5ndWlkRm9yTm9kZShyZWNvcmQubmV4
dFNpYmxpbmcpKQorICAgICAgICAgICAgICAgICAgICB1cGRhdGVzLnB1c2godXBkYXRlKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAiYXR0cmlidXRl
cyI6CisgICAgICAgICAgICAgICAgICAgIHZhciB1cGRhdGUgPSBuZXcgQXR0cmlidXRlVXBkYXRl
KG5vZGVNYXAsIG5vZGVNYXAuZ3VpZEZvck5vZGUodGFyZ2V0KSwgcmVjb3JkLmF0dHJpYnV0ZU5h
bWUsIHJlY29yZC5vbGRWYWx1ZSwgdGFyZ2V0LmdldEF0dHJpYnV0ZShyZWNvcmQuYXR0cmlidXRl
TmFtZSkpCisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZXMucHVzaCh1cGRhdGUpOworICAgICAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGVVcGRhdGVzLnB1c2godXBkYXRlKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBBZGp1c3QgYWxsIGNoYXJhY3RlciBkYXRhIHVwZGF0ZXMgZm9yIHRoZSBzYW1l
IHRhcmdldC4KKyAgICAgICAgICAgIGNoYXJhY3RlckRhdGFVcGRhdGVzLmZvckVhY2goKGN1cnJl
bnRVcGRhdGUsIGluZGV4KSA9PiB7CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IGNoYXJh
Y3RlckRhdGFVcGRhdGVzLmxlbmd0aCAtIDEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgICAgIGZvciAobGV0IG5leHRVcGRhdGVJbmRleCA9IGluZGV4ICsgMTsg
bmV4dFVwZGF0ZUluZGV4IDwgY2hhcmFjdGVyRGF0YVVwZGF0ZXMubGVuZ3RoOyBuZXh0VXBkYXRl
SW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dFVwZGF0ZSA9IGNoYXJhY3Rl
ckRhdGFVcGRhdGVzW25leHRVcGRhdGVJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGlmIChj
dXJyZW50VXBkYXRlLnRhcmdldEdVSUQgPT09IG5leHRVcGRhdGUudGFyZ2V0R1VJRCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgY3VycmVudFVwZGF0ZS5uZXdEYXRhID0gbmV4dFVwZGF0ZS5v
bGREYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAg
Ly8gQWRqdXN0IGFsbCBhdHRyaWJ1dGUgdXBkYXRlcyBmb3IgdGhlIHNhbWUgdGFyZ2V0IGFuZCBh
dHRyaWJ1dGUgbmFtZS4KKyAgICAgICAgICAgIGF0dHJpYnV0ZVVwZGF0ZXMuZm9yRWFjaCgoY3Vy
cmVudFVwZGF0ZSwgaW5kZXgpID0+IHsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gYXR0
cmlidXRlVXBkYXRlcy5sZW5ndGggLSAxKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgICAgICBmb3IgKGxldCBuZXh0VXBkYXRlSW5kZXggPSBpbmRleCArIDE7IG5l
eHRVcGRhdGVJbmRleCA8IGF0dHJpYnV0ZVVwZGF0ZXMubGVuZ3RoOyBuZXh0VXBkYXRlSW5kZXgr
KykgeworICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dFVwZGF0ZSA9IGF0dHJpYnV0ZVVwZGF0
ZXNbbmV4dFVwZGF0ZUluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRVcGRh
dGUudGFyZ2V0R1VJRCA9PT0gbmV4dFVwZGF0ZS50YXJnZXRHVUlEICYmIGN1cnJlbnRVcGRhdGUu
YXR0cmlidXRlID09PSBuZXh0VXBkYXRlLmF0dHJpYnV0ZSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY3VycmVudFVwZGF0ZS5uZXdEYXRhID0gbmV4dFVwZGF0ZS5vbGREYXRhOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZXM7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBDaGlsZExpc3RVcGRhdGUgZXh0ZW5kcyBE
T01VcGRhdGUgeworICAgICAgICBjb25zdHJ1Y3Rvcihub2RlTWFwLCB0YXJnZXRHVUlELCBhZGRl
ZEdVSURzLCByZW1vdmVkR1VJRHMsIG5leHRTaWJsaW5nR1VJRCkgeworICAgICAgICAgICAgc3Vw
ZXIobm9kZU1hcCk7CisgICAgICAgICAgICB0aGlzLnRhcmdldEdVSUQgPSB0YXJnZXRHVUlEOwor
ICAgICAgICAgICAgdGhpcy5hZGRlZCA9IGFkZGVkR1VJRHM7CisgICAgICAgICAgICB0aGlzLnJl
bW92ZWQgPSByZW1vdmVkR1VJRHM7CisgICAgICAgICAgICB0aGlzLm5leHRTaWJsaW5nR1VJRCA9
IG5leHRTaWJsaW5nR1VJRCA9PSB1bmRlZmluZWQgPyBudWxsIDogbmV4dFNpYmxpbmdHVUlEOwor
ICAgICAgICAgICAgY29uc29sZS5hc3NlcnQobm9kZU1hcC5ub2RlRm9yR1VJRCh0YXJnZXRHVUlE
KSk7CisgICAgICAgIH0KKworICAgICAgICBhcHBseSgpIHsKKyAgICAgICAgICAgIGZvciAobGV0
IHJlbW92ZWROb2RlIG9mIHRoaXMuX3JlbW92ZWROb2RlcygpKQorICAgICAgICAgICAgICAgIHJl
bW92ZWROb2RlLnJlbW92ZSgpOworCisgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gdGhpcy50YXJn
ZXROb2RlKCk7CisgICAgICAgICAgICBmb3IgKGxldCBhZGRlZE5vZGUgb2YgdGhpcy5fYWRkZWRO
b2RlcygpKQorICAgICAgICAgICAgICAgIHRhcmdldC5pbnNlcnRCZWZvcmUoYWRkZWROb2RlLCB0
aGlzLl9uZXh0U2libGluZygpKTsKKyAgICAgICAgfQorCisgICAgICAgIHVuYXBwbHkoKSB7Cisg
ICAgICAgICAgICBmb3IgKGxldCBhZGRlZE5vZGUgb2YgdGhpcy5fYWRkZWROb2RlcygpKQorICAg
ICAgICAgICAgICAgIGFkZGVkTm9kZS5yZW1vdmUoKTsKKworICAgICAgICAgICAgbGV0IHRhcmdl
dCA9IHRoaXMudGFyZ2V0Tm9kZSgpOworICAgICAgICAgICAgZm9yIChsZXQgcmVtb3ZlZE5vZGUg
b2YgdGhpcy5fcmVtb3ZlZE5vZGVzKCkpCisgICAgICAgICAgICAgICAgdGFyZ2V0Lmluc2VydEJl
Zm9yZShyZW1vdmVkTm9kZSwgdGhpcy5fbmV4dFNpYmxpbmcoKSk7CisgICAgICAgIH0KKworICAg
ICAgICBfbmV4dFNpYmxpbmcoKSB7CisgICAgICAgICAgICBpZiAodGhpcy5uZXh0U2libGluZ0dV
SUQgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLm5vZGVNYXAubm9kZUZvckdVSUQodGhpcy5uZXh0U2libGluZ0dVSUQpOworICAg
ICAgICB9CisKKyAgICAgICAgX3JlbW92ZWROb2RlcygpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLm5vZGVNYXAubm9kZXNGb3JHVUlEcyh0aGlzLnJlbW92ZWQpOworICAgICAgICB9CisKKyAg
ICAgICAgX2FkZGVkTm9kZXMoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5ub2RlTWFwLm5v
ZGVzRm9yR1VJRHModGhpcy5hZGRlZCk7CisgICAgICAgIH0KKworICAgICAgICB0b09iamVjdCgp
IHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogIkNoaWxkTGlz
dFVwZGF0ZSIsCisgICAgICAgICAgICAgICAgdGFyZ2V0R1VJRDogdGhpcy50YXJnZXRHVUlELAor
ICAgICAgICAgICAgICAgIGFkZGVkR1VJRHM6IHRoaXMuYWRkZWQsCisgICAgICAgICAgICAgICAg
cmVtb3ZlZEdVSURzOiB0aGlzLnJlbW92ZWQsCisgICAgICAgICAgICAgICAgbmV4dFNpYmxpbmdH
VUlEOiB0aGlzLm5leHRTaWJsaW5nR1VJRAorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisg
ICAgICAgIGRldGFpbHNFbGVtZW50KCkgeworICAgICAgICAgICAgbGV0IG5leHRTaWJsaW5nID0g
dGhpcy5fbmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIGxldCBodG1sID0KKyAgICAgICAgICAg
IGA8ZGV0YWlscz4KKyAgICAgICAgICAgICAgICA8c3VtbWFyeT5jaGlsZCBsaXN0IGNoYW5nZWQ8
L3N1bW1hcnk+CisgICAgICAgICAgICAgICAgPHVsPgorICAgICAgICAgICAgICAgICAgICA8bGk+
cGFyZW50OiAke3RoaXMubm9kZU1hcC5ub2RlRm9yR1VJRCh0aGlzLnRhcmdldEdVSUQpLm5vZGVO
YW1lfTwvbGk+CisgICAgICAgICAgICAgICAgICAgIDxsaT5hZGRlZDogWyAke1t0aGlzLl9hZGRl
ZE5vZGVzKCkubWFwKG5vZGUgPT4gbm9kZS5ub2RlTmFtZSldfSBdPC9saT4KKyAgICAgICAgICAg
ICAgICAgICAgPGxpPnJlbW92ZWQ6IFsgJHtbdGhpcy5fcmVtb3ZlZE5vZGVzKCkubWFwKG5vZGUg
PT4gbm9kZS5ub2RlTmFtZSldfSBdPC9saT4KKyAgICAgICAgICAgICAgICAgICAgPGxpPmJlZm9y
ZSBzaWJsaW5nOiAke25leHRTaWJsaW5nID8gbmV4dFNpYmxpbmcubm9kZU5hbWUgOiAiKG51bGwp
In08L2xpPgorICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8L2RldGFpbHM+YDsK
KyAgICAgICAgICAgIHJldHVybiBlbGVtZW50RnJvbU1hcmtkb3duKGh0bWwpOworICAgICAgICB9
CisKKyAgICAgICAgc3RhdGljIGZyb21PYmplY3QoanNvbiwgbm9kZU1hcCkgeworICAgICAgICAg
ICAgcmV0dXJuIG5ldyBDaGlsZExpc3RVcGRhdGUobm9kZU1hcCwganNvbi50YXJnZXRHVUlELCBq
c29uLmFkZGVkR1VJRHMsIGpzb24ucmVtb3ZlZEdVSURzLCBqc29uLm5leHRTaWJsaW5nR1VJRCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBDaGFyYWN0ZXJEYXRhVXBkYXRlIGV4dGVu
ZHMgRE9NVXBkYXRlIHsKKyAgICAgICAgY29uc3RydWN0b3Iobm9kZU1hcCwgdGFyZ2V0R1VJRCwg
b2xkRGF0YSwgbmV3RGF0YSkgeworICAgICAgICAgICAgc3VwZXIobm9kZU1hcCk7CisgICAgICAg
ICAgICB0aGlzLnRhcmdldEdVSUQgPSB0YXJnZXRHVUlEOworICAgICAgICAgICAgdGhpcy5vbGRE
YXRhID0gb2xkRGF0YTsKKyAgICAgICAgICAgIHRoaXMubmV3RGF0YSA9IG5ld0RhdGE7CisgICAg
ICAgICAgICBjb25zb2xlLmFzc2VydChub2RlTWFwLm5vZGVGb3JHVUlEKHRhcmdldEdVSUQpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGFwcGx5KCkgeworICAgICAgICAgICAgdGhpcy50YXJnZXRO
b2RlKCkuZGF0YSA9IHRoaXMubmV3RGF0YTsKKyAgICAgICAgfQorCisgICAgICAgIHVuYXBwbHko
KSB7CisgICAgICAgICAgICB0aGlzLnRhcmdldE5vZGUoKS5kYXRhID0gdGhpcy5vbGREYXRhOwor
ICAgICAgICB9CisKKyAgICAgICAgZGV0YWlsc0VsZW1lbnQoKSB7CisgICAgICAgICAgICBsZXQg
aHRtbCA9CisgICAgICAgICAgICBgPGRldGFpbHM+CisgICAgICAgICAgICAgICAgPHN1bW1hcnk+
Y2hhcmFjdGVyIGRhdGEgY2hhbmdlZDwvc3VtbWFyeT4KKyAgICAgICAgICAgICAgICA8dWw+Cisg
ICAgICAgICAgICAgICAgICAgIDxsaT5vbGQ6ICR7dGhpcy5vbGREYXRhICE9IG51bGwgPyAiJyIg
KyB0aGlzLm9sZERhdGEgKyAiJyIgOiAiKG51bGwpIn08L2xpPgorICAgICAgICAgICAgICAgICAg
ICA8bGk+bmV3OiAke3RoaXMubmV3RGF0YSAhPSBudWxsID8gIiciICsgdGhpcy5uZXdEYXRhICsg
IiciIDogIihudWxsKSJ9PC9saT4KKyAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAg
PC9kZXRhaWxzPmA7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudEZyb21NYXJrZG93bihodG1s
KTsKKyAgICAgICAgfQorCisgICAgICAgIHRvT2JqZWN0KCkgeworICAgICAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiAiQ2hhcmFjdGVyRGF0YVVwZGF0ZSIsCisgICAgICAg
ICAgICAgICAgdGFyZ2V0R1VJRDogdGhpcy50YXJnZXRHVUlELAorICAgICAgICAgICAgICAgIG9s
ZERhdGE6IE9iZnVzY2F0b3Iuc2hhcmVkKCkuYXBwbHlUb1RleHQodGhpcy5vbGREYXRhKSwKKyAg
ICAgICAgICAgICAgICBuZXdEYXRhOiBPYmZ1c2NhdG9yLnNoYXJlZCgpLmFwcGx5VG9UZXh0KHRo
aXMubmV3RGF0YSkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMg
ZnJvbU9iamVjdChqc29uLCBub2RlTWFwKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IENoYXJh
Y3RlckRhdGFVcGRhdGUobm9kZU1hcCwganNvbi50YXJnZXRHVUlELCBqc29uLm9sZERhdGEsIGpz
b24ubmV3RGF0YSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBBdHRyaWJ1dGVVcGRh
dGUgZXh0ZW5kcyBET01VcGRhdGUgeworICAgICAgICBjb25zdHJ1Y3Rvcihub2RlTWFwLCB0YXJn
ZXRHVUlELCBhdHRyaWJ1dGUsIG9sZFZhbHVlLCBuZXdWYWx1ZSkgeworICAgICAgICAgICAgc3Vw
ZXIobm9kZU1hcCk7CisgICAgICAgICAgICB0aGlzLnRhcmdldEdVSUQgPSB0YXJnZXRHVUlEOwor
ICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGUgPSBhdHRyaWJ1dGU7CisgICAgICAgICAgICB0aGlz
Lm9sZFZhbHVlID0gb2xkVmFsdWU7CisgICAgICAgICAgICB0aGlzLm5ld1ZhbHVlID0gbmV3VmFs
dWU7CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydChub2RlTWFwLm5vZGVGb3JHVUlEKHRhcmdl
dEdVSUQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGFwcGx5KCkgeworICAgICAgICAgICAgaWYg
KHRoaXMubmV3VmFsdWUgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICB0aGlzLnRhcmdldE5vZGUo
KS5yZW1vdmVBdHRyaWJ1dGUodGhpcy5hdHRyaWJ1dGUpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHRoaXMudGFyZ2V0Tm9kZSgpLnNldEF0dHJpYnV0ZSh0aGlzLmF0dHJpYnV0
ZSwgdGhpcy5uZXdWYWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICB1bmFwcGx5KCkgeworICAg
ICAgICAgICAgaWYgKHRoaXMub2xkVmFsdWUgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICB0aGlz
LnRhcmdldE5vZGUoKS5yZW1vdmVBdHRyaWJ1dGUodGhpcy5hdHRyaWJ1dGUpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0Tm9kZSgpLnNldEF0dHJpYnV0ZSh0
aGlzLmF0dHJpYnV0ZSwgdGhpcy5vbGRWYWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBkZXRh
aWxzRWxlbWVudCgpIHsKKyAgICAgICAgICAgIGxldCBodG1sID0KKyAgICAgICAgICAgIGA8ZGV0
YWlscz4KKyAgICAgICAgICAgICAgICA8c3VtbWFyeT5hdHRyaWJ1dGUgY2hhbmdlZDwvc3VtbWFy
eT4KKyAgICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgICAgIDxsaT50YXJnZXQ6
ICR7dGhpcy5ub2RlTWFwLm5vZGVGb3JHVUlEKHRoaXMudGFyZ2V0R1VJRCkubm9kZU5hbWV9PC9s
aT4KKyAgICAgICAgICAgICAgICAgICAgPGxpPmF0dHJpYnV0ZTogJHt0aGlzLmF0dHJpYnV0ZX08
L2xpPgorICAgICAgICAgICAgICAgICAgICA8bGk+b2xkOiAke3RoaXMub2xkVmFsdWUgIT0gbnVs
bCA/ICInIiArIHRoaXMub2xkVmFsdWUgKyAiJyIgOiAiKG51bGwpIn08L2xpPgorICAgICAgICAg
ICAgICAgICAgICA8bGk+bmV3OiAke3RoaXMubmV3VmFsdWUgIT0gbnVsbCA/ICInIiArIHRoaXMu
bmV3VmFsdWUgKyAiJyIgOiAiKG51bGwpIn08L2xpPgorICAgICAgICAgICAgICAgIDwvdWw+Cisg
ICAgICAgICAgICA8L2RldGFpbHM+YDsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50RnJvbU1h
cmtkb3duKGh0bWwpOworICAgICAgICB9CisKKyAgICAgICAgdG9PYmplY3QoKSB7CisgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6ICJBdHRyaWJ1dGVVcGRhdGUiLAor
ICAgICAgICAgICAgICAgIHRhcmdldEdVSUQ6IHRoaXMudGFyZ2V0R1VJRCwKKyAgICAgICAgICAg
ICAgICBhdHRyaWJ1dGU6IHRoaXMuYXR0cmlidXRlLAorICAgICAgICAgICAgICAgIG9sZFZhbHVl
OiB0aGlzLm9sZFZhbHVlLAorICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiB0aGlzLm5ld1ZhbHVl
CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGZyb21PYmplY3Qo
anNvbiwgbm9kZU1hcCkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBBdHRyaWJ1dGVVcGRhdGUo
bm9kZU1hcCwganNvbi50YXJnZXRHVUlELCBqc29uLmF0dHJpYnV0ZSwganNvbi5vbGRWYWx1ZSwg
anNvbi5uZXdWYWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBTZWxlY3Rpb25V
cGRhdGUgZXh0ZW5kcyBET01VcGRhdGUgeworICAgICAgICBjb25zdHJ1Y3Rvcihub2RlTWFwLCBz
dGF0ZSkgeworICAgICAgICAgICAgc3VwZXIobm9kZU1hcCk7CisgICAgICAgICAgICB0aGlzLnN0
YXRlID0gc3RhdGU7CisgICAgICAgIH0KKworICAgICAgICAvLyBIQUNLOiBTZWxlY3Rpb25VcGRh
dGVzIGFyZSBub3QgYXBwbGllZC91bmFwcGxpZWQgYnkgdGhlIG5vcm1hbCBtZWFucy4gVGhlIHNl
bGVjdGlvbiBpcyBhcHBsaWVkIHZpYQorICAgICAgICAvLyBET01VcGRhdGVIaXN0b3J5Q29udGV4
dC5hcHBseUN1cnJlbnRTZWxlY3Rpb25TdGF0ZSBpbnN0ZWFkLCB3aGljaCBjb25zaWRlcnMgdGhl
IHVwZGF0ZXMgYmVmb3JlIGFuZCBhZnRlciB0aGUKKyAgICAgICAgLy8gY3VycmVudCB1cGRhdGUg
aW5kZXguCisgICAgICAgIGFwcGx5KCkgeyB9CisgICAgICAgIHVuYXBwbHkoKSB7IH0KKworICAg
ICAgICB0b09iamVjdCgpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
dHlwZTogIlNlbGVjdGlvblVwZGF0ZSIsCisgICAgICAgICAgICAgICAgc3RhdGU6IHRoaXMuc3Rh
dGUgPyB0aGlzLnN0YXRlLnRvT2JqZWN0KCkgOiBudWxsCisgICAgICAgICAgICB9OworICAgICAg
ICB9CisKKyAgICAgICAgc3RhdGljIGZyb21PYmplY3QoanNvbiwgbm9kZU1hcCkgeworICAgICAg
ICAgICAgcmV0dXJuIG5ldyBTZWxlY3Rpb25VcGRhdGUobm9kZU1hcCwgU2VsZWN0aW9uU3RhdGUu
ZnJvbU9iamVjdChqc29uLnN0YXRlLCBub2RlTWFwKSk7CisgICAgICAgIH0KKworICAgICAgICBf
cmFuZ2VEZXNjcmlwdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBgKCR7dGhpcy5ub2RlTWFw
Lm5vZGVGb3JHVUlEKHRoaXMuc3RhdGUuc3RhcnRHVUlEKS5ub2RlTmFtZX06JHt0aGlzLnN0YXRl
LnN0YXJ0T2Zmc2V0fSwKKyAgICAgICAgICAgICAgICAke3RoaXMubm9kZU1hcC5ub2RlRm9yR1VJ
RCh0aGlzLnN0YXRlLmVuZEdVSUQpLm5vZGVOYW1lfToke3RoaXMuc3RhdGUuZW5kT2Zmc2V0fSlg
OworICAgICAgICB9CisKKyAgICAgICAgX2FuY2hvckRlc2NyaXB0aW9uKCkgeworICAgICAgICAg
ICAgcmV0dXJuIGAke3RoaXMubm9kZU1hcC5ub2RlRm9yR1VJRCh0aGlzLnN0YXRlLmFuY2hvckdV
SUQpLm5vZGVOYW1lfToke3RoaXMuc3RhdGUuYW5jaG9yT2Zmc2V0fWA7CisgICAgICAgIH0KKwor
ICAgICAgICBfZm9jdXNEZXNjcmlwdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBgJHt0aGlz
Lm5vZGVNYXAubm9kZUZvckdVSUQodGhpcy5zdGF0ZS5mb2N1c0dVSUQpLm5vZGVOYW1lfToke3Ro
aXMuc3RhdGUuZm9jdXNPZmZzZXR9YDsKKyAgICAgICAgfQorCisgICAgICAgIGRldGFpbHNFbGVt
ZW50KCkgeworICAgICAgICAgICAgbGV0IGh0bWwgPQorICAgICAgICAgICAgYDxkZXRhaWxzPgor
ICAgICAgICAgICAgICAgIDxzdW1tYXJ5PlNlbGVjdGlvbiBjaGFuZ2VkPC9zdW1tYXJ5PgorICAg
ICAgICAgICAgICAgIDx1bD4KKyAgICAgICAgICAgICAgICAgICAgPGxpPnJhbmdlOiAke3RoaXMu
X3JhbmdlRGVzY3JpcHRpb24oKX08L2xpPgorICAgICAgICAgICAgICAgICAgICA8bGk+YW5jaG9y
OiAke3RoaXMuX2FuY2hvckRlc2NyaXB0aW9uKCl9PC9saT4KKyAgICAgICAgICAgICAgICAgICAg
PGxpPmZvY3VzOiAke3RoaXMuX2ZvY3VzRGVzY3JpcHRpb24oKX08L2xpPgorICAgICAgICAgICAg
ICAgIDwvdWw+CisgICAgICAgICAgICA8L2RldGFpbHM+YDsKKyAgICAgICAgICAgIHJldHVybiBl
bGVtZW50RnJvbU1hcmtkb3duKGh0bWwpOworICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3Mg
SW5wdXRFdmVudFVwZGF0ZSBleHRlbmRzIERPTVVwZGF0ZSB7CisgICAgICAgIGNvbnN0cnVjdG9y
KG5vZGVNYXAsIHVwZGF0ZXMsIGlucHV0VHlwZSwgZGF0YSwgdGltZVN0YW1wKSB7CisgICAgICAg
ICAgICBzdXBlcihub2RlTWFwKTsKKyAgICAgICAgICAgIHRoaXMudXBkYXRlcyA9IHVwZGF0ZXM7
CisgICAgICAgICAgICB0aGlzLmlucHV0VHlwZSA9IGlucHV0VHlwZTsKKyAgICAgICAgICAgIHRo
aXMuZGF0YSA9IGRhdGE7CisgICAgICAgICAgICB0aGlzLnRpbWVTdGFtcCA9IHRpbWVTdGFtcDsK
KyAgICAgICAgfQorCisgICAgICAgIF9vYmZ1c2NhdGVkRGF0YSgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLmlucHV0VHlwZS5pbmRleE9mKCJpbnNlcnQiKSA9PSAwID8gT2JmdXNjYXRvci5z
aGFyZWQoKS5hcHBseVRvVGV4dCh0aGlzLmRhdGEpIDogdGhpcy5kYXRhOworICAgICAgICB9CisK
KyAgICAgICAgYXBwbHkoKSB7CisgICAgICAgICAgICBmb3IgKGxldCB1cGRhdGUgb2YgdGhpcy51
cGRhdGVzKQorICAgICAgICAgICAgICAgIHVwZGF0ZS5hcHBseSgpOworICAgICAgICB9CisKKyAg
ICAgICAgdW5hcHBseSgpIHsKKyAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gdGhpcy51cGRh
dGVzLmxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pCisgICAgICAgICAgICAgICAgdGhp
cy51cGRhdGVzW2luZGV4XS51bmFwcGx5KCk7CisgICAgICAgIH0KKworICAgICAgICB0b09iamVj
dCgpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogIklucHV0
RXZlbnRVcGRhdGUiLAorICAgICAgICAgICAgICAgIGlucHV0VHlwZTogdGhpcy5pbnB1dFR5cGUs
CisgICAgICAgICAgICAgICAgZGF0YTogdGhpcy5fb2JmdXNjYXRlZERhdGEoKSwKKyAgICAgICAg
ICAgICAgICB0aW1lU3RhbXA6IHRoaXMudGltZVN0YW1wLAorICAgICAgICAgICAgICAgIHVwZGF0
ZXM6IHRoaXMudXBkYXRlcy5tYXAodXBkYXRlID0+IHVwZGF0ZS50b09iamVjdCgpKQorICAgICAg
ICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBmcm9tT2JqZWN0KGpzb24sIG5v
ZGVNYXApIHsKKyAgICAgICAgICAgIGxldCB1cGRhdGVzID0ganNvbi51cGRhdGVzLm1hcCh1cGRh
dGUgPT4gRE9NVXBkYXRlLm9mVHlwZSh1cGRhdGUudHlwZSkuZnJvbU9iamVjdCh1cGRhdGUsIG5v
ZGVNYXApKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgSW5wdXRFdmVudFVwZGF0ZShub2RlTWFw
LCB1cGRhdGVzLCBqc29uLmlucHV0VHlwZSwganNvbi5kYXRhLCBqc29uLnRpbWVTdGFtcCk7Cisg
ICAgICAgIH0KKworICAgICAgICBkZXRhaWxzRWxlbWVudCgpIHsKKyAgICAgICAgICAgIGxldCBo
dG1sID0KKyAgICAgICAgICAgIGA8ZGV0YWlscz4KKyAgICAgICAgICAgICAgICA8c3VtbWFyeT5J
bnB1dCAoJHt0aGlzLmlucHV0VHlwZX0pPC9zdW1tYXJ5PgorICAgICAgICAgICAgICAgIDx1bD4K
KyAgICAgICAgICAgICAgICAgICAgPGxpPnRpbWU6ICR7dGhpcy50aW1lU3RhbXB9PC9saT4KKyAg
ICAgICAgICAgICAgICAgICAgPGxpPmRhdGE6ICR7IXRoaXMuZGF0YSA/ICIobnVsbCkiIDogIici
ICsgdGhpcy5kYXRhICsgIicifTwvbGk+CisgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAg
ICAgIDwvZGV0YWlscz5gOworICAgICAgICAgICAgbGV0IHRvcExldmVsRGV0YWlscyA9IGVsZW1l
bnRGcm9tTWFya2Rvd24oaHRtbCk7CisgICAgICAgICAgICBmb3IgKGxldCB1cGRhdGUgb2YgdGhp
cy51cGRhdGVzKQorICAgICAgICAgICAgICAgIHRvcExldmVsRGV0YWlscy5jaGlsZHJlblt0b3BM
ZXZlbERldGFpbHMuY2hpbGRFbGVtZW50Q291bnQgLSAxXS5hcHBlbmRDaGlsZCh1cGRhdGUuZGV0
YWlsc0VsZW1lbnQoKSk7CisgICAgICAgICAgICByZXR1cm4gdG9wTGV2ZWxEZXRhaWxzOworICAg
ICAgICB9CisgICAgfQorCisgICAgd2luZG93LkVkaXRpbmdIaXN0b3J5ID0geworICAgICAgICBH
bG9iYWxOb2RlTWFwLAorICAgICAgICBTZWxlY3Rpb25TdGF0ZSwKKyAgICAgICAgRE9NVXBkYXRl
LAorICAgICAgICBDaGlsZExpc3RVcGRhdGUsCisgICAgICAgIENoYXJhY3RlckRhdGFVcGRhdGUs
CisgICAgICAgIEF0dHJpYnV0ZVVwZGF0ZSwKKyAgICAgICAgU2VsZWN0aW9uVXBkYXRlLAorICAg
ICAgICBJbnB1dEV2ZW50VXBkYXRlLAorICAgICAgICBPYmZ1c2NhdG9yCisgICAgfTsKK30pKCk7
CmRpZmYgLS1naXQgYS9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9SZXNvdXJj
ZXMvUGxheWJhY2tUZXN0SGFybmVzcy5odG1sIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGlu
Z0hpc3RvcnkvUmVzb3VyY2VzL1BsYXliYWNrVGVzdEhhcm5lc3MuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
OTFmZDljOTZhOTVjOGM0YTcyZjcyNGQ0MzNjYjJiOGJkN2Q4ZGI1Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvUmVzb3VyY2VzL1BsYXliYWNr
VGVzdEhhcm5lc3MuaHRtbApAQCAtMCwwICsxLDMyMSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzdHls
ZT4KK2JvZHkgeworICAgIG1hcmdpbjogOHB4OworfQorCisjb3ZlcmxheSB7CisgICAgd2lkdGg6
IDMyMHB4OworICAgIGhlaWdodDogY2FsYygxMDAlIC0gMzJweCk7CisgICAgcG9zaXRpb246IGZp
eGVkOworICAgIHJpZ2h0OiAxNnB4OworICAgIHRvcDogMTZweDsKKyAgICBiYWNrZ3JvdW5kLWNv
bG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpOworfQorCisjdXBkYXRlSW5mb1BhbmVsIHsK
KyAgICBoZWlnaHQ6IGNhbGMoOTAlIC0gMjBweCk7CisgICAgb3ZlcmZsb3c6IHNjcm9sbDsKKyAg
ICB3aGl0ZS1zcGFjZTogbm93cmFwOworICAgIHBhZGRpbmc6IDEwcHg7Cit9CisKKyNjb250cm9s
cyB7CisgICAgaGVpZ2h0OiAxMCU7CisgICAgZGlzcGxheTogZmxleDsKKyAgICBmbGV4LWRpcmVj
dGlvbjogY29sdW1uOworICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CisgICAgdGV4dC1hbGlnbjog
Y2VudGVyOworfQorCisjY29udHJvbHMtd3JhcHBlciB7CisgICAgbWFyZ2luOiAwIGF1dG87Cit9
CisKK3N1bW1hcnk6Zm9jdXMgeworICAgIG91dGxpbmU6IG5vbmU7Cit9CisKK2RldGFpbHMgewor
ICAgIHBhZGRpbmc6IDRweCAwOworfQorCisjdXBkYXRlTWFya2VyIHsKKyAgICB3aWR0aDogNTAl
OworICAgIG1hcmdpbjogMjBweCAwOworICAgIGJvcmRlci10b3A6IDFweCByZWQgZGFzaGVkOwor
fQorCitzdW1tYXJ5IHsKKyAgICBtYXJnaW4tdG9wOiAwOworfQorCisjZHJvcHpvbmUgeworICAg
IG1hcmdpbjogMTAwcHg7CisgICAgcGFkZGluZzogNTBweDsKKyAgICB3aWR0aDogY2FsYygxMDAl
IC0gMzAwcHgpOworICAgIGhlaWdodDogY2FsYygxMDAlIC0gMzAwcHgpOworICAgIGJvcmRlcjog
MTVweCAjRThFOEU4IGRhc2hlZDsKKyAgICBkaXNwbGF5OiBmbGV4OworICAgIGFsaWduLWl0ZW1z
OiBjZW50ZXI7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIGN1cnNvcjogcG9pbnRlcjsK
K30KKworYTp2aXNpdGVkLCBhOmxpbmsgeworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAg
ICBjb2xvcjogcmVkOworfQorCisjdXBsb2FkIHsKKyAgICBvcGFjaXR5OiAwOworfQorCisjZHJv
cE1lc3NhZ2UgeworICAgIGZvbnQtc2l6ZTogNTBweDsKKyAgICBjb2xvcjogI0U4RThFODsKKyAg
ICBtYXJnaW46IDAgYXV0bzsKKyAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKKyAgICBmb250LWZh
bWlseTogLWFwcGxlLXN5c3RlbTsKK30KKzwvc3R5bGU+Cis8c2NyaXB0IHNyYz0iRE9NVGVzdGlu
Z1V0aWwuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkVkaXRpbmdIaXN0b3J5VXRpbC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0PgorY2xhc3MgRE9NVXBkYXRlSGlzdG9yeUNvbnRleHQgeworICAg
IGNvbnN0cnVjdG9yKG5vZGVNYXAsIHVwZGF0ZXMpIHsKKyAgICAgICAgdGhpcy5fbm9kZU1hcCA9
IG5vZGVNYXA7CisgICAgICAgIHRoaXMuX3VwZGF0ZXMgPSB1cGRhdGVzOworICAgICAgICB0aGlz
Ll9jdXJyZW50VXBkYXRlSW5kZXggPSB1cGRhdGVzLmxlbmd0aDsKKyAgICB9CisKKyAgICBjdXJy
ZW50SW5kZXgoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50VXBkYXRlSW5kZXg7Cisg
ICAgfQorCisgICAgdXBkYXRlcygpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZXM7Cisg
ICAgfQorCisgICAgdXBkYXRlQXQoaW5kZXgpIHsKKyAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBp
bmRleCA+PSB0aGlzLl91cGRhdGVzLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOwor
CisgICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVzW2luZGV4XTsKKyAgICB9CisKKyAgICBzZWxl
Y3Rpb25TdGF0ZUF0KGluZGV4KSB7CisgICAgICAgIGxldCBiZWZvcmVVcGRhdGUgPSB0aGlzLnVw
ZGF0ZUF0KGluZGV4IC0gMSk7CisgICAgICAgIGxldCBhZnRlclVwZGF0ZSA9IHRoaXMudXBkYXRl
QXQoaW5kZXgpOworICAgICAgICBpZiAoYmVmb3JlVXBkYXRlIGluc3RhbmNlb2YgRWRpdGluZ0hp
c3RvcnkuU2VsZWN0aW9uVXBkYXRlKQorICAgICAgICAgICAgcmV0dXJuIGJlZm9yZVVwZGF0ZS5z
dGF0ZTsKKyAgICAgICAgaWYgKGFmdGVyVXBkYXRlIGluc3RhbmNlb2YgRWRpdGluZ0hpc3Rvcnku
U2VsZWN0aW9uVXBkYXRlKQorICAgICAgICAgICAgcmV0dXJuIGFmdGVyVXBkYXRlLnN0YXRlOwor
ICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBhcHBseUN1cnJlbnRTZWxlY3Rpb25T
dGF0ZShzZWxlY3Rpb24pIHsKKyAgICAgICAgbGV0IHNlbGVjdGlvblN0YXRlID0gdGhpcy5zZWxl
Y3Rpb25TdGF0ZUF0KHRoaXMuX2N1cnJlbnRVcGRhdGVJbmRleCk7CisgICAgICAgIGlmIChzZWxl
Y3Rpb25TdGF0ZSAmJiBzZWxlY3Rpb24pCisgICAgICAgICAgICBzZWxlY3Rpb25TdGF0ZS5hcHBs
eVRvU2VsZWN0aW9uKHNlbGVjdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNlbGVj
dGlvbi5yZW1vdmVBbGxSYW5nZXMoKTsKKyAgICB9CisKKyAgICBuZXh0KCkgeworICAgICAgICBp
ZiAodGhpcy5fY3VycmVudFVwZGF0ZUluZGV4ID49IHRoaXMuX3VwZGF0ZXMubGVuZ3RoKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX3VwZGF0ZXNbdGhpcy5fY3VycmVudFVw
ZGF0ZUluZGV4XS5hcHBseSgpOworICAgICAgICB0aGlzLl9jdXJyZW50VXBkYXRlSW5kZXgrKzsK
KyAgICB9CisKKyAgICBwcmV2aW91cygpIHsKKyAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRVcGRh
dGVJbmRleCA8PSAwKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX3VwZGF0
ZXNbdGhpcy5fY3VycmVudFVwZGF0ZUluZGV4IC0gMV0udW5hcHBseSgpOworICAgICAgICB0aGlz
Ll9jdXJyZW50VXBkYXRlSW5kZXgtLTsKKyAgICB9CisKKyAgICBqdW1wVG8oaW5kZXgpIHsKKyAg
ICAgICAgaW5kZXggPSBNYXRoLm1heChNYXRoLm1pbihpbmRleCwgdGhpcy5fdXBkYXRlcy5sZW5n
dGgpLCAwKTsKKyAgICAgICAgd2hpbGUodGhpcy5fY3VycmVudFVwZGF0ZUluZGV4ICE9IGluZGV4
KSB7CisgICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudFVwZGF0ZUluZGV4IDwgaW5kZXgpCisg
ICAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgdGhpcy5wcmV2aW91cygpOworICAgICAgICB9CisgICAgfQorfQorCit3aW5kb3cub25s
b2FkID0gKCkgPT4geworICAgIGZ1bmN0aW9uIHNldHVwRWRpdGluZ0hpc3RvcnkoanNvbkRhdGEs
IHdpdGhDb250cm9scz10cnVlKSB7CisgICAgICAgIGxldCBwYXJzZWRSZXN1bHQgPSBKU09OLnBh
cnNlKGpzb25EYXRhKTsKKyAgICAgICAgbGV0IGdsb2JhbE5vZGVNYXAgPSBFZGl0aW5nSGlzdG9y
eS5HbG9iYWxOb2RlTWFwLmZyb21PYmplY3QocGFyc2VkUmVzdWx0Lmdsb2JhbE5vZGVNYXApOwor
ICAgICAgICBsZXQgdXBkYXRlcyA9IHBhcnNlZFJlc3VsdC51cGRhdGVzLm1hcCh1cGRhdGVJbmZv
ID0+IEVkaXRpbmdIaXN0b3J5LkRPTVVwZGF0ZS5vZlR5cGUodXBkYXRlSW5mby50eXBlKS5mcm9t
T2JqZWN0KHVwZGF0ZUluZm8sIGdsb2JhbE5vZGVNYXApKTsKKyAgICAgICAgRWRpdGluZ0hpc3Rv
cnkuY29udGV4dCA9IG5ldyBET01VcGRhdGVIaXN0b3J5Q29udGV4dChnbG9iYWxOb2RlTWFwLCB1
cGRhdGVzKTsKKworICAgICAgICBmdW5jdGlvbiBkZXRhaWxzRWxlbWVudEF0SW5kZXgoaW5kZXgp
IHsKKyAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjdXBkYXRlSW5m
by0ke2luZGV4fWApOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdXBkYXRlT3Zlcmxh
eSgpIHsKKyAgICAgICAgICAgIGxldCBjdXJyZW50SW5kZXggPSBFZGl0aW5nSGlzdG9yeS5jb250
ZXh0LmN1cnJlbnRJbmRleCgpOworICAgICAgICAgICAgbGV0IG51bWJlck9mVXBkYXRlcyA9IEVk
aXRpbmdIaXN0b3J5LmNvbnRleHQudXBkYXRlcygpLmxlbmd0aDsKKyAgICAgICAgICAgIHByb2dy
ZXNzTGFiZWwudGV4dENvbnRlbnQgPSBgJHtjdXJyZW50SW5kZXh9LyR7bnVtYmVyT2ZVcGRhdGVz
fWA7CisgICAgICAgICAgICBwcmV2aW91c0J1dHRvbi5kaXNhYmxlZCA9IGN1cnJlbnRJbmRleCA8
PSAwOworICAgICAgICAgICAgbmV4dEJ1dHRvbi5kaXNhYmxlZCA9IGN1cnJlbnRJbmRleCA+PSBu
dW1iZXJPZlVwZGF0ZXM7CisgICAgICAgICAgICB1cGRhdGVNYXJrZXIucmVtb3ZlKCk7CisgICAg
ICAgICAgICBpZiAoMCA8PSBjdXJyZW50SW5kZXggJiYgY3VycmVudEluZGV4IDw9IG51bWJlck9m
VXBkYXRlcykgeworICAgICAgICAgICAgICAgIGxldCBjdXJyZW50VXBkYXRlRGV0YWlscyA9IGRl
dGFpbHNFbGVtZW50QXRJbmRleChjdXJyZW50SW5kZXgpOworICAgICAgICAgICAgICAgIHVwZGF0
ZUluZm9QYW5lbC5pbnNlcnRCZWZvcmUodXBkYXRlTWFya2VyLCBjdXJyZW50VXBkYXRlRGV0YWls
cyk7CisgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZU1hcmtlci5vZmZzZXRUb3AgPCB1cGRhdGVJ
bmZvUGFuZWwuc2Nyb2xsVG9wCisgICAgICAgICAgICAgICAgICAgIHx8IHVwZGF0ZUluZm9QYW5l
bC5zY3JvbGxUb3AgKyB1cGRhdGVJbmZvUGFuZWwuY2xpZW50SGVpZ2h0IDwgdXBkYXRlTWFya2Vy
Lm9mZnNldFRvcCkKKyAgICAgICAgICAgICAgICB1cGRhdGVNYXJrZXIuc2Nyb2xsSW50b1ZpZXco
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHVwbG9hZC5yZW1vdmUoKTsK
KyAgICAgICAgZHJvcHpvbmUucmVtb3ZlKCk7CisgICAgICAgIGZvciAobGV0IG5vZGUgb2YgZ2xv
YmFsTm9kZU1hcC5ub2RlcygpKSB7CisgICAgICAgICAgICBpZiAobm9kZS50YWdOYW1lID09PSAi
Qk9EWSIpIHsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5ID0gbm9kZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICgh
d2l0aENvbnRyb2xzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGxldCBvdmVybGF5
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIG92ZXJsYXkuaWQgPSAi
b3ZlcmxheSI7CisgICAgICAgIG92ZXJsYXkuaW5uZXJIVE1MID0KKyAgICAgICAgYDxjb2RlPgor
ICAgICAgICAgICAgPGRpdiBpZD0iaW5mb3JtYXRpb24iPgorICAgICAgICAgICAgICAgIDxkaXYg
aWQ9InVwZGF0ZUluZm9QYW5lbCI+PC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAg
ICAgIDxkaXYgaWQ9ImNvbnRyb2xzIj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAg
ICAgICAgICAgICA8YnV0dG9uIGlkPSJleHBhbmRCdXR0b24iPjxjb2RlPlNob3cgYWxsPC9jb2Rl
PjwvYnV0dG9uPjxidXR0b24gaWQ9ImNvbGxhcHNlQnV0dG9uIj48Y29kZT5IaWRlIGFsbDwvY29k
ZT48L2J1dHRvbj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8ZGl2
PgorICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRpc2FibGVkIGlkPSJwcmV2aW91c0J1dHRv
biI+Jmx0OzwvYnV0dG9uPjxidXR0b24gZGlzYWJsZWQgaWQ9Im5leHRCdXR0b24iPiZndDs8L2J1
dHRvbj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8ZGl2IGlkPSJw
cm9ncmVzc0xhYmVsIj4tLy08L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Nv
ZGU+YDsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdmVybGF5KTsKKyAgICAg
ICAgdXBkYXRlcy5mb3JFYWNoKCh1cGRhdGUsIGluZGV4KSA9PiB7CisgICAgICAgICAgICBsZXQg
ZGV0YWlsc0VsZW1lbnQgPSB1cGRhdGUuZGV0YWlsc0VsZW1lbnQoKTsKKyAgICAgICAgICAgIGxl
dCBzdW1tYXJ5ID0gZGV0YWlsc0VsZW1lbnQuY2hpbGRyZW5bMF07CisgICAgICAgICAgICBsZXQg
aW5kZXhFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICAg
ICAgaW5kZXhFbGVtZW50LmlubmVySFRNTCA9IGBbPGEgaHJlZj0jPiR7aW5kZXh9PC9hPl0gYDsK
KyAgICAgICAgICAgIGluZGV4RWxlbWVudC5jaGlsZHJlblswXS5hZGRFdmVudExpc3RlbmVyKCJj
bGljayIsICgpID0+IHsKKyAgICAgICAgICAgICAgICBFZGl0aW5nSGlzdG9yeS5jb250ZXh0Lmp1
bXBUbyhpbmRleCArIDEpOworICAgICAgICAgICAgICAgIEVkaXRpbmdIaXN0b3J5LmNvbnRleHQu
YXBwbHlDdXJyZW50U2VsZWN0aW9uU3RhdGUoZ2V0U2VsZWN0aW9uKCkpOworICAgICAgICAgICAg
ICAgIGRldGFpbHNFbGVtZW50Lm9wZW4gPSB0cnVlOworICAgICAgICAgICAgICAgIHVwZGF0ZU92
ZXJsYXkoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgc3VtbWFyeS5pbnNlcnRCZWZv
cmUoaW5kZXhFbGVtZW50LCBzdW1tYXJ5LmNoaWxkTm9kZXNbMF0pOworICAgICAgICAgICAgZGV0
YWlsc0VsZW1lbnQuaWQgPSBgdXBkYXRlSW5mby0ke2luZGV4fWA7CisgICAgICAgICAgICBkZXRh
aWxzRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJ1cGRhdGVJbmZvIik7CisgICAgICAgICAgICB1cGRh
dGVJbmZvUGFuZWwuYXBwZW5kKGRldGFpbHNFbGVtZW50KTsKKyAgICAgICAgfSk7CisgICAgICAg
IGxldCB1cGRhdGVNYXJrZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAg
ICAgdXBkYXRlTWFya2VyLmlkID0gInVwZGF0ZU1hcmtlciI7CisgICAgICAgIHVwZGF0ZUluZm9Q
YW5lbC5hcHBlbmQodXBkYXRlTWFya2VyKTsKKworICAgICAgICBuZXh0QnV0dG9uLmFkZEV2ZW50
TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4geworICAgICAgICAgICAgRWRpdGluZ0hpc3RvcnkuY29u
dGV4dC5uZXh0KCk7CisgICAgICAgICAgICBFZGl0aW5nSGlzdG9yeS5jb250ZXh0LmFwcGx5Q3Vy
cmVudFNlbGVjdGlvblN0YXRlKGdldFNlbGVjdGlvbigpKTsKKyAgICAgICAgICAgIHVwZGF0ZU92
ZXJsYXkoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcHJldmlvdXNCdXR0b24uYWRkRXZlbnRM
aXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CisgICAgICAgICAgICBFZGl0aW5nSGlzdG9yeS5jb250
ZXh0LnByZXZpb3VzKCk7CisgICAgICAgICAgICBFZGl0aW5nSGlzdG9yeS5jb250ZXh0LmFwcGx5
Q3VycmVudFNlbGVjdGlvblN0YXRlKGdldFNlbGVjdGlvbigpKTsKKyAgICAgICAgICAgIHVwZGF0
ZU92ZXJsYXkoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigia2V5ZG93biIsIGV2ZW50ID0+IHsKKyAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09
ICJBcnJvd1JpZ2h0IiB8fCBldmVudC5rZXkgPT09ICJBcnJvd0Rvd24iKSB7CisgICAgICAgICAg
ICAgICAgRWRpdGluZ0hpc3RvcnkuY29udGV4dC5uZXh0KCk7CisgICAgICAgICAgICAgICAgRWRp
dGluZ0hpc3RvcnkuY29udGV4dC5hcHBseUN1cnJlbnRTZWxlY3Rpb25TdGF0ZShnZXRTZWxlY3Rp
b24oKSk7CisgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAg
ICAgICAgICB1cGRhdGVPdmVybGF5KCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50Lmtl
eSA9PT0gIkFycm93TGVmdCIgfHwgZXZlbnQua2V5ID09PSAiQXJyb3dVcCIpIHsKKyAgICAgICAg
ICAgICAgICBFZGl0aW5nSGlzdG9yeS5jb250ZXh0LnByZXZpb3VzKCk7CisgICAgICAgICAgICAg
ICAgRWRpdGluZ0hpc3RvcnkuY29udGV4dC5hcHBseUN1cnJlbnRTZWxlY3Rpb25TdGF0ZShnZXRT
ZWxlY3Rpb24oKSk7CisgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAg
ICAgICAgICAgICAgICB1cGRhdGVPdmVybGF5KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0p
OworCisgICAgICAgIGV4cGFuZEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+
IHsKKyAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi51cGRhdGVJbmZvIiku
Zm9yRWFjaChkZXRhaWxzID0+IGRldGFpbHMub3BlbiA9IHRydWUpOworICAgICAgICAgICAgdXBk
YXRlT3ZlcmxheSgpOworICAgICAgICB9KTsKKworICAgICAgICBjb2xsYXBzZUJ1dHRvbi5hZGRF
dmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKKyAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5
U2VsZWN0b3JBbGwoIi51cGRhdGVJbmZvIikuZm9yRWFjaChkZXRhaWxzID0+IGRldGFpbHMub3Bl
biA9IGZhbHNlKTsKKyAgICAgICAgICAgIHVwZGF0ZU92ZXJsYXkoKTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgWyJzZWxlY3RzdGFydCIsICJkcmFnZW50ZXIiLCAiZHJhZ292ZXIiLCAiZHJvcCIs
ICJiZWZvcmVpbnB1dCJdLmZvckVhY2goKHR5cGUpID0+IHsKKyAgICAgICAgICAgIGRvY3VtZW50
LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnQgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKSk7
CisgICAgICAgIH0pOworCisgICAgICAgIHVwZGF0ZU92ZXJsYXkoKTsKKyAgICAgICAgRWRpdGlu
Z0hpc3RvcnkuY29udGV4dC5hcHBseUN1cnJlbnRTZWxlY3Rpb25TdGF0ZShnZXRTZWxlY3Rpb24o
KSk7CisgICAgfQorCisgICAgZHJvcHpvbmUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIs
IGVtcGhhc2l6ZURyb3ApOworICAgIGRyb3B6b25lLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVh
dmUiLCB1bmVtcGhhc2l6ZURyb3ApOworICAgIGRyb3B6b25lLmFkZEV2ZW50TGlzdGVuZXIoImRy
YWdlbnRlciIsIGVtcGhhc2l6ZURyb3ApOworICAgIGRyb3B6b25lLmFkZEV2ZW50TGlzdGVuZXIo
ImRyYWdsZWF2ZSIsIHVuZW1waGFzaXplRHJvcCk7CisgICAgZHJvcHpvbmUuYWRkRXZlbnRMaXN0
ZW5lcigiZHJhZ292ZXIiLCBldmVudCA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpKTsKKyAgICBk
cm9wem9uZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHVwbG9hZC5jbGljaygpKTsK
KyAgICBkcm9wem9uZS5hZGRFdmVudExpc3RlbmVyKCJkcm9wIiwgZHJvcEV2ZW50ID0+IHsKKyAg
ICAgICAgZHJvcEV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgIGZpbGVTZWxlY3RlZChk
cm9wRXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzKTsKKyAgICB9KTsKKworICAgIHVwbG9hZC5maWxl
cyA9IG51bGw7CisgICAgRWRpdGluZ0hpc3Rvcnkuc2V0dXBFZGl0aW5nSGlzdG9yeSA9IHNldHVw
RWRpdGluZ0hpc3Rvcnk7Cit9OworCitmdW5jdGlvbiBlbXBoYXNpemVEcm9wKGV2ZW50KSB7Cisg
ICAgZHJvcHpvbmUuc3R5bGUuYm9yZGVyID0gIjE1cHggI0Q4RDhEOCBkYXNoZWQiOworICAgIGRy
b3BNZXNzYWdlLnN0eWxlLmNvbG9yID0gIiNEOEQ4RDgiOworICAgIGV2ZW50LnByZXZlbnREZWZh
dWx0KCk7Cit9CisKK2Z1bmN0aW9uIHVuZW1waGFzaXplRHJvcChldmVudCkgeworICAgIGRyb3B6
b25lLnN0eWxlLmJvcmRlciA9ICIxNXB4ICNFOEU4RTggZGFzaGVkIjsKKyAgICBkcm9wTWVzc2Fn
ZS5zdHlsZS5jb2xvciA9ICIjRThFOEU4IjsKKyAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwor
fQorCitmdW5jdGlvbiBmaWxlU2VsZWN0ZWQoZmlsZXMpIHsKKyAgICBkcm9wem9uZS5yZW1vdmVF
dmVudExpc3RlbmVyKCJtb3VzZWVudGVyIiwgZW1waGFzaXplRHJvcCk7CisgICAgZHJvcHpvbmUu
cmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsIHVuZW1waGFzaXplRHJvcCk7CisgICAg
ZHJvcHpvbmUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ2VudGVyIiwgZW1waGFzaXplRHJvcCk7
CisgICAgZHJvcHpvbmUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ2xlYXZlIiwgdW5lbXBoYXNp
emVEcm9wKTsKKworICAgIGNvbnNvbGUubG9nKGBTZWxlY3RlZCAke2ZpbGVzLmxlbmd0aH0gZmls
ZShzKS5gKTsKKworICAgIGxldCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOworICAgIHJlYWRl
ci5vbmxvYWQgPSBldmVudCA9PiBFZGl0aW5nSGlzdG9yeS5zZXR1cEVkaXRpbmdIaXN0b3J5KGV2
ZW50LnRhcmdldC5yZXN1bHQpOworICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGVzWzBdKTsKK30K
Kzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisgICAgPGRpdiBpZD0iZHJvcHpvbmUiPgorICAg
ICAgICA8ZGl2IGlkPSJkcm9wTWVzc2FnZSI+RHJvcCBhbiBlZGl0aW5nIHJlY29yZCBoZXJlPC9k
aXY+CisgICAgPC9kaXY+CisgICAgPGlucHV0IGlkPSJ1cGxvYWQiIG9uY2hhbmdlPWZpbGVTZWxl
Y3RlZChmaWxlcykgdHlwZT0iZmlsZSI+PC9pbnB1dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Rlc3RSdW5uZXIuaCBi
L1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Rlc3RSdW5uZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wMGRjZWQxYTcyM2Y3MDcyN2ZhOTUxMGU2MzM2MDhiMGQzYWRiNWIxCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvVGVzdFJ1bm5lci5o
CkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+
CisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJL
aXQuaD4KKworQGludGVyZmFjZSBUZXN0UnVubmVyIDogTlNPYmplY3QKKworQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5KSBOU1dpbmRvdyAqd2luZG93OworQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5KSBXS1dlYlZpZXcgKndlYlZpZXc7CisKKy0gKHZvaWQpZXhwZWN0RXZlbnRz
OihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgTlNOdW1iZXIgKj4gKilleHBlY3RlZEV2ZW50Q291
bnRzIGFmdGVyUGVyZm9ybWluZzooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb247CistICh2b2lkKWxv
YWRDYXB0dXJlVGVzdEhhcm5lc3M7CistICh2b2lkKWxvYWRQbGF5YmFja1Rlc3RIYXJuZXNzV2l0
aEpTT046KE5TU3RyaW5nICopanNvbjsKKy0gKHZvaWQpc2V0VGV4dE9iZnVzY2F0aW9uRW5hYmxl
ZDooQk9PTCllbmFibGVkOworLSAodm9pZCl0eXBlU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZzsK
Ky0gKHZvaWQpanVtcFRvVXBkYXRlSW5kZXg6KE5TSW50ZWdlcilpbmRleDsKKy0gKHZvaWQpZGVs
ZXRlQmFja3dhcmRzOihOU0ludGVnZXIpdGltZXM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVh
ZG9ubHkpIE5TU3RyaW5nICplZGl0aW5nSGlzdG9yeUpTT047CitAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIE5TU3RyaW5nICpib2R5RWxlbWVudFN1YnRyZWU7CitAcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHkpIE5TU3RyaW5nICpib2R5VGV4dENvbnRlbnQ7CitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIE5TSW50ZWdlciBudW1iZXJPZlVwZGF0ZXM7CisKK0BlbmQK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Rlc3RSdW5u
ZXIubSBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Rlc3RSdW5uZXIubQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41NWU1YWY1YmU1NjI3MDY4NDdkZjdiNmY3ZGM0YzI1MmI0MDNjNTU3Ci0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvVGVzdFJ1
bm5lci5tCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJUZXN0UnVubmVyLmgiCisKKyNpbXBvcnQgIlRlc3RVdGlsLmgiCisjaW1wb3J0
ICJXS1dlYlZpZXdBZGRpdGlvbnMuaCIKKyNpbXBvcnQgPENhcmJvbi9DYXJib24uaD4KKworc3Rh
dGljIFdLVXNlclNjcmlwdCAqaW5qZWN0ZWRNZXNzYWdlRXZlbnRIYW5kbGVyU2NyaXB0KE5TU3Ry
aW5nICpsaXN0ZW5lciwgTlNTdHJpbmcgKmV2ZW50KQoreworICAgIE5TU3RyaW5nICpzb3VyY2Ug
PSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVALmFkZEV2ZW50TGlzdGVuZXIoJyVAJywg
KCkgPT4geyIKKyAgICAgICAgInNldFRpbWVvdXQoKCkgPT4gd2Via2l0Lm1lc3NhZ2VIYW5kbGVy
cy5ldmVudEhhbmRsZXIucG9zdE1lc3NhZ2UoJyVAJyksIDApOyIKKyAgICAgICAgIn0pOyIsIGxp
c3RlbmVyLCBldmVudCwgZXZlbnRdOworICAgIHJldHVybiBbW1dLVXNlclNjcmlwdCBhbGxvY10g
aW5pdFdpdGhTb3VyY2U6c291cmNlIGluamVjdGlvblRpbWU6V0tVc2VyU2NyaXB0SW5qZWN0aW9u
VGltZUF0RG9jdW1lbnRFbmQgZm9yTWFpbkZyYW1lT25seTpZRVNdOworfQorCitAaW50ZXJmYWNl
IFRlc3RSdW5uZXIgKCkgPFdLU2NyaXB0TWVzc2FnZUhhbmRsZXI+CisKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljKSBOU011dGFibGVEaWN0aW9uYXJ5ICpwZW5kaW5nRXZlbnRDb3VudHM7CisKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIFRlc3RSdW5uZXIKKworLSAoaW5zdGFuY2V0eXBlKWluaXQKK3sK
KyAgICBOU1dpbmRvdyAqd2luZG93ID0gW1tOU1dpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50
UmVjdDpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBzdHlsZU1hc2s6TlNXaW5kb3dTdHlsZU1h
c2tCb3JkZXJsZXNzIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZlcjpOT107Cisg
ICAgW3dpbmRvdyBzZXRGcmFtZU9yaWdpbjpOU01ha2VQb2ludCgwLCAwKV07CisgICAgW3dpbmRv
dyBzZXRJc1Zpc2libGU6WUVTXTsKKworICAgIFdLV2ViVmlldyAqd2ViVmlldyA9IFtbV0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApXTsKKyAg
ICBbW3dpbmRvdyBjb250ZW50Vmlld10gYWRkU3Vidmlldzp3ZWJWaWV3XTsKKyAgICBbd2luZG93
IG1ha2VLZXlBbmRPcmRlckZyb250OndlYlZpZXddOworICAgIFt3ZWJWaWV3IGJlY29tZUZpcnN0
UmVzcG9uZGVyXTsKKworICAgIF93aW5kb3cgPSB3aW5kb3c7CisgICAgX3dlYlZpZXcgPSB3ZWJW
aWV3OworICAgIF9wZW5kaW5nRXZlbnRDb3VudHMgPSBuaWw7CisKKyAgICBXS1VzZXJDb250ZW50
Q29udHJvbGxlciAqY29udGVudENvbnRyb2xsZXIgPSB3ZWJWaWV3LmNvbmZpZ3VyYXRpb24udXNl
ckNvbnRlbnRDb250cm9sbGVyOworICAgIFtjb250ZW50Q29udHJvbGxlciBhZGRTY3JpcHRNZXNz
YWdlSGFuZGxlcjpzZWxmIG5hbWU6QCJldmVudEhhbmRsZXIiXTsKKyAgICBbY29udGVudENvbnRy
b2xsZXIgYWRkVXNlclNjcmlwdDppbmplY3RlZE1lc3NhZ2VFdmVudEhhbmRsZXJTY3JpcHQoQCJk
b2N1bWVudC5ib2R5IiwgQCJmb2N1cyIpXTsKKyAgICBbY29udGVudENvbnRyb2xsZXIgYWRkVXNl
clNjcmlwdDppbmplY3RlZE1lc3NhZ2VFdmVudEhhbmRsZXJTY3JpcHQoQCJkb2N1bWVudCIsIEAi
aW5wdXQiKV07CisgICAgW2NvbnRlbnRDb250cm9sbGVyIGFkZFVzZXJTY3JpcHQ6aW5qZWN0ZWRN
ZXNzYWdlRXZlbnRIYW5kbGVyU2NyaXB0KEAiZG9jdW1lbnQiLCBAInNlbGVjdGlvbmNoYW5nZSIp
XTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlbGV0ZUJhY2t3YXJkczooTlNJ
bnRlZ2VyKXRpbWVzCit7CisgICAgZm9yIChOU0ludGVnZXIgaSA9IDA7IGkgPCB0aW1lczsgaSsr
KSB7CisgICAgICAgIFtzZWxmIGV4cGVjdEV2ZW50czpAeyBAImlucHV0IjogQDEsIEAic2VsZWN0
aW9uY2hhbmdlIjogQDEgfSBhZnRlclBlcmZvcm1pbmc6XigpIHsKKyAgICAgICAgICAgIFtfd2Vi
VmlldyBrZXlQcmVzc1dpdGhDaGFyYWN0ZXJzOm5pbCBrZXlDb2RlOktleUNvZGVUeXBlRGVsZXRl
QmFja3dhcmRdOworICAgICAgICB9XTsKKyAgICB9Cit9CisKKy0gKHZvaWQpdHlwZVN0cmluZzoo
TlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICBmb3IgKE5TSW50ZWdlciBjaGFySW5kZXggPSAwOyBj
aGFySW5kZXggPCBzdHJpbmcubGVuZ3RoOyBjaGFySW5kZXgrKykgeworICAgICAgICBbc2VsZiBl
eHBlY3RFdmVudHM6QHsgQCJpbnB1dCI6IEAxLCBAInNlbGVjdGlvbmNoYW5nZSI6IEAxIH0gYWZ0
ZXJQZXJmb3JtaW5nOl4oKSB7CisgICAgICAgICAgICBbX3dlYlZpZXcgdHlwZUNoYXJhY3Rlcjpb
c3RyaW5nIGNoYXJhY3RlckF0SW5kZXg6Y2hhckluZGV4XV07CisgICAgICAgIH1dOworICAgIH0K
K30KKworLSAoTlNTdHJpbmcgKilib2R5RWxlbWVudFN1YnRyZWUKK3sKKyAgICByZXR1cm4gW193
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOltOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiRE9NVXRpbC5zdWJ0cmVlQXNTdHJpbmcoZG9jdW1lbnQuYm9keSki
XV07Cit9CisKKy0gKE5TU3RyaW5nICopYm9keVRleHRDb250ZW50Cit7CisgICAgcmV0dXJuIFtf
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzpbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAImRvY3VtZW50LmJvZHkudGV4dENvbnRlbnQiXV07Cit9CisKKy0g
KE5TU3RyaW5nICopZWRpdGluZ0hpc3RvcnlKU09OCit7CisgICAgcmV0dXJuIFtfd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpAIkVkaXRpbmdIaXN0b3J5LmdldEVkaXRpbmdIaXN0b3J5QXNKU09OU3RyaW5nKGZh
bHNlKSJdXTsKK30KKworLSAodm9pZClsb2FkUGxheWJhY2tUZXN0SGFybmVzc1dpdGhKU09OOihO
U1N0cmluZyAqKWpzb24KK3sKKyAgICBbX3dlYlZpZXcgbG9hZFBhZ2VGcm9tQnVuZGxlTmFtZWQ6
QCJQbGF5YmFja1Rlc3RIYXJuZXNzIl07CisgICAgd2FpdFVudGlsKENPTkRJVElPTl9CTE9DSyhb
W193ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOkAiISF3aW5k
b3cuRWRpdGluZ0hpc3RvcnkgJiYgISFFZGl0aW5nSGlzdG9yeS5zZXR1cEVkaXRpbmdIaXN0b3J5
Il0gYm9vbFZhbHVlXSkpOworCisgICAganNvbiA9IFtbanNvbiBzdHJpbmdCeVJlcGxhY2luZ09j
Y3VycmVuY2VzT2ZTdHJpbmc6QCJcXCIgd2l0aFN0cmluZzpAIlxcXFwiXSBzdHJpbmdCeVJlcGxh
Y2luZ09jY3VycmVuY2VzT2ZTdHJpbmc6QCJgIiB3aXRoU3RyaW5nOkAiXFxgIl07CisgICAgW193
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOltOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiRWRpdGluZ0hpc3Rvcnkuc2V0dXBFZGl0aW5nSGlzdG9yeShgJUBg
LCBmYWxzZSkiLCBqc29uXV07Cit9CisKKy0gKE5TSW50ZWdlciludW1iZXJPZlVwZGF0ZXMgewor
ICAgIHJldHVybiBbW193ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3Ry
aW5nOkAiRWRpdGluZ0hpc3RvcnkuY29udGV4dC51cGRhdGVzKCkubGVuZ3RoIl0gaW50ZWdlclZh
bHVlXTsKK30KKworLSAodm9pZClqdW1wVG9VcGRhdGVJbmRleDooTlNJbnRlZ2VyKWluZGV4Cit7
CisgICAgW193ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOltO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRWRpdGluZ0hpc3RvcnkuY29udGV4dC5qdW1wVG8o
JXR1KSIsIGluZGV4XV07Cit9CisKKy0gKHZvaWQpZXhwZWN0RXZlbnRzOihOU0RpY3Rpb25hcnk8
TlNTdHJpbmcgKiwgTlNOdW1iZXIgKj4gKilleHBlY3RlZEV2ZW50Q291bnRzIGFmdGVyUGVyZm9y
bWluZzooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb24KK3sKKyAgICBfcGVuZGluZ0V2ZW50Q291bnRz
ID0gW2V4cGVjdGVkRXZlbnRDb3VudHMgbXV0YWJsZUNvcHldOworICAgIGRpc3BhdGNoX2FzeW5j
KGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIGFjdGlvbik7CisgICAgd2FpdFVudGlsKENPTkRJ
VElPTl9CTE9DSyhzZWxmLmlzRG9uZVdhaXRpbmdGb3JQZW5kaW5nRXZlbnRzKSk7CisgICAgX3Bl
bmRpbmdFdmVudENvdW50cyA9IG5pbDsKK30KKworLSAodm9pZClsb2FkQ2FwdHVyZVRlc3RIYXJu
ZXNzCit7CisgICAgW3NlbGYgZXhwZWN0RXZlbnRzOkB7IEAiZm9jdXMiIDogQDEgfSBhZnRlclBl
cmZvcm1pbmc6XigpIHsKKyAgICAgICAgW193ZWJWaWV3IGxvYWRQYWdlRnJvbUJ1bmRsZU5hbWVk
OkAiQ2FwdHVyZVRlc3RIYXJuZXNzIl07CisgICAgfV07Cit9CisKKy0gKHZvaWQpc2V0VGV4dE9i
ZnVzY2F0aW9uRW5hYmxlZDooQk9PTCllbmFibGVkCit7CisgICAgW193ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0
OkAiRWRpdGluZ0hpc3RvcnkuT2JmdXNjYXRvci5zaGFyZWQoKS5lbmFibGVkID0gJXMiLCBlbmFi
bGVkID8gInRydWUiIDogImZhbHNlIl1dOworfQorCistIChCT09MKWlzRG9uZVdhaXRpbmdGb3JQ
ZW5kaW5nRXZlbnRzCit7CisgICAgTlNJbnRlZ2VyIG51bWJlck9mUGVuZGluZ0V2ZW50cyA9IDA7
CisgICAgZm9yIChOU051bWJlciAqY291bnQgaW4gX3BlbmRpbmdFdmVudENvdW50cy5hbGxWYWx1
ZXMpCisgICAgICAgIG51bWJlck9mUGVuZGluZ0V2ZW50cyArPSBbY291bnQgaW50ZWdlclZhbHVl
XTsKKyAgICByZXR1cm4gX3BlbmRpbmdFdmVudENvdW50cyAmJiAhbnVtYmVyT2ZQZW5kaW5nRXZl
bnRzOworfQorCistICh2b2lkKXVzZXJDb250ZW50Q29udHJvbGxlcjooV0tVc2VyQ29udGVudENv
bnRyb2xsZXIgKil1c2VyQ29udGVudENvbnRyb2xsZXIgZGlkUmVjZWl2ZVNjcmlwdE1lc3NhZ2U6
KFdLU2NyaXB0TWVzc2FnZSAqKW1lc3NhZ2UKK3sKKyAgICBpZiAoW21lc3NhZ2UubmFtZSBpc0Vx
dWFsVG9TdHJpbmc6QCJldmVudEhhbmRsZXIiXSAmJiBfcGVuZGluZ0V2ZW50Q291bnRzKSB7Cisg
ICAgICAgIE5TU3RyaW5nICpldmVudFR5cGUgPSBtZXNzYWdlLmJvZHk7CisgICAgICAgIF9wZW5k
aW5nRXZlbnRDb3VudHNbZXZlbnRUeXBlXSA9IEAoTUFYKDAsIFtfcGVuZGluZ0V2ZW50Q291bnRz
W2V2ZW50VHlwZV0gaW50ZWdlclZhbHVlXSAtIDEpKTsKKyAgICB9Cit9CisKK0BlbmQKZGlmZiAt
LWdpdCBhL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Rlc3RVdGlsLmggYi9U
b29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9UZXN0VXRpbC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjNkNGMzMTNmZDFmN2QxMWIzMmJlNjc4MWRhNGJiYTQ2Yjg1ZGVmYTQKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9UZXN0VXRpbC5oCkBAIC0w
LDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CisKKy8vIFNvbWUgbmFtZWQga2V5IGNvZGVzLCBtYWlubHkgZm9y
IGNvbnZlbmllbmNlLgorZW51bSBLZXlDb2RlVHlwZSB7CisgICAgS2V5Q29kZVR5cGVEZWxldGVC
YWNrd2FyZCA9IDB4MzMsCisgICAgS2V5Q29kZVR5cGVMZWZ0QXJyb3cgPSAweDdCLAorICAgIEtl
eUNvZGVUeXBlUmlnaHRBcnJvdyA9IDB4N0MKK307CisKKy8qKgorICogUmV0dXJuIFlFUyB3aGVu
IHRoZSBjb25kaXRpb24gaXMgZG9uZSBhbmQgdGhlIHByb2dyYW0gc2hvdWxkIHN0b3Agc3Bpbm5p
bmcuCisgKi8KK3R5cGVkZWYgQk9PTCAoXkNvbmRpdGlvbkJsb2NrKSgpOworI2RlZmluZSBDT05E
SVRJT05fQkxPQ0soZXhwcikgXkJPT0woKSB7IHJldHVybiBleHByOyB9CisKKy8qKgorICogU3Bp
bnMgYSBydW5sb29wIHVudGlsIHRoZSBnaXZlbiBjb25kaXRpb24gYmxvY2sgZXZhbHVhdGVzIHRv
IFlFUy4gSWYgdGhlIGdpdmVuIHRpbWVvdXQgaW50ZXJ2YWwgaGFzIGVsYXBzZWQsIGFuZCB0aGUg
Y29uZGl0aW9uIGlzIHN0aWxsIHVuc2F0aXNmaWVkLAorICogc3RvcCBzcGlubmluZyBhbmQgcmV0
dXJuIE5PLiBPdGhlcndpc2UsIHJldHVybiBZRVMuCisgKi8KK0JPT0wgd2FpdFVudGlsV2l0aFRp
bWVvdXQoQ29uZGl0aW9uQmxvY2ssIE5TVGltZUludGVydmFsKTsKK0JPT0wgd2FpdFVudGlsKENv
bmRpdGlvbkJsb2NrKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdI
aXN0b3J5L1Rlc3RVdGlsLm0gYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9U
ZXN0VXRpbC5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhkOTNlNmQ2OGEzYTViMDA4NGM2N2M3MDIzZDUwZjhjYjY0
YTI1NDQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlz
dG9yeS9UZXN0VXRpbC5tCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIlRlc3RVdGlsLmgiCisKK2NvbnN0IE5TVGltZUludGVydmFsIERl
ZmF1bHRUaW1lb3V0SW50ZXJ2YWwgPSAxMDsKKworQk9PTCB3YWl0VW50aWxXaXRoVGltZW91dChD
b25kaXRpb25CbG9jayBjb25kaXRpb24sIE5TVGltZUludGVydmFsIHRpbWVvdXQpCit7CisgICAg
TlNUaW1lSW50ZXJ2YWwgc3RhcnRUaW1lID0gW05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVy
ZW5jZURhdGVdOworICAgIHdoaWxlIChbW05TUnVuTG9vcCBjdXJyZW50UnVuTG9vcF0gcnVuTW9k
ZTpOU0RlZmF1bHRSdW5Mb29wTW9kZSBiZWZvcmVEYXRlOltOU0RhdGUgZGlzdGFudFBhc3RdXSAm
JiBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV0gLSBzdGFydFRpbWUgPCB0
aW1lb3V0KSB7CisgICAgICAgIGlmIChjb25kaXRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBZ
RVM7CisgICAgfQorICAgIHJldHVybiBOTzsKK30KKworQk9PTCB3YWl0VW50aWwoQ29uZGl0aW9u
QmxvY2sgY29uZGl0aW9uKQoreworICAgIHJldHVybiB3YWl0VW50aWxXaXRoVGltZW91dChjb25k
aXRpb24sIERlZmF1bHRUaW1lb3V0SW50ZXJ2YWwpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRWRp
dGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvV0tXZWJWaWV3QWRkaXRpb25zLmggYi9Ub29scy9F
ZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9XS1dlYlZpZXdBZGRpdGlvbnMuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kZmQzODMzMGRiM2ZhZTJiNDVhNzJiNGY2M2NhNjhlNzdhZmY3N2M1Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvV0tXZWJWaWV3QWRk
aXRpb25zLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktpdC9X
ZWJLaXQuaD4KKworTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KKworQGludGVyZmFjZSBXS1dlYlZp
ZXcgKEVkaXRpbmdIaXN0b3J5VGVzdCkKKworLSAodm9pZClsb2FkUGFnZUZyb21CdW5kbGVOYW1l
ZDooTlNTdHJpbmcgKiluYW1lOworLSAodm9pZCl0eXBlQ2hhcmFjdGVyOihjaGFyKWNoYXJhY3Rl
cjsKKy0gKHZvaWQpa2V5UHJlc3NXaXRoQ2hhcmFjdGVyczoobnVsbGFibGUgTlNTdHJpbmcgKilj
aGFyYWN0ZXJzIGtleUNvZGU6KGNoYXIpa2V5Q29kZTsKKy0gKG51bGxhYmxlIE5TU3RyaW5nICop
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6KE5TU3RyaW5nICopc2NyaXB0
OworCitAZW5kCisKK05TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEvVG9vbHMvRWRp
dGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvV0tXZWJWaWV3QWRkaXRpb25zLm0gYi9Ub29scy9F
ZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9XS1dlYlZpZXdBZGRpdGlvbnMubQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40OTc5MzBkY2RkNmMxMmQ5N2QwOTcxYWEzZjkxMjVkMDU2MDgxODVjCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvV0tXZWJWaWV3QWRk
aXRpb25zLm0KQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiV0tXZWJWaWV3QWRkaXRpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RVdGlsLmgi
CisKKyNpbXBvcnQgPENhcmJvbi9DYXJib24uaD4KKworQGltcGxlbWVudGF0aW9uIFdLV2ViVmll
dyAoRWRpdGluZ0hpc3RvcnlUZXN0KQorCistICh2b2lkKWxvYWRQYWdlRnJvbUJ1bmRsZU5hbWVk
OihOU1N0cmluZyAqKW5hbWUKK3sKKyAgICBOU1VSTCAqcGF0aFRvUGFnZSA9IFtbTlNCdW5kbGUg
bWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6bmFtZSB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3Vi
ZGlyZWN0b3J5Om5pbF07CisgICAgW3NlbGYgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1
ZXN0V2l0aFVSTDpwYXRoVG9QYWdlXV07Cit9CisKKy0gKHZvaWQpdHlwZUNoYXJhY3RlcjooY2hh
ciljaGFyYWN0ZXIKK3sKKyAgICBbc2VsZiBrZXlQcmVzc1dpdGhDaGFyYWN0ZXJzOltOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWMiLCBjaGFyYWN0ZXJdIGtleUNvZGU6Y2hhcmFjdGVyXTsK
K30KKworLSAodm9pZClrZXlQcmVzc1dpdGhDaGFyYWN0ZXJzOihudWxsYWJsZSBOU1N0cmluZyAq
KWNoYXJhY3RlcnMga2V5Q29kZTooY2hhcilrZXlDb2RlCit7CisgICAgTlNFdmVudFR5cGUga2V5
RG93bkV2ZW50VHlwZSA9IE5TRXZlbnRUeXBlS2V5RG93bjsKKyAgICBOU0V2ZW50VHlwZSBrZXlV
cEV2ZW50VHlwZSA9IE5TRXZlbnRUeXBlS2V5VXA7CisgICAgW3NlbGYga2V5RG93bjpbTlNFdmVu
dCBrZXlFdmVudFdpdGhUeXBlOmtleURvd25FdmVudFR5cGUgbG9jYXRpb246TlNaZXJvUG9pbnQg
bW9kaWZpZXJGbGFnczowIHRpbWVzdGFtcDpHZXRDdXJyZW50RXZlbnRUaW1lKCkgd2luZG93TnVt
YmVyOnNlbGYud2luZG93LndpbmRvd051bWJlciBjb250ZXh0Om5pbCBjaGFyYWN0ZXJzOmNoYXJh
Y3RlcnMgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzOmNoYXJhY3RlcnMgaXNBUmVwZWF0Ok5P
IGtleUNvZGU6a2V5Q29kZV1dOworICAgIFtzZWxmIGtleVVwOltOU0V2ZW50IGtleUV2ZW50V2l0
aFR5cGU6a2V5VXBFdmVudFR5cGUgbG9jYXRpb246TlNaZXJvUG9pbnQgbW9kaWZpZXJGbGFnczow
IHRpbWVzdGFtcDpHZXRDdXJyZW50RXZlbnRUaW1lKCkgd2luZG93TnVtYmVyOnNlbGYud2luZG93
LndpbmRvd051bWJlciBjb250ZXh0Om5pbCBjaGFyYWN0ZXJzOmNoYXJhY3RlcnMgY2hhcmFjdGVy
c0lnbm9yaW5nTW9kaWZpZXJzOmNoYXJhY3RlcnMgaXNBUmVwZWF0Ok5PIGtleUNvZGU6a2V5Q29k
ZV1dOworfQorCistIChudWxsYWJsZSBOU1N0cmluZyAqKXN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHRGcm9tU3RyaW5nOihOU1N0cmluZyAqKXNjcmlwdAoreworICAgIF9fYmxvY2sgYm9vbCBk
b25lRXZhbHVhdGluZ0phdmFTY3JpcHQgPSBmYWxzZTsKKyAgICBfX2Jsb2NrIE5TU3RyaW5nICpy
ZXR1cm5SZXN1bHQgPSBuaWw7CisgICAgW3NlbGYgZXZhbHVhdGVKYXZhU2NyaXB0OnNjcmlwdCBj
b21wbGV0aW9uSGFuZGxlcjpeKGlkIHJldHVyblZhbHVlLCBOU0Vycm9yICplcnJvcikgeworICAg
ICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICBOU0xvZyhAIkVycm9yIGV2YWx1YXRpbmcgSmF2
YVNjcmlwdDogJUAiLCBlcnJvcik7CisKKyAgICAgICAgcmV0dXJuUmVzdWx0ID0gZXJyb3IgfHwg
IXJldHVyblZhbHVlID8gbmlsIDogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCIsIHJl
dHVyblZhbHVlXTsKKyAgICAgICAgZG9uZUV2YWx1YXRpbmdKYXZhU2NyaXB0ID0gdHJ1ZTsKKyAg
ICB9XTsKKyAgICB3YWl0VW50aWwoQ09ORElUSU9OX0JMT0NLKGRvbmVFdmFsdWF0aW5nSmF2YVNj
cmlwdCkpOworICAgIHJldHVybiByZXR1cm5SZXN1bHQ7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBh
L1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L21haW4ubSBiL1Rvb2xzL0VkaXRp
bmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L21haW4ubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MjgzYTk1NmUzZjFm
YzZjMGI5YWE1NGQ3ZWY5ZmJiYjYzZjY5MDhmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRWRp
dGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvbWFpbi5tCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0IDxDb2NvYS9Db2NvYS5oPgorCitpbnQgbWFpbihpbnQgYXJnYywgY29u
c3QgY2hhciAqIGFyZ3ZbXSkKK3sKKyAgICByZXR1cm4gTlNBcHBsaWNhdGlvbk1haW4oYXJnYywg
YXJndik7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9y
eVRlc3RzL0luZm8ucGxpc3QgYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeVRl
c3RzL0luZm8ucGxpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmM2YzIzYzQzYWRjODg2MjFjZTNhYmZiZDE1ODVj
ODc5MmJkMTY1YwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRp
bmdIaXN0b3J5VGVzdHMvSW5mby5wbGlzdApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9u
PSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBw
bGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0
eUxpc3QtMS4wLmR0ZCI+Cis8cGxpc3QgdmVyc2lvbj0iMS4wIj4KKzxkaWN0PgorCTxrZXk+Q0ZC
dW5kbGVEZXZlbG9wbWVudFJlZ2lvbjwva2V5PgorCTxzdHJpbmc+ZW48L3N0cmluZz4KKwk8a2V5
PkNGQnVuZGxlRXhlY3V0YWJsZTwva2V5PgorCTxzdHJpbmc+JChFWEVDVVRBQkxFX05BTUUpPC9z
dHJpbmc+CisJPGtleT5DRkJ1bmRsZUlkZW50aWZpZXI8L2tleT4KKwk8c3RyaW5nPiQoUFJPRFVD
VF9CVU5ETEVfSURFTlRJRklFUik8L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlSW5mb0RpY3Rpb25h
cnlWZXJzaW9uPC9rZXk+CisJPHN0cmluZz42LjA8L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlTmFt
ZTwva2V5PgorCTxzdHJpbmc+JChQUk9EVUNUX05BTUUpPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRs
ZVBhY2thZ2VUeXBlPC9rZXk+CisJPHN0cmluZz5CTkRMPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRs
ZVNob3J0VmVyc2lvblN0cmluZzwva2V5PgorCTxzdHJpbmc+MS4wPC9zdHJpbmc+CisJPGtleT5D
RkJ1bmRsZVZlcnNpb248L2tleT4KKwk8c3RyaW5nPjE8L3N0cmluZz4KKzwvZGljdD4KKzwvcGxp
c3Q+CmRpZmYgLS1naXQgYS9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeVRlc3Rz
L1Jld2luZEFuZFBsYXliYWNrVGVzdHMubSBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdI
aXN0b3J5VGVzdHMvUmV3aW5kQW5kUGxheWJhY2tUZXN0cy5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJjYmY0OGE3
ZjZjMWJlMjk5ZmYyYmM2MTkzMjlhMWUxYTQyZDBkZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeVRlc3RzL1Jld2luZEFuZFBsYXliYWNrVGVz
dHMubQpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIlRlc3RSdW5uZXIu
aCIKKyNpbXBvcnQgIlRlc3RVdGlsLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdBZGRpdGlvbnMuaCIK
KyNpbXBvcnQgPFhDVGVzdC9YQ1Rlc3QuaD4KKworQGludGVyZmFjZSBSZXdpbmRBbmRQbGF5YmFj
a1Rlc3RzIDogWENUZXN0Q2FzZQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBSZXdpbmRBbmRQ
bGF5YmFja1Rlc3RzIHsKKyAgICBUZXN0UnVubmVyICp0ZXN0UnVubmVyOworfQorCistICh2b2lk
KXNldFVwCit7CisgICAgdGVzdFJ1bm5lciA9IFtbVGVzdFJ1bm5lciBhbGxvY10gaW5pdF07Cisg
ICAgW3Rlc3RSdW5uZXIgbG9hZENhcHR1cmVUZXN0SGFybmVzc107CisgICAgW3Rlc3RSdW5uZXIg
c2V0VGV4dE9iZnVzY2F0aW9uRW5hYmxlZDpOT107Cit9CisKKy0gKHZvaWQpdGVhckRvd24KK3sK
KyAgICB0ZXN0UnVubmVyID0gbmlsOworfQorCistICh2b2lkKXRlc3RUeXBpbmdTaW5nbGVMaW5l
T2ZUZXh0Cit7CisgICAgW3Rlc3RSdW5uZXIgdHlwZVN0cmluZzpAImhlbGxvIHdvcmxkIl07Cisg
ICAgTlNTdHJpbmcgKm9yaWdpbmFsU3VidHJlZSA9IHRlc3RSdW5uZXIuYm9keUVsZW1lbnRTdWJ0
cmVlOworCisgICAgW3NlbGYgcmV3aW5kQW5kUGxheWJhY2tFZGl0aW5nSW5QbGF5YmFja1Rlc3RI
YXJuZXNzXTsKKyAgICBYQ1RBc3NlcnRUcnVlKFtzZWxmIG9yaWdpbmFsQm9keVN1YnRyZWU6b3Jp
Z2luYWxTdWJ0cmVlIGlzRXF1YWxUb0ZpbmFsU3VidHJlZTp0ZXN0UnVubmVyLmJvZHlFbGVtZW50
U3VidHJlZV0pOworICAgIFhDVEFzc2VydEVxdWFsT2JqZWN0cyh0ZXN0UnVubmVyLmJvZHlUZXh0
Q29udGVudCwgQCJoZWxsbyB3b3JsZCIpOworfQorCistICh2b2lkKXRlc3RUeXBpbmdNdWx0aXBs
ZUxpbmVzT2ZUZXh0Cit7CisgICAgW3Rlc3RSdW5uZXIgdHlwZVN0cmluZzpAImZvbyJdOworICAg
IFt0ZXN0UnVubmVyIHR5cGVTdHJpbmc6QCJcbiJdOworICAgIFt0ZXN0UnVubmVyIHR5cGVTdHJp
bmc6QCJiYXIiXTsKKyAgICBOU1N0cmluZyAqb3JpZ2luYWxTdWJ0cmVlID0gdGVzdFJ1bm5lci5i
b2R5RWxlbWVudFN1YnRyZWU7CisKKyAgICBbc2VsZiByZXdpbmRBbmRQbGF5YmFja0VkaXRpbmdJ
blBsYXliYWNrVGVzdEhhcm5lc3NdOworICAgIFhDVEFzc2VydFRydWUoW3NlbGYgb3JpZ2luYWxC
b2R5U3VidHJlZTpvcmlnaW5hbFN1YnRyZWUgaXNFcXVhbFRvRmluYWxTdWJ0cmVlOnRlc3RSdW5u
ZXIuYm9keUVsZW1lbnRTdWJ0cmVlXSk7CisgICAgWENUQXNzZXJ0RXF1YWxPYmplY3RzKHRlc3RS
dW5uZXIuYm9keVRleHRDb250ZW50LCBAImZvb2JhciIpOworfQorCistICh2b2lkKXRlc3RUeXBp
bmdBbmREZWxldGluZ1RleHQKK3sKKyAgICBbdGVzdFJ1bm5lciB0eXBlU3RyaW5nOkAiYXBwbGUi
XTsKKyAgICBbdGVzdFJ1bm5lciBkZWxldGVCYWNrd2FyZHM6M107CisKKyAgICBOU1N0cmluZyAq
b3JpZ2luYWxTdWJ0cmVlID0gdGVzdFJ1bm5lci5ib2R5RWxlbWVudFN1YnRyZWU7CisKKyAgICBb
c2VsZiByZXdpbmRBbmRQbGF5YmFja0VkaXRpbmdJblBsYXliYWNrVGVzdEhhcm5lc3NdOworICAg
IFhDVEFzc2VydFRydWUoW3NlbGYgb3JpZ2luYWxCb2R5U3VidHJlZTpvcmlnaW5hbFN1YnRyZWUg
aXNFcXVhbFRvRmluYWxTdWJ0cmVlOnRlc3RSdW5uZXIuYm9keUVsZW1lbnRTdWJ0cmVlXSk7Cisg
ICAgWENUQXNzZXJ0RXF1YWxPYmplY3RzKHRlc3RSdW5uZXIuYm9keVRleHRDb250ZW50LCBAImFw
Iik7Cit9CisKKy0gKHZvaWQpcmV3aW5kQW5kUGxheWJhY2tFZGl0aW5nSW5QbGF5YmFja1Rlc3RI
YXJuZXNzCit7CisgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3QgcnVubmVyIGhhcyBs
b2FkZWQgdGhlIGNhcHR1cmUgdGVzdCBoYXJuZXNzLgorICAgIFt0ZXN0UnVubmVyIGxvYWRQbGF5
YmFja1Rlc3RIYXJuZXNzV2l0aEpTT046dGVzdFJ1bm5lci5lZGl0aW5nSGlzdG9yeUpTT05dOwor
CisgICAgLy8gUmV3aW5kIHRvIHRoZSB2ZXJ5IGJlZ2lubmluZywgdGhlbiBwbGF5IGJhY2sgYWxs
IGVkaXRpbmcgYWdhaW4uCisgICAgW3Rlc3RSdW5uZXIganVtcFRvVXBkYXRlSW5kZXg6MF07Cisg
ICAgW3Rlc3RSdW5uZXIganVtcFRvVXBkYXRlSW5kZXg6dGVzdFJ1bm5lci5udW1iZXJPZlVwZGF0
ZXNdOworfQorCistIChCT09MKW9yaWdpbmFsQm9keVN1YnRyZWU6KE5TU3RyaW5nICopb3JpZ2lu
YWxTdWJ0cmVlIGlzRXF1YWxUb0ZpbmFsU3VidHJlZTooTlNTdHJpbmcgKilmaW5hbFN1YnRyZWUK
K3sKKyAgICBpZiAoW29yaWdpbmFsU3VidHJlZSBpc0VxdWFsVG9TdHJpbmc6ZmluYWxTdWJ0cmVl
XSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKworICAgIE5TTG9nKEAiPj4+Pj4+PiIpOworICAgIE5T
TG9nKEAiVGhlIG9yaWdpbmFsIHN1YnRyZWUgaXM6XG4lQCIsIG9yaWdpbmFsU3VidHJlZSk7Cisg
ICAgTlNMb2coQCI9PT09PT09Iik7CisgICAgTlNMb2coQCJUaGUgZmluYWwgc3VidHJlZSBpczpc
biVAIiwgZmluYWxTdWJ0cmVlKTsKKyAgICBOU0xvZyhAIjw8PDw8PDwiKTsKKworICAgIHJldHVy
biBOTzsKK30KKworQGVuZAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295662</attachid>
            <date>2016-11-29 16:07:49 -0800</date>
            <delta_ts>2016-12-02 17:04:03 -0800</delta_ts>
            <desc>Added highlight-able nodes in the playback harness.</desc>
            <filename>bug-165114-20161129160724.patch</filename>
            <type>text/plain</type>
            <size>103232</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA5MDg4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTkwZmUzMDc3MDA3NTYxMWUyM2RmODY2OWQwZTMzZGQ0
ZjZlYzFlNS4uYjliMzg0MWQ2ZjNkOWI4NzFlNWQ2YzAwMTU3ZGFiNzVjN2NjNTEwNiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4
OSBAQAorMjAxNi0xMS0yOSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4K
KworICAgICAgICBBZGQgYSBuZXcgcHJvamVjdCBmb3IgcmVjb3JkaW5nIGFuZCBwbGF5aW5nIGJh
Y2sgZWRpdGluZyBjb21tYW5kcyBpbiBlZGl0YWJsZSB3ZWIgY29udGVudAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MTE0CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8yOTQwODEzNT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRzIGEgbmV3IFhjb2RlIHByb2plY3QgY29udGFpbmluZyB3b3JrIHRv
d2FyZHMgcmV3aW5kaW5nIGFuZCBwbGF5aW5nIGJhY2sgZWRpdGluZyBjb21tYW5kcy4gVGhpcyB3
b3JrIGlzCisgICAgICAgIHdyYXBwZWQgaW4gYW4gWGNvZGUgcHJvamVjdCB0byB0YWtlIGFkdmFu
dGFnZSBvZiB0aGUgWENUZXN0IGZyYW1ld29yay4gVG8gbWFudWFsbHkgdGVzdCByZWNvcmRpbmcs
IG9wZW4gdGhlCisgICAgICAgIGNhcHR1cmUgdGVzdCBoYXJuZXNzLCBlZGl0IHRoZSBjb250ZW50
ZWRpdGFibGUgYm9keSwgYW5kIHRoZW4gaGl0IGNtZC1TLiBUaGlzIGRvd25sb2FkcyBhIC5qc29u
IGZpbGUgd2hpY2ggbWF5CisgICAgICAgIHRoZW4gYmUgZHJhZ2dlZCBpbnRvIHRoZSBwbGF5YmFj
ayB0ZXN0IGhhcm5lc3MuCisKKyAgICAgICAgQWxzbyBhZGRzIDMgbmV3IHVuaXQgdGVzdHMgaW4g
RWRpdGluZ0hpc3RvcnlUZXN0cy9SZXdpbmRBbmRQbGF5YmFja1Rlc3RzLm0uIFRoZXNlIHRlc3Rz
IGNhcnJ5IG91dCB0aGUgZm9sbG93aW5nCisgICAgICAgIHN0ZXBzOgorCisgICAgICAgIDEuIExv
YWQgdGhlIGNhcHR1cmUgaGFybmVzcyBhbmQgcGVyZm9ybSB0ZXN0LXNwZWNpZmljIGVkaXRpbmcg
b24gdGhlIHdlYiB2aWV3LgorICAgICAgICAyLiBMZXQgb3JpZ2luYWxTdGF0ZSBiZSBhIGR1bXAg
b2YgdGhlIERPTSBhdCB0aGlzIHBvaW50IGluIHRpbWUuCisgICAgICAgIDMuIEV4dHJhY3QgdGhl
IEpTT04tc2VyaWFsaXplZCBlZGl0aW5nIGhpc3RvcnkgZGF0YSBhbmQgbG9hZCB0aGUgcGxheWJh
Y2sgaGFybmVzcyB3aXRoIHRoaXMgZGF0YS4KKyAgICAgICAgNC4gUmV3aW5kIGFsbCBlZGl0aW5n
IHRvIHRoZSBiZWdpbm5pbmcuCisgICAgICAgIDUuIFBsYXliYWNrIGFsbCBlZGl0aW5nIHRvIHRo
ZSBlbmQuCisgICAgICAgIDYuIER1bXAgdGhlIHN0YXRlIG9mIHRoZSBET00uIFRoaXMgc2hvdWxk
IGJlIGlkZW50aWNhbCB0byBvcmlnaW5hbFN0YXRlLgorCisgICAgICAgICogRWRpdGluZ0hpc3Rv
cnkvRWRpdGluZ0hpc3RvcnkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkZWQuCisgICAg
ICAgICogRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvSW5mby5wbGlzdDogQWRkZWQuCisg
ICAgICAgICogRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvUmVzb3VyY2VzL0NhcHR1cmVI
YXJuZXNzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIEVkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0
b3J5L1Jlc291cmNlcy9ET01UZXN0aW5nVXRpbC5qczogQWRkZWQuCisgICAgICAgICogRWRpdGlu
Z0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvUmVzb3VyY2VzL0R1bXBFZGl0aW5nSGlzdG9yeS5qczog
QWRkZWQuCisgICAgICAgIChiZWdpblByb2Nlc3NpbmdUb3BMZXZlbFVwZGF0ZSk6CisgICAgICAg
IChlbmRQcm9jZXNzaW5nVG9wTGV2ZWxVcGRhdGUpOgorICAgICAgICAoYXBwZW5kRE9NVXBkYXRl
c0Zyb21SZWNvcmRzKToKKyAgICAgICAgKGFwcGVuZFNlbGVjdGlvblVwZGF0ZUlmTmVjZXNzYXJ5
KToKKworICAgICAgICBBZGRzIG5ldyBlbnRyaWVzIGludG8gdGhlIHRvcC1sZXZlbCBsaXN0IG9m
IERPTSB1cGRhdGVzIGNhcHR1cmVkIHdoZW4gZWRpdGluZy4gUmVzcGVjdGl2ZWx5LCB0aGVzZSBh
cmUgaW5wdXQKKyAgICAgICAgZXZlbnRzIGFuZCBzZWxlY3Rpb24gY2hhbmdlcy4KKworICAgICAg
ICAoRWRpdGluZ0hpc3RvcnkuZ2V0RWRpdGluZ0hpc3RvcnlBc0pTT05TdHJpbmcpOgorICAgICAg
ICAqIEVkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Jlc291cmNlcy9FZGl0aW5nSGlzdG9y
eVV0aWwuanM6IEFkZGVkLgorICAgICAgICAocHJvdG90eXBlLl9zY3JhbWJsZSk6CisgICAgICAg
IChwcm90b3R5cGUuYXBwbHlUb1RleHQpOgorICAgICAgICAocHJvdG90eXBlLmFwcGx5VG9GaWxl
bmFtZSk6CisgICAgICAgIChwcm90b3R5cGUuX3NjcmFtYmVkTnVtYmVySW5kZXhGb3JDb2RlKToK
KyAgICAgICAgKHByb3RvdHlwZS5fc2NyYW1iZWRMb3dlcmNhc2VJbmRleEZvckNvZGUpOgorICAg
ICAgICAocHJvdG90eXBlLl9zY3JhbWJlZFVwcGVyY2FzZUluZGV4Rm9yQ29kZSk6CisKKyAgICAg
ICAgTmFpdmUgaW1wbGVtZW50YXRpb24gb2YgYW4gb2JmdXNjYXRvci4gQ3VycmVudGx5LCB0aGlz
IG9ubHkgYWZmZWN0cyBhbHBoYW51bWVyaWMgY2hhcmFjdGVycy4KKworICAgICAgICAoZWxlbWVu
dEZyb21NYXJrZG93bik6CisgICAgICAgIChHbG9iYWxOb2RlTWFwKToKKyAgICAgICAgKEdsb2Jh
bE5vZGVNYXAucHJvdG90eXBlLm5vZGVzRm9yR1VJRHMpOgorICAgICAgICAoR2xvYmFsTm9kZU1h
cC5wcm90b3R5cGUuZ3VpZHNGb3JOb2Rlcyk6CisgICAgICAgIChHbG9iYWxOb2RlTWFwLnByb3Rv
dHlwZS5ub2RlRm9yR1VJRCk6CisgICAgICAgIChHbG9iYWxOb2RlTWFwLnByb3RvdHlwZS5ndWlk
Rm9yTm9kZSk6CisgICAgICAgIChHbG9iYWxOb2RlTWFwLnByb3RvdHlwZS5oYXNHVUlERm9yTm9k
ZSk6CisgICAgICAgIChHbG9iYWxOb2RlTWFwLnByb3RvdHlwZS5ub2Rlcyk6CisgICAgICAgIChH
bG9iYWxOb2RlTWFwLnByb3RvdHlwZS50b09iamVjdCk6CisgICAgICAgIChHbG9iYWxOb2RlTWFw
LmZyb21PYmplY3QpOgorICAgICAgICAoR2xvYmFsTm9kZU1hcC5kYXRhRm9yTm9kZSk6CisgICAg
ICAgIChHbG9iYWxOb2RlTWFwLmVsZW1lbnRGcm9tVGFnTmFtZSk6CisgICAgICAgIChHbG9iYWxO
b2RlTWFwLm5vZGVBdHRyaWJ1dGVzVG9PYmplY3QpOgorCisgICAgICAgIChHbG9iYWxOb2RlTWFw
LnByb3RvdHlwZS5kZXNjcmlwdGlvbkhUTUxGb3JHVUlEKToKKyAgICAgICAgKEdsb2JhbE5vZGVN
YXAucHJvdG90eXBlLmRlc2NyaXB0aW9uSFRNTEZvck5vZGUpOgorCisgICAgICAgIFRoZSBHbG9i
YWxOb2RlTWFwIGtlZXBzIHRyYWNrIG9mIGV2ZXJ5IG5vZGUgdGhhdCBoYXMgYXBwZWFyZWQgaW4g
dGhlIERPTSwgYXNzaWduaW5nIGVhY2ggbm9kZSBhIGdsb2JhbGx5IHVuaXF1ZQorICAgICAgICBp
ZGVudGlmaWVyIChHVUlEKS4gVGhpcyBHVUlEIGlzIHVzZWQgd2hlbiByZWNvbnN0cnVjdGluZyB0
aGUgRE9NLCBhcyB3ZWxsIGFzIHVuYXBwbHlpbmcgb3IgYXBwbHlpbmcgZWRpdGluZy4KKworICAg
ICAgICAoU2VsZWN0aW9uU3RhdGUpOgorICAgICAgICAoU2VsZWN0aW9uU3RhdGUucHJvdG90eXBl
LmlzRXF1YWwpOgorICAgICAgICAoU2VsZWN0aW9uU3RhdGUucHJvdG90eXBlLmFwcGx5VG9TZWxl
Y3Rpb24pOgorICAgICAgICAoU2VsZWN0aW9uU3RhdGUuZnJvbVNlbGVjdGlvbik6CisgICAgICAg
IChTZWxlY3Rpb25TdGF0ZS5wcm90b3R5cGUudG9PYmplY3QpOgorICAgICAgICAoU2VsZWN0aW9u
U3RhdGUuZnJvbU9iamVjdCk6CisKKyAgICAgICAgUmVwcmVzZW50cyBhIHNuYXBzaG90IG9mIHRo
ZSBTZWxlY3Rpb24gc3RhdGUgKGRldGVybWluZWQgYnkgZ2V0U2VsZWN0aW9uKCkpLgorCisgICAg
ICAgIChET01VcGRhdGUpOgorICAgICAgICAoRE9NVXBkYXRlLnByb3RvdHlwZS5hcHBseSk6Cisg
ICAgICAgIChET01VcGRhdGUucHJvdG90eXBlLnVuYXBwbHkpOgorICAgICAgICAoRE9NVXBkYXRl
LnByb3RvdHlwZS50YXJnZXROb2RlKToKKyAgICAgICAgKERPTVVwZGF0ZS5wcm90b3R5cGUuZGV0
YWlsc0VsZW1lbnQpOgorICAgICAgICAoRE9NVXBkYXRlLm9mVHlwZSk6CisgICAgICAgIChET01V
cGRhdGUuZnJvbVJlY29yZHMpOgorCisgICAgICAgIEEgRE9NVXBkYXRlIGlzIGFuIGFic3RyYWN0
IG9iamVjdCByZXByZXNlbnRpbmcgYSBjaGFuZ2UgaW4gdGhlIERPTSB0aGF0IG1heSBiZSBhcHBs
aWVkIGFuZCB1bmFwcGxpZWQuIFRoZXNlIGFyZQorICAgICAgICBhbHNvIHNlcmlhbGl6YWJsZSBh
cyBoYXNoZXMsIHdoaWNoIG1heSB0aGVuIGJlIGNvbnZlcnRlZCB0byBKU09OIHdoZW4gZ2VuZXJh
dGluZyBlZGl0aW5nIGhpc3RvcnkgZGF0YS4KKworICAgICAgICAoQ2hpbGRMaXN0VXBkYXRlKToK
KyAgICAgICAgKENoaWxkTGlzdFVwZGF0ZS5wcm90b3R5cGUuYXBwbHkpOgorICAgICAgICAoQ2hp
bGRMaXN0VXBkYXRlLnByb3RvdHlwZS51bmFwcGx5KToKKyAgICAgICAgKENoaWxkTGlzdFVwZGF0
ZS5wcm90b3R5cGUuX25leHRTaWJsaW5nKToKKyAgICAgICAgKENoaWxkTGlzdFVwZGF0ZS5wcm90
b3R5cGUuX3JlbW92ZWROb2Rlcyk6CisgICAgICAgIChDaGlsZExpc3RVcGRhdGUucHJvdG90eXBl
Ll9hZGRlZE5vZGVzKToKKyAgICAgICAgKENoaWxkTGlzdFVwZGF0ZS5wcm90b3R5cGUudG9PYmpl
Y3QpOgorICAgICAgICAoQ2hpbGRMaXN0VXBkYXRlLnByb3RvdHlwZS5kZXRhaWxzRWxlbWVudCk6
CisgICAgICAgIChDaGlsZExpc3RVcGRhdGUuZnJvbU9iamVjdCk6CisKKyAgICAgICAgVGhlc2Ug
dGhyZWUgdXBkYXRlIHR5cGVzIGNvcnJlc3BvbmQgdG8gdGhlIHRocmVlIHR5cGVzIG9mIERPTSBt
dXRhdGlvbnMuIFRoZXNlIG1heSBhcHBlYXIgYXMgdG9wLWxldmVsIHVwZGF0ZXMKKyAgICAgICAg
aWYgdGhleSBhcmUgbm90IGNhcHR1cmVkIGR1cmluZyBhbiBpbnB1dCBldmVudCwgYnV0IGZvciB0
aGUgbWFqb3JpdHkgb2YgdXNlci1pbnB1dC1kcml2ZW4gY2hhbmdlcywgdGhleSB3aWxsIGJlCisg
ICAgICAgIGNoaWxkcmVuIG9mIGFuIGlucHV0IGV2ZW50LgorCisgICAgICAgIChDaGFyYWN0ZXJE
YXRhVXBkYXRlKToKKyAgICAgICAgKENoYXJhY3RlckRhdGFVcGRhdGUucHJvdG90eXBlLmFwcGx5
KToKKyAgICAgICAgKENoYXJhY3RlckRhdGFVcGRhdGUucHJvdG90eXBlLnVuYXBwbHkpOgorICAg
ICAgICAoQ2hhcmFjdGVyRGF0YVVwZGF0ZS5wcm90b3R5cGUuZGV0YWlsc0VsZW1lbnQpOgorICAg
ICAgICAoQ2hhcmFjdGVyRGF0YVVwZGF0ZS5wcm90b3R5cGUudG9PYmplY3QpOgorICAgICAgICAo
Q2hhcmFjdGVyRGF0YVVwZGF0ZS5mcm9tT2JqZWN0KToKKyAgICAgICAgKEF0dHJpYnV0ZVVwZGF0
ZSk6CisgICAgICAgIChBdHRyaWJ1dGVVcGRhdGUucHJvdG90eXBlLmFwcGx5KToKKyAgICAgICAg
KEF0dHJpYnV0ZVVwZGF0ZS5wcm90b3R5cGUudW5hcHBseSk6CisgICAgICAgIChBdHRyaWJ1dGVV
cGRhdGUucHJvdG90eXBlLmRldGFpbHNFbGVtZW50KToKKyAgICAgICAgKEF0dHJpYnV0ZVVwZGF0
ZS5wcm90b3R5cGUudG9PYmplY3QpOgorICAgICAgICAoQXR0cmlidXRlVXBkYXRlLmZyb21PYmpl
Y3QpOgorICAgICAgICAoU2VsZWN0aW9uVXBkYXRlKToKKyAgICAgICAgKFNlbGVjdGlvblVwZGF0
ZS5wcm90b3R5cGUuYXBwbHkpOgorICAgICAgICAoU2VsZWN0aW9uVXBkYXRlLnByb3RvdHlwZS51
bmFwcGx5KToKKyAgICAgICAgKFNlbGVjdGlvblVwZGF0ZS5wcm90b3R5cGUudG9PYmplY3QpOgor
ICAgICAgICAoU2VsZWN0aW9uVXBkYXRlLmZyb21PYmplY3QpOgorICAgICAgICAoU2VsZWN0aW9u
VXBkYXRlLnByb3RvdHlwZS5fcmFuZ2VEZXNjcmlwdGlvbkhUTUwpOgorICAgICAgICAoU2VsZWN0
aW9uVXBkYXRlLnByb3RvdHlwZS5fYW5jaG9yRGVzY3JpcHRpb25IVE1MKToKKyAgICAgICAgKFNl
bGVjdGlvblVwZGF0ZS5wcm90b3R5cGUuX2ZvY3VzRGVzY3JpcHRpb25IVE1MKToKKyAgICAgICAg
KFNlbGVjdGlvblVwZGF0ZS5wcm90b3R5cGUuZGV0YWlsc0VsZW1lbnQpOgorCisgICAgICAgIFJl
cHJlc2VudHMgYSBjaGFuZ2UgaW4gdGhlIFNlbGVjdGlvbi4gV2hpbGUgbm8gY2hhbmdlcyB0byB0
aGUgRE9NIHN0cnVjdHVyZSBvY2N1ciBhcyBhIHJlc3VsdCBvZiBhCisgICAgICAgIFNlbGVjdGlv
blVwZGF0ZSwgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGVzZSB1cGRhdGVzIGlzIHVz
ZWQgdG8gZGV0ZXJtaW5lIHdoZXJlIHRoZSBzZWxlY3Rpb24gc2hvdWxkIGJlCisgICAgICAgIHdo
ZW4gcmV3aW5kaW5nIG9yIHBsYXlpbmcgYmFjayB0aGUgZWRpdGluZyBoaXN0b3J5LgorCisgICAg
ICAgIChJbnB1dEV2ZW50VXBkYXRlKToKKyAgICAgICAgKElucHV0RXZlbnRVcGRhdGUucHJvdG90
eXBlLl9vYmZ1c2NhdGVkRGF0YSk6CisgICAgICAgIChJbnB1dEV2ZW50VXBkYXRlLnByb3RvdHlw
ZS5hcHBseSk6CisgICAgICAgIChJbnB1dEV2ZW50VXBkYXRlLnByb3RvdHlwZS51bmFwcGx5KToK
KyAgICAgICAgKElucHV0RXZlbnRVcGRhdGUucHJvdG90eXBlLnRvT2JqZWN0KToKKyAgICAgICAg
KElucHV0RXZlbnRVcGRhdGUuZnJvbU9iamVjdCk6CisgICAgICAgIChJbnB1dEV2ZW50VXBkYXRl
LnByb3RvdHlwZS5kZXRhaWxzRWxlbWVudCk6CisKKyAgICAgICAgUmVwcmVzZW50cyBhbiB1cGRh
dGUgZHVlIHRvIHVzZXIgaW5wdXQsIHdoaWNoIGNvbnNpc3RzIG9mIHNvbWUgbnVtYmVyIG9mIGNo
aWxkIERPTSBtdXRhdGlvbiB1cGRhdGVzLgorCisgICAgICAgICogRWRpdGluZ0hpc3RvcnkvRWRp
dGluZ0hpc3RvcnkvUmVzb3VyY2VzL1BsYXliYWNrSGFybmVzcy5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBFZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9UZXN0UnVubmVyLmg6IEFkZGVkLgor
ICAgICAgICAqIEVkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Rlc3RSdW5uZXIubTogQWRk
ZWQuCisgICAgICAgIChpbmplY3RlZE1lc3NhZ2VFdmVudEhhbmRsZXJTY3JpcHQpOgorICAgICAg
ICAoLVtUZXN0UnVubmVyIGluaXRdKToKKyAgICAgICAgKC1bVGVzdFJ1bm5lciBkZWxldGVCYWNr
d2FyZHM6XSk6CisgICAgICAgICgtW1Rlc3RSdW5uZXIgdHlwZVN0cmluZzpdKToKKyAgICAgICAg
KC1bVGVzdFJ1bm5lciBib2R5RWxlbWVudFN1YnRyZWVdKToKKyAgICAgICAgKC1bVGVzdFJ1bm5l
ciBib2R5VGV4dENvbnRlbnRdKToKKyAgICAgICAgKC1bVGVzdFJ1bm5lciBlZGl0aW5nSGlzdG9y
eUpTT05dKToKKyAgICAgICAgKC1bVGVzdFJ1bm5lciBsb2FkUGxheWJhY2tUZXN0SGFybmVzc1dp
dGhKU09OOl0pOgorICAgICAgICAoLVtUZXN0UnVubmVyIG51bWJlck9mVXBkYXRlc10pOgorICAg
ICAgICAoLVtUZXN0UnVubmVyIGp1bXBUb1VwZGF0ZUluZGV4Ol0pOgorICAgICAgICAoLVtUZXN0
UnVubmVyIGV4cGVjdEV2ZW50czphZnRlclBlcmZvcm1pbmc6XSk6CisgICAgICAgICgtW1Rlc3RS
dW5uZXIgbG9hZENhcHR1cmVUZXN0SGFybmVzc10pOgorICAgICAgICAoLVtUZXN0UnVubmVyIHNl
dFRleHRPYmZ1c2NhdGlvbkVuYWJsZWQ6XSk6CisgICAgICAgICgtW1Rlc3RSdW5uZXIgaXNEb25l
V2FpdGluZ0ZvclBlbmRpbmdFdmVudHNdKToKKyAgICAgICAgKC1bVGVzdFJ1bm5lciB1c2VyQ29u
dGVudENvbnRyb2xsZXI6ZGlkUmVjZWl2ZVNjcmlwdE1lc3NhZ2U6XSk6CisKKyAgICAgICAgVGhl
IFRlc3RSdW5uZXIgcHJvdmlkZXMgdXRpbGl0aWVzIHRoYXQgYSB1bml0IHRlc3Qgc2hvdWxkIHVz
ZSB0byBkcml2ZSB0aGUgdGVzdCBmb3J3YXJkIChlLmcuIGxvYWRpbmcgaGFybmVzc2VzKQorICAg
ICAgICBvciBpbnNwZWN0IHRoZSBzdGF0ZSBvZiB0aGUgbG9hZGVkIHBhZ2UgKGUuZy4gZXh0cmFj
dGluZyBKU09OIGVkaXRpbmcgaGlzdG9yeSBkYXRhIGZyb20gdGhlIGNhcHR1cmUgaGFybmVzcyku
CisKKyAgICAgICAgKiBFZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9UZXN0VXRpbC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBFZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9UZXN0VXRpbC5t
OiBBZGRlZC4KKyAgICAgICAgKHdhaXRVbnRpbFdpdGhUaW1lb3V0KToKKyAgICAgICAgKHdhaXRV
bnRpbCk6CisKKyAgICAgICAgUHJvdmlkZXMgdXRpbGl0aWVzIGZvciBydW5uaW5nIHRlc3RzLiBG
b3Igbm93LCB0aGlzIGlzIGp1c3Qgc3Bpbm5pbmcgdGhlIHJ1bmxvb3Agb24gYSBnaXZlbiBjb25k
aXRpb24uCisKKyAgICAgICAgKiBFZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9XS1dlYlZp
ZXdBZGRpdGlvbnMuaDogQWRkZWQuCisgICAgICAgICogRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hp
c3RvcnkvV0tXZWJWaWV3QWRkaXRpb25zLm06IEFkZGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcg
bG9hZFBhZ2VGcm9tQnVuZGxlTmFtZWQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyB0eXBlQ2hh
cmFjdGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcga2V5UHJlc3NXaXRoQ2hhcmFjdGVyczpr
ZXlDb2RlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdEZyb21TdHJpbmc6XSk6CisKKyAgICAgICAgUHJvdmlkZXMgdXRpbGl0aWVzIGZvciBzaW11
bGF0aW5nIGludGVyYWN0aW9uIGluIGEgd2ViIHZpZXcuCisKKyAgICAgICAgKiBFZGl0aW5nSGlz
dG9yeS9FZGl0aW5nSGlzdG9yeS9tYWluLm06IEFkZGVkLgorICAgICAgICAqIEVkaXRpbmdIaXN0
b3J5L0VkaXRpbmdIaXN0b3J5VGVzdHMvSW5mby5wbGlzdDogQWRkZWQuCisgICAgICAgICogRWRp
dGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnlUZXN0cy9SZXdpbmRBbmRQbGF5YmFja1Rlc3RzLm06
IEFkZGVkLgorICAgICAgICAoLVtSZXdpbmRBbmRQbGF5YmFja1Rlc3RzIHNldFVwXSk6CisgICAg
ICAgICgtW1Jld2luZEFuZFBsYXliYWNrVGVzdHMgdGVhckRvd25dKToKKyAgICAgICAgKC1bUmV3
aW5kQW5kUGxheWJhY2tUZXN0cyB0ZXN0VHlwaW5nU2luZ2xlTGluZU9mVGV4dF0pOgorICAgICAg
ICAoLVtSZXdpbmRBbmRQbGF5YmFja1Rlc3RzIHRlc3RUeXBpbmdNdWx0aXBsZUxpbmVzT2ZUZXh0
XSk6CisgICAgICAgICgtW1Jld2luZEFuZFBsYXliYWNrVGVzdHMgdGVzdFR5cGluZ0FuZERlbGV0
aW5nVGV4dF0pOgorICAgICAgICAoLVtSZXdpbmRBbmRQbGF5YmFja1Rlc3RzIHJld2luZEFuZFBs
YXliYWNrRWRpdGluZ0luUGxheWJhY2tUZXN0SGFybmVzc10pOgorICAgICAgICAoLVtSZXdpbmRB
bmRQbGF5YmFja1Rlc3RzIG9yaWdpbmFsQm9keVN1YnRyZWU6aXNFcXVhbFRvRmluYWxTdWJ0cmVl
Ol0pOgorCiAyMDE2LTExLTI5ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbQ29jb2FdIEVuYWJsZSB0d28gY2xhbmcgd2FybmluZ3MgcmVjb21tZW5kZWQgYnkgWGNv
ZGUKZGlmZiAtLWdpdCBhL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9y
eS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIyZmY2YzI1ODBiN2Q4MTk0
MTQ3Zjg5ZGFkNGI5NDNmNjZiMjI1MDUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9FZGl0aW5n
SGlzdG9yeS9FZGl0aW5nSGlzdG9yeS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0wLDAg
KzEsNDMzIEBACisvLyAhJCpVVEY4KiQhCit7CisJYXJjaGl2ZVZlcnNpb24gPSAxOworCWNsYXNz
ZXMgPSB7CisJfTsKKwlvYmplY3RWZXJzaW9uID0gNDY7CisJb2JqZWN0cyA9IHsKKworLyogQmVn
aW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KKwkJNTE2QURCRTIxREUxNTZBOTAwRTJCOThEIC8q
IENhcHR1cmVIYXJuZXNzLmh0bWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNkFEQkE4MURFMTU1QUIwMEUyQjk4RCAvKiBDYXB0dXJlSGFybmVzcy5o
dG1sICovOyB9OworCQk1MTZBREJFMzFERTE1NkE5MDBFMkI5OEQgLyogRHVtcEVkaXRpbmdIaXN0
b3J5LmpzIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTZBREJBOTFERTE1NUFCMDBFMkI5OEQgLyogRHVtcEVkaXRpbmdIaXN0b3J5LmpzICovOyB9Owor
CQk1MTZBREJFNDFERTE1NkE5MDBFMkI5OEQgLyogRWRpdGluZ0hpc3RvcnlVdGlsLmpzIGluIFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTZBREJBQTFERTE1
NUFCMDBFMkI5OEQgLyogRWRpdGluZ0hpc3RvcnlVdGlsLmpzICovOyB9OworCQk1MTZBREJFNTFE
RTE1NkE5MDBFMkI5OEQgLyogUGxheWJhY2tIYXJuZXNzLmh0bWwgaW4gUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNkFEQkFCMURFMTU1QUIwMEUyQjk4RCAv
KiBQbGF5YmFja0hhcm5lc3MuaHRtbCAqLzsgfTsKKwkJNTE2QURCRTYxREUxNTZCQjAwRTJCOThE
IC8qIG1haW4ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxNkFEQkIxMURFMTU1QkQwMEUyQjk4RCAvKiBtYWluLm0gKi87IH07CisJCTUxNkFEQkYzMURF
MTU3QUQwMEUyQjk4RCAvKiBSZXdpbmRBbmRQbGF5YmFja1Rlc3RzLm0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTZBREJGMjFERTE1N0FEMDBFMkI5OEQg
LyogUmV3aW5kQW5kUGxheWJhY2tUZXN0cy5tICovOyB9OworCQk1MTdGRDkzQzFERTE4REM5MDBB
NzM2NzMgLyogRE9NVGVzdGluZ1V0aWwuanMgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0ZEOTNCMURFMThEQzkwMEE3MzY3MyAvKiBET01UZXN0aW5n
VXRpbC5qcyAqLzsgfTsKKwkJNTFFQ0MzRTcxREVFMzNDRTAwQ0IyNjdFIC8qIFRlc3RVdGlsLm0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTZBREJCNTFE
RTE1NUJEMDBFMkI5OEQgLyogVGVzdFV0aWwubSAqLzsgfTsKKwkJNTFFQ0MzRTkxREVFMzNEMjAw
Q0IyNjdFIC8qIFdLV2ViVmlld0FkZGl0aW9ucy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2QURCQjcxREUxNTVCRDAwRTJCOThEIC8qIFdLV2ViVmll
d0FkZGl0aW9ucy5tICovOyB9OworCQk1MUVDQzNFQTFERUUzM0REMDBDQjI2N0UgLyogVGVzdFJ1
bm5lci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2
QURCQjMxREUxNTVCRDAwRTJCOThEIC8qIFRlc3RSdW5uZXIubSAqLzsgfTsKKy8qIEVuZCBQQlhC
dWlsZEZpbGUgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkgc2Vj
dGlvbiAqLworCQk1MTZBREJGNTFERTE1N0FEMDBFMkI5OEQgLyogUEJYQ29udGFpbmVySXRlbVBy
b3h5ICovID0geworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVy
UG9ydGFsID0gNTEyRDdBOEIxREUwRkJFRjAwMjhGMEU2IC8qIFByb2plY3Qgb2JqZWN0ICovOwor
CQkJcHJveHlUeXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gNTE2QURCQzAxREUx
NTVGQzAwRTJCOThEOworCQkJcmVtb3RlSW5mbyA9IEVkaXRpbmdIaXN0b3J5OworCQl9OworLyog
RW5kIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEZpbGVS
ZWZlcmVuY2Ugc2VjdGlvbiAqLworCQk1MTZBREJBODFERTE1NUFCMDBFMkI5OEQgLyogQ2FwdHVy
ZUhhcm5lc3MuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgbmFtZSA9IENhcHR1cmVIYXJuZXNz
Lmh0bWw7IHBhdGggPSBFZGl0aW5nSGlzdG9yeS9SZXNvdXJjZXMvQ2FwdHVyZUhhcm5lc3MuaHRt
bDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk1MTZBREJBOTFERTE1NUFCMDBFMkI5
OEQgLyogRHVtcEVkaXRpbmdIaXN0b3J5LmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2Ny
aXB0OyBuYW1lID0gRHVtcEVkaXRpbmdIaXN0b3J5LmpzOyBwYXRoID0gRWRpdGluZ0hpc3Rvcnkv
UmVzb3VyY2VzL0R1bXBFZGl0aW5nSGlzdG9yeS5qczsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09U
OyB9OworCQk1MTZBREJBQTFERTE1NUFCMDBFMkI5OEQgLyogRWRpdGluZ0hpc3RvcnlVdGlsLmpz
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gRWRpdGluZ0hpc3RvcnlV
dGlsLmpzOyBwYXRoID0gRWRpdGluZ0hpc3RvcnkvUmVzb3VyY2VzL0VkaXRpbmdIaXN0b3J5VXRp
bC5qczsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk1MTZBREJBQjFERTE1NUFCMDBF
MkI5OEQgLyogUGxheWJhY2tIYXJuZXNzLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IG5hbWUg
PSBQbGF5YmFja0hhcm5lc3MuaHRtbDsgcGF0aCA9IEVkaXRpbmdIaXN0b3J5L1Jlc291cmNlcy9Q
bGF5YmFja0hhcm5lc3MuaHRtbDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk1MTZB
REJCMDFERTE1NUJEMDBFMkI5OEQgLyogSW5mby5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3Qu
eG1sOyBuYW1lID0gSW5mby5wbGlzdDsgcGF0aCA9IEVkaXRpbmdIaXN0b3J5L0luZm8ucGxpc3Q7
IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNTE2QURCQjExREUxNTVCRDAwRTJCOThE
IC8qIG1haW4ubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBuYW1lID0gbWFpbi5tOyBw
YXRoID0gRWRpdGluZ0hpc3RvcnkvbWFpbi5tOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07
CisJCTUxNkFEQkIyMURFMTU1QkQwMEUyQjk4RCAvKiBUZXN0UnVubmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRlc3RSdW5uZXIuaDsgcGF0aCA9IEVkaXRpbmdIaXN0b3J5
L1Rlc3RSdW5uZXIuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk1MTZBREJCMzFE
RTE1NUJEMDBFMkI5OEQgLyogVGVzdFJ1bm5lci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9i
amM7IG5hbWUgPSBUZXN0UnVubmVyLm07IHBhdGggPSBFZGl0aW5nSGlzdG9yeS9UZXN0UnVubmVy
Lm07IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNTE2QURCQjQxREUxNTVCRDAwRTJC
OThEIC8qIFRlc3RVdGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRlc3RV
dGlsLmg7IHBhdGggPSBFZGl0aW5nSGlzdG9yeS9UZXN0VXRpbC5oOyBzb3VyY2VUcmVlID0gU09V
UkNFX1JPT1Q7IH07CisJCTUxNkFEQkI1MURFMTU1QkQwMEUyQjk4RCAvKiBUZXN0VXRpbC5tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IG5hbWUgPSBUZXN0VXRpbC5tOyBwYXRoID0gRWRp
dGluZ0hpc3RvcnkvVGVzdFV0aWwubTsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk1
MTZBREJCNjFERTE1NUJEMDBFMkI5OEQgLyogV0tXZWJWaWV3QWRkaXRpb25zLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLV2ViVmlld0FkZGl0aW9ucy5oOyBwYXRoID0gRWRp
dGluZ0hpc3RvcnkvV0tXZWJWaWV3QWRkaXRpb25zLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9P
VDsgfTsKKwkJNTE2QURCQjcxREUxNTVCRDAwRTJCOThEIC8qIFdLV2ViVmlld0FkZGl0aW9ucy5t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IG5hbWUgPSBXS1dlYlZpZXdBZGRpdGlvbnMu
bTsgcGF0aCA9IEVkaXRpbmdIaXN0b3J5L1dLV2ViVmlld0FkZGl0aW9ucy5tOyBzb3VyY2VUcmVl
ID0gU09VUkNFX1JPT1Q7IH07CisJCTUxNkFEQkMxMURFMTU1RkMwMEUyQjk4RCAvKiBFZGl0aW5n
SGlzdG9yeS5hcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IHdyYXBwZXIuYXBwbGljYXRpb247IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IEVkaXRp
bmdIaXN0b3J5LmFwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJNTE2
QURCRjAxREUxNTdBRDAwRTJCOThEIC8qIEVkaXRpbmdIaXN0b3J5VGVzdHMueGN0ZXN0ICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmNmYnVu
ZGxlOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBFZGl0aW5nSGlzdG9yeVRlc3RzLnhjdGVz
dDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJNTE2QURCRjIxREUxNTdB
RDAwRTJCOThEIC8qIFJld2luZEFuZFBsYXliYWNrVGVzdHMubSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0g
UmV3aW5kQW5kUGxheWJhY2tUZXN0cy5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MTZBREJGNDFERTE1N0FEMDBFMkI5OEQgLyogSW5mby5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QueG1sOyBwYXRoID0gSW5m
by5wbGlzdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE3RkQ5M0IxREUxOERDOTAw
QTczNjczIC8qIERPTVRlc3RpbmdVdGlsLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2Ny
aXB0OyBuYW1lID0gRE9NVGVzdGluZ1V0aWwuanM7IHBhdGggPSBFZGl0aW5nSGlzdG9yeS9SZXNv
dXJjZXMvRE9NVGVzdGluZ1V0aWwuanM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKy8q
IEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYRnJhbWV3b3Jr
c0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQk1MTZBREJCRTFERTE1NUZDMDBFMkI5OEQgLyogRnJh
bWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOworCQkJYnVp
bGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworCQk1MTZBREJFRDFERTE1
N0FEMDBFMkI5OEQgLyogRnJhbWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29ya3NC
dWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0g
KAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9
OworLyogRW5kIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4g
UEJYR3JvdXAgc2VjdGlvbiAqLworCQk1MTJEN0E4QTFERTBGQkVGMDAyOEYwRTYgPSB7CisJCQlp
c2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTUxMkQ3QTk1MURFMEZCRUYwMDI4
RjBFNiAvKiBFZGl0aW5nSGlzdG9yeSAqLywKKwkJCQk1MTZBREJGMTFERTE1N0FEMDBFMkI5OEQg
LyogRWRpdGluZ0hpc3RvcnlUZXN0cyAqLywKKwkJCQk1MTJEN0E5NDFERTBGQkVGMDAyOEYwRTYg
LyogUHJvZHVjdHMgKi8sCisJCQkpOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsK
KwkJNTEyRDdBOTQxREUwRkJFRjAwMjhGMEU2IC8qIFByb2R1Y3RzICovID0geworCQkJaXNhID0g
UEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk1MTZBREJDMTFERTE1NUZDMDBFMkI5OEQg
LyogRWRpdGluZ0hpc3RvcnkuYXBwICovLAorCQkJCTUxNkFEQkYwMURFMTU3QUQwMEUyQjk4RCAv
KiBFZGl0aW5nSGlzdG9yeVRlc3RzLnhjdGVzdCAqLywKKwkJCSk7CisJCQluYW1lID0gUHJvZHVj
dHM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk1MTJEN0E5NTFERTBGQkVG
MDAyOEYwRTYgLyogRWRpdGluZ0hpc3RvcnkgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJ
CWNoaWxkcmVuID0gKAorCQkJCTUxNkFEQkIwMURFMTU1QkQwMEUyQjk4RCAvKiBJbmZvLnBsaXN0
ICovLAorCQkJCTUxNkFEQkIxMURFMTU1QkQwMEUyQjk4RCAvKiBtYWluLm0gKi8sCisJCQkJNTE2
QURCQjIxREUxNTVCRDAwRTJCOThEIC8qIFRlc3RSdW5uZXIuaCAqLywKKwkJCQk1MTZBREJCMzFE
RTE1NUJEMDBFMkI5OEQgLyogVGVzdFJ1bm5lci5tICovLAorCQkJCTUxNkFEQkI0MURFMTU1QkQw
MEUyQjk4RCAvKiBUZXN0VXRpbC5oICovLAorCQkJCTUxNkFEQkI1MURFMTU1QkQwMEUyQjk4RCAv
KiBUZXN0VXRpbC5tICovLAorCQkJCTUxNkFEQkI2MURFMTU1QkQwMEUyQjk4RCAvKiBXS1dlYlZp
ZXdBZGRpdGlvbnMuaCAqLywKKwkJCQk1MTZBREJCNzFERTE1NUJEMDBFMkI5OEQgLyogV0tXZWJW
aWV3QWRkaXRpb25zLm0gKi8sCisJCQkJNTEyRDdBQjUxREUwRkM1OTAwMjhGMEU2IC8qIFJlc291
cmNlcyAqLywKKwkJCSk7CisJCQluYW1lID0gRWRpdGluZ0hpc3Rvcnk7CisJCQlwYXRoID0gRWRp
dGluZ0hpc3RvcnlUZXN0OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNTEy
RDdBQjUxREUwRkM1OTAwMjhGMEU2IC8qIFJlc291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdy
b3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNTE3RkQ5M0IxREUxOERDOTAwQTczNjczIC8qIERP
TVRlc3RpbmdVdGlsLmpzICovLAorCQkJCTUxNkFEQkE4MURFMTU1QUIwMEUyQjk4RCAvKiBDYXB0
dXJlSGFybmVzcy5odG1sICovLAorCQkJCTUxNkFEQkE5MURFMTU1QUIwMEUyQjk4RCAvKiBEdW1w
RWRpdGluZ0hpc3RvcnkuanMgKi8sCisJCQkJNTE2QURCQUExREUxNTVBQjAwRTJCOThEIC8qIEVk
aXRpbmdIaXN0b3J5VXRpbC5qcyAqLywKKwkJCQk1MTZBREJBQjFERTE1NUFCMDBFMkI5OEQgLyog
UGxheWJhY2tIYXJuZXNzLmh0bWwgKi8sCisJCQkpOworCQkJbmFtZSA9IFJlc291cmNlczsKKwkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTUxNkFEQkYxMURFMTU3QUQwMEUyQjk4
RCAvKiBFZGl0aW5nSGlzdG9yeVRlc3RzICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQlj
aGlsZHJlbiA9ICgKKwkJCQk1MTZBREJGMjFERTE1N0FEMDBFMkI5OEQgLyogUmV3aW5kQW5kUGxh
eWJhY2tUZXN0cy5tICovLAorCQkJCTUxNkFEQkY0MURFMTU3QUQwMEUyQjk4RCAvKiBJbmZvLnBs
aXN0ICovLAorCQkJKTsKKwkJCXBhdGggPSBFZGl0aW5nSGlzdG9yeVRlc3RzOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKy8qIEVuZCBQQlhHcm91cCBzZWN0aW9uICovCisKKy8q
IEJlZ2luIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCisJCTUxNkFEQkMwMURFMTU1RkMwMEUy
Qjk4RCAvKiBFZGl0aW5nSGlzdG9yeSAqLyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsK
KwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSA1MTZBREJEQTFERTE1NUZDMDBFMkI5OEQgLyog
QnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkVkaXRpbmdIaXN0
b3J5IiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCTUxNkFEQkJEMURFMTU1RkMwMEUyQjk4
RCAvKiBTb3VyY2VzICovLAorCQkJCTUxNkFEQkJFMURFMTU1RkMwMEUyQjk4RCAvKiBGcmFtZXdv
cmtzICovLAorCQkJCTUxNkFEQkJGMURFMTU1RkMwMEUyQjk4RCAvKiBSZXNvdXJjZXMgKi8sCisJ
CQkpOworCQkJYnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkp
OworCQkJbmFtZSA9IEVkaXRpbmdIaXN0b3J5OworCQkJcHJvZHVjdE5hbWUgPSBFZGl0aW5nSGlz
dG9yeTsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSA1MTZBREJDMTFERTE1NUZDMDBFMkI5OEQgLyog
RWRpdGluZ0hpc3RvcnkuYXBwICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1
Y3QtdHlwZS5hcHBsaWNhdGlvbiI7CisJCX07CisJCTUxNkFEQkVGMURFMTU3QUQwMEUyQjk4RCAv
KiBFZGl0aW5nSGlzdG9yeVRlc3RzICovID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0Owor
CQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDUxNkFEQkY3MURFMTU3QUQwMEUyQjk4RCAvKiBC
dWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiRWRpdGluZ0hpc3Rv
cnlUZXN0cyIgKi87CisJCQlidWlsZFBoYXNlcyA9ICgKKwkJCQk1MTZBREJFQzFERTE1N0FEMDBF
MkI5OEQgLyogU291cmNlcyAqLywKKwkJCQk1MTZBREJFRDFERTE1N0FEMDBFMkI5OEQgLyogRnJh
bWV3b3JrcyAqLywKKwkJCQk1MTZBREJFRTFERTE1N0FEMDBFMkI5OEQgLyogUmVzb3VyY2VzICov
LAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAor
CQkJCTUxNkFEQkY2MURFMTU3QUQwMEUyQjk4RCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAor
CQkJKTsKKwkJCW5hbWUgPSBFZGl0aW5nSGlzdG9yeVRlc3RzOworCQkJcHJvZHVjdE5hbWUgPSBF
ZGl0aW5nSGlzdG9yeVRlc3RzOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDUxNkFEQkYwMURFMTU3
QUQwMEUyQjk4RCAvKiBFZGl0aW5nSGlzdG9yeVRlc3RzLnhjdGVzdCAqLzsKKwkJCXByb2R1Y3RU
eXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUuYnVuZGxlLnVuaXQtdGVzdCI7CisJCX07Cisv
KiBFbmQgUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYUHJvamVjdCBz
ZWN0aW9uICovCisJCTUxMkQ3QThCMURFMEZCRUYwMDI4RjBFNiAvKiBQcm9qZWN0IG9iamVjdCAq
LyA9IHsKKwkJCWlzYSA9IFBCWFByb2plY3Q7CisJCQlhdHRyaWJ1dGVzID0geworCQkJCUxhc3RV
cGdyYWRlQ2hlY2sgPSAwODIwOworCQkJCVRhcmdldEF0dHJpYnV0ZXMgPSB7CisJCQkJCTUxNkFE
QkMwMURFMTU1RkMwMEUyQjk4RCA9IHsKKwkJCQkJCUNyZWF0ZWRPblRvb2xzVmVyc2lvbiA9IDgu
MjsKKwkJCQkJCVByb3Zpc2lvbmluZ1N0eWxlID0gQXV0b21hdGljOworCQkJCQl9OworCQkJCQk1
MTZBREJFRjFERTE1N0FEMDBFMkI5OEQgPSB7CisJCQkJCQlDcmVhdGVkT25Ub29sc1ZlcnNpb24g
PSA4LjI7CisJCQkJCQlQcm92aXNpb25pbmdTdHlsZSA9IEF1dG9tYXRpYzsKKwkJCQkJCVRlc3RU
YXJnZXRJRCA9IDUxNkFEQkMwMURFMTU1RkMwMEUyQjk4RDsKKwkJCQkJfTsKKwkJCQl9OworCQkJ
fTsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSA1MTJEN0E4RTFERTBGQkVGMDAyOEYwRTYg
LyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJFZGl0aW5nSGlzdG9y
eSIgKi87CisJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAzLjIiOworCQkJZGV2ZWxv
cG1lbnRSZWdpb24gPSBFbmdsaXNoOworCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDA7CisJ
CQlrbm93blJlZ2lvbnMgPSAoCisJCQkJZW4sCisJCQkJQmFzZSwKKwkJCSk7CisJCQltYWluR3Jv
dXAgPSA1MTJEN0E4QTFERTBGQkVGMDAyOEYwRTY7CisJCQlwcm9kdWN0UmVmR3JvdXAgPSA1MTJE
N0E5NDFERTBGQkVGMDAyOEYwRTYgLyogUHJvZHVjdHMgKi87CisJCQlwcm9qZWN0RGlyUGF0aCA9
ICIiOworCQkJcHJvamVjdFJvb3QgPSAiIjsKKwkJCXRhcmdldHMgPSAoCisJCQkJNTE2QURCQzAx
REUxNTVGQzAwRTJCOThEIC8qIEVkaXRpbmdIaXN0b3J5ICovLAorCQkJCTUxNkFEQkVGMURFMTU3
QUQwMEUyQjk4RCAvKiBFZGl0aW5nSGlzdG9yeVRlc3RzICovLAorCQkJKTsKKwkJfTsKKy8qIEVu
ZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYUmVzb3VyY2VzQnVpbGRQaGFz
ZSBzZWN0aW9uICovCisJCTUxNkFEQkJGMURFMTU1RkMwMEUyQjk4RCAvKiBSZXNvdXJjZXMgKi8g
PSB7CisJCQlpc2EgPSBQQlhSZXNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCTUxNkFEQkUyMURFMTU2QTkwMEUyQjk4
RCAvKiBDYXB0dXJlSGFybmVzcy5odG1sIGluIFJlc291cmNlcyAqLywKKwkJCQk1MTdGRDkzQzFE
RTE4REM5MDBBNzM2NzMgLyogRE9NVGVzdGluZ1V0aWwuanMgaW4gUmVzb3VyY2VzICovLAorCQkJ
CTUxNkFEQkUzMURFMTU2QTkwMEUyQjk4RCAvKiBEdW1wRWRpdGluZ0hpc3RvcnkuanMgaW4gUmVz
b3VyY2VzICovLAorCQkJCTUxNkFEQkU0MURFMTU2QTkwMEUyQjk4RCAvKiBFZGl0aW5nSGlzdG9y
eVV0aWwuanMgaW4gUmVzb3VyY2VzICovLAorCQkJCTUxNkFEQkU1MURFMTU2QTkwMEUyQjk4RCAv
KiBQbGF5YmFja0hhcm5lc3MuaHRtbCBpbiBSZXNvdXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisJCTUxNkFEQkVFMURFMTU3
QUQwMEUyQjk4RCAvKiBSZXNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhSZXNvdXJjZXNCdWls
ZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAor
CQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9Owor
LyogRW5kIFBCWFJlc291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhT
b3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTUxNkFEQkJEMURFMTU1RkMwMEUyQjk4RCAv
KiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CisJCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJNTE2QURCRTYxREUx
NTZCQjAwRTJCOThEIC8qIG1haW4ubSBpbiBTb3VyY2VzICovLAorCQkJCTUxRUNDM0VBMURFRTMz
REQwMENCMjY3RSAvKiBUZXN0UnVubmVyLm0gaW4gU291cmNlcyAqLywKKwkJCQk1MUVDQzNFNzFE
RUUzM0NFMDBDQjI2N0UgLyogVGVzdFV0aWwubSBpbiBTb3VyY2VzICovLAorCQkJCTUxRUNDM0U5
MURFRTMzRDIwMENCMjY3RSAvKiBXS1dlYlZpZXdBZGRpdGlvbnMubSBpbiBTb3VyY2VzICovLAor
CQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9Owor
CQk1MTZBREJFQzFERTE1N0FEMDBFMkI5OEQgLyogU291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBC
WFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJ
CWZpbGVzID0gKAorCQkJCTUxNkFEQkYzMURFMTU3QUQwMEUyQjk4RCAvKiBSZXdpbmRBbmRQbGF5
YmFja1Rlc3RzLm0gaW4gU291cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKy8qIEVuZCBQQlhTb3VyY2VzQnVpbGRQaGFzZSBz
ZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWFRhcmdldERlcGVuZGVuY3kgc2VjdGlvbiAqLworCQk1
MTZBREJGNjFERTE1N0FEMDBFMkI5OEQgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKKwkJ
CWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CisJCQl0YXJnZXQgPSA1MTZBREJDMDFERTE1NUZD
MDBFMkI5OEQgLyogRWRpdGluZ0hpc3RvcnkgKi87CisJCQl0YXJnZXRQcm94eSA9IDUxNkFEQkY1
MURFMTU3QUQwMEUyQjk4RCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CisJCX07CisvKiBF
bmQgUEJYVGFyZ2V0RGVwZW5kZW5jeSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFhDQnVpbGRDb25m
aWd1cmF0aW9uIHNlY3Rpb24gKi8KKwkJNTEyRDdBQTIxREUwRkJFRjAwMjhGMEU2IC8qIERlYnVn
ICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdz
ID0geworCQkJCUFMV0FZU19TRUFSQ0hfVVNFUl9QQVRIUyA9IE5POworCQkJCUNMQU5HX0FOQUxZ
WkVSX05PTk5VTEwgPSBZRVM7CisJCQkJQ0xBTkdfQ1hYX0xBTkdVQUdFX1NUQU5EQVJEID0gImdu
dSsrMHgiOworCQkJCUNMQU5HX0NYWF9MSUJSQVJZID0gImxpYmMrKyI7CisJCQkJQ0xBTkdfRU5B
QkxFX01PRFVMRVMgPSBZRVM7CisJCQkJQ0xBTkdfRU5BQkxFX09CSkNfQVJDID0gWUVTOworCQkJ
CUNMQU5HX1dBUk5fQk9PTF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fQ09OU1RB
TlRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0RJUkVDVF9PQkpDX0lTQV9VU0FH
RSA9IFlFU19FUlJPUjsKKwkJCQlDTEFOR19XQVJOX0RPQ1VNRU5UQVRJT05fQ09NTUVOVFMgPSBZ
RVM7CisJCQkJQ0xBTkdfV0FSTl9FTVBUWV9CT0RZID0gWUVTOworCQkJCUNMQU5HX1dBUk5fRU5V
TV9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fSU5GSU5JVEVfUkVDVVJTSU9OID0g
WUVTOworCQkJCUNMQU5HX1dBUk5fSU5UX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FS
Tl9PQkpDX1JPT1RfQ0xBU1MgPSBZRVNfRVJST1I7CisJCQkJQ0xBTkdfV0FSTl9TVVNQSUNJT1VT
X01PVkUgPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9VTlJFQUNIQUJMRV9DT0RFID0gWUVTOworCQkJ
CUNMQU5HX1dBUk5fX0RVUExJQ0FURV9NRVRIT0RfTUFUQ0ggPSBZRVM7CisJCQkJQ09ERV9TSUdO
X0lERU5USVRZID0gIi0iOworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBOTzsKKwkJCQlERUJVR19J
TkZPUk1BVElPTl9GT1JNQVQgPSBkd2FyZjsKKwkJCQlFTkFCTEVfU1RSSUNUX09CSkNfTVNHU0VO
RCA9IFlFUzsKKwkJCQlFTkFCTEVfVEVTVEFCSUxJVFkgPSBZRVM7CisJCQkJR0NDX0NfTEFOR1VB
R0VfU1RBTkRBUkQgPSBnbnU5OTsKKwkJCQlHQ0NfRFlOQU1JQ19OT19QSUMgPSBOTzsKKwkJCQlH
Q0NfTk9fQ09NTU9OX0JMT0NLUyA9IFlFUzsKKwkJCQlHQ0NfT1BUSU1JWkFUSU9OX0xFVkVMID0g
MDsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gKAorCQkJCQkiREVCVUc9MSIs
CisJCQkJCSIkKGluaGVyaXRlZCkiLAorCQkJCSk7CisJCQkJR0NDX1dBUk5fNjRfVE9fMzJfQklU
X0NPTlZFUlNJT04gPSBZRVM7CisJCQkJR0NDX1dBUk5fQUJPVVRfUkVUVVJOX1RZUEUgPSBZRVNf
RVJST1I7CisJCQkJR0NDX1dBUk5fVU5ERUNMQVJFRF9TRUxFQ1RPUiA9IFlFUzsKKwkJCQlHQ0Nf
V0FSTl9VTklOSVRJQUxJWkVEX0FVVE9TID0gWUVTX0FHR1JFU1NJVkU7CisJCQkJR0NDX1dBUk5f
VU5VU0VEX0ZVTkNUSU9OID0gWUVTOworCQkJCUdDQ19XQVJOX1VOVVNFRF9WQVJJQUJMRSA9IFlF
UzsKKwkJCQlNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgPSAxMC4xMzsKKwkJCQlNVExfRU5BQkxF
X0RFQlVHX0lORk8gPSBZRVM7CisJCQkJT05MWV9BQ1RJVkVfQVJDSCA9IFlFUzsKKwkJCQlTREtS
T09UID0gbWFjb3N4OworCQkJfTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsKKwkJNTEyRDdBQTMx
REUwRkJFRjAwMjhGMEU2IC8qIFJlbGVhc2UgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmln
dXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQUxXQVlTX1NFQVJDSF9VU0VSX1BB
VEhTID0gTk87CisJCQkJQ0xBTkdfQU5BTFlaRVJfTk9OTlVMTCA9IFlFUzsKKwkJCQlDTEFOR19D
WFhfTEFOR1VBR0VfU1RBTkRBUkQgPSAiZ251KysweCI7CisJCQkJQ0xBTkdfQ1hYX0xJQlJBUlkg
PSAibGliYysrIjsKKwkJCQlDTEFOR19FTkFCTEVfTU9EVUxFUyA9IFlFUzsKKwkJCQlDTEFOR19F
TkFCTEVfT0JKQ19BUkMgPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9CT09MX0NPTlZFUlNJT04gPSBZ
RVM7CisJCQkJQ0xBTkdfV0FSTl9DT05TVEFOVF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5H
X1dBUk5fRElSRUNUX09CSkNfSVNBX1VTQUdFID0gWUVTX0VSUk9SOworCQkJCUNMQU5HX1dBUk5f
RE9DVU1FTlRBVElPTl9DT01NRU5UUyA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0VNUFRZX0JPRFkg
PSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9FTlVNX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdf
V0FSTl9JTkZJTklURV9SRUNVUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9JTlRfQ09OVkVS
U0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX09CSkNfUk9PVF9DTEFTUyA9IFlFU19FUlJPUjsK
KwkJCQlDTEFOR19XQVJOX1NVU1BJQ0lPVVNfTU9WRSA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX1VO
UkVBQ0hBQkxFX0NPREUgPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9fRFVQTElDQVRFX01FVEhPRF9N
QVRDSCA9IFlFUzsKKwkJCQlDT0RFX1NJR05fSURFTlRJVFkgPSAiLSI7CisJCQkJQ09QWV9QSEFT
RV9TVFJJUCA9IE5POworCQkJCURFQlVHX0lORk9STUFUSU9OX0ZPUk1BVCA9ICJkd2FyZi13aXRo
LWRzeW0iOworCQkJCUVOQUJMRV9OU19BU1NFUlRJT05TID0gTk87CisJCQkJRU5BQkxFX1NUUklD
VF9PQkpDX01TR1NFTkQgPSBZRVM7CisJCQkJR0NDX0NfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnU5
OTsKKwkJCQlHQ0NfTk9fQ09NTU9OX0JMT0NLUyA9IFlFUzsKKwkJCQlHQ0NfV0FSTl82NF9UT18z
Ml9CSVRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlHQ0NfV0FSTl9BQk9VVF9SRVRVUk5fVFlQRSA9
IFlFU19FUlJPUjsKKwkJCQlHQ0NfV0FSTl9VTkRFQ0xBUkVEX1NFTEVDVE9SID0gWUVTOworCQkJ
CUdDQ19XQVJOX1VOSU5JVElBTElaRURfQVVUT1MgPSBZRVNfQUdHUkVTU0lWRTsKKwkJCQlHQ0Nf
V0FSTl9VTlVTRURfRlVOQ1RJT04gPSBZRVM7CisJCQkJR0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxF
ID0gWUVTOworCQkJCU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCA9IDEwLjEzOworCQkJCU1UTF9F
TkFCTEVfREVCVUdfSU5GTyA9IE5POworCQkJCVNES1JPT1QgPSBtYWNvc3g7CisJCQl9OworCQkJ
bmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTUxNkFEQkRCMURFMTU1RkMwMEUyQjk4RCAvKiBEZWJ1
ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5n
cyA9IHsKKwkJCQlBU1NFVENBVEFMT0dfQ09NUElMRVJfQVBQSUNPTl9OQU1FID0gQXBwSWNvbjsK
KwkJCQlDT01CSU5FX0hJRFBJX0lNQUdFUyA9IFlFUzsKKwkJCQlJTkZPUExJU1RfRklMRSA9IEVk
aXRpbmdIaXN0b3J5L0luZm8ucGxpc3Q7CisJCQkJTERfUlVOUEFUSF9TRUFSQ0hfUEFUSFMgPSAi
JChpbmhlcml0ZWQpIEBleGVjdXRhYmxlX3BhdGgvLi4vRnJhbWV3b3JrcyI7CisJCQkJUFJPRFVD
VF9CVU5ETEVfSURFTlRJRklFUiA9IGNvbS5hcHBsZS5FZGl0aW5nSGlzdG9yeTsKKwkJCQlQUk9E
VUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOworCQkJCVNES1JPT1QgPSBtYWNvc3guaW50ZXJu
YWw7CisJCQl9OworCQkJbmFtZSA9IERlYnVnOworCQl9OworCQk1MTZBREJEQzFERTE1NUZDMDBF
MkI5OEQgLyogUmVsZWFzZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwor
CQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlBU1NFVENBVEFMT0dfQ09NUElMRVJfQVBQSUNPTl9O
QU1FID0gQXBwSWNvbjsKKwkJCQlDT01CSU5FX0hJRFBJX0lNQUdFUyA9IFlFUzsKKwkJCQlJTkZP
UExJU1RfRklMRSA9IEVkaXRpbmdIaXN0b3J5L0luZm8ucGxpc3Q7CisJCQkJTERfUlVOUEFUSF9T
RUFSQ0hfUEFUSFMgPSAiJChpbmhlcml0ZWQpIEBleGVjdXRhYmxlX3BhdGgvLi4vRnJhbWV3b3Jr
cyI7CisJCQkJUFJPRFVDVF9CVU5ETEVfSURFTlRJRklFUiA9IGNvbS5hcHBsZS5FZGl0aW5nSGlz
dG9yeTsKKwkJCQlQUk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOworCQkJCVNES1JPT1Qg
PSBtYWNvc3guaW50ZXJuYWw7CisJCQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTUx
NkFEQkY4MURFMTU3QUQwMEUyQjk4RCAvKiBEZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRD
b25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlCVU5ETEVfTE9BREVSID0g
IiQoVEVTVF9IT1NUKSI7CisJCQkJQ09NQklORV9ISURQSV9JTUFHRVMgPSBZRVM7CisJCQkJR0ND
X1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgKKwkJCQkJIkRFQlVHPTEiLAorCQkJCQkiJChp
bmhlcml0ZWQpIiwKKwkJCQkJIlRFU1Q9MSIsCisJCQkJKTsKKwkJCQlJTkZPUExJU1RfRklMRSA9
IEVkaXRpbmdIaXN0b3J5VGVzdHMvSW5mby5wbGlzdDsKKwkJCQlMRF9SVU5QQVRIX1NFQVJDSF9Q
QVRIUyA9ICIkKGluaGVyaXRlZCkgQGV4ZWN1dGFibGVfcGF0aC8uLi9GcmFtZXdvcmtzIEBsb2Fk
ZXJfcGF0aC8uLi9GcmFtZXdvcmtzIjsKKwkJCQlQUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSID0g
Y29tLmFwcGxlLkVkaXRpbmdIaXN0b3J5VGVzdHM7CisJCQkJUFJPRFVDVF9OQU1FID0gIiQoVEFS
R0VUX05BTUUpIjsKKwkJCQlURVNUX0hPU1QgPSAiJChCVUlMVF9QUk9EVUNUU19ESVIpL0VkaXRp
bmdIaXN0b3J5LmFwcC9Db250ZW50cy9NYWNPUy9FZGl0aW5nSGlzdG9yeSI7CisJCQl9OworCQkJ
bmFtZSA9IERlYnVnOworCQl9OworCQk1MTZBREJGOTFERTE1N0FEMDBFMkI5OEQgLyogUmVsZWFz
ZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5n
cyA9IHsKKwkJCQlCVU5ETEVfTE9BREVSID0gIiQoVEVTVF9IT1NUKSI7CisJCQkJQ09NQklORV9I
SURQSV9JTUFHRVMgPSBZRVM7CisJCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICJU
RVNUPTEiOworCQkJCUlORk9QTElTVF9GSUxFID0gRWRpdGluZ0hpc3RvcnlUZXN0cy9JbmZvLnBs
aXN0OworCQkJCUxEX1JVTlBBVEhfU0VBUkNIX1BBVEhTID0gIiQoaW5oZXJpdGVkKSBAZXhlY3V0
YWJsZV9wYXRoLy4uL0ZyYW1ld29ya3MgQGxvYWRlcl9wYXRoLy4uL0ZyYW1ld29ya3MiOworCQkJ
CVBST0RVQ1RfQlVORExFX0lERU5USUZJRVIgPSBjb20uYXBwbGUuRWRpdGluZ0hpc3RvcnlUZXN0
czsKKwkJCQlQUk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOworCQkJCVRFU1RfSE9TVCA9
ICIkKEJVSUxUX1BST0RVQ1RTX0RJUikvRWRpdGluZ0hpc3RvcnkuYXBwL0NvbnRlbnRzL01hY09T
L0VkaXRpbmdIaXN0b3J5IjsKKwkJCX07CisJCQluYW1lID0gUmVsZWFzZTsKKwkJfTsKKy8qIEVu
ZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCisKKy8qIEJlZ2luIFhDQ29uZmlndXJh
dGlvbkxpc3Qgc2VjdGlvbiAqLworCQk1MTJEN0E4RTFERTBGQkVGMDAyOEYwRTYgLyogQnVpbGQg
Y29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJFZGl0aW5nSGlzdG9yeSIgKi8gPSB7
CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9
ICgKKwkJCQk1MTJEN0FBMjFERTBGQkVGMDAyOEYwRTYgLyogRGVidWcgKi8sCisJCQkJNTEyRDdB
QTMxREUwRkJFRjAwMjhGMEU2IC8qIFJlbGVhc2UgKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZp
Z3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUmVs
ZWFzZTsKKwkJfTsKKwkJNTE2QURCREExREUxNTVGQzAwRTJCOThEIC8qIEJ1aWxkIGNvbmZpZ3Vy
YXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJFZGl0aW5nSGlzdG9yeSIgKi8gPSB7CisJ
CQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgK
KwkJCQk1MTZBREJEQjFERTE1NUZDMDBFMkI5OEQgLyogRGVidWcgKi8sCisJCQkJNTE2QURCREMx
REUxNTVGQzAwRTJCOThEIC8qIFJlbGVhc2UgKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3Vy
YXRpb25Jc1Zpc2libGUgPSAwOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFz
ZTsKKwkJfTsKKwkJNTE2QURCRjcxREUxNTdBRDAwRTJCOThEIC8qIEJ1aWxkIGNvbmZpZ3VyYXRp
b24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJFZGl0aW5nSGlzdG9yeVRlc3RzIiAqLyA9IHsK
KwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0g
KAorCQkJCTUxNkFEQkY4MURFMTU3QUQwMEUyQjk4RCAvKiBEZWJ1ZyAqLywKKwkJCQk1MTZBREJG
OTFERTE1N0FEMDBFMkI5OEQgLyogUmVsZWFzZSAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmln
dXJhdGlvbklzVmlzaWJsZSA9IDA7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxl
YXNlOworCQl9OworLyogRW5kIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLworCX07CisJ
cm9vdE9iamVjdCA9IDUxMkQ3QThCMURFMEZCRUYwMDI4RjBFNiAvKiBQcm9qZWN0IG9iamVjdCAq
LzsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L0lu
Zm8ucGxpc3QgYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9JbmZvLnBsaXN0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjhhNGViYmYxY2FiZmYzZDk4NGNiZjU1NmNiNjkwYmQyYmQyMzA1MTUKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9JbmZv
LnBsaXN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVU
Ri04Ij8+Cis8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8v
RU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KKzxw
bGlzdCB2ZXJzaW9uPSIxLjAiPgorPGRpY3Q+CisJPGtleT5DRkJ1bmRsZURldmVsb3BtZW50UmVn
aW9uPC9rZXk+CisJPHN0cmluZz5lbjwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVFeGVjdXRhYmxl
PC9rZXk+CisJPHN0cmluZz4kKEVYRUNVVEFCTEVfTkFNRSk8L3N0cmluZz4KKwk8a2V5PkNGQnVu
ZGxlSWNvbkZpbGU8L2tleT4KKwk8c3RyaW5nPjwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVJZGVu
dGlmaWVyPC9rZXk+CisJPHN0cmluZz4kKFBST0RVQ1RfQlVORExFX0lERU5USUZJRVIpPC9zdHJp
bmc+CisJPGtleT5DRkJ1bmRsZUluZm9EaWN0aW9uYXJ5VmVyc2lvbjwva2V5PgorCTxzdHJpbmc+
Ni4wPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZU5hbWU8L2tleT4KKwk8c3RyaW5nPiQoUFJPRFVD
VF9OQU1FKTwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVQYWNrYWdlVHlwZTwva2V5PgorCTxzdHJp
bmc+QVBQTDwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmc8L2tleT4K
Kwk8c3RyaW5nPjEuMDwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVWZXJzaW9uPC9rZXk+CisJPHN0
cmluZz4xPC9zdHJpbmc+CisJPGtleT5MU01pbmltdW1TeXN0ZW1WZXJzaW9uPC9rZXk+CisJPHN0
cmluZz4kKE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCk8L3N0cmluZz4KKwk8a2V5Pk5TUHJpbmNp
cGFsQ2xhc3M8L2tleT4KKwk8c3RyaW5nPk5TQXBwbGljYXRpb248L3N0cmluZz4KKzwvZGljdD4K
KzwvcGxpc3Q+CmRpZmYgLS1naXQgYS9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9y
eS9SZXNvdXJjZXMvQ2FwdHVyZUhhcm5lc3MuaHRtbCBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0Vk
aXRpbmdIaXN0b3J5L1Jlc291cmNlcy9DYXB0dXJlSGFybmVzcy5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBh
MDIyOGNmMzkxNzllYzdhNWI5MmU1MDk5NzIxMjdhZTNhNzFkOTQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9SZXNvdXJjZXMvQ2FwdHVyZUhh
cm5lc3MuaHRtbApAQCAtMCwwICsxLDE0IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
IkRPTVRlc3RpbmdVdGlsLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJFZGl0aW5nSGlzdG9y
eVV0aWwuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJs
b2FkIiwgKCkgPT4geworICAgIGxldCBzY3JpcHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgic2NyaXB0Iik7CisgICAgc2NyaXB0RWxlbWVudC5zcmMgPSAiRHVtcEVkaXRpbmdIaXN0
b3J5LmpzIjsKKyAgICBzY3JpcHRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCAoKSA9
PiBkb2N1bWVudC5ib2R5LmZvY3VzKCkpOworICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQo
c2NyaXB0RWxlbWVudCk7Cit9KTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvUmVzb3VyY2VzL0RPTVRl
c3RpbmdVdGlsLmpzIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvUmVzb3Vy
Y2VzL0RPTVRlc3RpbmdVdGlsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMyYzk5MzQ4ZDljODZkNzViNzM3MjA0
MzVjZGJkNGVmNmYxMGQ3YTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9FZGl0aW5nSGlzdG9y
eS9FZGl0aW5nSGlzdG9yeS9SZXNvdXJjZXMvRE9NVGVzdGluZ1V0aWwuanMKQEAgLTAsMCArMSwy
NCBAQAorKCgpID0+IHsKKyAgICBmdW5jdGlvbiBzdWJ0cmVlQXNTdHJpbmcobm9kZSwgY3VycmVu
dERlcHRoID0gMCkgeworICAgICAgICBsZXQgY2hpbGROb2Rlc0FzU3RyaW5ncyA9IEFycmF5LmZy
b20obm9kZS5jaGlsZE5vZGVzKS5tYXAoY2hpbGQgPT4gc3VidHJlZUFzU3RyaW5nKGNoaWxkLCBj
dXJyZW50RGVwdGggKyAxKSk7CisgICAgICAgIGxldCBub2RlQXNTdHJpbmcgPSBub2RlLm5vZGVO
YW1lOworICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkgewor
ICAgICAgICAgICAgbm9kZUFzU3RyaW5nID0gYDwke25vZGVBc1N0cmluZ30+YAorICAgICAgICAg
ICAgbGV0IGF0dHJpYnV0ZURlc2NyaXB0aW9ucyA9IFtdOworICAgICAgICAgICAgZm9yIChsZXQg
aSA9IDA7IGkgPCBub2RlLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICBsZXQgYXR0cmlidXRlID0gbm9kZS5hdHRyaWJ1dGVzLml0ZW0oaSk7CisgICAgICAgICAgICAg
ICAgYXR0cmlidXRlRGVzY3JpcHRpb25zLnB1c2goYCR7YXR0cmlidXRlLmxvY2FsTmFtZX09JHth
dHRyaWJ1dGUudmFsdWV9YCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBub2RlQXNTdHJp
bmcgKz0gYDogJHthdHRyaWJ1dGVEZXNjcmlwdGlvbnMuam9pbigiLCAiKX1gOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gTm9kZS5URVhUX05PREUpCisgICAgICAg
ICAgICBub2RlQXNTdHJpbmcgKz0gYDogJyR7bm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKC9ccy9n
LCAiICIpfSdgOworCisgICAgICAgIHJldHVybiBgJHsiICAgICIucmVwZWF0KGN1cnJlbnREZXB0
aCl9JHtub2RlQXNTdHJpbmd9XG4ke2NoaWxkTm9kZXNBc1N0cmluZ3Muam9pbigiXG4iKX1gCisg
ICAgfQorCisgICAgd2luZG93LkRPTVV0aWwgPSB7CisgICAgICAgIHN1YnRyZWVBc1N0cmluZwor
ICAgIH07Cit9KSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hp
c3RvcnkvUmVzb3VyY2VzL0R1bXBFZGl0aW5nSGlzdG9yeS5qcyBiL1Rvb2xzL0VkaXRpbmdIaXN0
b3J5L0VkaXRpbmdIaXN0b3J5L1Jlc291cmNlcy9EdW1wRWRpdGluZ0hpc3RvcnkuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOTFhOWY4ZmE0Njc5ZDBjNWNiMzc1YzBkN2U1NDZhZmM2N2UxNTBkNAotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Jlc291cmNlcy9E
dW1wRWRpdGluZ0hpc3RvcnkuanMKQEAgLTAsMCArMSw5MyBAQAorKCgpID0+IHsKKyAgICBsZXQg
aW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBsZXQgZ2xvYmFsTm9kZU1hcCA9IG5ldyBFZGl0aW5n
SGlzdG9yeS5HbG9iYWxOb2RlTWFwKCk7CisgICAgbGV0IHRvcExldmVsVXBkYXRlcyA9IFtdOwor
ICAgIGxldCBjdXJyZW50Q2hpbGRVcGRhdGVzID0gW107CisgICAgbGV0IGlzUHJvY2Vzc2luZ1Rv
cExldmVsVXBkYXRlID0gZmFsc2U7CisgICAgbGV0IGxhc3RLbm93blNlbGVjdGlvblN0YXRlID0g
bnVsbDsKKyAgICBsZXQgbXV0YXRpb25PYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKHJl
Y29yZHMgPT4gYXBwZW5kRE9NVXBkYXRlc0Zyb21SZWNvcmRzKHJlY29yZHMpKTsKKworICAgIGZ1
bmN0aW9uIGJlZ2luUHJvY2Vzc2luZ1RvcExldmVsVXBkYXRlKCkgeworICAgICAgICBpc1Byb2Nl
c3NpbmdUb3BMZXZlbFVwZGF0ZSA9IHRydWU7CisgICAgfQorCisgICAgZnVuY3Rpb24gZW5kUHJv
Y2Vzc2luZ1RvcExldmVsVXBkYXRlKHRvcExldmVsVXBkYXRlKSB7CisgICAgICAgIHRvcExldmVs
VXBkYXRlcy5wdXNoKHRvcExldmVsVXBkYXRlKTsKKyAgICAgICAgY3VycmVudENoaWxkVXBkYXRl
cyA9IFtdOworICAgICAgICBpc1Byb2Nlc3NpbmdUb3BMZXZlbFVwZGF0ZSA9IGZhbHNlOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGFwcGVuZERPTVVwZGF0ZXNGcm9tUmVjb3JkcyhyZWNvcmRzKSB7
CisgICAgICAgIGlmICghcmVjb3Jkcy5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgbGV0IG5ld1VwZGF0ZXMgPSBFZGl0aW5nSGlzdG9yeS5ET01VcGRhdGUuZnJvbVJlY29y
ZHMocmVjb3JkcywgZ2xvYmFsTm9kZU1hcCk7CisgICAgICAgIGlmIChpc1Byb2Nlc3NpbmdUb3BM
ZXZlbFVwZGF0ZSkKKyAgICAgICAgICAgIGN1cnJlbnRDaGlsZFVwZGF0ZXMgPSBjdXJyZW50Q2hp
bGRVcGRhdGVzLmNvbmNhdChuZXdVcGRhdGVzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
dG9wTGV2ZWxVcGRhdGVzID0gdG9wTGV2ZWxVcGRhdGVzLmNvbmNhdChuZXdVcGRhdGVzKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBhcHBlbmRTZWxlY3Rpb25VcGRhdGVJZk5lY2Vzc2FyeSgpIHsK
KyAgICAgICAgbGV0IG5ld1NlbGVjdGlvblN0YXRlID0gRWRpdGluZ0hpc3RvcnkuU2VsZWN0aW9u
U3RhdGUuZnJvbVNlbGVjdGlvbihnZXRTZWxlY3Rpb24oKSwgZ2xvYmFsTm9kZU1hcCk7CisgICAg
ICAgIGlmIChuZXdTZWxlY3Rpb25TdGF0ZS5pc0VxdWFsKGxhc3RLbm93blNlbGVjdGlvblN0YXRl
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBsZXQgdXBkYXRlID0gbmV3IEVkaXRp
bmdIaXN0b3J5LlNlbGVjdGlvblVwZGF0ZShnbG9iYWxOb2RlTWFwLCBuZXdTZWxlY3Rpb25TdGF0
ZSk7CisgICAgICAgIGlmIChpc1Byb2Nlc3NpbmdUb3BMZXZlbFVwZGF0ZSkKKyAgICAgICAgICAg
IGN1cnJlbnRDaGlsZFVwZGF0ZXMucHVzaCh1cGRhdGUpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICB0b3BMZXZlbFVwZGF0ZXMucHVzaCh1cGRhdGUpOworICAgICAgICBsYXN0S25vd25TZWxl
Y3Rpb25TdGF0ZSA9IG5ld1NlbGVjdGlvblN0YXRlOworICAgIH0KKworICAgIGRvY3VtZW50LmJv
ZHkuc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCB0cnVlKTsKKyAgICBkb2N1bWVudC5i
b2R5LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4geworICAgICAgICBpZiAoaW5pdGlh
bGl6ZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVl
OworCisgICAgICAgIEVkaXRpbmdIaXN0b3J5LmdldEVkaXRpbmdIaXN0b3J5QXNKU09OU3RyaW5n
ID0gKGZvcm1hdHRlZCkgPT4geworICAgICAgICAgICAgbGV0IHJlY29yZCA9IHt9OworICAgICAg
ICAgICAgcmVjb3JkLnVwZGF0ZXMgPSB0b3BMZXZlbFVwZGF0ZXMubWFwKHVwZGF0ZSA9PiB1cGRh
dGUudG9PYmplY3QoKSk7CisgICAgICAgICAgICByZWNvcmQuZ2xvYmFsTm9kZU1hcCA9IGdsb2Jh
bE5vZGVNYXAudG9PYmplY3QoKTsKKyAgICAgICAgICAgIHJldHVybiBmb3JtYXR0ZWQgPyBKU09O
LnN0cmluZ2lmeShyZWNvcmQsIG51bGwsIDQpIDogSlNPTi5zdHJpbmdpZnkocmVjb3JkKTsKKyAg
ICAgICAgfTsKKworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25j
aGFuZ2UiLCAoKSA9PiB7CisgICAgICAgICAgICBhcHBlbmRTZWxlY3Rpb25VcGRhdGVJZk5lY2Vz
c2FyeSgpOworICAgICAgICB9KTsKKyAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigi
YmVmb3JlaW5wdXQiLCBldmVudCA9PiB7CisgICAgICAgICAgICBhcHBlbmRET01VcGRhdGVzRnJv
bVJlY29yZHMobXV0YXRpb25PYnNlcnZlci50YWtlUmVjb3JkcygpKTsKKyAgICAgICAgICAgIGJl
Z2luUHJvY2Vzc2luZ1RvcExldmVsVXBkYXRlKCk7CisgICAgICAgIH0pOworCisgICAgICAgIGRv
Y3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgZXZlbnQgPT4geworICAgICAgICAgICAg
YXBwZW5kRE9NVXBkYXRlc0Zyb21SZWNvcmRzKG11dGF0aW9uT2JzZXJ2ZXIudGFrZVJlY29yZHMo
KSk7CisgICAgICAgICAgICBsZXQgZXZlbnREYXRhID0gZXZlbnQuZGF0YVRyYW5zZmVyID8gZXZl
bnQuZGF0YVRyYW5zZmVyLmdldERhdGEoInRleHQvcGxhaW4iKSA6IGV2ZW50LmRhdGE7CisgICAg
ICAgICAgICBsYXN0S25vd25TZWxlY3Rpb25TdGF0ZSA9IG51bGw7CisgICAgICAgICAgICBlbmRQ
cm9jZXNzaW5nVG9wTGV2ZWxVcGRhdGUobmV3IEVkaXRpbmdIaXN0b3J5LklucHV0RXZlbnRVcGRh
dGUoZ2xvYmFsTm9kZU1hcCwgY3VycmVudENoaWxkVXBkYXRlcywgZXZlbnQuaW5wdXRUeXBlLCBl
dmVudERhdGEsIGV2ZW50LnRpbWVTdGFtcCkpOworICAgICAgICB9KTsKKworICAgICAgICBkb2N1
bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgZXZlbnQgPT4geworICAgICAgICAgICAg
aWYgKGV2ZW50LmtleSAhPT0gInMiIHx8ICFldmVudC5tZXRhS2V5KQorICAgICAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICAgICAgbGV0IGZha2VMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiYSIpOworICAgICAgICAgICAgZmFrZUxpbmsuc2V0QXR0cmlidXRlKCJocmVmIiwgImRh
dGE6dGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04LCIgKyBlbmNvZGVVUklDb21wb25lbnQoRWRpdGlu
Z0hpc3RvcnkuZ2V0RWRpdGluZ0hpc3RvcnlBc0pTT05TdHJpbmcoKSkpOworICAgICAgICAgICAg
ZmFrZUxpbmsuc2V0QXR0cmlidXRlKCJkb3dubG9hZCIsICJyZWNvcmQuanNvbiIpOworICAgICAg
ICAgICAgZmFrZUxpbmsuY2xpY2soKTsKKyAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0
KCk7CisgICAgICAgIH0pOworCisgICAgICAgIG11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1
bWVudCwgeworICAgICAgICAgICAgY2hpbGRMaXN0OiB0cnVlLAorICAgICAgICAgICAgYXR0cmli
dXRlczogdHJ1ZSwKKyAgICAgICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsCisgICAgICAgICAg
ICBzdWJ0cmVlOiB0cnVlLAorICAgICAgICAgICAgYXR0cmlidXRlT2xkVmFsdWU6IHRydWUsCisg
ICAgICAgICAgICBjaGFyYWN0ZXJEYXRhT2xkVmFsdWU6IHRydWUsCisgICAgICAgIH0pOworICAg
IH0pOworfSkoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0
b3J5L1Jlc291cmNlcy9FZGl0aW5nSGlzdG9yeVV0aWwuanMgYi9Ub29scy9FZGl0aW5nSGlzdG9y
eS9FZGl0aW5nSGlzdG9yeS9SZXNvdXJjZXMvRWRpdGluZ0hpc3RvcnlVdGlsLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjA4MDUzYTUwN2U4ODUyNDExYTRjZmQ3NzcyN2JhNWJkNGY3MzhmZTcKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9SZXNvdXJjZXMvRWRp
dGluZ0hpc3RvcnlVdGlsLmpzCkBAIC0wLDAgKzEsNjkzIEBACisoKCkgPT4geworICAgIGNsYXNz
IE9iZnVzY2F0b3IgeworICAgICAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgICAgICAgIHRoaXMu
X3NjcmFtYmxlZExvd2VyY2FzZUxldHRlcnMgPSB0aGlzLl9zY3JhbWJsZShBcnJheSgyNikuZmls
bCgpLm1hcCgoXywgaSkgPT4gOTcgKyBpKSk7CisgICAgICAgICAgICB0aGlzLl9zY3JhbWJsZWRV
cHBlcmNhc2VMZXR0ZXJzID0gdGhpcy5fc2NyYW1ibGUoQXJyYXkoMjYpLmZpbGwoKS5tYXAoKF8s
IGkpID0+IDY1ICsgaSkpOworICAgICAgICAgICAgdGhpcy5fc2NyYW1ibGVkTnVtYmVycyA9IHRo
aXMuX3NjcmFtYmxlKEFycmF5KDEwKS5maWxsKCkubWFwKChfLCBpKSA9PiA0OCArIGkpKTsKKyAg
ICAgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBfc2Ny
YW1ibGUoYXJyYXkpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSBhcnJheS5sZW5ndGggLSAx
OyBpID4gMDsgaS0tKSB7CisgICAgICAgICAgICAgICAgbGV0IGogPSBNYXRoLmZsb29yKE1hdGgu
cmFuZG9tKCkgKiAoaSArIDEpKTsKKyAgICAgICAgICAgICAgICBsZXQgdGVtcCA9IGFycmF5W2ld
OworICAgICAgICAgICAgICAgIGFycmF5W2ldID0gYXJyYXlbal07CisgICAgICAgICAgICAgICAg
YXJyYXlbal0gPSB0ZW1wOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGFycmF5
OworICAgICAgICB9CisKKyAgICAgICAgYXBwbHlUb1RleHQodGV4dCkgeworICAgICAgICAgICAg
aWYgKCF0aGlzLmVuYWJsZWQgfHwgIXRleHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRleHQ7
CisKKyAgICAgICAgICAgIGxldCByZXN1bHQgPSAiIjsKKyAgICAgICAgICAgIGZvciAobGV0IGlu
ZGV4ID0gMDsgaW5kZXggPCB0ZXh0Lmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAg
IGxldCBjb2RlID0gdGV4dC5jaGFyQ29kZUF0KGluZGV4KTsKKyAgICAgICAgICAgICAgICBsZXQg
bnVtYmVySW5kZXggPSB0aGlzLl9zY3JhbWJlZE51bWJlckluZGV4Rm9yQ29kZShjb2RlKTsKKyAg
ICAgICAgICAgICAgICBsZXQgbG93ZXJjYXNlSW5kZXggPSB0aGlzLl9zY3JhbWJlZExvd2VyY2Fz
ZUluZGV4Rm9yQ29kZShjb2RlKTsKKyAgICAgICAgICAgICAgICBsZXQgdXBwZXJjYXNlSW5kZXgg
PSB0aGlzLl9zY3JhbWJlZFVwcGVyY2FzZUluZGV4Rm9yQ29kZShjb2RlKTsKKworICAgICAgICAg
ICAgICAgIGlmIChudW1iZXJJbmRleCAhPSBudWxsKQorICAgICAgICAgICAgICAgICAgICByZXN1
bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9zY3JhbWJsZWROdW1iZXJzW251bWJlcklu
ZGV4XSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobG93ZXJjYXNlSW5kZXggIT0gbnVsbCkK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5f
c2NyYW1ibGVkTG93ZXJjYXNlTGV0dGVyc1tsb3dlcmNhc2VJbmRleF0pOworICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKHVwcGVyY2FzZUluZGV4ICE9IG51bGwpCisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX3NjcmFtYmxlZFVwcGVyY2FzZUxl
dHRlcnNbdXBwZXJjYXNlSW5kZXhdKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCArPSB0ZXh0LmNoYXJBdChpbmRleCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgYXBwbHlUb0Zp
bGVuYW1lKGZpbGVuYW1lKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCB8fCAhZmls
ZW5hbWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVuYW1lOworCisgICAgICAgICAgICBs
ZXQgY29tcG9uZW50cyA9IGZpbGVuYW1lLnNwbGl0KCIuIik7CisgICAgICAgICAgICByZXR1cm4g
Y29tcG9uZW50cy5tYXAoKGNvbXBvbmVudCwgaW5kZXgpID0+IHsKKyAgICAgICAgICAgICAgICBp
ZiAoaW5kZXggPT0gY29tcG9uZW50cy5sZW5ndGggLSAxKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY29tcG9uZW50OworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlUb1Rl
eHQoY29tcG9uZW50KTsKKyAgICAgICAgICAgIH0pLmpvaW4oIi4iKTsKKyAgICAgICAgfQorCisg
ICAgICAgIF9zY3JhbWJlZE51bWJlckluZGV4Rm9yQ29kZShjb2RlKSB7CisgICAgICAgICAgICBy
ZXR1cm4gNDggPD0gY29kZSAmJiBjb2RlIDw9IDU3ID8gY29kZSAtIDQ4IDogbnVsbDsKKyAgICAg
ICAgfQorCisgICAgICAgIF9zY3JhbWJlZExvd2VyY2FzZUluZGV4Rm9yQ29kZShjb2RlKSB7Cisg
ICAgICAgICAgICByZXR1cm4gOTcgPD0gY29kZSAmJiBjb2RlIDw9IDEyMiA/IGNvZGUgLSA5NyA6
IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBfc2NyYW1iZWRVcHBlcmNhc2VJbmRleEZvckNv
ZGUoY29kZSkgeworICAgICAgICAgICAgcmV0dXJuIDY1IDw9IGNvZGUgJiYgY29kZSA8PSA5MCA/
IGNvZGUgLSA2NSA6IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgc2hhcmVkKCkg
eworICAgICAgICAgICAgaWYgKCFPYmZ1c2NhdG9yLl9zaGFyZWRJbnN0YW5jZSkKKyAgICAgICAg
ICAgICAgICBPYmZ1c2NhdG9yLl9zaGFyZWRJbnN0YW5jZSA9IG5ldyBPYmZ1c2NhdG9yKCk7Cisg
ICAgICAgICAgICByZXR1cm4gT2JmdXNjYXRvci5fc2hhcmVkSW5zdGFuY2U7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBmdW5jdGlvbiBlbGVtZW50RnJvbU1hcmtkb3duKGh0bWwpIHsKKyAgICAg
ICAgbGV0IHRlbXBvcmFyeURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAg
ICAgICB0ZW1wb3JhcnlEaXYuaW5uZXJIVE1MID0gaHRtbDsKKyAgICAgICAgcmV0dXJuIHRlbXBv
cmFyeURpdi5jaGlsZHJlblswXTsKKyAgICB9CisKKyAgICBjbGFzcyBHbG9iYWxOb2RlTWFwIHsK
KyAgICAgICAgY29uc3RydWN0b3Iobm9kZXNCeUdVSUQpIHsKKyAgICAgICAgICAgIHRoaXMuX25v
ZGVzQnlHVUlEID0gbm9kZXNCeUdVSUQgPyBub2Rlc0J5R1VJRCA6IG5ldyBNYXAoKTsKKyAgICAg
ICAgICAgIHRoaXMuX2d1aWRzQnlOb2RlID0gbmV3IE1hcCgpOworICAgICAgICAgICAgdGhpcy5f
Y3VycmVudEdVSUQgPSAwOworICAgICAgICAgICAgZm9yIChsZXQgW2d1aWQsIG5vZGVdIG9mIHRo
aXMuX25vZGVzQnlHVUlEKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZ3VpZHNCeU5vZGUuc2V0
KG5vZGUsIGd1aWQpOworICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRHVUlEID0gTWF0aC5t
YXgodGhpcy5fY3VycmVudEdVSUQsIGd1aWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dGhpcy5fY3VycmVudEdVSUQrKzsKKyAgICAgICAgfQorCisgICAgICAgIG5vZGVzRm9yR1VJRHMo
Z3VpZHMpIHsKKyAgICAgICAgICAgIGlmICghZ3VpZHMubWFwKQorICAgICAgICAgICAgICAgIGd1
aWRzID0gQXJyYXkuZnJvbShndWlkcyk7CisgICAgICAgICAgICByZXR1cm4gZ3VpZHMubWFwKGd1
aWQgPT4gdGhpcy5ub2RlRm9yR1VJRChndWlkKSk7CisgICAgICAgIH0KKworICAgICAgICBndWlk
c0Zvck5vZGVzKG5vZGVzKSB7CisgICAgICAgICAgICBpZiAoIW5vZGVzLm1hcCkKKyAgICAgICAg
ICAgICAgICBub2RlcyA9IEFycmF5LmZyb20obm9kZXMpOworICAgICAgICAgICAgcmV0dXJuIG5v
ZGVzLm1hcChub2RlID0+IHRoaXMuZ3VpZEZvck5vZGUobm9kZSkpOworICAgICAgICB9CisKKyAg
ICAgICAgbm9kZUZvckdVSUQoZ3VpZCkgeworICAgICAgICAgICAgaWYgKCFndWlkKQorICAgICAg
ICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNC
eUdVSUQuZ2V0KGd1aWQpOworICAgICAgICB9CisKKyAgICAgICAgZ3VpZEZvck5vZGUobm9kZSkg
eworICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisg
ICAgICAgICAgICBpZiAodGhpcy5oYXNHVUlERm9yTm9kZShub2RlKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fZ3VpZHNCeU5vZGUuZ2V0KG5vZGUpOworCisgICAgICAgICAgICBjb25z
dCBndWlkID0gdGhpcy5fY3VycmVudEdVSUQ7CisgICAgICAgICAgICB0aGlzLl9ndWlkc0J5Tm9k
ZS5zZXQobm9kZSwgZ3VpZCk7CisgICAgICAgICAgICB0aGlzLl9ub2Rlc0J5R1VJRC5zZXQoZ3Vp
ZCwgbm9kZSk7CisgICAgICAgICAgICB0aGlzLl9jdXJyZW50R1VJRCsrOworICAgICAgICAgICAg
cmV0dXJuIGd1aWQ7CisgICAgICAgIH0KKworICAgICAgICBoYXNHVUlERm9yTm9kZShub2RlKSB7
CisgICAgICAgICAgICByZXR1cm4gISF0aGlzLl9ndWlkc0J5Tm9kZS5nZXQobm9kZSk7CisgICAg
ICAgIH0KKworICAgICAgICBub2RlcygpIHsKKyAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9t
KHRoaXMuX25vZGVzQnlHVUlELnZhbHVlcygpKTsKKyAgICAgICAgfQorCisgICAgICAgIHRvT2Jq
ZWN0KCkgeworICAgICAgICAgICAgbGV0IG5vZGVzQW5kR1VJRHNUb1Byb2Nlc3MgPSBbXSwgZ3Vp
ZHNUb1Byb2Nlc3MgPSBuZXcgU2V0KCk7CisgICAgICAgICAgICBsZXQgZ3VpZHNCeU5vZGVJdGVy
YXRvciA9IHRoaXMuX2d1aWRzQnlOb2RlLmVudHJpZXMoKTsKKyAgICAgICAgICAgIGZvciAobGV0
IGVudHJ5ID0gZ3VpZHNCeU5vZGVJdGVyYXRvci5uZXh0KCk7ICFlbnRyeS5kb25lOyBlbnRyeSA9
IGd1aWRzQnlOb2RlSXRlcmF0b3IubmV4dCgpKSB7CisgICAgICAgICAgICAgICAgbm9kZXNBbmRH
VUlEc1RvUHJvY2Vzcy5wdXNoKGVudHJ5LnZhbHVlKTsKKyAgICAgICAgICAgICAgICBndWlkc1Rv
UHJvY2Vzcy5hZGQoZW50cnkudmFsdWVbMV0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBsZXQgaXRlcmF0b3IgPSBkb2N1bWVudC5jcmVhdGVOb2RlSXRlcmF0b3IoZG9jdW1lbnQuYm9k
eSwgTm9kZUZpbHRlci5TSE9XX0FMTCk7CisgICAgICAgICAgICBmb3IgKGxldCBub2RlID0gaXRl
cmF0b3IubmV4dE5vZGUoKTsgbm9kZTsgbm9kZSA9IGl0ZXJhdG9yLm5leHROb2RlKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAodGhpcy5oYXNHVUlERm9yTm9kZShub2RlKSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBsZXQgbmV3R1VJRCA9IHRoaXMu
Z3VpZEZvck5vZGUobm9kZSk7CisgICAgICAgICAgICAgICAgbm9kZXNBbmRHVUlEc1RvUHJvY2Vz
cy5wdXNoKFtub2RlLCBuZXdHVUlEXSk7CisgICAgICAgICAgICAgICAgZ3VpZHNUb1Byb2Nlc3Mu
YWRkKG5ld0dVSUQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsZXQgbm9kZUluZm9B
cnJheSA9IFtdOworICAgICAgICAgICAgd2hpbGUgKG5vZGVzQW5kR1VJRHNUb1Byb2Nlc3MubGVu
Z3RoKSB7CisgICAgICAgICAgICAgICAgbGV0IFtub2RlLCBndWlkXSA9IG5vZGVzQW5kR1VJRHNU
b1Byb2Nlc3MucG9wKCk7CisgICAgICAgICAgICAgICAgbGV0IGluZm8gPSB7fTsKKyAgICAgICAg
ICAgICAgICBpbmZvLmd1aWQgPSBndWlkOworICAgICAgICAgICAgICAgIGluZm8udGFnTmFtZSA9
IG5vZGUudGFnTmFtZTsKKyAgICAgICAgICAgICAgICBpbmZvLmF0dHJpYnV0ZXMgPSBHbG9iYWxO
b2RlTWFwLm5vZGVBdHRyaWJ1dGVzVG9PYmplY3Qobm9kZSk7CisgICAgICAgICAgICAgICAgaW5m
by50eXBlID0gbm9kZS5ub2RlVHlwZTsKKyAgICAgICAgICAgICAgICBpbmZvLmRhdGEgPSBHbG9i
YWxOb2RlTWFwLmRhdGFGb3JOb2RlKG5vZGUpOworICAgICAgICAgICAgICAgIGlmIChub2RlLmhh
c0NoaWxkTm9kZXMoKSkgeworICAgICAgICAgICAgICAgICAgICBpbmZvLmNoaWxkR1VJRHMgPSB0
aGlzLmd1aWRzRm9yTm9kZXMobm9kZS5jaGlsZE5vZGVzKTsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIChsZXQgY2hpbGRHVUlEIG9mIGluZm8uY2hpbGRHVUlEcykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFndWlkc1RvUHJvY2Vzcy5oYXMoY2hpbGRHVUlEKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub2Rlc0FuZEdVSURzVG9Qcm9jZXNzLnB1c2goW3RoaXMubm9kZUZv
ckdVSUQoY2hpbGRHVUlEKSwgY2hpbGRHVUlEXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbm9kZUluZm9BcnJheS5wdXNoKGluZm8p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbm9kZUluZm9BcnJheTsKKyAg
ICAgICAgfQorCisgICAgICAgIHN0YXRpYyBmcm9tT2JqZWN0KG5vZGVJbmZvQXJyYXkpIHsKKyAg
ICAgICAgICAgIGxldCBub2Rlc0J5R1VJRCA9IG5ldyBNYXAoKTsKKyAgICAgICAgICAgIGZvciAo
bGV0IGluZm8gb2Ygbm9kZUluZm9BcnJheSkgeworICAgICAgICAgICAgICAgIGxldCBub2RlID0g
bnVsbDsKKyAgICAgICAgICAgICAgICBpZiAoaW5mby50eXBlID09IE5vZGUuRUxFTUVOVF9OT0RF
KQorICAgICAgICAgICAgICAgICAgICBub2RlID0gR2xvYmFsTm9kZU1hcC5lbGVtZW50RnJvbVRh
Z05hbWUoaW5mby50YWdOYW1lLCBpbmZvLmF0dHJpYnV0ZXMsIGluZm8uZGF0YSk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoaW5mby50eXBlID09IE5vZGUuVEVYVF9OT0RFKQorICAgICAgICAgICAg
ICAgICAgICBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoaW5mby5kYXRhKTsKKworICAg
ICAgICAgICAgICAgIGlmIChpbmZvLnR5cGUgPT0gTm9kZS5ET0NVTUVOVF9OT0RFKQorICAgICAg
ICAgICAgICAgICAgICBub2RlID0gZG9jdW1lbnQ7CisKKyAgICAgICAgICAgICAgICBjb25zb2xl
LmFzc2VydChub2RlKTsKKyAgICAgICAgICAgICAgICBub2Rlc0J5R1VJRC5zZXQoaW5mby5ndWlk
LCBub2RlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVGhlbiwgc2V0IGNoaWxk
IG5vZGVzIGZvciBhbGwgbm9kZXMgdGhhdCBkbyBub3QgYXBwZWFyIGluIHRoZSBET00uCisgICAg
ICAgICAgICBmb3IgKGxldCBpbmZvIG9mIG5vZGVJbmZvQXJyYXkuZmlsdGVyKGluZm8gPT4gISFp
bmZvLmNoaWxkR1VJRHMpKSB7CisgICAgICAgICAgICAgICAgbGV0IG5vZGUgPSBub2Rlc0J5R1VJ
RC5nZXQoaW5mby5ndWlkKTsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBjaGlsZEdVSUQgb2Yg
aW5mby5jaGlsZEdVSURzKQorICAgICAgICAgICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChu
b2Rlc0J5R1VJRC5nZXQoY2hpbGRHVUlEKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJldHVybiBuZXcgR2xvYmFsTm9kZU1hcChub2Rlc0J5R1VJRCk7CisgICAgICAgIH0KKworICAg
ICAgICBzdGF0aWMgZGF0YUZvck5vZGUobm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUubm9k
ZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKQorICAgICAgICAgICAgICAgIHJldHVybiBPYmZ1c2Nh
dG9yLnNoYXJlZCgpLmFwcGx5VG9UZXh0KG5vZGUuZGF0YSk7CisKKyAgICAgICAgICAgIGlmIChu
b2RlLnRhZ05hbWUgJiYgbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJhdHRhY2htZW50
IikgeworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6
IG5vZGUuZmlsZS50eXBlLAorICAgICAgICAgICAgICAgICAgICBuYW1lOiBPYmZ1c2NhdG9yLnNo
YXJlZCgpLmFwcGx5VG9GaWxlbmFtZShub2RlLmZpbGUubmFtZSksCisgICAgICAgICAgICAgICAg
ICAgIGxhc3RNb2RpZmllZDogbmV3IERhdGUoKS5nZXRUaW1lKCkKKyAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQor
CisgICAgICAgIHN0YXRpYyBlbGVtZW50RnJvbVRhZ05hbWUodGFnTmFtZSwgYXR0cmlidXRlcywg
ZGF0YSkgeworICAgICAgICAgICAgbGV0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRh
Z05hbWUpOworICAgICAgICAgICAgZm9yIChsZXQgYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVz
KQorICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIGF0dHJp
YnV0ZXNbYXR0cmlidXRlTmFtZV0pOworCisgICAgICAgICAgICBpZiAodGFnTmFtZS50b0xvd2Vy
Q2FzZSgpID09ICJhdHRhY2htZW50IikgeworICAgICAgICAgICAgICAgIG5vZGUuZmlsZSA9IG5l
dyBGaWxlKFtgRmlsZSBuYW1lZCAnJHtkYXRhLm5hbWV9J2BdLCBkYXRhLm5hbWUsIHsKKyAgICAg
ICAgICAgICAgICAgICAgdHlwZTogZGF0YS50eXBlLAorICAgICAgICAgICAgICAgICAgICBsYXN0
TW9kaWZpZWQ6IGRhdGEubGFzdE1vZGlmaWVkCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gUmV0dXJucyBhbiBPYmplY3QgY29udGFpbmluZyBhdHRyaWJ1dGUgbmFtZSA9PiBhdHRyaWJ1
dGUgdmFsdWUKKyAgICAgICAgc3RhdGljIG5vZGVBdHRyaWJ1dGVzVG9PYmplY3Qobm9kZSwgYXR0
cmlidXRlc1RvRXhjbHVkZT1bXSkgeworICAgICAgICAgICAgY29uc3QgZXhjbHVkZUF0dHJpYnV0
ZXNTZXQgPSBuZXcgU2V0KGF0dHJpYnV0ZXNUb0V4Y2x1ZGUpOworICAgICAgICAgICAgaWYgKCFu
b2RlLmF0dHJpYnV0ZXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAg
ICAgIGxldCBhdHRyaWJ1dGVNYXAgPSB7fTsKKyAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0g
MDsgaW5kZXggPCBub2RlLmF0dHJpYnV0ZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAg
ICAgICAgY29uc3QgYXR0cmlidXRlID0gbm9kZS5hdHRyaWJ1dGVzLml0ZW0oaW5kZXgpOworICAg
ICAgICAgICAgICAgIGNvbnN0IFtsb2NhbE5hbWUsIHZhbHVlXSA9IFthdHRyaWJ1dGUubG9jYWxO
YW1lLCBhdHRyaWJ1dGUudmFsdWVdOworICAgICAgICAgICAgICAgIGlmIChleGNsdWRlQXR0cmli
dXRlc1NldC5oYXMobG9jYWxOYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVNYXBbbG9jYWxOYW1lXSA9IHZhbHVlOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlTWFwOworICAgICAgICB9CisK
KyAgICAgICAgZGVzY3JpcHRpb25IVE1MRm9yR1VJRChndWlkKSB7CisgICAgICAgICAgICByZXR1
cm4gYDxzcGFuIGVoLWd1aWQ9JHtndWlkfSBjbGFzcz0iZWgtbm9kZSI+JHt0aGlzLm5vZGVGb3JH
VUlEKGd1aWQpLm5vZGVOYW1lfTwvc3Bhbj5gOworICAgICAgICB9CisKKyAgICAgICAgZGVzY3Jp
cHRpb25IVE1MRm9yTm9kZShub2RlKSB7CisgICAgICAgICAgICBpZiAoIW5vZGUpCisgICAgICAg
ICAgICAgICAgcmV0dXJuICIobnVsbCkiOworICAgICAgICAgICAgcmV0dXJuIGA8c3BhbiBlaC1n
dWlkPSR7dGhpcy5ndWlkRm9yTm9kZShub2RlKX0gY2xhc3M9ImVoLW5vZGUiPiR7bm9kZS5ub2Rl
TmFtZX08L3NwYW4+YDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIFNlbGVjdGlvblN0
YXRlIHsKKyAgICAgICAgY29uc3RydWN0b3Iobm9kZU1hcCwgc3RhcnROb2RlLCBzdGFydE9mZnNl
dCwgZW5kTm9kZSwgZW5kT2Zmc2V0LCBhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQsIGZvY3VzTm9k
ZSwgZm9jdXNPZmZzZXQpIHsKKyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KG5vZGVNYXApOwor
ICAgICAgICAgICAgdGhpcy5ub2RlTWFwID0gbm9kZU1hcDsKKyAgICAgICAgICAgIHRoaXMuc3Rh
cnRHVUlEID0gbm9kZU1hcC5ndWlkRm9yTm9kZShzdGFydE5vZGUpOworICAgICAgICAgICAgdGhp
cy5zdGFydE9mZnNldCA9IHN0YXJ0T2Zmc2V0OworICAgICAgICAgICAgdGhpcy5lbmRHVUlEID0g
bm9kZU1hcC5ndWlkRm9yTm9kZShlbmROb2RlKTsKKyAgICAgICAgICAgIHRoaXMuZW5kT2Zmc2V0
ID0gZW5kT2Zmc2V0OworICAgICAgICAgICAgdGhpcy5hbmNob3JHVUlEID0gbm9kZU1hcC5ndWlk
Rm9yTm9kZShhbmNob3JOb2RlKTsKKyAgICAgICAgICAgIHRoaXMuYW5jaG9yT2Zmc2V0ID0gYW5j
aG9yT2Zmc2V0OworICAgICAgICAgICAgdGhpcy5mb2N1c0dVSUQgPSBub2RlTWFwLmd1aWRGb3JO
b2RlKGZvY3VzTm9kZSk7CisgICAgICAgICAgICB0aGlzLmZvY3VzT2Zmc2V0ID0gZm9jdXNPZmZz
ZXQ7CisgICAgICAgIH0KKworICAgICAgICBpc0VxdWFsKG90aGVyU2VsZWN0aW9uU3RhdGUpIHsK
KyAgICAgICAgICAgIHJldHVybiBvdGhlclNlbGVjdGlvblN0YXRlCisgICAgICAgICAgICAgICAg
JiYgdGhpcy5zdGFydEdVSUQgPT09IG90aGVyU2VsZWN0aW9uU3RhdGUuc3RhcnRHVUlEICYmIHRo
aXMuc3RhcnRPZmZzZXQgPT09IG90aGVyU2VsZWN0aW9uU3RhdGUuc3RhcnRPZmZzZXQKKyAgICAg
ICAgICAgICAgICAmJiB0aGlzLmVuZEdVSUQgPT09IG90aGVyU2VsZWN0aW9uU3RhdGUuZW5kR1VJ
RCAmJiB0aGlzLmVuZE9mZnNldCA9PT0gb3RoZXJTZWxlY3Rpb25TdGF0ZS5lbmRPZmZzZXQKKyAg
ICAgICAgICAgICAgICAmJiB0aGlzLmFuY2hvckdVSUQgPT09IG90aGVyU2VsZWN0aW9uU3RhdGUu
YW5jaG9yR1VJRCAmJiB0aGlzLmFuY2hvck9mZnNldCA9PT0gb3RoZXJTZWxlY3Rpb25TdGF0ZS5h
bmNob3JPZmZzZXQKKyAgICAgICAgICAgICAgICAmJiB0aGlzLmZvY3VzR1VJRCA9PT0gb3RoZXJT
ZWxlY3Rpb25TdGF0ZS5mb2N1c0dVSUQgJiYgdGhpcy5mb2N1c09mZnNldCA9PT0gb3RoZXJTZWxl
Y3Rpb25TdGF0ZS5mb2N1c09mZnNldDsKKyAgICAgICAgfQorCisgICAgICAgIGFwcGx5VG9TZWxl
Y3Rpb24oc2VsZWN0aW9uKSB7CisgICAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2Vz
KCk7CisgICAgICAgICAgICBsZXQgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOworICAg
ICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQodGhpcy5ub2RlTWFwLm5vZGVGb3JHVUlEKHRoaXMuc3Rh
cnRHVUlEKSwgdGhpcy5zdGFydE9mZnNldCk7CisgICAgICAgICAgICByYW5nZS5zZXRFbmQodGhp
cy5ub2RlTWFwLm5vZGVGb3JHVUlEKHRoaXMuZW5kR1VJRCksIHRoaXMuZW5kT2Zmc2V0KTsKKyAg
ICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7CisgICAgICAgICAgICBzZWxlY3Rp
b24uc2V0QmFzZUFuZEV4dGVudCh0aGlzLm5vZGVNYXAubm9kZUZvckdVSUQodGhpcy5hbmNob3JH
VUlEKSwgdGhpcy5hbmNob3JPZmZzZXQsIHRoaXMubm9kZU1hcC5ub2RlRm9yR1VJRCh0aGlzLmZv
Y3VzR1VJRCksIHRoaXMuZm9jdXNPZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGlj
IGZyb21TZWxlY3Rpb24oc2VsZWN0aW9uLCBub2RlTWFwKSB7CisgICAgICAgICAgICBsZXQgW3N0
YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE5vZGUsIGVuZE9mZnNldF0gPSBbbnVsbCwgMCwgbnVs
bCwgMF07CisgICAgICAgICAgICBpZiAoc2VsZWN0aW9uLnJhbmdlQ291bnQpIHsKKyAgICAgICAg
ICAgICAgICBsZXQgc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOworICAg
ICAgICAgICAgICAgIHN0YXJ0Tm9kZSA9IHNlbGVjdGVkUmFuZ2Uuc3RhcnRDb250YWluZXI7Cisg
ICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSBzZWxlY3RlZFJhbmdlLnN0YXJ0T2Zmc2V0Owor
ICAgICAgICAgICAgICAgIGVuZE5vZGUgPSBzZWxlY3RlZFJhbmdlLmVuZENvbnRhaW5lcjsKKyAg
ICAgICAgICAgICAgICBlbmRPZmZzZXQgPSBzZWxlY3RlZFJhbmdlLmVuZE9mZnNldDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBuZXcgU2VsZWN0aW9uU3RhdGUoCisgICAgICAg
ICAgICAgICAgbm9kZU1hcCwgc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zm
c2V0LAorICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLCBzZWxlY3Rpb24uYW5j
aG9yT2Zmc2V0LCBzZWxlY3Rpb24uZm9jdXNOb2RlLCBzZWxlY3Rpb24uZm9jdXNPZmZzZXQKKyAg
ICAgICAgICAgICk7CisgICAgICAgIH0KKworICAgICAgICB0b09iamVjdCgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgc3RhcnRHVUlEOiB0aGlzLnN0YXJ0R1VJRCwg
c3RhcnRPZmZzZXQ6IHRoaXMuc3RhcnRPZmZzZXQsIGVuZEdVSUQ6IHRoaXMuZW5kR1VJRCwgZW5k
T2Zmc2V0OiB0aGlzLmVuZE9mZnNldCwKKyAgICAgICAgICAgICAgICBhbmNob3JHVUlEOiB0aGlz
LmFuY2hvckdVSUQsIGFuY2hvck9mZnNldDogdGhpcy5hbmNob3JPZmZzZXQsIGZvY3VzR1VJRDog
dGhpcy5mb2N1c0dVSUQsIGZvY3VzT2Zmc2V0OiB0aGlzLmZvY3VzT2Zmc2V0CisgICAgICAgICAg
ICB9OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGZyb21PYmplY3QoanNvbiwgbm9kZU1h
cCkgeworICAgICAgICAgICAgaWYgKCFqc29uKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxs
OworCisgICAgICAgICAgICByZXR1cm4gbmV3IFNlbGVjdGlvblN0YXRlKAorICAgICAgICAgICAg
ICAgIG5vZGVNYXAsIG5vZGVNYXAubm9kZUZvckdVSUQoanNvbi5zdGFydEdVSUQpLCBqc29uLnN0
YXJ0T2Zmc2V0LCBub2RlTWFwLm5vZGVGb3JHVUlEKGpzb24uZW5kR1VJRCksIGpzb24uZW5kT2Zm
c2V0LAorICAgICAgICAgICAgICAgIG5vZGVNYXAubm9kZUZvckdVSUQoanNvbi5hbmNob3JHVUlE
KSwganNvbi5hbmNob3JPZmZzZXQsIG5vZGVNYXAubm9kZUZvckdVSUQoanNvbi5mb2N1c0dVSUQp
LCBqc29uLmZvY3VzT2Zmc2V0CisgICAgICAgICAgICApOworICAgICAgICB9CisgICAgfQorCisg
ICAgY2xhc3MgRE9NVXBkYXRlIHsKKyAgICAgICAgY29uc3RydWN0b3Iobm9kZU1hcCkgeworICAg
ICAgICAgICAgY29uc29sZS5hc3NlcnQobm9kZU1hcCk7CisgICAgICAgICAgICB0aGlzLm5vZGVN
YXAgPSBub2RlTWFwOworICAgICAgICB9CisKKyAgICAgICAgYXBwbHkoKSB7CisgICAgICAgICAg
ICB0aHJvdyAiRXhwZWN0ZWQgc3ViY2xhc3MgaW1wbGVtZW50YXRpb24uIjsKKyAgICAgICAgfQor
CisgICAgICAgIHVuYXBwbHkoKSB7CisgICAgICAgICAgICB0aHJvdyAiRXhwZWN0ZWQgc3ViY2xh
c3MgaW1wbGVtZW50YXRpb24uIjsKKyAgICAgICAgfQorCisgICAgICAgIHRhcmdldE5vZGUoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5ub2RlTWFwLm5vZGVGb3JHVUlEKHRoaXMudGFyZ2V0
R1VJRCk7CisgICAgICAgIH0KKworICAgICAgICBkZXRhaWxzRWxlbWVudCgpIHsKKyAgICAgICAg
ICAgIHRocm93ICJFeHBlY3RlZCBzdWJjbGFzcyBpbXBsZW1lbnRhdGlvbi4iOworICAgICAgICB9
CisKKyAgICAgICAgc3RhdGljIG9mVHlwZSh0eXBlKSB7CisgICAgICAgICAgICBpZiAoIURPTVVw
ZGF0ZS5fYWxsVHlwZXMpCisgICAgICAgICAgICAgICAgRE9NVXBkYXRlLl9hbGxUeXBlcyA9IHsg
Q2hpbGRMaXN0VXBkYXRlLCBDaGFyYWN0ZXJEYXRhVXBkYXRlLCBBdHRyaWJ1dGVVcGRhdGUsIElu
cHV0RXZlbnRVcGRhdGUsIFNlbGVjdGlvblVwZGF0ZSB9OworICAgICAgICAgICAgcmV0dXJuIERP
TVVwZGF0ZS5fYWxsVHlwZXNbdHlwZV07CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgZnJv
bVJlY29yZHMocmVjb3Jkcywgbm9kZU1hcCkgeworICAgICAgICAgICAgbGV0IHVwZGF0ZXMgPSBb
XQorICAgICAgICAgICAgICAgICwgY2hhcmFjdGVyRGF0YVVwZGF0ZXMgPSBbXQorICAgICAgICAg
ICAgICAgICwgYXR0cmlidXRlVXBkYXRlcyA9IFtdOworCisgICAgICAgICAgICBmb3IgKGxldCBy
ZWNvcmQgb2YgcmVjb3JkcykgeworICAgICAgICAgICAgICAgIGxldCB0YXJnZXQgPSByZWNvcmQu
dGFyZ2V0OworICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3JkLnR5cGUpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlICJjaGFyYWN0ZXJEYXRhIjoKKyAgICAgICAgICAgICAgICAgICAgdmFyIHVw
ZGF0ZSA9IG5ldyBDaGFyYWN0ZXJEYXRhVXBkYXRlKG5vZGVNYXAsIG5vZGVNYXAuZ3VpZEZvck5v
ZGUodGFyZ2V0KSwgcmVjb3JkLm9sZFZhbHVlLCB0YXJnZXQuZGF0YSkKKyAgICAgICAgICAgICAg
ICAgICAgdXBkYXRlcy5wdXNoKHVwZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGNoYXJhY3Rl
ckRhdGFVcGRhdGVzLnB1c2godXBkYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSAiY2hpbGRMaXN0IjoKKyAgICAgICAgICAgICAgICAgICAgdmFy
IHVwZGF0ZSA9IG5ldyBDaGlsZExpc3RVcGRhdGUobm9kZU1hcCwgbm9kZU1hcC5ndWlkRm9yTm9k
ZSh0YXJnZXQpLCBub2RlTWFwLmd1aWRzRm9yTm9kZXMocmVjb3JkLmFkZGVkTm9kZXMpLCBub2Rl
TWFwLmd1aWRzRm9yTm9kZXMocmVjb3JkLnJlbW92ZWROb2RlcyksIG5vZGVNYXAuZ3VpZEZvck5v
ZGUocmVjb3JkLm5leHRTaWJsaW5nKSkKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlcy5wdXNo
KHVwZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgImF0dHJpYnV0ZXMiOgorICAgICAgICAgICAgICAgICAgICB2YXIgdXBkYXRlID0gbmV3IEF0
dHJpYnV0ZVVwZGF0ZShub2RlTWFwLCBub2RlTWFwLmd1aWRGb3JOb2RlKHRhcmdldCksIHJlY29y
ZC5hdHRyaWJ1dGVOYW1lLCByZWNvcmQub2xkVmFsdWUsIHRhcmdldC5nZXRBdHRyaWJ1dGUocmVj
b3JkLmF0dHJpYnV0ZU5hbWUpKQorICAgICAgICAgICAgICAgICAgICB1cGRhdGVzLnB1c2godXBk
YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVXBkYXRlcy5wdXNoKHVwZGF0ZSk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gQWRqdXN0IGFsbCBjaGFyYWN0ZXIgZGF0YSB1cGRhdGVz
IGZvciB0aGUgc2FtZSB0YXJnZXQuCisgICAgICAgICAgICBjaGFyYWN0ZXJEYXRhVXBkYXRlcy5m
b3JFYWNoKChjdXJyZW50VXBkYXRlLCBpbmRleCkgPT4geworICAgICAgICAgICAgICAgIGlmIChp
bmRleCA9PSBjaGFyYWN0ZXJEYXRhVXBkYXRlcy5sZW5ndGggLSAxKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBuZXh0VXBkYXRlSW5kZXgg
PSBpbmRleCArIDE7IG5leHRVcGRhdGVJbmRleCA8IGNoYXJhY3RlckRhdGFVcGRhdGVzLmxlbmd0
aDsgbmV4dFVwZGF0ZUluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRVcGRh
dGUgPSBjaGFyYWN0ZXJEYXRhVXBkYXRlc1tuZXh0VXBkYXRlSW5kZXhdOworICAgICAgICAgICAg
ICAgICAgICBpZiAoY3VycmVudFVwZGF0ZS50YXJnZXRHVUlEID09PSBuZXh0VXBkYXRlLnRhcmdl
dEdVSUQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRVcGRhdGUubmV3RGF0YSA9
IG5leHRVcGRhdGUub2xkRGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisK
KyAgICAgICAgICAgIC8vIEFkanVzdCBhbGwgYXR0cmlidXRlIHVwZGF0ZXMgZm9yIHRoZSBzYW1l
IHRhcmdldCBhbmQgYXR0cmlidXRlIG5hbWUuCisgICAgICAgICAgICBhdHRyaWJ1dGVVcGRhdGVz
LmZvckVhY2goKGN1cnJlbnRVcGRhdGUsIGluZGV4KSA9PiB7CisgICAgICAgICAgICAgICAgaWYg
KGluZGV4ID09IGF0dHJpYnV0ZVVwZGF0ZXMubGVuZ3RoIC0gMSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgZm9yIChsZXQgbmV4dFVwZGF0ZUluZGV4ID0g
aW5kZXggKyAxOyBuZXh0VXBkYXRlSW5kZXggPCBhdHRyaWJ1dGVVcGRhdGVzLmxlbmd0aDsgbmV4
dFVwZGF0ZUluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRVcGRhdGUgPSBh
dHRyaWJ1dGVVcGRhdGVzW25leHRVcGRhdGVJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGlm
IChjdXJyZW50VXBkYXRlLnRhcmdldEdVSUQgPT09IG5leHRVcGRhdGUudGFyZ2V0R1VJRCAmJiBj
dXJyZW50VXBkYXRlLmF0dHJpYnV0ZSA9PT0gbmV4dFVwZGF0ZS5hdHRyaWJ1dGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRVcGRhdGUubmV3RGF0YSA9IG5leHRVcGRhdGUub2xk
RGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHJl
dHVybiB1cGRhdGVzOworICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgQ2hpbGRMaXN0VXBk
YXRlIGV4dGVuZHMgRE9NVXBkYXRlIHsKKyAgICAgICAgY29uc3RydWN0b3Iobm9kZU1hcCwgdGFy
Z2V0R1VJRCwgYWRkZWRHVUlEcywgcmVtb3ZlZEdVSURzLCBuZXh0U2libGluZ0dVSUQpIHsKKyAg
ICAgICAgICAgIHN1cGVyKG5vZGVNYXApOworICAgICAgICAgICAgdGhpcy50YXJnZXRHVUlEID0g
dGFyZ2V0R1VJRDsKKyAgICAgICAgICAgIHRoaXMuYWRkZWQgPSBhZGRlZEdVSURzOworICAgICAg
ICAgICAgdGhpcy5yZW1vdmVkID0gcmVtb3ZlZEdVSURzOworICAgICAgICAgICAgdGhpcy5uZXh0
U2libGluZ0dVSUQgPSBuZXh0U2libGluZ0dVSUQgPT0gdW5kZWZpbmVkID8gbnVsbCA6IG5leHRT
aWJsaW5nR1VJRDsKKyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KG5vZGVNYXAubm9kZUZvckdV
SUQodGFyZ2V0R1VJRCkpOworICAgICAgICB9CisKKyAgICAgICAgYXBwbHkoKSB7CisgICAgICAg
ICAgICBmb3IgKGxldCByZW1vdmVkTm9kZSBvZiB0aGlzLl9yZW1vdmVkTm9kZXMoKSkKKyAgICAg
ICAgICAgICAgICByZW1vdmVkTm9kZS5yZW1vdmUoKTsKKworICAgICAgICAgICAgbGV0IHRhcmdl
dCA9IHRoaXMudGFyZ2V0Tm9kZSgpOworICAgICAgICAgICAgZm9yIChsZXQgYWRkZWROb2RlIG9m
IHRoaXMuX2FkZGVkTm9kZXMoKSkKKyAgICAgICAgICAgICAgICB0YXJnZXQuaW5zZXJ0QmVmb3Jl
KGFkZGVkTm9kZSwgdGhpcy5fbmV4dFNpYmxpbmcoKSk7CisgICAgICAgIH0KKworICAgICAgICB1
bmFwcGx5KCkgeworICAgICAgICAgICAgZm9yIChsZXQgYWRkZWROb2RlIG9mIHRoaXMuX2FkZGVk
Tm9kZXMoKSkKKyAgICAgICAgICAgICAgICBhZGRlZE5vZGUucmVtb3ZlKCk7CisKKyAgICAgICAg
ICAgIGxldCB0YXJnZXQgPSB0aGlzLnRhcmdldE5vZGUoKTsKKyAgICAgICAgICAgIGZvciAobGV0
IHJlbW92ZWROb2RlIG9mIHRoaXMuX3JlbW92ZWROb2RlcygpKQorICAgICAgICAgICAgICAgIHRh
cmdldC5pbnNlcnRCZWZvcmUocmVtb3ZlZE5vZGUsIHRoaXMuX25leHRTaWJsaW5nKCkpOworICAg
ICAgICB9CisKKyAgICAgICAgX25leHRTaWJsaW5nKCkgeworICAgICAgICAgICAgaWYgKHRoaXMu
bmV4dFNpYmxpbmdHVUlEID09IG51bGwpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5ub2RlTWFwLm5vZGVGb3JHVUlEKHRoaXMubmV4dFNpYmxp
bmdHVUlEKTsKKyAgICAgICAgfQorCisgICAgICAgIF9yZW1vdmVkTm9kZXMoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5ub2RlTWFwLm5vZGVzRm9yR1VJRHModGhpcy5yZW1vdmVkKTsKKyAg
ICAgICAgfQorCisgICAgICAgIF9hZGRlZE5vZGVzKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMubm9kZU1hcC5ub2Rlc0ZvckdVSURzKHRoaXMuYWRkZWQpOworICAgICAgICB9CisKKyAgICAg
ICAgdG9PYmplY3QoKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5
cGU6ICJDaGlsZExpc3RVcGRhdGUiLAorICAgICAgICAgICAgICAgIHRhcmdldEdVSUQ6IHRoaXMu
dGFyZ2V0R1VJRCwKKyAgICAgICAgICAgICAgICBhZGRlZEdVSURzOiB0aGlzLmFkZGVkLAorICAg
ICAgICAgICAgICAgIHJlbW92ZWRHVUlEczogdGhpcy5yZW1vdmVkLAorICAgICAgICAgICAgICAg
IG5leHRTaWJsaW5nR1VJRDogdGhpcy5uZXh0U2libGluZ0dVSUQKKyAgICAgICAgICAgIH07Cisg
ICAgICAgIH0KKworICAgICAgICBkZXRhaWxzRWxlbWVudCgpIHsKKyAgICAgICAgICAgIGxldCBu
ZXh0U2libGluZyA9IHRoaXMuX25leHRTaWJsaW5nKCk7CisgICAgICAgICAgICBsZXQgaHRtbCA9
CisgICAgICAgICAgICBgPGRldGFpbHM+CisgICAgICAgICAgICAgICAgPHN1bW1hcnk+Y2hpbGQg
bGlzdCBjaGFuZ2VkPC9zdW1tYXJ5PgorICAgICAgICAgICAgICAgIDx1bD4KKyAgICAgICAgICAg
ICAgICAgICAgPGxpPnBhcmVudDogJHt0aGlzLm5vZGVNYXAuZGVzY3JpcHRpb25IVE1MRm9yR1VJ
RCh0aGlzLnRhcmdldEdVSUQpfTwvbGk+CisgICAgICAgICAgICAgICAgICAgIDxsaT5hZGRlZDog
WyAke1t0aGlzLl9hZGRlZE5vZGVzKCkubWFwKG5vZGUgPT4gdGhpcy5ub2RlTWFwLmRlc2NyaXB0
aW9uSFRNTEZvck5vZGUobm9kZSkpXX0gXTwvbGk+CisgICAgICAgICAgICAgICAgICAgIDxsaT5y
ZW1vdmVkOiBbICR7W3RoaXMuX3JlbW92ZWROb2RlcygpLm1hcChub2RlID0+IHRoaXMubm9kZU1h
cC5kZXNjcmlwdGlvbkhUTUxGb3JOb2RlKG5vZGUpKV19IF08L2xpPgorICAgICAgICAgICAgICAg
ICAgICA8bGk+YmVmb3JlIHNpYmxpbmc6ICR7bmV4dFNpYmxpbmcgPyB0aGlzLm5vZGVNYXAuZGVz
Y3JpcHRpb25IVE1MRm9yTm9kZShuZXh0U2libGluZykgOiAiKG51bGwpIn08L2xpPgorICAgICAg
ICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8L2RldGFpbHM+YDsKKyAgICAgICAgICAgIHJl
dHVybiBlbGVtZW50RnJvbU1hcmtkb3duKGh0bWwpOworICAgICAgICB9CisKKyAgICAgICAgc3Rh
dGljIGZyb21PYmplY3QoanNvbiwgbm9kZU1hcCkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBD
aGlsZExpc3RVcGRhdGUobm9kZU1hcCwganNvbi50YXJnZXRHVUlELCBqc29uLmFkZGVkR1VJRHMs
IGpzb24ucmVtb3ZlZEdVSURzLCBqc29uLm5leHRTaWJsaW5nR1VJRCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBjbGFzcyBDaGFyYWN0ZXJEYXRhVXBkYXRlIGV4dGVuZHMgRE9NVXBkYXRlIHsK
KyAgICAgICAgY29uc3RydWN0b3Iobm9kZU1hcCwgdGFyZ2V0R1VJRCwgb2xkRGF0YSwgbmV3RGF0
YSkgeworICAgICAgICAgICAgc3VwZXIobm9kZU1hcCk7CisgICAgICAgICAgICB0aGlzLnRhcmdl
dEdVSUQgPSB0YXJnZXRHVUlEOworICAgICAgICAgICAgdGhpcy5vbGREYXRhID0gb2xkRGF0YTsK
KyAgICAgICAgICAgIHRoaXMubmV3RGF0YSA9IG5ld0RhdGE7CisgICAgICAgICAgICBjb25zb2xl
LmFzc2VydChub2RlTWFwLm5vZGVGb3JHVUlEKHRhcmdldEdVSUQpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGFwcGx5KCkgeworICAgICAgICAgICAgdGhpcy50YXJnZXROb2RlKCkuZGF0YSA9IHRo
aXMubmV3RGF0YTsKKyAgICAgICAgfQorCisgICAgICAgIHVuYXBwbHkoKSB7CisgICAgICAgICAg
ICB0aGlzLnRhcmdldE5vZGUoKS5kYXRhID0gdGhpcy5vbGREYXRhOworICAgICAgICB9CisKKyAg
ICAgICAgZGV0YWlsc0VsZW1lbnQoKSB7CisgICAgICAgICAgICBsZXQgaHRtbCA9CisgICAgICAg
ICAgICBgPGRldGFpbHM+CisgICAgICAgICAgICAgICAgPHN1bW1hcnk+Y2hhcmFjdGVyIGRhdGEg
Y2hhbmdlZDwvc3VtbWFyeT4KKyAgICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAg
ICAgIDxsaT5vbGQ6ICR7dGhpcy5vbGREYXRhICE9IG51bGwgPyAiJyIgKyB0aGlzLm9sZERhdGEg
KyAiJyIgOiAiKG51bGwpIn08L2xpPgorICAgICAgICAgICAgICAgICAgICA8bGk+bmV3OiAke3Ro
aXMubmV3RGF0YSAhPSBudWxsID8gIiciICsgdGhpcy5uZXdEYXRhICsgIiciIDogIihudWxsKSJ9
PC9saT4KKyAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPC9kZXRhaWxzPmA7Cisg
ICAgICAgICAgICByZXR1cm4gZWxlbWVudEZyb21NYXJrZG93bihodG1sKTsKKyAgICAgICAgfQor
CisgICAgICAgIHRvT2JqZWN0KCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgICB0eXBlOiAiQ2hhcmFjdGVyRGF0YVVwZGF0ZSIsCisgICAgICAgICAgICAgICAgdGFyZ2V0
R1VJRDogdGhpcy50YXJnZXRHVUlELAorICAgICAgICAgICAgICAgIG9sZERhdGE6IE9iZnVzY2F0
b3Iuc2hhcmVkKCkuYXBwbHlUb1RleHQodGhpcy5vbGREYXRhKSwKKyAgICAgICAgICAgICAgICBu
ZXdEYXRhOiBPYmZ1c2NhdG9yLnNoYXJlZCgpLmFwcGx5VG9UZXh0KHRoaXMubmV3RGF0YSkKKyAg
ICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgZnJvbU9iamVjdChqc29u
LCBub2RlTWFwKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IENoYXJhY3RlckRhdGFVcGRhdGUo
bm9kZU1hcCwganNvbi50YXJnZXRHVUlELCBqc29uLm9sZERhdGEsIGpzb24ubmV3RGF0YSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBBdHRyaWJ1dGVVcGRhdGUgZXh0ZW5kcyBET01V
cGRhdGUgeworICAgICAgICBjb25zdHJ1Y3Rvcihub2RlTWFwLCB0YXJnZXRHVUlELCBhdHRyaWJ1
dGUsIG9sZFZhbHVlLCBuZXdWYWx1ZSkgeworICAgICAgICAgICAgc3VwZXIobm9kZU1hcCk7Cisg
ICAgICAgICAgICB0aGlzLnRhcmdldEdVSUQgPSB0YXJnZXRHVUlEOworICAgICAgICAgICAgdGhp
cy5hdHRyaWJ1dGUgPSBhdHRyaWJ1dGU7CisgICAgICAgICAgICB0aGlzLm9sZFZhbHVlID0gb2xk
VmFsdWU7CisgICAgICAgICAgICB0aGlzLm5ld1ZhbHVlID0gbmV3VmFsdWU7CisgICAgICAgICAg
ICBjb25zb2xlLmFzc2VydChub2RlTWFwLm5vZGVGb3JHVUlEKHRhcmdldEdVSUQpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGFwcGx5KCkgeworICAgICAgICAgICAgaWYgKHRoaXMubmV3VmFsdWUg
PT0gbnVsbCkKKyAgICAgICAgICAgICAgICB0aGlzLnRhcmdldE5vZGUoKS5yZW1vdmVBdHRyaWJ1
dGUodGhpcy5hdHRyaWJ1dGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRo
aXMudGFyZ2V0Tm9kZSgpLnNldEF0dHJpYnV0ZSh0aGlzLmF0dHJpYnV0ZSwgdGhpcy5uZXdWYWx1
ZSk7CisgICAgICAgIH0KKworICAgICAgICB1bmFwcGx5KCkgeworICAgICAgICAgICAgaWYgKHRo
aXMub2xkVmFsdWUgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICB0aGlzLnRhcmdldE5vZGUoKS5y
ZW1vdmVBdHRyaWJ1dGUodGhpcy5hdHRyaWJ1dGUpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHRoaXMudGFyZ2V0Tm9kZSgpLnNldEF0dHJpYnV0ZSh0aGlzLmF0dHJpYnV0ZSwg
dGhpcy5vbGRWYWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBkZXRhaWxzRWxlbWVudCgpIHsK
KyAgICAgICAgICAgIGxldCBodG1sID0KKyAgICAgICAgICAgIGA8ZGV0YWlscz4KKyAgICAgICAg
ICAgICAgICA8c3VtbWFyeT5hdHRyaWJ1dGUgY2hhbmdlZDwvc3VtbWFyeT4KKyAgICAgICAgICAg
ICAgICA8dWw+CisgICAgICAgICAgICAgICAgICAgIDxsaT50YXJnZXQ6ICR7dGhpcy5ub2RlTWFw
LmRlc2NyaXB0aW9uSFRNTEZvckdVSUQodGhpcy50YXJnZXRHVUlEKX08L2xpPgorICAgICAgICAg
ICAgICAgICAgICA8bGk+YXR0cmlidXRlOiAke3RoaXMuYXR0cmlidXRlfTwvbGk+CisgICAgICAg
ICAgICAgICAgICAgIDxsaT5vbGQ6ICR7dGhpcy5vbGRWYWx1ZSAhPSBudWxsID8gIiciICsgdGhp
cy5vbGRWYWx1ZSArICInIiA6ICIobnVsbCkifTwvbGk+CisgICAgICAgICAgICAgICAgICAgIDxs
aT5uZXc6ICR7dGhpcy5uZXdWYWx1ZSAhPSBudWxsID8gIiciICsgdGhpcy5uZXdWYWx1ZSArICIn
IiA6ICIobnVsbCkifTwvbGk+CisgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgIDwv
ZGV0YWlscz5gOworICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRGcm9tTWFya2Rvd24oaHRtbCk7
CisgICAgICAgIH0KKworICAgICAgICB0b09iamVjdCgpIHsKKyAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgdHlwZTogIkF0dHJpYnV0ZVVwZGF0ZSIsCisgICAgICAgICAgICAg
ICAgdGFyZ2V0R1VJRDogdGhpcy50YXJnZXRHVUlELAorICAgICAgICAgICAgICAgIGF0dHJpYnV0
ZTogdGhpcy5hdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgb2xkVmFsdWU6IHRoaXMub2xkVmFs
dWUsCisgICAgICAgICAgICAgICAgbmV3VmFsdWU6IHRoaXMubmV3VmFsdWUKKyAgICAgICAgICAg
IH07CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgZnJvbU9iamVjdChqc29uLCBub2RlTWFw
KSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IEF0dHJpYnV0ZVVwZGF0ZShub2RlTWFwLCBqc29u
LnRhcmdldEdVSUQsIGpzb24uYXR0cmlidXRlLCBqc29uLm9sZFZhbHVlLCBqc29uLm5ld1ZhbHVl
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIFNlbGVjdGlvblVwZGF0ZSBleHRlbmRz
IERPTVVwZGF0ZSB7CisgICAgICAgIGNvbnN0cnVjdG9yKG5vZGVNYXAsIHN0YXRlKSB7CisgICAg
ICAgICAgICBzdXBlcihub2RlTWFwKTsKKyAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIEhBQ0s6IFNlbGVjdGlvblVwZGF0ZXMgYXJlIG5vdCBh
cHBsaWVkL3VuYXBwbGllZCBieSB0aGUgbm9ybWFsIG1lYW5zLiBUaGUgc2VsZWN0aW9uIGlzIGFw
cGxpZWQgdmlhCisgICAgICAgIC8vIERPTVVwZGF0ZUhpc3RvcnlDb250ZXh0LmFwcGx5Q3VycmVu
dFNlbGVjdGlvblN0YXRlIGluc3RlYWQsIHdoaWNoIGNvbnNpZGVycyB0aGUgdXBkYXRlcyBiZWZv
cmUgYW5kIGFmdGVyIHRoZQorICAgICAgICAvLyBjdXJyZW50IHVwZGF0ZSBpbmRleC4KKyAgICAg
ICAgYXBwbHkoKSB7IH0KKyAgICAgICAgdW5hcHBseSgpIHsgfQorCisgICAgICAgIHRvT2JqZWN0
KCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiAiU2VsZWN0
aW9uVXBkYXRlIiwKKyAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSA/IHRoaXMuc3Rh
dGUudG9PYmplY3QoKSA6IG51bGwKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAg
ICBzdGF0aWMgZnJvbU9iamVjdChqc29uLCBub2RlTWFwKSB7CisgICAgICAgICAgICByZXR1cm4g
bmV3IFNlbGVjdGlvblVwZGF0ZShub2RlTWFwLCBTZWxlY3Rpb25TdGF0ZS5mcm9tT2JqZWN0KGpz
b24uc3RhdGUsIG5vZGVNYXApKTsKKyAgICAgICAgfQorCisgICAgICAgIF9yYW5nZURlc2NyaXB0
aW9uSFRNTCgpIHsKKyAgICAgICAgICAgIHJldHVybiBgKCR7dGhpcy5ub2RlTWFwLmRlc2NyaXB0
aW9uSFRNTEZvckdVSUQodGhpcy5zdGF0ZS5zdGFydEdVSUQpfToke3RoaXMuc3RhdGUuc3RhcnRP
ZmZzZXR9LAorICAgICAgICAgICAgICAgICR7dGhpcy5ub2RlTWFwLmRlc2NyaXB0aW9uSFRNTEZv
ckdVSUQodGhpcy5zdGF0ZS5lbmRHVUlEKX06JHt0aGlzLnN0YXRlLmVuZE9mZnNldH0pYDsKKyAg
ICAgICAgfQorCisgICAgICAgIF9hbmNob3JEZXNjcmlwdGlvbkhUTUwoKSB7CisgICAgICAgICAg
ICByZXR1cm4gYCR7dGhpcy5ub2RlTWFwLmRlc2NyaXB0aW9uSFRNTEZvckdVSUQodGhpcy5zdGF0
ZS5hbmNob3JHVUlEKX06JHt0aGlzLnN0YXRlLmFuY2hvck9mZnNldH1gOworICAgICAgICB9CisK
KyAgICAgICAgX2ZvY3VzRGVzY3JpcHRpb25IVE1MKCkgeworICAgICAgICAgICAgcmV0dXJuIGAk
e3RoaXMubm9kZU1hcC5kZXNjcmlwdGlvbkhUTUxGb3JHVUlEKHRoaXMuc3RhdGUuZm9jdXNHVUlE
KX06JHt0aGlzLnN0YXRlLmZvY3VzT2Zmc2V0fWA7CisgICAgICAgIH0KKworICAgICAgICBkZXRh
aWxzRWxlbWVudCgpIHsKKyAgICAgICAgICAgIGxldCBodG1sID0KKyAgICAgICAgICAgIGA8ZGV0
YWlscz4KKyAgICAgICAgICAgICAgICA8c3VtbWFyeT5TZWxlY3Rpb24gY2hhbmdlZDwvc3VtbWFy
eT4KKyAgICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgICAgIDxsaT5yYW5nZTog
JHt0aGlzLl9yYW5nZURlc2NyaXB0aW9uSFRNTCgpfTwvbGk+CisgICAgICAgICAgICAgICAgICAg
IDxsaT5hbmNob3I6ICR7dGhpcy5fYW5jaG9yRGVzY3JpcHRpb25IVE1MKCl9PC9saT4KKyAgICAg
ICAgICAgICAgICAgICAgPGxpPmZvY3VzOiAke3RoaXMuX2ZvY3VzRGVzY3JpcHRpb25IVE1MKCl9
PC9saT4KKyAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPC9kZXRhaWxzPmA7Cisg
ICAgICAgICAgICByZXR1cm4gZWxlbWVudEZyb21NYXJrZG93bihodG1sKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGNsYXNzIElucHV0RXZlbnRVcGRhdGUgZXh0ZW5kcyBET01VcGRhdGUgewor
ICAgICAgICBjb25zdHJ1Y3Rvcihub2RlTWFwLCB1cGRhdGVzLCBpbnB1dFR5cGUsIGRhdGEsIHRp
bWVTdGFtcCkgeworICAgICAgICAgICAgc3VwZXIobm9kZU1hcCk7CisgICAgICAgICAgICB0aGlz
LnVwZGF0ZXMgPSB1cGRhdGVzOworICAgICAgICAgICAgdGhpcy5pbnB1dFR5cGUgPSBpbnB1dFR5
cGU7CisgICAgICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOworICAgICAgICAgICAgdGhpcy50aW1l
U3RhbXAgPSB0aW1lU3RhbXA7CisgICAgICAgIH0KKworICAgICAgICBfb2JmdXNjYXRlZERhdGEo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dFR5cGUuaW5kZXhPZigiaW5zZXJ0Iikg
PT0gMCA/IE9iZnVzY2F0b3Iuc2hhcmVkKCkuYXBwbHlUb1RleHQodGhpcy5kYXRhKSA6IHRoaXMu
ZGF0YTsKKyAgICAgICAgfQorCisgICAgICAgIGFwcGx5KCkgeworICAgICAgICAgICAgZm9yIChs
ZXQgdXBkYXRlIG9mIHRoaXMudXBkYXRlcykKKyAgICAgICAgICAgICAgICB1cGRhdGUuYXBwbHko
KTsKKyAgICAgICAgfQorCisgICAgICAgIHVuYXBwbHkoKSB7CisgICAgICAgICAgICBmb3IgKGxl
dCBpbmRleCA9IHRoaXMudXBkYXRlcy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKQor
ICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlc1tpbmRleF0udW5hcHBseSgpOworICAgICAgICB9
CisKKyAgICAgICAgdG9PYmplY3QoKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgIHR5cGU6ICJJbnB1dEV2ZW50VXBkYXRlIiwKKyAgICAgICAgICAgICAgICBpbnB1dFR5
cGU6IHRoaXMuaW5wdXRUeXBlLAorICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuX29iZnVzY2F0
ZWREYXRhKCksCisgICAgICAgICAgICAgICAgdGltZVN0YW1wOiB0aGlzLnRpbWVTdGFtcCwKKyAg
ICAgICAgICAgICAgICB1cGRhdGVzOiB0aGlzLnVwZGF0ZXMubWFwKHVwZGF0ZSA9PiB1cGRhdGUu
dG9PYmplY3QoKSkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMg
ZnJvbU9iamVjdChqc29uLCBub2RlTWFwKSB7CisgICAgICAgICAgICBsZXQgdXBkYXRlcyA9IGpz
b24udXBkYXRlcy5tYXAodXBkYXRlID0+IERPTVVwZGF0ZS5vZlR5cGUodXBkYXRlLnR5cGUpLmZy
b21PYmplY3QodXBkYXRlLCBub2RlTWFwKSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IElucHV0
RXZlbnRVcGRhdGUobm9kZU1hcCwgdXBkYXRlcywganNvbi5pbnB1dFR5cGUsIGpzb24uZGF0YSwg
anNvbi50aW1lU3RhbXApOworICAgICAgICB9CisKKyAgICAgICAgZGV0YWlsc0VsZW1lbnQoKSB7
CisgICAgICAgICAgICBsZXQgaHRtbCA9CisgICAgICAgICAgICBgPGRldGFpbHM+CisgICAgICAg
ICAgICAgICAgPHN1bW1hcnk+SW5wdXQgKCR7dGhpcy5pbnB1dFR5cGV9KTwvc3VtbWFyeT4KKyAg
ICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgICAgIDxsaT50aW1lOiAke3RoaXMu
dGltZVN0YW1wfTwvbGk+CisgICAgICAgICAgICAgICAgICAgIDxsaT5kYXRhOiAkeyF0aGlzLmRh
dGEgPyAiKG51bGwpIiA6ICInIiArIHRoaXMuZGF0YSArICInIn08L2xpPgorICAgICAgICAgICAg
ICAgIDwvdWw+CisgICAgICAgICAgICA8L2RldGFpbHM+YDsKKyAgICAgICAgICAgIGxldCB0b3BM
ZXZlbERldGFpbHMgPSBlbGVtZW50RnJvbU1hcmtkb3duKGh0bWwpOworICAgICAgICAgICAgZm9y
IChsZXQgdXBkYXRlIG9mIHRoaXMudXBkYXRlcykKKyAgICAgICAgICAgICAgICB0b3BMZXZlbERl
dGFpbHMuY2hpbGRyZW5bdG9wTGV2ZWxEZXRhaWxzLmNoaWxkRWxlbWVudENvdW50IC0gMV0uYXBw
ZW5kQ2hpbGQodXBkYXRlLmRldGFpbHNFbGVtZW50KCkpOworICAgICAgICAgICAgcmV0dXJuIHRv
cExldmVsRGV0YWlsczsKKyAgICAgICAgfQorICAgIH0KKworICAgIHdpbmRvdy5FZGl0aW5nSGlz
dG9yeSA9IHsKKyAgICAgICAgR2xvYmFsTm9kZU1hcCwKKyAgICAgICAgU2VsZWN0aW9uU3RhdGUs
CisgICAgICAgIERPTVVwZGF0ZSwKKyAgICAgICAgQ2hpbGRMaXN0VXBkYXRlLAorICAgICAgICBD
aGFyYWN0ZXJEYXRhVXBkYXRlLAorICAgICAgICBBdHRyaWJ1dGVVcGRhdGUsCisgICAgICAgIFNl
bGVjdGlvblVwZGF0ZSwKKyAgICAgICAgSW5wdXRFdmVudFVwZGF0ZSwKKyAgICAgICAgT2JmdXNj
YXRvcgorICAgIH07Cit9KSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRp
dGluZ0hpc3RvcnkvUmVzb3VyY2VzL1BsYXliYWNrSGFybmVzcy5odG1sIGIvVG9vbHMvRWRpdGlu
Z0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvUmVzb3VyY2VzL1BsYXliYWNrSGFybmVzcy5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjBlMTExZDY1ZWQ1NDhlZTYwODFlZTBlYzFlMGIwOWFjMTAzZDc3MDMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9SZXNvdXJj
ZXMvUGxheWJhY2tIYXJuZXNzLmh0bWwKQEAgLTAsMCArMSwzODggQEAKKzxodG1sPgorPGhlYWQ+
Cis8c3R5bGU+Citib2R5IHsKKyAgICBtYXJnaW46IDhweDsKK30KKworI292ZXJsYXkgeworICAg
IHdpZHRoOiAzMjBweDsKKyAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDMycHgpOworICAgIHBvc2l0
aW9uOiBmaXhlZDsKKyAgICByaWdodDogMTZweDsKKyAgICB0b3A6IDE2cHg7CisgICAgYmFja2dy
b3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KTsKK30KKworI3VwZGF0ZUluZm9Q
YW5lbCB7CisgICAgaGVpZ2h0OiBjYWxjKDkwJSAtIDIwcHgpOworICAgIG92ZXJmbG93OiBzY3Jv
bGw7CisgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKKyAgICBwYWRkaW5nOiAxMHB4OworfQorCisj
Y29udHJvbHMgeworICAgIGhlaWdodDogMTAlOworICAgIGRpc3BsYXk6IGZsZXg7CisgICAgZmxl
eC1kaXJlY3Rpb246IGNvbHVtbjsKKyAgICBhbGlnbi1pdGVtczogY2VudGVyOworICAgIHRleHQt
YWxpZ246IGNlbnRlcjsKK30KKworI2NvbnRyb2xzLXdyYXBwZXIgeworICAgIG1hcmdpbjogMCBh
dXRvOworfQorCitzdW1tYXJ5OmZvY3VzIHsKKyAgICBvdXRsaW5lOiBub25lOworfQorCitkZXRh
aWxzIHsKKyAgICBwYWRkaW5nOiA0cHggMDsKK30KKworI3VwZGF0ZU1hcmtlciB7CisgICAgd2lk
dGg6IDUwJTsKKyAgICBtYXJnaW46IDIwcHggMDsKKyAgICBib3JkZXItdG9wOiAxcHggcmVkIGRh
c2hlZDsKK30KKworLmVoLW5vZGUgeworICAgIG1hcmdpbjogMCAycHg7CisgICAgcGFkZGluZzog
MCA0cHg7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg1OSwgMTMxLCAyMzgsIDAuMjUpOwor
ICAgIGJvcmRlci1yYWRpdXM6IDRweDsKKyAgICBjdXJzb3I6IGRlZmF1bHQ7Cit9CisKKy5laC1u
b2RlOmhvdmVyIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDU5LCAxMzEsIDIzOCwgMC41
KTsKK30KKworLm5vZGUtaGlnaGxpZ2h0IHsKKyAgICBwb3NpdGlvbjogZml4ZWQ7CisgICAgYmFj
a2dyb3VuZC1jb2xvcjogcmdiYSg1OSwgMTMxLCAyMzgsIDAuMDUpOworICAgIGJvcmRlcjogMXB4
IHNvbGlkIHJnYig1OSwgMTMxLCAyMzgpOworICAgIGJvcmRlci1yYWRpdXM6IDRweDsKKyAgICB6
LWluZGV4OiAtMTsKK30KKworbGkgeworICAgIGxpbmUtaGVpZ2h0OiAxLjU7Cit9CisKK3N1bW1h
cnkgeworICAgIG1hcmdpbi10b3A6IDA7Cit9CisKKyNkcm9wem9uZSB7CisgICAgbWFyZ2luOiAx
MDBweDsKKyAgICBwYWRkaW5nOiA1MHB4OworICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAzMDBweCk7
CisgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAzMDBweCk7CisgICAgYm9yZGVyOiAxNXB4ICNFOEU4
RTggZGFzaGVkOworICAgIGRpc3BsYXk6IGZsZXg7CisgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsK
KyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgY3Vyc29yOiBwb2ludGVyOworfQorCithOnZp
c2l0ZWQsIGE6bGluayB7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGNvbG9yOiBy
ZWQ7Cit9CisKKyN1cGxvYWQgeworICAgIG9wYWNpdHk6IDA7Cit9CisKKyNkcm9wTWVzc2FnZSB7
CisgICAgZm9udC1zaXplOiA1MHB4OworICAgIGNvbG9yOiAjRThFOEU4OworICAgIG1hcmdpbjog
MCBhdXRvOworICAgIHBvaW50ZXItZXZlbnRzOiBub25lOworICAgIGZvbnQtZmFtaWx5OiAtYXBw
bGUtc3lzdGVtOworfQorPC9zdHlsZT4KKzxzY3JpcHQgc3JjPSJET01UZXN0aW5nVXRpbC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iRWRpdGluZ0hpc3RvcnlVdGlsLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQ+CitjbGFzcyBET01VcGRhdGVIaXN0b3J5Q29udGV4dCB7CisgICAgY29uc3RydWN0
b3Iobm9kZU1hcCwgdXBkYXRlcykgeworICAgICAgICB0aGlzLl9ub2RlTWFwID0gbm9kZU1hcDsK
KyAgICAgICAgdGhpcy5fdXBkYXRlcyA9IHVwZGF0ZXM7CisgICAgICAgIHRoaXMuX2N1cnJlbnRV
cGRhdGVJbmRleCA9IHVwZGF0ZXMubGVuZ3RoOworICAgIH0KKworICAgIGN1cnJlbnRJbmRleCgp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRVcGRhdGVJbmRleDsKKyAgICB9CisKKyAg
ICB1cGRhdGVzKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlczsKKyAgICB9CisKKyAg
ICB1cGRhdGVBdChpbmRleCkgeworICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRo
aXMuX3VwZGF0ZXMubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAg
cmV0dXJuIHRoaXMuX3VwZGF0ZXNbaW5kZXhdOworICAgIH0KKworICAgIHNlbGVjdGlvblN0YXRl
QXQoaW5kZXgpIHsKKyAgICAgICAgbGV0IGJlZm9yZVVwZGF0ZSA9IHRoaXMudXBkYXRlQXQoaW5k
ZXggLSAxKTsKKyAgICAgICAgbGV0IGFmdGVyVXBkYXRlID0gdGhpcy51cGRhdGVBdChpbmRleCk7
CisgICAgICAgIGlmIChiZWZvcmVVcGRhdGUgaW5zdGFuY2VvZiBFZGl0aW5nSGlzdG9yeS5TZWxl
Y3Rpb25VcGRhdGUpCisgICAgICAgICAgICByZXR1cm4gYmVmb3JlVXBkYXRlLnN0YXRlOworICAg
ICAgICBpZiAoYWZ0ZXJVcGRhdGUgaW5zdGFuY2VvZiBFZGl0aW5nSGlzdG9yeS5TZWxlY3Rpb25V
cGRhdGUpCisgICAgICAgICAgICByZXR1cm4gYWZ0ZXJVcGRhdGUuc3RhdGU7CisgICAgICAgIHJl
dHVybiBudWxsOworICAgIH0KKworICAgIGFwcGx5Q3VycmVudFNlbGVjdGlvblN0YXRlKHNlbGVj
dGlvbikgeworICAgICAgICBsZXQgc2VsZWN0aW9uU3RhdGUgPSB0aGlzLnNlbGVjdGlvblN0YXRl
QXQodGhpcy5fY3VycmVudFVwZGF0ZUluZGV4KTsKKyAgICAgICAgaWYgKHNlbGVjdGlvblN0YXRl
ICYmIHNlbGVjdGlvbikKKyAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLmFwcGx5VG9TZWxlY3Rp
b24oc2VsZWN0aW9uKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2VsZWN0aW9uLnJlbW92
ZUFsbFJhbmdlcygpOworICAgIH0KKworICAgIG5leHQoKSB7CisgICAgICAgIGlmICh0aGlzLl9j
dXJyZW50VXBkYXRlSW5kZXggPj0gdGhpcy5fdXBkYXRlcy5sZW5ndGgpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgdGhpcy5fdXBkYXRlc1t0aGlzLl9jdXJyZW50VXBkYXRlSW5kZXhd
LmFwcGx5KCk7CisgICAgICAgIHRoaXMuX2N1cnJlbnRVcGRhdGVJbmRleCsrOworICAgIH0KKwor
ICAgIHByZXZpb3VzKCkgeworICAgICAgICBpZiAodGhpcy5fY3VycmVudFVwZGF0ZUluZGV4IDw9
IDApCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5fdXBkYXRlc1t0aGlzLl9j
dXJyZW50VXBkYXRlSW5kZXggLSAxXS51bmFwcGx5KCk7CisgICAgICAgIHRoaXMuX2N1cnJlbnRV
cGRhdGVJbmRleC0tOworICAgIH0KKworICAgIGp1bXBUbyhpbmRleCkgeworICAgICAgICBpbmRl
eCA9IE1hdGgubWF4KE1hdGgubWluKGluZGV4LCB0aGlzLl91cGRhdGVzLmxlbmd0aCksIDApOwor
ICAgICAgICB3aGlsZSh0aGlzLl9jdXJyZW50VXBkYXRlSW5kZXggIT0gaW5kZXgpIHsKKyAgICAg
ICAgICAgIGlmICh0aGlzLl9jdXJyZW50VXBkYXRlSW5kZXggPCBpbmRleCkKKyAgICAgICAgICAg
ICAgICB0aGlzLm5leHQoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aGlz
LnByZXZpb3VzKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3dpbmRvdy5vbmxvYWQgPSAoKSA9
PiB7CisgICAgZnVuY3Rpb24gc2V0dXBFZGl0aW5nSGlzdG9yeShqc29uRGF0YSwgd2l0aENvbnRy
b2xzPXRydWUpIHsKKyAgICAgICAgbGV0IHBhcnNlZFJlc3VsdCA9IEpTT04ucGFyc2UoanNvbkRh
dGEpOworICAgICAgICBsZXQgZ2xvYmFsTm9kZU1hcCA9IEVkaXRpbmdIaXN0b3J5Lkdsb2JhbE5v
ZGVNYXAuZnJvbU9iamVjdChwYXJzZWRSZXN1bHQuZ2xvYmFsTm9kZU1hcCk7CisgICAgICAgIGxl
dCB1cGRhdGVzID0gcGFyc2VkUmVzdWx0LnVwZGF0ZXMubWFwKHVwZGF0ZUluZm8gPT4gRWRpdGlu
Z0hpc3RvcnkuRE9NVXBkYXRlLm9mVHlwZSh1cGRhdGVJbmZvLnR5cGUpLmZyb21PYmplY3QodXBk
YXRlSW5mbywgZ2xvYmFsTm9kZU1hcCkpOworICAgICAgICBFZGl0aW5nSGlzdG9yeS5jb250ZXh0
ID0gbmV3IERPTVVwZGF0ZUhpc3RvcnlDb250ZXh0KGdsb2JhbE5vZGVNYXAsIHVwZGF0ZXMpOwor
CisgICAgICAgIGZ1bmN0aW9uIGRldGFpbHNFbGVtZW50QXRJbmRleChpbmRleCkgeworICAgICAg
ICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCN1cGRhdGVJbmZvLSR7aW5kZXh9
YCk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB1cGRhdGVPdmVybGF5KCkgeworICAg
ICAgICAgICAgbGV0IGN1cnJlbnRJbmRleCA9IEVkaXRpbmdIaXN0b3J5LmNvbnRleHQuY3VycmVu
dEluZGV4KCk7CisgICAgICAgICAgICBsZXQgbnVtYmVyT2ZVcGRhdGVzID0gRWRpdGluZ0hpc3Rv
cnkuY29udGV4dC51cGRhdGVzKCkubGVuZ3RoOworICAgICAgICAgICAgcHJvZ3Jlc3NMYWJlbC50
ZXh0Q29udGVudCA9IGAke2N1cnJlbnRJbmRleH0vJHtudW1iZXJPZlVwZGF0ZXN9YDsKKyAgICAg
ICAgICAgIHByZXZpb3VzQnV0dG9uLmRpc2FibGVkID0gY3VycmVudEluZGV4IDw9IDA7CisgICAg
ICAgICAgICBuZXh0QnV0dG9uLmRpc2FibGVkID0gY3VycmVudEluZGV4ID49IG51bWJlck9mVXBk
YXRlczsKKyAgICAgICAgICAgIHVwZGF0ZU1hcmtlci5yZW1vdmUoKTsKKyAgICAgICAgICAgIGlm
ICgwIDw9IGN1cnJlbnRJbmRleCAmJiBjdXJyZW50SW5kZXggPD0gbnVtYmVyT2ZVcGRhdGVzKSB7
CisgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRVcGRhdGVEZXRhaWxzID0gZGV0YWlsc0VsZW1l
bnRBdEluZGV4KGN1cnJlbnRJbmRleCk7CisgICAgICAgICAgICAgICAgdXBkYXRlSW5mb1BhbmVs
Lmluc2VydEJlZm9yZSh1cGRhdGVNYXJrZXIsIGN1cnJlbnRVcGRhdGVEZXRhaWxzKTsKKyAgICAg
ICAgICAgICAgICBpZiAodXBkYXRlTWFya2VyLm9mZnNldFRvcCA8IHVwZGF0ZUluZm9QYW5lbC5z
Y3JvbGxUb3AKKyAgICAgICAgICAgICAgICAgICAgfHwgdXBkYXRlSW5mb1BhbmVsLnNjcm9sbFRv
cCArIHVwZGF0ZUluZm9QYW5lbC5jbGllbnRIZWlnaHQgPCB1cGRhdGVNYXJrZXIub2Zmc2V0VG9w
KQorICAgICAgICAgICAgICAgIHVwZGF0ZU1hcmtlci5zY3JvbGxJbnRvVmlldygpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdXBsb2FkLnJlbW92ZSgpOworICAgICAgICBk
cm9wem9uZS5yZW1vdmUoKTsKKyAgICAgICAgZm9yIChsZXQgbm9kZSBvZiBnbG9iYWxOb2RlTWFw
Lm5vZGVzKCkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLnRhZ05hbWUgPT09ICJCT0RZIikgewor
ICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkgPSBub2RlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCF3aXRoQ29udHJv
bHMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbGV0IG92ZXJsYXkgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgb3ZlcmxheS5pZCA9ICJvdmVybGF5IjsK
KyAgICAgICAgb3ZlcmxheS5pbm5lckhUTUwgPQorICAgICAgICBgPGNvZGU+CisgICAgICAgICAg
ICA8ZGl2IGlkPSJpbmZvcm1hdGlvbiI+CisgICAgICAgICAgICAgICAgPGRpdiBpZD0idXBkYXRl
SW5mb1BhbmVsIj48L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPGRpdiBp
ZD0iY29udHJvbHMiPgorICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgICAg
IDxidXR0b24gaWQ9ImV4cGFuZEJ1dHRvbiI+PGNvZGU+U2hvdyBhbGw8L2NvZGU+PC9idXR0b24+
PGJ1dHRvbiBpZD0iY29sbGFwc2VCdXR0b24iPjxjb2RlPkhpZGUgYWxsPC9jb2RlPjwvYnV0dG9u
PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAg
ICAgICAgICAgICAgIDxidXR0b24gZGlzYWJsZWQgaWQ9InByZXZpb3VzQnV0dG9uIj4mbHQ7PC9i
dXR0b24+PGJ1dHRvbiBkaXNhYmxlZCBpZD0ibmV4dEJ1dHRvbiI+Jmd0OzwvYnV0dG9uPgorICAg
ICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDxkaXYgaWQ9InByb2dyZXNzTGFi
ZWwiPi0vLTwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvY29kZT5gOworICAg
ICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG92ZXJsYXkpOworICAgICAgICB1cGRhdGVz
LmZvckVhY2goKHVwZGF0ZSwgaW5kZXgpID0+IHsKKyAgICAgICAgICAgIGxldCBkZXRhaWxzRWxl
bWVudCA9IHVwZGF0ZS5kZXRhaWxzRWxlbWVudCgpOworICAgICAgICAgICAgbGV0IHN1bW1hcnkg
PSBkZXRhaWxzRWxlbWVudC5jaGlsZHJlblswXTsKKyAgICAgICAgICAgIGxldCBpbmRleEVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgICAgICBpbmRleEVs
ZW1lbnQuaW5uZXJIVE1MID0gYFs8YSBocmVmPSM+JHtpbmRleH08L2E+XSBgOworICAgICAgICAg
ICAgaW5kZXhFbGVtZW50LmNoaWxkcmVuWzBdLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkg
PT4geworICAgICAgICAgICAgICAgIEVkaXRpbmdIaXN0b3J5LmNvbnRleHQuanVtcFRvKGluZGV4
ICsgMSk7CisgICAgICAgICAgICAgICAgRWRpdGluZ0hpc3RvcnkuY29udGV4dC5hcHBseUN1cnJl
bnRTZWxlY3Rpb25TdGF0ZShnZXRTZWxlY3Rpb24oKSk7CisgICAgICAgICAgICAgICAgZGV0YWls
c0VsZW1lbnQub3BlbiA9IHRydWU7CisgICAgICAgICAgICAgICAgdXBkYXRlT3ZlcmxheSgpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBzdW1tYXJ5Lmluc2VydEJlZm9yZShpbmRleEVs
ZW1lbnQsIHN1bW1hcnkuY2hpbGROb2Rlc1swXSk7CisgICAgICAgICAgICBkZXRhaWxzRWxlbWVu
dC5pZCA9IGB1cGRhdGVJbmZvLSR7aW5kZXh9YDsKKyAgICAgICAgICAgIGRldGFpbHNFbGVtZW50
LmNsYXNzTGlzdC5hZGQoInVwZGF0ZUluZm8iKTsKKyAgICAgICAgICAgIHVwZGF0ZUluZm9QYW5l
bC5hcHBlbmQoZGV0YWlsc0VsZW1lbnQpOworICAgICAgICB9KTsKKyAgICAgICAgbGV0IHVwZGF0
ZU1hcmtlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICB1cGRhdGVN
YXJrZXIuaWQgPSAidXBkYXRlTWFya2VyIjsKKyAgICAgICAgdXBkYXRlSW5mb1BhbmVsLmFwcGVu
ZCh1cGRhdGVNYXJrZXIpOworCisgICAgICAgIG5leHRCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigi
Y2xpY2siLCAoKSA9PiB7CisgICAgICAgICAgICBFZGl0aW5nSGlzdG9yeS5jb250ZXh0Lm5leHQo
KTsKKyAgICAgICAgICAgIEVkaXRpbmdIaXN0b3J5LmNvbnRleHQuYXBwbHlDdXJyZW50U2VsZWN0
aW9uU3RhdGUoZ2V0U2VsZWN0aW9uKCkpOworICAgICAgICAgICAgdXBkYXRlT3ZlcmxheSgpOwor
ICAgICAgICB9KTsKKworICAgICAgICBwcmV2aW91c0J1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJj
bGljayIsICgpID0+IHsKKyAgICAgICAgICAgIEVkaXRpbmdIaXN0b3J5LmNvbnRleHQucHJldmlv
dXMoKTsKKyAgICAgICAgICAgIEVkaXRpbmdIaXN0b3J5LmNvbnRleHQuYXBwbHlDdXJyZW50U2Vs
ZWN0aW9uU3RhdGUoZ2V0U2VsZWN0aW9uKCkpOworICAgICAgICAgICAgdXBkYXRlT3ZlcmxheSgp
OworICAgICAgICB9KTsKKworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlk
b3duIiwgZXZlbnQgPT4geworICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gIkFycm93Umln
aHQiIHx8IGV2ZW50LmtleSA9PT0gIkFycm93RG93biIpIHsKKyAgICAgICAgICAgICAgICByZW1v
dmVBbGxIaWdobGlnaHRzKCk7CisgICAgICAgICAgICAgICAgRWRpdGluZ0hpc3RvcnkuY29udGV4
dC5uZXh0KCk7CisgICAgICAgICAgICAgICAgRWRpdGluZ0hpc3RvcnkuY29udGV4dC5hcHBseUN1
cnJlbnRTZWxlY3Rpb25TdGF0ZShnZXRTZWxlY3Rpb24oKSk7CisgICAgICAgICAgICAgICAgZXZl
bnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVPdmVybGF5KCk7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gIkFycm93TGVmdCIgfHwgZXZlbnQu
a2V5ID09PSAiQXJyb3dVcCIpIHsKKyAgICAgICAgICAgICAgICByZW1vdmVBbGxIaWdobGlnaHRz
KCk7CisgICAgICAgICAgICAgICAgRWRpdGluZ0hpc3RvcnkuY29udGV4dC5wcmV2aW91cygpOwor
ICAgICAgICAgICAgICAgIEVkaXRpbmdIaXN0b3J5LmNvbnRleHQuYXBwbHlDdXJyZW50U2VsZWN0
aW9uU3RhdGUoZ2V0U2VsZWN0aW9uKCkpOworICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnRE
ZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgdXBkYXRlT3ZlcmxheSgpOworICAgICAgICAgICAg
fQorICAgICAgICB9KTsKKworICAgICAgICBleHBhbmRCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigi
Y2xpY2siLCAoKSA9PiB7CisgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIu
dXBkYXRlSW5mbyIpLmZvckVhY2goZGV0YWlscyA9PiBkZXRhaWxzLm9wZW4gPSB0cnVlKTsKKyAg
ICAgICAgICAgIHVwZGF0ZU92ZXJsYXkoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgY29sbGFw
c2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CisgICAgICAgICAgICBk
b2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIudXBkYXRlSW5mbyIpLmZvckVhY2goZGV0YWlscyA9
PiBkZXRhaWxzLm9wZW4gPSBmYWxzZSk7CisgICAgICAgICAgICB1cGRhdGVPdmVybGF5KCk7Cisg
ICAgICAgIH0pOworCisgICAgICAgIFsic2VsZWN0c3RhcnQiLCAiZHJhZ2VudGVyIiwgImRyYWdv
dmVyIiwgImRyb3AiLCAiYmVmb3JlaW5wdXQiXS5mb3JFYWNoKCh0eXBlKSA9PiB7CisgICAgICAg
ICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50ID0+IGV2ZW50LnByZXZl
bnREZWZhdWx0KCkpOworICAgICAgICB9KTsKKworICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVj
dG9yQWxsKCIuZWgtbm9kZSIpLmZvckVhY2goKG5vZGUpID0+IHsKKyAgICAgICAgICAgIGxldCBn
dWlkID0gcGFyc2VJbnQobm9kZS5nZXRBdHRyaWJ1dGUoImVoLWd1aWQiKSk7CisgICAgICAgICAg
ICBpZiAoaXNOYU4oZ3VpZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAg
ICBsZXQgdGFyZ2V0Tm9kZSA9IGdsb2JhbE5vZGVNYXAubm9kZUZvckdVSUQoZ3VpZCk7CisgICAg
ICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gY29uc29sZS5sb2co
dGFyZ2V0Tm9kZSkpOworICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVu
dGVyIiwgKCkgPT4gc2hvd0hpZ2hsaWdodE92ZXJOb2RlKHRhcmdldE5vZGUpKTsKKyAgICAgICAg
ICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsIHJlbW92ZUFsbEhpZ2hsaWdo
dHMpOworICAgICAgICB9KTsKKworICAgICAgICB1cGRhdGVPdmVybGF5KCk7CisgICAgICAgIEVk
aXRpbmdIaXN0b3J5LmNvbnRleHQuYXBwbHlDdXJyZW50U2VsZWN0aW9uU3RhdGUoZ2V0U2VsZWN0
aW9uKCkpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNob3dIaWdobGlnaHRPdmVyTm9kZShub2Rl
KSB7CisgICAgICAgIGlmICghZG9jdW1lbnQuYm9keS5jb250YWlucyhub2RlKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5U
X05PREUpIHsKKyAgICAgICAgICAgIHNob3dIaWdobGlnaHRPdmVyQm91bmRpbmdSZWN0KG5vZGUu
Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7CisgICAg
ICAgICAgICBsZXQgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOworICAgICAgICAgICAg
cmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKG5vZGUpOworICAgICAgICAgICAgc2hvd0hpZ2hsaWdo
dE92ZXJCb3VuZGluZ1JlY3QocmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gc2hvd0hpZ2hsaWdodE92ZXJCb3VuZGluZ1JlY3Qo
Ym91bmRzKSB7CisgICAgICAgIGxldCBoaWdobGlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKKyAgICAgICAgaGlnaGxpZ2h0LmNsYXNzTGlzdC5hZGQoIm5vZGUtaGlnaGxpZ2h0
Iik7CisgICAgICAgIGhpZ2hsaWdodC5zdHlsZS5sZWZ0ID0gYm91bmRzLmxlZnQgLSAxOworICAg
ICAgICBoaWdobGlnaHQuc3R5bGUudG9wID0gYm91bmRzLnRvcCAtIDE7CisgICAgICAgIGhpZ2hs
aWdodC5zdHlsZS53aWR0aCA9IGJvdW5kcy53aWR0aCArIDI7CisgICAgICAgIGhpZ2hsaWdodC5z
dHlsZS5oZWlnaHQgPSBib3VuZHMuaGVpZ2h0ICsgMjsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5h
cHBlbmRDaGlsZChoaWdobGlnaHQpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHJlbW92ZUFsbEhp
Z2hsaWdodHMoKSB7CisgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5ub2RlLWhp
Z2hsaWdodCIpLmZvckVhY2goaGlnaGxpZ2h0ID0+IGhpZ2hsaWdodC5yZW1vdmUoKSk7CisgICAg
fQorCisgICAgZHJvcHpvbmUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsIGVtcGhhc2l6
ZURyb3ApOworICAgIGRyb3B6b25lLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLCB1bmVt
cGhhc2l6ZURyb3ApOworICAgIGRyb3B6b25lLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdlbnRlciIs
IGVtcGhhc2l6ZURyb3ApOworICAgIGRyb3B6b25lLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdsZWF2
ZSIsIHVuZW1waGFzaXplRHJvcCk7CisgICAgZHJvcHpvbmUuYWRkRXZlbnRMaXN0ZW5lcigiZHJh
Z292ZXIiLCBldmVudCA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpKTsKKyAgICBkcm9wem9uZS5h
ZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHVwbG9hZC5jbGljaygpKTsKKyAgICBkcm9w
em9uZS5hZGRFdmVudExpc3RlbmVyKCJkcm9wIiwgZHJvcEV2ZW50ID0+IHsKKyAgICAgICAgZHJv
cEV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgIGZpbGVTZWxlY3RlZChkcm9wRXZlbnQu
ZGF0YVRyYW5zZmVyLmZpbGVzKTsKKyAgICB9KTsKKworICAgIHVwbG9hZC5maWxlcyA9IG51bGw7
CisgICAgRWRpdGluZ0hpc3Rvcnkuc2V0dXBFZGl0aW5nSGlzdG9yeSA9IHNldHVwRWRpdGluZ0hp
c3Rvcnk7Cit9OworCitmdW5jdGlvbiBlbXBoYXNpemVEcm9wKGV2ZW50KSB7CisgICAgZHJvcHpv
bmUuc3R5bGUuYm9yZGVyID0gIjE1cHggI0Q4RDhEOCBkYXNoZWQiOworICAgIGRyb3BNZXNzYWdl
LnN0eWxlLmNvbG9yID0gIiNEOEQ4RDgiOworICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9
CisKK2Z1bmN0aW9uIHVuZW1waGFzaXplRHJvcChldmVudCkgeworICAgIGRyb3B6b25lLnN0eWxl
LmJvcmRlciA9ICIxNXB4ICNFOEU4RTggZGFzaGVkIjsKKyAgICBkcm9wTWVzc2FnZS5zdHlsZS5j
b2xvciA9ICIjRThFOEU4IjsKKyAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworfQorCitmdW5j
dGlvbiBmaWxlU2VsZWN0ZWQoZmlsZXMpIHsKKyAgICBkcm9wem9uZS5yZW1vdmVFdmVudExpc3Rl
bmVyKCJtb3VzZWVudGVyIiwgZW1waGFzaXplRHJvcCk7CisgICAgZHJvcHpvbmUucmVtb3ZlRXZl
bnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsIHVuZW1waGFzaXplRHJvcCk7CisgICAgZHJvcHpvbmUu
cmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ2VudGVyIiwgZW1waGFzaXplRHJvcCk7CisgICAgZHJv
cHpvbmUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ2xlYXZlIiwgdW5lbXBoYXNpemVEcm9wKTsK
KworICAgIGNvbnNvbGUubG9nKGBTZWxlY3RlZCAke2ZpbGVzLmxlbmd0aH0gZmlsZShzKS5gKTsK
KworICAgIGxldCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOworICAgIHJlYWRlci5vbmxvYWQg
PSBldmVudCA9PiBFZGl0aW5nSGlzdG9yeS5zZXR1cEVkaXRpbmdIaXN0b3J5KGV2ZW50LnRhcmdl
dC5yZXN1bHQpOworICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGVzWzBdKTsKK30KKzwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+CisgICAgPGRpdiBpZD0iZHJvcHpvbmUiPgorICAgICAgICA8ZGl2
IGlkPSJkcm9wTWVzc2FnZSI+RHJvcCBhbiBlZGl0aW5nIHJlY29yZCBoZXJlPC9kaXY+CisgICAg
PC9kaXY+CisgICAgPGlucHV0IGlkPSJ1cGxvYWQiIG9uY2hhbmdlPWZpbGVTZWxlY3RlZChmaWxl
cykgdHlwZT0iZmlsZSI+PC9pbnB1dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1Rv
b2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL0Vk
aXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Rlc3RSdW5uZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMGRj
ZWQxYTcyM2Y3MDcyN2ZhOTUxMGU2MzM2MDhiMGQzYWRiNWIxCi0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvVGVzdFJ1bm5lci5oCkBAIC0wLDAg
KzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+CisjaW1wb3J0
IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KKwor
QGludGVyZmFjZSBUZXN0UnVubmVyIDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWRvbmx5KSBOU1dpbmRvdyAqd2luZG93OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5KSBXS1dlYlZpZXcgKndlYlZpZXc7CisKKy0gKHZvaWQpZXhwZWN0RXZlbnRzOihOU0RpY3Rp
b25hcnk8TlNTdHJpbmcgKiwgTlNOdW1iZXIgKj4gKilleHBlY3RlZEV2ZW50Q291bnRzIGFmdGVy
UGVyZm9ybWluZzooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb247CistICh2b2lkKWxvYWRDYXB0dXJl
VGVzdEhhcm5lc3M7CistICh2b2lkKWxvYWRQbGF5YmFja1Rlc3RIYXJuZXNzV2l0aEpTT046KE5T
U3RyaW5nICopanNvbjsKKy0gKHZvaWQpc2V0VGV4dE9iZnVzY2F0aW9uRW5hYmxlZDooQk9PTCll
bmFibGVkOworLSAodm9pZCl0eXBlU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZzsKKy0gKHZvaWQp
anVtcFRvVXBkYXRlSW5kZXg6KE5TSW50ZWdlcilpbmRleDsKKy0gKHZvaWQpZGVsZXRlQmFja3dh
cmRzOihOU0ludGVnZXIpdGltZXM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5T
U3RyaW5nICplZGl0aW5nSGlzdG9yeUpTT047CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9u
bHkpIE5TU3RyaW5nICpib2R5RWxlbWVudFN1YnRyZWU7CitAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIE5TU3RyaW5nICpib2R5VGV4dENvbnRlbnQ7CitAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIE5TSW50ZWdlciBudW1iZXJPZlVwZGF0ZXM7CisKK0BlbmQKZGlmZiAtLWdp
dCBhL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Rlc3RSdW5uZXIubSBiL1Rv
b2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Rlc3RSdW5uZXIubQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42MzFiZjQ3ZGViNzczMjM2MWFhZmEwMDE3MTRlN2U0Mzk0MmVhOWVhCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvVGVzdFJ1bm5lci5tCkBA
IC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJUZXN0UnVubmVyLmgiCisKKyNpbXBvcnQgIlRlc3RVdGlsLmgiCisjaW1wb3J0ICJXS1dlYlZp
ZXdBZGRpdGlvbnMuaCIKKyNpbXBvcnQgPENhcmJvbi9DYXJib24uaD4KKworc3RhdGljIFdLVXNl
clNjcmlwdCAqaW5qZWN0ZWRNZXNzYWdlRXZlbnRIYW5kbGVyU2NyaXB0KE5TU3RyaW5nICpsaXN0
ZW5lciwgTlNTdHJpbmcgKmV2ZW50KQoreworICAgIE5TU3RyaW5nICpzb3VyY2UgPSBbTlNTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVALmFkZEV2ZW50TGlzdGVuZXIoJyVAJywgKCkgPT4geyIK
KyAgICAgICAgInNldFRpbWVvdXQoKCkgPT4gd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5ldmVudEhh
bmRsZXIucG9zdE1lc3NhZ2UoJyVAJyksIDApOyIKKyAgICAgICAgIn0pOyIsIGxpc3RlbmVyLCBl
dmVudCwgZXZlbnRdOworICAgIHJldHVybiBbW1dLVXNlclNjcmlwdCBhbGxvY10gaW5pdFdpdGhT
b3VyY2U6c291cmNlIGluamVjdGlvblRpbWU6V0tVc2VyU2NyaXB0SW5qZWN0aW9uVGltZUF0RG9j
dW1lbnRFbmQgZm9yTWFpbkZyYW1lT25seTpZRVNdOworfQorCitAaW50ZXJmYWNlIFRlc3RSdW5u
ZXIgKCkgPFdLU2NyaXB0TWVzc2FnZUhhbmRsZXI+CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBO
U011dGFibGVEaWN0aW9uYXJ5ICpwZW5kaW5nRXZlbnRDb3VudHM7CisKK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIFRlc3RSdW5uZXIKKworLSAoaW5zdGFuY2V0eXBlKWluaXQKK3sKKyAgICBOU1dp
bmRvdyAqd2luZG93ID0gW1tOU1dpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDpOU01h
a2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBzdHlsZU1hc2s6TlNXaW5kb3dTdHlsZU1hc2tCb3JkZXJs
ZXNzIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZlcjpOT107CisgICAgW3dpbmRv
dyBzZXRGcmFtZU9yaWdpbjpOU01ha2VQb2ludCgwLCAwKV07CisgICAgW3dpbmRvdyBzZXRJc1Zp
c2libGU6WUVTXTsKKworICAgIFdLV2ViVmlldyAqd2ViVmlldyA9IFtbV0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApXTsKKyAgICBbW3dpbmRv
dyBjb250ZW50Vmlld10gYWRkU3Vidmlldzp3ZWJWaWV3XTsKKyAgICBbd2luZG93IG1ha2VLZXlB
bmRPcmRlckZyb250OndlYlZpZXddOworICAgIFt3ZWJWaWV3IGJlY29tZUZpcnN0UmVzcG9uZGVy
XTsKKworICAgIF93aW5kb3cgPSB3aW5kb3c7CisgICAgX3dlYlZpZXcgPSB3ZWJWaWV3OworICAg
IF9wZW5kaW5nRXZlbnRDb3VudHMgPSBuaWw7CisKKyAgICBXS1VzZXJDb250ZW50Q29udHJvbGxl
ciAqY29udGVudENvbnRyb2xsZXIgPSB3ZWJWaWV3LmNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRD
b250cm9sbGVyOworICAgIFtjb250ZW50Q29udHJvbGxlciBhZGRTY3JpcHRNZXNzYWdlSGFuZGxl
cjpzZWxmIG5hbWU6QCJldmVudEhhbmRsZXIiXTsKKyAgICBbY29udGVudENvbnRyb2xsZXIgYWRk
VXNlclNjcmlwdDppbmplY3RlZE1lc3NhZ2VFdmVudEhhbmRsZXJTY3JpcHQoQCJkb2N1bWVudC5i
b2R5IiwgQCJmb2N1cyIpXTsKKyAgICBbY29udGVudENvbnRyb2xsZXIgYWRkVXNlclNjcmlwdDpp
bmplY3RlZE1lc3NhZ2VFdmVudEhhbmRsZXJTY3JpcHQoQCJkb2N1bWVudCIsIEAiaW5wdXQiKV07
CisgICAgW2NvbnRlbnRDb250cm9sbGVyIGFkZFVzZXJTY3JpcHQ6aW5qZWN0ZWRNZXNzYWdlRXZl
bnRIYW5kbGVyU2NyaXB0KEAiZG9jdW1lbnQiLCBAInNlbGVjdGlvbmNoYW5nZSIpXTsKKworICAg
IHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlbGV0ZUJhY2t3YXJkczooTlNJbnRlZ2VyKXRp
bWVzCit7CisgICAgZm9yIChOU0ludGVnZXIgaSA9IDA7IGkgPCB0aW1lczsgaSsrKSB7CisgICAg
ICAgIFtzZWxmIGV4cGVjdEV2ZW50czpAeyBAImlucHV0IjogQDEsIEAic2VsZWN0aW9uY2hhbmdl
IjogQDEgfSBhZnRlclBlcmZvcm1pbmc6XigpIHsKKyAgICAgICAgICAgIFtfd2ViVmlldyBrZXlQ
cmVzc1dpdGhDaGFyYWN0ZXJzOm5pbCBrZXlDb2RlOktleUNvZGVUeXBlRGVsZXRlQmFja3dhcmRd
OworICAgICAgICB9XTsKKyAgICB9Cit9CisKKy0gKHZvaWQpdHlwZVN0cmluZzooTlNTdHJpbmcg
KilzdHJpbmcKK3sKKyAgICBmb3IgKE5TSW50ZWdlciBjaGFySW5kZXggPSAwOyBjaGFySW5kZXgg
PCBzdHJpbmcubGVuZ3RoOyBjaGFySW5kZXgrKykgeworICAgICAgICBbc2VsZiBleHBlY3RFdmVu
dHM6QHsgQCJpbnB1dCI6IEAxLCBAInNlbGVjdGlvbmNoYW5nZSI6IEAxIH0gYWZ0ZXJQZXJmb3Jt
aW5nOl4oKSB7CisgICAgICAgICAgICBbX3dlYlZpZXcgdHlwZUNoYXJhY3Rlcjpbc3RyaW5nIGNo
YXJhY3RlckF0SW5kZXg6Y2hhckluZGV4XV07CisgICAgICAgIH1dOworICAgIH0KK30KKworLSAo
TlNTdHJpbmcgKilib2R5RWxlbWVudFN1YnRyZWUKK3sKKyAgICByZXR1cm4gW193ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRo
Rm9ybWF0OkAiRE9NVXRpbC5zdWJ0cmVlQXNTdHJpbmcoZG9jdW1lbnQuYm9keSkiXV07Cit9CisK
Ky0gKE5TU3RyaW5nICopYm9keVRleHRDb250ZW50Cit7CisgICAgcmV0dXJuIFtfd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpAImRvY3VtZW50LmJvZHkudGV4dENvbnRlbnQiXV07Cit9CisKKy0gKE5TU3RyaW5n
ICopZWRpdGluZ0hpc3RvcnlKU09OCit7CisgICAgcmV0dXJuIFtfd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
IkVkaXRpbmdIaXN0b3J5LmdldEVkaXRpbmdIaXN0b3J5QXNKU09OU3RyaW5nKGZhbHNlKSJdXTsK
K30KKworLSAodm9pZClsb2FkUGxheWJhY2tUZXN0SGFybmVzc1dpdGhKU09OOihOU1N0cmluZyAq
KWpzb24KK3sKKyAgICBbX3dlYlZpZXcgbG9hZFBhZ2VGcm9tQnVuZGxlTmFtZWQ6QCJQbGF5YmFj
a0hhcm5lc3MiXTsKKyAgICB3YWl0VW50aWwoQ09ORElUSU9OX0JMT0NLKFtbX3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6QCIhIXdpbmRvdy5FZGl0aW5nSGlz
dG9yeSAmJiAhIUVkaXRpbmdIaXN0b3J5LnNldHVwRWRpdGluZ0hpc3RvcnkiXSBib29sVmFsdWVd
KSk7CisKKyAgICBqc29uID0gW1tqc29uIHN0cmluZ0J5UmVwbGFjaW5nT2NjdXJyZW5jZXNPZlN0
cmluZzpAIlxcIiB3aXRoU3RyaW5nOkAiXFxcXCJdIHN0cmluZ0J5UmVwbGFjaW5nT2NjdXJyZW5j
ZXNPZlN0cmluZzpAImAiIHdpdGhTdHJpbmc6QCJcXGAiXTsKKyAgICBbX3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCJFZGl0aW5nSGlzdG9yeS5zZXR1cEVkaXRpbmdIaXN0b3J5KGAlQGAsIGZhbHNlKSIsIGpz
b25dXTsKK30KKworLSAoTlNJbnRlZ2VyKW51bWJlck9mVXBkYXRlcyB7CisgICAgcmV0dXJuIFtb
X3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6QCJFZGl0aW5n
SGlzdG9yeS5jb250ZXh0LnVwZGF0ZXMoKS5sZW5ndGgiXSBpbnRlZ2VyVmFsdWVdOworfQorCist
ICh2b2lkKWp1bXBUb1VwZGF0ZUluZGV4OihOU0ludGVnZXIpaW5kZXgKK3sKKyAgICBbX3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6W05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCJFZGl0aW5nSGlzdG9yeS5jb250ZXh0Lmp1bXBUbygldHUpIiwgaW5kZXhd
XTsKK30KKworLSAodm9pZClleHBlY3RFdmVudHM6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBO
U051bWJlciAqPiAqKWV4cGVjdGVkRXZlbnRDb3VudHMgYWZ0ZXJQZXJmb3JtaW5nOihkaXNwYXRj
aF9ibG9ja190KWFjdGlvbgoreworICAgIF9wZW5kaW5nRXZlbnRDb3VudHMgPSBbZXhwZWN0ZWRF
dmVudENvdW50cyBtdXRhYmxlQ29weV07CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgYWN0aW9uKTsKKyAgICB3YWl0VW50aWwoQ09ORElUSU9OX0JMT0NLKHNl
bGYuaXNEb25lV2FpdGluZ0ZvclBlbmRpbmdFdmVudHMpKTsKKyAgICBfcGVuZGluZ0V2ZW50Q291
bnRzID0gbmlsOworfQorCistICh2b2lkKWxvYWRDYXB0dXJlVGVzdEhhcm5lc3MKK3sKKyAgICBb
c2VsZiBleHBlY3RFdmVudHM6QHsgQCJmb2N1cyIgOiBAMSB9IGFmdGVyUGVyZm9ybWluZzpeKCkg
eworICAgICAgICBbX3dlYlZpZXcgbG9hZFBhZ2VGcm9tQnVuZGxlTmFtZWQ6QCJDYXB0dXJlSGFy
bmVzcyJdOworICAgIH1dOworfQorCistICh2b2lkKXNldFRleHRPYmZ1c2NhdGlvbkVuYWJsZWQ6
KEJPT0wpZW5hYmxlZAoreworICAgIFtfd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0RnJvbVN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkVkaXRpbmdIaXN0b3J5
Lk9iZnVzY2F0b3Iuc2hhcmVkKCkuZW5hYmxlZCA9ICVzIiwgZW5hYmxlZCA/ICJ0cnVlIiA6ICJm
YWxzZSJdXTsKK30KKworLSAoQk9PTClpc0RvbmVXYWl0aW5nRm9yUGVuZGluZ0V2ZW50cworewor
ICAgIE5TSW50ZWdlciBudW1iZXJPZlBlbmRpbmdFdmVudHMgPSAwOworICAgIGZvciAoTlNOdW1i
ZXIgKmNvdW50IGluIF9wZW5kaW5nRXZlbnRDb3VudHMuYWxsVmFsdWVzKQorICAgICAgICBudW1i
ZXJPZlBlbmRpbmdFdmVudHMgKz0gW2NvdW50IGludGVnZXJWYWx1ZV07CisgICAgcmV0dXJuIF9w
ZW5kaW5nRXZlbnRDb3VudHMgJiYgIW51bWJlck9mUGVuZGluZ0V2ZW50czsKK30KKworLSAodm9p
ZCl1c2VyQ29udGVudENvbnRyb2xsZXI6KFdLVXNlckNvbnRlbnRDb250cm9sbGVyICopdXNlckNv
bnRlbnRDb250cm9sbGVyIGRpZFJlY2VpdmVTY3JpcHRNZXNzYWdlOihXS1NjcmlwdE1lc3NhZ2Ug
KiltZXNzYWdlCit7CisgICAgaWYgKFttZXNzYWdlLm5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiZXZl
bnRIYW5kbGVyIl0gJiYgX3BlbmRpbmdFdmVudENvdW50cykgeworICAgICAgICBOU1N0cmluZyAq
ZXZlbnRUeXBlID0gbWVzc2FnZS5ib2R5OworICAgICAgICBfcGVuZGluZ0V2ZW50Q291bnRzW2V2
ZW50VHlwZV0gPSBAKE1BWCgwLCBbX3BlbmRpbmdFdmVudENvdW50c1tldmVudFR5cGVdIGludGVn
ZXJWYWx1ZV0gLSAxKSk7CisgICAgfQorfQorCitAZW5kCmRpZmYgLS1naXQgYS9Ub29scy9FZGl0
aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9UZXN0VXRpbC5oIGIvVG9vbHMvRWRpdGluZ0hpc3Rv
cnkvRWRpdGluZ0hpc3RvcnkvVGVzdFV0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZDRjMzEzZmQxZjdkMTFi
MzJiZTY3ODFkYTRiYmE0NmI4NWRlZmE0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRWRpdGlu
Z0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvVGVzdFV0aWwuaApAQCAtMCwwICsxLDQ4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgorCisvLyBTb21lIG5hbWVkIGtleSBjb2RlcywgbWFpbmx5IGZvciBjb252ZW5pZW5jZS4KK2Vu
dW0gS2V5Q29kZVR5cGUgeworICAgIEtleUNvZGVUeXBlRGVsZXRlQmFja3dhcmQgPSAweDMzLAor
ICAgIEtleUNvZGVUeXBlTGVmdEFycm93ID0gMHg3QiwKKyAgICBLZXlDb2RlVHlwZVJpZ2h0QXJy
b3cgPSAweDdDCit9OworCisvKioKKyAqIFJldHVybiBZRVMgd2hlbiB0aGUgY29uZGl0aW9uIGlz
IGRvbmUgYW5kIHRoZSBwcm9ncmFtIHNob3VsZCBzdG9wIHNwaW5uaW5nLgorICovCit0eXBlZGVm
IEJPT0wgKF5Db25kaXRpb25CbG9jaykoKTsKKyNkZWZpbmUgQ09ORElUSU9OX0JMT0NLKGV4cHIp
IF5CT09MKCkgeyByZXR1cm4gZXhwcjsgfQorCisvKioKKyAqIFNwaW5zIGEgcnVubG9vcCB1bnRp
bCB0aGUgZ2l2ZW4gY29uZGl0aW9uIGJsb2NrIGV2YWx1YXRlcyB0byBZRVMuIElmIHRoZSBnaXZl
biB0aW1lb3V0IGludGVydmFsIGhhcyBlbGFwc2VkLCBhbmQgdGhlIGNvbmRpdGlvbiBpcyBzdGls
bCB1bnNhdGlzZmllZCwKKyAqIHN0b3Agc3Bpbm5pbmcgYW5kIHJldHVybiBOTy4gT3RoZXJ3aXNl
LCByZXR1cm4gWUVTLgorICovCitCT09MIHdhaXRVbnRpbFdpdGhUaW1lb3V0KENvbmRpdGlvbkJs
b2NrLCBOU1RpbWVJbnRlcnZhbCk7CitCT09MIHdhaXRVbnRpbChDb25kaXRpb25CbG9jayk7CmRp
ZmYgLS1naXQgYS9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9UZXN0VXRpbC5t
IGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvVGVzdFV0aWwubQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44ZDkzZTZkNjhhM2E1YjAwODRjNjdjNzAyM2Q1MGY4Y2I2NGEyNTQ0Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvVGVzdFV0aWwubQpA
QCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJUZXN0VXRpbC5oIgorCitjb25zdCBOU1RpbWVJbnRlcnZhbCBEZWZhdWx0VGltZW91dEludGVy
dmFsID0gMTA7CisKK0JPT0wgd2FpdFVudGlsV2l0aFRpbWVvdXQoQ29uZGl0aW9uQmxvY2sgY29u
ZGl0aW9uLCBOU1RpbWVJbnRlcnZhbCB0aW1lb3V0KQoreworICAgIE5TVGltZUludGVydmFsIHN0
YXJ0VGltZSA9IFtOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXTsKKyAgICB3
aGlsZSAoW1tOU1J1bkxvb3AgY3VycmVudFJ1bkxvb3BdIHJ1bk1vZGU6TlNEZWZhdWx0UnVuTG9v
cE1vZGUgYmVmb3JlRGF0ZTpbTlNEYXRlIGRpc3RhbnRQYXN0XV0gJiYgW05TRGF0ZSB0aW1lSW50
ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdIC0gc3RhcnRUaW1lIDwgdGltZW91dCkgeworICAgICAg
ICBpZiAoY29uZGl0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gWUVTOworICAgIH0KKyAgICBy
ZXR1cm4gTk87Cit9CisKK0JPT0wgd2FpdFVudGlsKENvbmRpdGlvbkJsb2NrIGNvbmRpdGlvbikK
K3sKKyAgICByZXR1cm4gd2FpdFVudGlsV2l0aFRpbWVvdXQoY29uZGl0aW9uLCBEZWZhdWx0VGlt
ZW91dEludGVydmFsKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRp
bmdIaXN0b3J5L1dLV2ViVmlld0FkZGl0aW9ucy5oIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRp
dGluZ0hpc3RvcnkvV0tXZWJWaWV3QWRkaXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGZkMzgzMzBkYjNm
YWUyYjQ1YTcyYjRmNjNjYTY4ZTc3YWZmNzdjNQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0Vk
aXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1dLV2ViVmlld0FkZGl0aW9ucy5oCkBAIC0wLDAg
KzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CisKK05TX0FT
U1VNRV9OT05OVUxMX0JFR0lOCisKK0BpbnRlcmZhY2UgV0tXZWJWaWV3IChFZGl0aW5nSGlzdG9y
eVRlc3QpCisKKy0gKHZvaWQpbG9hZFBhZ2VGcm9tQnVuZGxlTmFtZWQ6KE5TU3RyaW5nICopbmFt
ZTsKKy0gKHZvaWQpdHlwZUNoYXJhY3RlcjooY2hhciljaGFyYWN0ZXI7CistICh2b2lkKWtleVBy
ZXNzV2l0aENoYXJhY3RlcnM6KG51bGxhYmxlIE5TU3RyaW5nICopY2hhcmFjdGVycyBrZXlDb2Rl
OihjaGFyKWtleUNvZGU7CistIChudWxsYWJsZSBOU1N0cmluZyAqKXN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHRGcm9tU3RyaW5nOihOU1N0cmluZyAqKXNjcmlwdDsKKworQGVuZAorCitOU19B
U1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBhL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRp
bmdIaXN0b3J5L1dLV2ViVmlld0FkZGl0aW9ucy5tIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRp
dGluZ0hpc3RvcnkvV0tXZWJWaWV3QWRkaXRpb25zLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDk3OTMwZGNkZDZj
MTJkOTdkMDk3MWFhM2Y5MTI1ZDA1NjA4MTg1YwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0Vk
aXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1dLV2ViVmlld0FkZGl0aW9ucy5tCkBAIC0wLDAg
KzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldLV2Vi
Vmlld0FkZGl0aW9ucy5oIgorCisjaW1wb3J0ICJUZXN0VXRpbC5oIgorCisjaW1wb3J0IDxDYXJi
b24vQ2FyYm9uLmg+CisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKEVkaXRpbmdIaXN0b3J5
VGVzdCkKKworLSAodm9pZClsb2FkUGFnZUZyb21CdW5kbGVOYW1lZDooTlNTdHJpbmcgKiluYW1l
Cit7CisgICAgTlNVUkwgKnBhdGhUb1BhZ2UgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZv
clJlc291cmNlOm5hbWUgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpuaWxdOwor
ICAgIFtzZWxmIGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6cGF0aFRv
UGFnZV1dOworfQorCistICh2b2lkKXR5cGVDaGFyYWN0ZXI6KGNoYXIpY2hhcmFjdGVyCit7Cisg
ICAgW3NlbGYga2V5UHJlc3NXaXRoQ2hhcmFjdGVyczpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIiVjIiwgY2hhcmFjdGVyXSBrZXlDb2RlOmNoYXJhY3Rlcl07Cit9CisKKy0gKHZvaWQpa2V5
UHJlc3NXaXRoQ2hhcmFjdGVyczoobnVsbGFibGUgTlNTdHJpbmcgKiljaGFyYWN0ZXJzIGtleUNv
ZGU6KGNoYXIpa2V5Q29kZQoreworICAgIE5TRXZlbnRUeXBlIGtleURvd25FdmVudFR5cGUgPSBO
U0V2ZW50VHlwZUtleURvd247CisgICAgTlNFdmVudFR5cGUga2V5VXBFdmVudFR5cGUgPSBOU0V2
ZW50VHlwZUtleVVwOworICAgIFtzZWxmIGtleURvd246W05TRXZlbnQga2V5RXZlbnRXaXRoVHlw
ZTprZXlEb3duRXZlbnRUeXBlIGxvY2F0aW9uOk5TWmVyb1BvaW50IG1vZGlmaWVyRmxhZ3M6MCB0
aW1lc3RhbXA6R2V0Q3VycmVudEV2ZW50VGltZSgpIHdpbmRvd051bWJlcjpzZWxmLndpbmRvdy53
aW5kb3dOdW1iZXIgY29udGV4dDpuaWwgY2hhcmFjdGVyczpjaGFyYWN0ZXJzIGNoYXJhY3RlcnNJ
Z25vcmluZ01vZGlmaWVyczpjaGFyYWN0ZXJzIGlzQVJlcGVhdDpOTyBrZXlDb2RlOmtleUNvZGVd
XTsKKyAgICBbc2VsZiBrZXlVcDpbTlNFdmVudCBrZXlFdmVudFdpdGhUeXBlOmtleVVwRXZlbnRU
eXBlIGxvY2F0aW9uOk5TWmVyb1BvaW50IG1vZGlmaWVyRmxhZ3M6MCB0aW1lc3RhbXA6R2V0Q3Vy
cmVudEV2ZW50VGltZSgpIHdpbmRvd051bWJlcjpzZWxmLndpbmRvdy53aW5kb3dOdW1iZXIgY29u
dGV4dDpuaWwgY2hhcmFjdGVyczpjaGFyYWN0ZXJzIGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVy
czpjaGFyYWN0ZXJzIGlzQVJlcGVhdDpOTyBrZXlDb2RlOmtleUNvZGVdXTsKK30KKworLSAobnVs
bGFibGUgTlNTdHJpbmcgKilzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzoo
TlNTdHJpbmcgKilzY3JpcHQKK3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZUV2YWx1YXRpbmdKYXZh
U2NyaXB0ID0gZmFsc2U7CisgICAgX19ibG9jayBOU1N0cmluZyAqcmV0dXJuUmVzdWx0ID0gbmls
OworICAgIFtzZWxmIGV2YWx1YXRlSmF2YVNjcmlwdDpzY3JpcHQgY29tcGxldGlvbkhhbmRsZXI6
XihpZCByZXR1cm5WYWx1ZSwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgaWYgKGVycm9yKQor
ICAgICAgICAgICAgTlNMb2coQCJFcnJvciBldmFsdWF0aW5nIEphdmFTY3JpcHQ6ICVAIiwgZXJy
b3IpOworCisgICAgICAgIHJldHVyblJlc3VsdCA9IGVycm9yIHx8ICFyZXR1cm5WYWx1ZSA/IG5p
bCA6IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAiLCByZXR1cm5WYWx1ZV07CisgICAg
ICAgIGRvbmVFdmFsdWF0aW5nSmF2YVNjcmlwdCA9IHRydWU7CisgICAgfV07CisgICAgd2FpdFVu
dGlsKENPTkRJVElPTl9CTE9DSyhkb25lRXZhbHVhdGluZ0phdmFTY3JpcHQpKTsKKyAgICByZXR1
cm4gcmV0dXJuUmVzdWx0OworfQorCitAZW5kCmRpZmYgLS1naXQgYS9Ub29scy9FZGl0aW5nSGlz
dG9yeS9FZGl0aW5nSGlzdG9yeS9tYWluLm0gYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5n
SGlzdG9yeS9tYWluLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTdlODQ4NTBhOWM0MDhlZGJlMGM1NDAxZmNiNmQ3
M2FmM2Q2OGU4MwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRp
bmdIaXN0b3J5L21haW4ubQpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8
QXBwS2l0L0FwcEtpdC5oPgorI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KKworaW50IG1haW4oaW50
IGFyZ2MsIGNvbnN0IGNoYXIgKiBhcmd2W10pCit7CisgICAgW1tOU1dvcmtzcGFjZSBzaGFyZWRX
b3Jrc3BhY2VdIG9wZW5GaWxlOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gcGF0aEZvclJlc291cmNl
OkAiUGxheWJhY2tIYXJuZXNzIiBvZlR5cGU6QCJodG1sIl0gd2l0aEFwcGxpY2F0aW9uOkAiU2Fm
YXJpIl07CisKKyAgICByZXR1cm4gTlNBcHBsaWNhdGlvbk1haW4oYXJnYywgYXJndik7Cit9CmRp
ZmYgLS1naXQgYS9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeVRlc3RzL0luZm8u
cGxpc3QgYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeVRlc3RzL0luZm8ucGxp
c3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNmM2YzIzYzQzYWRjODg2MjFjZTNhYmZiZDE1ODVjODc5MmJkMTY1Ywot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5VGVz
dHMvSW5mby5wbGlzdApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29k
aW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElT
VCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0
ZCI+Cis8cGxpc3QgdmVyc2lvbj0iMS4wIj4KKzxkaWN0PgorCTxrZXk+Q0ZCdW5kbGVEZXZlbG9w
bWVudFJlZ2lvbjwva2V5PgorCTxzdHJpbmc+ZW48L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlRXhl
Y3V0YWJsZTwva2V5PgorCTxzdHJpbmc+JChFWEVDVVRBQkxFX05BTUUpPC9zdHJpbmc+CisJPGtl
eT5DRkJ1bmRsZUlkZW50aWZpZXI8L2tleT4KKwk8c3RyaW5nPiQoUFJPRFVDVF9CVU5ETEVfSURF
TlRJRklFUik8L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlSW5mb0RpY3Rpb25hcnlWZXJzaW9uPC9r
ZXk+CisJPHN0cmluZz42LjA8L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlTmFtZTwva2V5PgorCTxz
dHJpbmc+JChQUk9EVUNUX05BTUUpPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZVBhY2thZ2VUeXBl
PC9rZXk+CisJPHN0cmluZz5CTkRMPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZVNob3J0VmVyc2lv
blN0cmluZzwva2V5PgorCTxzdHJpbmc+MS4wPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZVZlcnNp
b248L2tleT4KKwk8c3RyaW5nPjE8L3N0cmluZz4KKzwvZGljdD4KKzwvcGxpc3Q+CmRpZmYgLS1n
aXQgYS9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeVRlc3RzL1Jld2luZEFuZFBs
YXliYWNrVGVzdHMubSBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5VGVzdHMv
UmV3aW5kQW5kUGxheWJhY2tUZXN0cy5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJjYmY0OGE3ZjZjMWJlMjk5ZmYy
YmM2MTkzMjlhMWUxYTQyZDBkZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9FZGl0aW5nSGlz
dG9yeS9FZGl0aW5nSGlzdG9yeVRlc3RzL1Jld2luZEFuZFBsYXliYWNrVGVzdHMubQpAQCAtMCww
ICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIlRlc3RSdW5uZXIuaCIKKyNpbXBvcnQg
IlRlc3RVdGlsLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdBZGRpdGlvbnMuaCIKKyNpbXBvcnQgPFhD
VGVzdC9YQ1Rlc3QuaD4KKworQGludGVyZmFjZSBSZXdpbmRBbmRQbGF5YmFja1Rlc3RzIDogWENU
ZXN0Q2FzZQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBSZXdpbmRBbmRQbGF5YmFja1Rlc3Rz
IHsKKyAgICBUZXN0UnVubmVyICp0ZXN0UnVubmVyOworfQorCistICh2b2lkKXNldFVwCit7Cisg
ICAgdGVzdFJ1bm5lciA9IFtbVGVzdFJ1bm5lciBhbGxvY10gaW5pdF07CisgICAgW3Rlc3RSdW5u
ZXIgbG9hZENhcHR1cmVUZXN0SGFybmVzc107CisgICAgW3Rlc3RSdW5uZXIgc2V0VGV4dE9iZnVz
Y2F0aW9uRW5hYmxlZDpOT107Cit9CisKKy0gKHZvaWQpdGVhckRvd24KK3sKKyAgICB0ZXN0UnVu
bmVyID0gbmlsOworfQorCistICh2b2lkKXRlc3RUeXBpbmdTaW5nbGVMaW5lT2ZUZXh0Cit7Cisg
ICAgW3Rlc3RSdW5uZXIgdHlwZVN0cmluZzpAImhlbGxvIHdvcmxkIl07CisgICAgTlNTdHJpbmcg
Km9yaWdpbmFsU3VidHJlZSA9IHRlc3RSdW5uZXIuYm9keUVsZW1lbnRTdWJ0cmVlOworCisgICAg
W3NlbGYgcmV3aW5kQW5kUGxheWJhY2tFZGl0aW5nSW5QbGF5YmFja1Rlc3RIYXJuZXNzXTsKKyAg
ICBYQ1RBc3NlcnRUcnVlKFtzZWxmIG9yaWdpbmFsQm9keVN1YnRyZWU6b3JpZ2luYWxTdWJ0cmVl
IGlzRXF1YWxUb0ZpbmFsU3VidHJlZTp0ZXN0UnVubmVyLmJvZHlFbGVtZW50U3VidHJlZV0pOwor
ICAgIFhDVEFzc2VydEVxdWFsT2JqZWN0cyh0ZXN0UnVubmVyLmJvZHlUZXh0Q29udGVudCwgQCJo
ZWxsbyB3b3JsZCIpOworfQorCistICh2b2lkKXRlc3RUeXBpbmdNdWx0aXBsZUxpbmVzT2ZUZXh0
Cit7CisgICAgW3Rlc3RSdW5uZXIgdHlwZVN0cmluZzpAImZvbyJdOworICAgIFt0ZXN0UnVubmVy
IHR5cGVTdHJpbmc6QCJcbiJdOworICAgIFt0ZXN0UnVubmVyIHR5cGVTdHJpbmc6QCJiYXIiXTsK
KyAgICBOU1N0cmluZyAqb3JpZ2luYWxTdWJ0cmVlID0gdGVzdFJ1bm5lci5ib2R5RWxlbWVudFN1
YnRyZWU7CisKKyAgICBbc2VsZiByZXdpbmRBbmRQbGF5YmFja0VkaXRpbmdJblBsYXliYWNrVGVz
dEhhcm5lc3NdOworICAgIFhDVEFzc2VydFRydWUoW3NlbGYgb3JpZ2luYWxCb2R5U3VidHJlZTpv
cmlnaW5hbFN1YnRyZWUgaXNFcXVhbFRvRmluYWxTdWJ0cmVlOnRlc3RSdW5uZXIuYm9keUVsZW1l
bnRTdWJ0cmVlXSk7CisgICAgWENUQXNzZXJ0RXF1YWxPYmplY3RzKHRlc3RSdW5uZXIuYm9keVRl
eHRDb250ZW50LCBAImZvb2JhciIpOworfQorCistICh2b2lkKXRlc3RUeXBpbmdBbmREZWxldGlu
Z1RleHQKK3sKKyAgICBbdGVzdFJ1bm5lciB0eXBlU3RyaW5nOkAiYXBwbGUiXTsKKyAgICBbdGVz
dFJ1bm5lciBkZWxldGVCYWNrd2FyZHM6M107CisKKyAgICBOU1N0cmluZyAqb3JpZ2luYWxTdWJ0
cmVlID0gdGVzdFJ1bm5lci5ib2R5RWxlbWVudFN1YnRyZWU7CisKKyAgICBbc2VsZiByZXdpbmRB
bmRQbGF5YmFja0VkaXRpbmdJblBsYXliYWNrVGVzdEhhcm5lc3NdOworICAgIFhDVEFzc2VydFRy
dWUoW3NlbGYgb3JpZ2luYWxCb2R5U3VidHJlZTpvcmlnaW5hbFN1YnRyZWUgaXNFcXVhbFRvRmlu
YWxTdWJ0cmVlOnRlc3RSdW5uZXIuYm9keUVsZW1lbnRTdWJ0cmVlXSk7CisgICAgWENUQXNzZXJ0
RXF1YWxPYmplY3RzKHRlc3RSdW5uZXIuYm9keVRleHRDb250ZW50LCBAImFwIik7Cit9CisKKy0g
KHZvaWQpcmV3aW5kQW5kUGxheWJhY2tFZGl0aW5nSW5QbGF5YmFja1Rlc3RIYXJuZXNzCit7Cisg
ICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3QgcnVubmVyIGhhcyBsb2FkZWQgdGhlIGNh
cHR1cmUgdGVzdCBoYXJuZXNzLgorICAgIFt0ZXN0UnVubmVyIGxvYWRQbGF5YmFja1Rlc3RIYXJu
ZXNzV2l0aEpTT046dGVzdFJ1bm5lci5lZGl0aW5nSGlzdG9yeUpTT05dOworCisgICAgLy8gUmV3
aW5kIHRvIHRoZSB2ZXJ5IGJlZ2lubmluZywgdGhlbiBwbGF5IGJhY2sgYWxsIGVkaXRpbmcgYWdh
aW4uCisgICAgW3Rlc3RSdW5uZXIganVtcFRvVXBkYXRlSW5kZXg6MF07CisgICAgW3Rlc3RSdW5u
ZXIganVtcFRvVXBkYXRlSW5kZXg6dGVzdFJ1bm5lci5udW1iZXJPZlVwZGF0ZXNdOworfQorCist
IChCT09MKW9yaWdpbmFsQm9keVN1YnRyZWU6KE5TU3RyaW5nICopb3JpZ2luYWxTdWJ0cmVlIGlz
RXF1YWxUb0ZpbmFsU3VidHJlZTooTlNTdHJpbmcgKilmaW5hbFN1YnRyZWUKK3sKKyAgICBpZiAo
W29yaWdpbmFsU3VidHJlZSBpc0VxdWFsVG9TdHJpbmc6ZmluYWxTdWJ0cmVlXSkKKyAgICAgICAg
cmV0dXJuIFlFUzsKKworICAgIE5TTG9nKEAiPj4+Pj4+PiIpOworICAgIE5TTG9nKEAiVGhlIG9y
aWdpbmFsIHN1YnRyZWUgaXM6XG4lQCIsIG9yaWdpbmFsU3VidHJlZSk7CisgICAgTlNMb2coQCI9
PT09PT09Iik7CisgICAgTlNMb2coQCJUaGUgZmluYWwgc3VidHJlZSBpczpcbiVAIiwgZmluYWxT
dWJ0cmVlKTsKKyAgICBOU0xvZyhAIjw8PDw8PDwiKTsKKworICAgIHJldHVybiBOTzsKK30KKwor
QGVuZAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296025</attachid>
            <date>2016-12-02 17:04:06 -0800</date>
            <delta_ts>2016-12-02 17:31:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165114-20161202170335.patch</filename>
            <type>text/plain</type>
            <size>140537</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA5MTI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTNkNTJlM2JiNzQyODA2
ODUyYzUyNWIwYTJiMDI5OTY2NWJlODFmMi4uYWU0MzllZDcyMzBiZDhlOTk0OWNlZGI0YjExMmE2
ZDhhMjllNWMwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNyBAQAorMjAxNi0xMi0wMiAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBuZXcg
cHJvamVjdCBmb3IgcmVjb3JkaW5nIGFuZCBwbGF5aW5nIGJhY2sgZWRpdGluZyBjb21tYW5kcyBp
biBlZGl0YWJsZSB3ZWIgY29udGVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY1MTE0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yOTQwODEzNT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIG5l
dyBzY3JpcHRzIHVzZWQgdG8gcmVjb3JkIGFuZCBwbGF5IGJhY2sgZWRpdGluZywgYXMgd2VsbCBh
cyBhIG5ldyBYY29kZSBDb3B5IGZpbGVzIHBoYXNlIHRoYXQgcHVzaGVzIHRoZXNlCisgICAgICAg
IHNjcmlwdHMgdG8gdGhlIGludGVybmFsIHN5c3RlbSBkaXJlY3Rvcnkgd2hlbiBpb25zdGFsbGlu
Zy4gU2VlIHRoZSBUb29scyBDaGFuZ2VMb2cgYW5kIGluZGl2aWR1YWwgY29tbWVudHMgYmVsb3cK
KyAgICAgICAgZm9yIG1vcmUgZGV0YWlscy4gQ292ZXJlZCBieSAzIG5ldyB1bml0IHRlc3RzIGlu
IHRoZSBFZGl0aW5nSGlzdG9yeSBwcm9qZWN0LgorCisgICAgICAgICogSW50ZXJuYWxTY3JpcHRz
L0R1bXBFZGl0aW5nSGlzdG9yeS5qczogQWRkZWQuCisgICAgICAgIChiZWdpblByb2Nlc3NpbmdU
b3BMZXZlbFVwZGF0ZSk6CisgICAgICAgIChlbmRQcm9jZXNzaW5nVG9wTGV2ZWxVcGRhdGUpOgor
ICAgICAgICAoYXBwZW5kRE9NVXBkYXRlc0Zyb21SZWNvcmRzKToKKyAgICAgICAgKGFwcGVuZFNl
bGVjdGlvblVwZGF0ZUlmTmVjZXNzYXJ5KToKKworICAgICAgICBBZGRzIG5ldyBlbnRyaWVzIGlu
dG8gdGhlIHRvcC1sZXZlbCBsaXN0IG9mIERPTSB1cGRhdGVzIGNhcHR1cmVkIHdoZW4gZWRpdGlu
Zy4gUmVzcGVjdGl2ZWx5LCB0aGVzZSBhcmUgaW5wdXQKKyAgICAgICAgZXZlbnRzIGFuZCBzZWxl
Y3Rpb24gY2hhbmdlcy4KKworICAgICAgICAoRWRpdGluZ0hpc3RvcnkuZ2V0RWRpdGluZ0hpc3Rv
cnlBc0pTT05TdHJpbmcpOgorICAgICAgICAqIEludGVybmFsU2NyaXB0cy9FZGl0aW5nSGlzdG9y
eVV0aWwuanM6IEFkZGVkLgorICAgICAgICAocHJvdG90eXBlLl9zY3JhbWJsZSk6CisgICAgICAg
IChwcm90b3R5cGUuYXBwbHlUb1RleHQpOgorICAgICAgICAocHJvdG90eXBlLmFwcGx5VG9GaWxl
bmFtZSk6CisgICAgICAgIChwcm90b3R5cGUuX3NjcmFtYmVkTnVtYmVySW5kZXhGb3JDb2RlKToK
KyAgICAgICAgKHByb3RvdHlwZS5fc2NyYW1iZWRMb3dlcmNhc2VJbmRleEZvckNvZGUpOgorICAg
ICAgICAocHJvdG90eXBlLl9zY3JhbWJlZFVwcGVyY2FzZUluZGV4Rm9yQ29kZSk6CisKKyAgICAg
ICAgTmFpdmUgaW1wbGVtZW50YXRpb24gb2YgYW4gb2JmdXNjYXRvci4gQ3VycmVudGx5LCB0aGlz
IG9ubHkgYWZmZWN0cyBhbHBoYW51bWVyaWMgY2hhcmFjdGVycy4gT2JmdXNjYXRpb24gaXMgb2Zm
CisgICAgICAgIGJ5IGRlZmF1bHQsIGJ1dCBjYW4gYmUgdG9nZ2xlZCBvbiBpbiBKYXZhU2NyaXB0
LgorCisgICAgICAgIChlbGVtZW50RnJvbU1hcmtkb3duKToKKyAgICAgICAgKEdsb2JhbE5vZGVN
YXApOgorICAgICAgICAoR2xvYmFsTm9kZU1hcC5wcm90b3R5cGUubm9kZXNGb3JHVUlEcyk6Cisg
ICAgICAgIChHbG9iYWxOb2RlTWFwLnByb3RvdHlwZS5ndWlkc0ZvclROb2Rlcyk6CisgICAgICAg
IChHbG9iYWxOb2RlTWFwLnByb3RvdHlwZS5ub2RlRm9yR1VJRCk6CisgICAgICAgIChHbG9iYWxO
b2RlTWFwLnByb3RvdHlwZS5ndWlkRm9yTm9kZSk6CisgICAgICAgIChHbG9iYWxOb2RlTWFwLnBy
b3RvdHlwZS5oYXNHVUlERm9yTm9kZSk6CisgICAgICAgIChHbG9iYWxOb2RlTWFwLnByb3RvdHlw
ZS5ub2Rlcyk6CisgICAgICAgIChHbG9iYWxOb2RlTWFwLnByb3RvdHlwZS50b09iamVjdCk6Cisg
ICAgICAgIChHbG9iYWxOb2RlTWFwLmZyb21PYmplY3QpOgorICAgICAgICAoR2xvYmFsTm9kZU1h
cC5kYXRhRm9yTm9kZSk6CisgICAgICAgIChHbG9iYWxOb2RlTWFwLmVsZW1lbnRGcm9tVGFnTmFt
ZSk6CisgICAgICAgIChHbG9iYWxOb2RlTWFwLm5vZGVBdHRyaWJ1dGVzVG9PYmplY3QpOgorICAg
ICAgICAoR2xvYmFsTm9kZU1hcC5wcm90b3R5cGUuZGVzY3JpcHRpb25IVE1MRm9yR1VJRCk6Cisg
ICAgICAgIChHbG9iYWxOb2RlTWFwLnByb3RvdHlwZS5kZXNjcmlwdGlvbkhUTUxGb3JOb2RlKToK
KworICAgICAgICBUaGUgR2xvYmFsTm9kZU1hcCBrZWVwcyB0cmFjayBvZiBldmVyeSBub2RlIHRo
YXQgaGFzIGFwcGVhcmVkIGluIHRoZSBET00sIGFzc2lnbmluZyBlYWNoIG5vZGUgYSBnbG9iYWxs
eSB1bmlxdWUKKyAgICAgICAgaWRlbnRpZmllciAoR1VJRCkuIFRoaXMgR1VJRCBpcyB1c2VkIHdo
ZW4gcmVjb25zdHJ1Y3RpbmcgdGhlIERPTSwgYXMgd2VsbCBhcyB1bmFwcGx5aW5nIG9yIGFwcGx5
aW5nIGVkaXRpbmcuCisKKyAgICAgICAgKFNlbGVjdGlvblN0YXRlKToKKyAgICAgICAgKFNlbGVj
dGlvblN0YXRlLnByb3RvdHlwZS5pc0VxdWFsKToKKyAgICAgICAgKFNlbGVjdGlvblN0YXRlLnBy
b3RvdHlwZS5hcHBseVRvU2VsZWN0aW9uKToKKyAgICAgICAgKFNlbGVjdGlvblN0YXRlLmZyb21T
ZWxlY3Rpb24pOgorICAgICAgICAoU2VsZWN0aW9uU3RhdGUucHJvdG90eXBlLnRvT2JqZWN0KToK
KyAgICAgICAgKFNlbGVjdGlvblN0YXRlLmZyb21PYmplY3QpOgorCisgICAgICAgIFJlcHJlc2Vu
dHMgYSBzbmFwc2hvdCBvZiB0aGUgU2VsZWN0aW9uIHN0YXRlIChkZXRlcm1pbmVkIGJ5IGdldFNl
bGVjdGlvbigpKS4KKworICAgICAgICAoRE9NVXBkYXRlKToKKyAgICAgICAgKERPTVVwZGF0ZS5w
cm90b3R5cGUuYXBwbHkpOgorICAgICAgICAoRE9NVXBkYXRlLnByb3RvdHlwZS51bmFwcGx5KToK
KyAgICAgICAgKERPTVVwZGF0ZS5wcm90b3R5cGUudGFyZ2V0Tm9kZSk6CisgICAgICAgIChET01V
cGRhdGUucHJvdG90eXBlLmRldGFpbHNFbGVtZW50KToKKyAgICAgICAgKERPTVVwZGF0ZS5vZlR5
cGUpOgorICAgICAgICAoRE9NVXBkYXRlLmZyb21SZWNvcmRzKToKKworICAgICAgICBBIERPTVVw
ZGF0ZSBpcyBhbiBhYnN0cmFjdCBvYmplY3QgcmVwcmVzZW50aW5nIGEgY2hhbmdlIGluIHRoZSBE
T00gdGhhdCBtYXkgYmUgYXBwbGllZCBhbmQgdW5hcHBsaWVkLiBUaGVzZSBhcmUKKyAgICAgICAg
YWxzbyBzZXJpYWxpemFibGUgYXMgaGFzaGVzLCB3aGljaCBtYXkgdGhlbiBiZSBjb252ZXJ0ZWQg
dG8gSlNPTiB3aGVuIGdlbmVyYXRpbmcgZWRpdGluZyBoaXN0b3J5IGRhdGEuCisKKyAgICAgICAg
KENoaWxkTGlzdFVwZGF0ZSk6CisgICAgICAgIChDaGlsZExpc3RVcGRhdGUucHJvdG90eXBlLmFw
cGx5KToKKyAgICAgICAgKENoaWxkTGlzdFVwZGF0ZS5wcm90b3R5cGUudW5hcHBseSk6CisgICAg
ICAgIChDaGlsZExpc3RVcGRhdGUucHJvdG90eXBlLl9uZXh0U2libGluZyk6CisgICAgICAgIChD
aGlsZExpc3RVcGRhdGUucHJvdG90eXBlLl9yZW1vdmVkTm9kZXMpOgorICAgICAgICAoQ2hpbGRM
aXN0VXBkYXRlLnByb3RvdHlwZS5fYWRkZWROb2Rlcyk6CisgICAgICAgIChDaGlsZExpc3RVcGRh
dGUucHJvdG90eXBlLnRvT2JqZWN0KToKKyAgICAgICAgKENoaWxkTGlzdFVwZGF0ZS5wcm90b3R5
cGUuZGV0YWlsc0VsZW1lbnQpOgorICAgICAgICAoQ2hpbGRMaXN0VXBkYXRlLmZyb21PYmplY3Qp
OgorCisgICAgICAgIFRoZXNlIHRocmVlIHVwZGF0ZSB0eXBlcyBjb3JyZXNwb25kIHRvIHRoZSB0
aHJlZSB0eXBlcyBvZiBET00gbXV0YXRpb25zLiBUaGVzZSBtYXkgYXBwZWFyIGFzIHRvcC1sZXZl
bCB1cGRhdGVzCisgICAgICAgIGlmIHRoZXkgYXJlIG5vdCBjYXB0dXJlZCBkdXJpbmcgYW4gaW5w
dXQgZXZlbnQsIGJ1dCBmb3IgdGhlIG1ham9yaXR5IG9mIHVzZXItaW5wdXQtZHJpdmVuIGNoYW5n
ZXMsIHRoZXkgd2lsbCBiZQorICAgICAgICBjaGlsZHJlbiBvZiBhbiBpbnB1dCBldmVudC4KKwor
ICAgICAgICAoQ2hhcmFjdGVyRGF0YVVwZGF0ZSk6CisgICAgICAgIChDaGFyYWN0ZXJEYXRhVXBk
YXRlLnByb3RvdHlwZS5hcHBseSk6CisgICAgICAgIChDaGFyYWN0ZXJEYXRhVXBkYXRlLnByb3Rv
dHlwZS51bmFwcGx5KToKKyAgICAgICAgKENoYXJhY3RlckRhdGFVcGRhdGUucHJvdG90eXBlLmRl
dGFpbHNFbGVtZW50KToKKyAgICAgICAgKENoYXJhY3RlckRhdGFVcGRhdGUucHJvdG90eXBlLnRv
T2JqZWN0KToKKyAgICAgICAgKENoYXJhY3RlckRhdGFVcGRhdGUuZnJvbU9iamVjdCk6CisgICAg
ICAgIChBdHRyaWJ1dGVVcGRhdGUpOgorICAgICAgICAoQXR0cmlidXRlVXBkYXRlLnByb3RvdHlw
ZS5hcHBseSk6CisgICAgICAgIChBdHRyaWJ1dGVVcGRhdGUucHJvdG90eXBlLnVuYXBwbHkpOgor
ICAgICAgICAoQXR0cmlidXRlVXBkYXRlLnByb3RvdHlwZS5kZXRhaWxzRWxlbWVudCk6CisgICAg
ICAgIChBdHRyaWJ1dGVVcGRhdGUucHJvdG90eXBlLnRvT2JqZWN0KToKKyAgICAgICAgKEF0dHJp
YnV0ZVVwZGF0ZS5mcm9tT2JqZWN0KToKKyAgICAgICAgKFNlbGVjdGlvblVwZGF0ZSk6CisgICAg
ICAgIChTZWxlY3Rpb25VcGRhdGUucHJvdG90eXBlLmFwcGx5KToKKyAgICAgICAgKFNlbGVjdGlv
blVwZGF0ZS5wcm90b3R5cGUudW5hcHBseSk6CisgICAgICAgIChTZWxlY3Rpb25VcGRhdGUucHJv
dG90eXBlLnRvT2JqZWN0KToKKyAgICAgICAgKFNlbGVjdGlvblVwZGF0ZS5mcm9tT2JqZWN0KToK
KyAgICAgICAgKFNlbGVjdGlvblVwZGF0ZS5wcm90b3R5cGUuX3JhbmdlRGVzY3JpcHRpb25IVE1M
KToKKyAgICAgICAgKFNlbGVjdGlvblVwZGF0ZS5wcm90b3R5cGUuX2FuY2hvckRlc2NyaXB0aW9u
SFRNTCk6CisgICAgICAgIChTZWxlY3Rpb25VcGRhdGUucHJvdG90eXBlLl9mb2N1c0Rlc2NyaXB0
aW9uSFRNTCk6CisgICAgICAgIChTZWxlY3Rpb25VcGRhdGUucHJvdG90eXBlLmRldGFpbHNFbGVt
ZW50KToKKworICAgICAgICBSZXByZXNlbnRzIGEgY2hhbmdlIGluIHRoZSBTZWxlY3Rpb24uIFdo
aWxlIG5vIGNoYW5nZXMgdG8gdGhlIERPTSBzdHJ1Y3R1cmUgb2NjdXIgYXMgYSByZXN1bHQgb2Yg
YQorICAgICAgICBTZWxlY3Rpb25VcGRhdGUsIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4g
dGhlc2UgdXBkYXRlcyBpcyB1c2VkIHRvIGRldGVybWluZSB3aGVyZSB0aGUgc2VsZWN0aW9uIHNo
b3VsZCBiZQorICAgICAgICB3aGVuIHJld2luZGluZyBvciBwbGF5aW5nIGJhY2sgdGhlIGVkaXRp
bmcgaGlzdG9yeS4KKworICAgICAgICAoSW5wdXRFdmVudFVwZGF0ZSk6CisgICAgICAgIChJbnB1
dEV2ZW50VXBkYXRlLnByb3RvdHlwZS5fb2JmdXNjYXRlZERhdGEpOgorICAgICAgICAoSW5wdXRF
dmVudFVwZGF0ZS5wcm90b3R5cGUuYXBwbHkpOgorICAgICAgICAoSW5wdXRFdmVudFVwZGF0ZS5w
cm90b3R5cGUudW5hcHBseSk6CisgICAgICAgIChJbnB1dEV2ZW50VXBkYXRlLnByb3RvdHlwZS50
b09iamVjdCk6CisgICAgICAgIChJbnB1dEV2ZW50VXBkYXRlLmZyb21PYmplY3QpOgorICAgICAg
ICAoSW5wdXRFdmVudFVwZGF0ZS5wcm90b3R5cGUuZGV0YWlsc0VsZW1lbnQpOgorCisgICAgICAg
IFJlcHJlc2VudHMgYW4gdXBkYXRlIGR1ZSB0byB1c2VyIGlucHV0LCB3aGljaCBjb25zaXN0cyBv
ZiBzb21lIG51bWJlciBvZiBjaGlsZCBET00gbXV0YXRpb24gdXBkYXRlcy4KKworICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxNi0xMS0zMCAgQ3NhYmEg
T3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgc3Bl
Y3VsYXRpdmUgY21ha2UgYnVpbGRmaXggYWZ0ZXIgcjIwOTA3MC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0ludGVybmFsU2NyaXB0cy9EdW1wRWRpdGluZ0hpc3RvcnkuanMgYi9Tb3VyY2Uv
V2ViQ29yZS9JbnRlcm5hbFNjcmlwdHMvRHVtcEVkaXRpbmdIaXN0b3J5LmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjVlZGM1ZWMxMzY0OGNiNGUyZTcyZTliOWI1Mzk1OWI1NWQwMWRlODAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9JbnRlcm5hbFNjcmlwdHMvRHVtcEVkaXRpbmdIaXN0b3J5Lmpz
CkBAIC0wLDAgKzEsOTMgQEAKKygoKSA9PiB7CisgICAgbGV0IGluaXRpYWxpemVkID0gZmFsc2U7
CisgICAgbGV0IGdsb2JhbE5vZGVNYXAgPSBuZXcgRWRpdGluZ0hpc3RvcnkuR2xvYmFsTm9kZU1h
cCgpOworICAgIGxldCB0b3BMZXZlbFVwZGF0ZXMgPSBbXTsKKyAgICBsZXQgY3VycmVudENoaWxk
VXBkYXRlcyA9IFtdOworICAgIGxldCBpc1Byb2Nlc3NpbmdUb3BMZXZlbFVwZGF0ZSA9IGZhbHNl
OworICAgIGxldCBsYXN0S25vd25TZWxlY3Rpb25TdGF0ZSA9IG51bGw7CisgICAgbGV0IG11dGF0
aW9uT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihyZWNvcmRzID0+IGFwcGVuZERPTVVw
ZGF0ZXNGcm9tUmVjb3JkcyhyZWNvcmRzKSk7CisKKyAgICBmdW5jdGlvbiBiZWdpblByb2Nlc3Np
bmdUb3BMZXZlbFVwZGF0ZSgpIHsKKyAgICAgICAgaXNQcm9jZXNzaW5nVG9wTGV2ZWxVcGRhdGUg
PSB0cnVlOworICAgIH0KKworICAgIGZ1bmN0aW9uIGVuZFByb2Nlc3NpbmdUb3BMZXZlbFVwZGF0
ZSh0b3BMZXZlbFVwZGF0ZSkgeworICAgICAgICB0b3BMZXZlbFVwZGF0ZXMucHVzaCh0b3BMZXZl
bFVwZGF0ZSk7CisgICAgICAgIGN1cnJlbnRDaGlsZFVwZGF0ZXMgPSBbXTsKKyAgICAgICAgaXNQ
cm9jZXNzaW5nVG9wTGV2ZWxVcGRhdGUgPSBmYWxzZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBh
cHBlbmRET01VcGRhdGVzRnJvbVJlY29yZHMocmVjb3JkcykgeworICAgICAgICBpZiAoIXJlY29y
ZHMubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGxldCBuZXdVcGRhdGVz
ID0gRWRpdGluZ0hpc3RvcnkuRE9NVXBkYXRlLmZyb21SZWNvcmRzKHJlY29yZHMsIGdsb2JhbE5v
ZGVNYXApOworICAgICAgICBpZiAoaXNQcm9jZXNzaW5nVG9wTGV2ZWxVcGRhdGUpCisgICAgICAg
ICAgICBjdXJyZW50Q2hpbGRVcGRhdGVzID0gY3VycmVudENoaWxkVXBkYXRlcy5jb25jYXQobmV3
VXBkYXRlcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRvcExldmVsVXBkYXRlcyA9IHRv
cExldmVsVXBkYXRlcy5jb25jYXQobmV3VXBkYXRlcyk7CisgICAgfQorCisgICAgZnVuY3Rpb24g
YXBwZW5kU2VsZWN0aW9uVXBkYXRlSWZOZWNlc3NhcnkoKSB7CisgICAgICAgIGxldCBuZXdTZWxl
Y3Rpb25TdGF0ZSA9IEVkaXRpbmdIaXN0b3J5LlNlbGVjdGlvblN0YXRlLmZyb21TZWxlY3Rpb24o
Z2V0U2VsZWN0aW9uKCksIGdsb2JhbE5vZGVNYXApOworICAgICAgICBpZiAobmV3U2VsZWN0aW9u
U3RhdGUuaXNFcXVhbChsYXN0S25vd25TZWxlY3Rpb25TdGF0ZSkpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgbGV0IHVwZGF0ZSA9IG5ldyBFZGl0aW5nSGlzdG9yeS5TZWxlY3Rpb25V
cGRhdGUoZ2xvYmFsTm9kZU1hcCwgbmV3U2VsZWN0aW9uU3RhdGUpOworICAgICAgICBpZiAoaXNQ
cm9jZXNzaW5nVG9wTGV2ZWxVcGRhdGUpCisgICAgICAgICAgICBjdXJyZW50Q2hpbGRVcGRhdGVz
LnB1c2godXBkYXRlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdG9wTGV2ZWxVcGRhdGVz
LnB1c2godXBkYXRlKTsKKyAgICAgICAgbGFzdEtub3duU2VsZWN0aW9uU3RhdGUgPSBuZXdTZWxl
Y3Rpb25TdGF0ZTsKKyAgICB9CisKKyAgICBkb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZSgiY29u
dGVudGVkaXRhYmxlIiwgdHJ1ZSk7CisgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVy
KCJmb2N1cyIsICgpID0+IHsKKyAgICAgICAgaWYgKGluaXRpYWxpemVkKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgICAgICBFZGl0aW5n
SGlzdG9yeS5nZXRFZGl0aW5nSGlzdG9yeUFzSlNPTlN0cmluZyA9IChmb3JtYXR0ZWQpID0+IHsK
KyAgICAgICAgICAgIGxldCByZWNvcmQgPSB7fTsKKyAgICAgICAgICAgIHJlY29yZC51cGRhdGVz
ID0gdG9wTGV2ZWxVcGRhdGVzLm1hcCh1cGRhdGUgPT4gdXBkYXRlLnRvT2JqZWN0KCkpOworICAg
ICAgICAgICAgcmVjb3JkLmdsb2JhbE5vZGVNYXAgPSBnbG9iYWxOb2RlTWFwLnRvT2JqZWN0KCk7
CisgICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkID8gSlNPTi5zdHJpbmdpZnkocmVjb3JkLCBu
dWxsLCA0KSA6IEpTT04uc3RyaW5naWZ5KHJlY29yZCk7CisgICAgICAgIH07CisKKyAgICAgICAg
ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIiwgKCkgPT4geworICAg
ICAgICAgICAgYXBwZW5kU2VsZWN0aW9uVXBkYXRlSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgfSk7
CisgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZWlucHV0IiwgZXZlbnQg
PT4geworICAgICAgICAgICAgYXBwZW5kRE9NVXBkYXRlc0Zyb21SZWNvcmRzKG11dGF0aW9uT2Jz
ZXJ2ZXIudGFrZVJlY29yZHMoKSk7CisgICAgICAgICAgICBiZWdpblByb2Nlc3NpbmdUb3BMZXZl
bFVwZGF0ZSgpOworICAgICAgICB9KTsKKworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3Rl
bmVyKCJpbnB1dCIsIGV2ZW50ID0+IHsKKyAgICAgICAgICAgIGFwcGVuZERPTVVwZGF0ZXNGcm9t
UmVjb3JkcyhtdXRhdGlvbk9ic2VydmVyLnRha2VSZWNvcmRzKCkpOworICAgICAgICAgICAgbGV0
IGV2ZW50RGF0YSA9IGV2ZW50LmRhdGFUcmFuc2ZlciA/IGV2ZW50LmRhdGFUcmFuc2Zlci5nZXRE
YXRhKCJ0ZXh0L2h0bWwiKSA6IGV2ZW50LmRhdGE7CisgICAgICAgICAgICBsYXN0S25vd25TZWxl
Y3Rpb25TdGF0ZSA9IG51bGw7CisgICAgICAgICAgICBlbmRQcm9jZXNzaW5nVG9wTGV2ZWxVcGRh
dGUobmV3IEVkaXRpbmdIaXN0b3J5LklucHV0RXZlbnRVcGRhdGUoZ2xvYmFsTm9kZU1hcCwgY3Vy
cmVudENoaWxkVXBkYXRlcywgZXZlbnQuaW5wdXRUeXBlLCBldmVudERhdGEsIGV2ZW50LnRpbWVT
dGFtcCkpOworICAgICAgICB9KTsKKworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVy
KCJrZXlkb3duIiwgZXZlbnQgPT4geworICAgICAgICAgICAgaWYgKGV2ZW50LmtleSAhPT0gInMi
IHx8ICFldmVudC5tZXRhS2V5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg
ICAgbGV0IGZha2VMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOworICAgICAgICAg
ICAgZmFrZUxpbmsuc2V0QXR0cmlidXRlKCJocmVmIiwgImRhdGE6dGV4dC9wbGFpbjtjaGFyc2V0
PXV0Zi04LCIgKyBlbmNvZGVVUklDb21wb25lbnQoRWRpdGluZ0hpc3RvcnkuZ2V0RWRpdGluZ0hp
c3RvcnlBc0pTT05TdHJpbmcoKSkpOworICAgICAgICAgICAgZmFrZUxpbmsuc2V0QXR0cmlidXRl
KCJkb3dubG9hZCIsICJyZWNvcmQuanNvbiIpOworICAgICAgICAgICAgZmFrZUxpbmsuY2xpY2so
KTsKKyAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgIH0pOworCisg
ICAgICAgIG11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwgeworICAgICAgICAgICAg
Y2hpbGRMaXN0OiB0cnVlLAorICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSwKKyAgICAgICAg
ICAgIGNoYXJhY3RlckRhdGE6IHRydWUsCisgICAgICAgICAgICBzdWJ0cmVlOiB0cnVlLAorICAg
ICAgICAgICAgYXR0cmlidXRlT2xkVmFsdWU6IHRydWUsCisgICAgICAgICAgICBjaGFyYWN0ZXJE
YXRhT2xkVmFsdWU6IHRydWUsCisgICAgICAgIH0pOworICAgIH0pOworfSkoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0ludGVybmFsU2NyaXB0cy9FZGl0aW5nSGlzdG9yeVV0aWwuanMg
Yi9Tb3VyY2UvV2ViQ29yZS9JbnRlcm5hbFNjcmlwdHMvRWRpdGluZ0hpc3RvcnlVdGlsLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjY0NTg3MGIzZDBhOWIyMDY1YmRhZWRhOWFjOTJjOTQ2ZjczZjU5NjAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9JbnRlcm5hbFNjcmlwdHMvRWRpdGluZ0hpc3Rv
cnlVdGlsLmpzCkBAIC0wLDAgKzEsNjkzIEBACisoKCkgPT4geworICAgIGNsYXNzIE9iZnVzY2F0
b3IgeworICAgICAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgICAgICAgIHRoaXMuX3NjcmFtYmxl
ZExvd2VyY2FzZUxldHRlcnMgPSB0aGlzLl9zY3JhbWJsZShBcnJheSgyNikuZmlsbCgpLm1hcCgo
XywgaSkgPT4gOTcgKyBpKSk7CisgICAgICAgICAgICB0aGlzLl9zY3JhbWJsZWRVcHBlcmNhc2VM
ZXR0ZXJzID0gdGhpcy5fc2NyYW1ibGUoQXJyYXkoMjYpLmZpbGwoKS5tYXAoKF8sIGkpID0+IDY1
ICsgaSkpOworICAgICAgICAgICAgdGhpcy5fc2NyYW1ibGVkTnVtYmVycyA9IHRoaXMuX3NjcmFt
YmxlKEFycmF5KDEwKS5maWxsKCkubWFwKChfLCBpKSA9PiA0OCArIGkpKTsKKyAgICAgICAgICAg
IHRoaXMuZW5hYmxlZCA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgX3NjcmFtYmxlKGFy
cmF5KSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gYXJyYXkubGVuZ3RoIC0gMTsgaSA+IDA7
IGktLSkgeworICAgICAgICAgICAgICAgIGxldCBqID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgp
ICogKGkgKyAxKSk7CisgICAgICAgICAgICAgICAgbGV0IHRlbXAgPSBhcnJheVtpXTsKKyAgICAg
ICAgICAgICAgICBhcnJheVtpXSA9IGFycmF5W2pdOworICAgICAgICAgICAgICAgIGFycmF5W2pd
ID0gdGVtcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBhcnJheTsKKyAgICAg
ICAgfQorCisgICAgICAgIGFwcGx5VG9UZXh0KHRleHQpIHsKKyAgICAgICAgICAgIGlmICghdGhp
cy5lbmFibGVkIHx8ICF0ZXh0KQorICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0OworCisgICAg
ICAgICAgICBsZXQgcmVzdWx0ID0gIiI7CisgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7
IGluZGV4IDwgdGV4dC5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICBsZXQgY29k
ZSA9IHRleHQuY2hhckNvZGVBdChpbmRleCk7CisgICAgICAgICAgICAgICAgbGV0IG51bWJlcklu
ZGV4ID0gdGhpcy5fc2NyYW1iZWROdW1iZXJJbmRleEZvckNvZGUoY29kZSk7CisgICAgICAgICAg
ICAgICAgbGV0IGxvd2VyY2FzZUluZGV4ID0gdGhpcy5fc2NyYW1iZWRMb3dlcmNhc2VJbmRleEZv
ckNvZGUoY29kZSk7CisgICAgICAgICAgICAgICAgbGV0IHVwcGVyY2FzZUluZGV4ID0gdGhpcy5f
c2NyYW1iZWRVcHBlcmNhc2VJbmRleEZvckNvZGUoY29kZSk7CisKKyAgICAgICAgICAgICAgICBp
ZiAobnVtYmVySW5kZXggIT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFN0
cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fc2NyYW1ibGVkTnVtYmVyc1tudW1iZXJJbmRleF0pOwor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxvd2VyY2FzZUluZGV4ICE9IG51bGwpCisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX3NjcmFtYmxl
ZExvd2VyY2FzZUxldHRlcnNbbG93ZXJjYXNlSW5kZXhdKTsKKyAgICAgICAgICAgICAgICBlbHNl
IGlmICh1cHBlcmNhc2VJbmRleCAhPSBudWxsKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQg
Kz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9zY3JhbWJsZWRVcHBlcmNhc2VMZXR0ZXJzW3Vw
cGVyY2FzZUluZGV4XSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgKz0gdGV4dC5jaGFyQXQoaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIGFwcGx5VG9GaWxlbmFtZShm
aWxlbmFtZSkgeworICAgICAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgIWZpbGVuYW1lKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmaWxlbmFtZTsKKworICAgICAgICAgICAgbGV0IGNvbXBv
bmVudHMgPSBmaWxlbmFtZS5zcGxpdCgiLiIpOworICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVu
dHMubWFwKChjb21wb25lbnQsIGluZGV4KSA9PiB7CisgICAgICAgICAgICAgICAgaWYgKGluZGV4
ID09IGNvbXBvbmVudHMubGVuZ3RoIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNv
bXBvbmVudDsKKworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGx5VG9UZXh0KGNvbXBv
bmVudCk7CisgICAgICAgICAgICB9KS5qb2luKCIuIik7CisgICAgICAgIH0KKworICAgICAgICBf
c2NyYW1iZWROdW1iZXJJbmRleEZvckNvZGUoY29kZSkgeworICAgICAgICAgICAgcmV0dXJuIDQ4
IDw9IGNvZGUgJiYgY29kZSA8PSA1NyA/IGNvZGUgLSA0OCA6IG51bGw7CisgICAgICAgIH0KKwor
ICAgICAgICBfc2NyYW1iZWRMb3dlcmNhc2VJbmRleEZvckNvZGUoY29kZSkgeworICAgICAgICAg
ICAgcmV0dXJuIDk3IDw9IGNvZGUgJiYgY29kZSA8PSAxMjIgPyBjb2RlIC0gOTcgOiBudWxsOwor
ICAgICAgICB9CisKKyAgICAgICAgX3NjcmFtYmVkVXBwZXJjYXNlSW5kZXhGb3JDb2RlKGNvZGUp
IHsKKyAgICAgICAgICAgIHJldHVybiA2NSA8PSBjb2RlICYmIGNvZGUgPD0gOTAgPyBjb2RlIC0g
NjUgOiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHNoYXJlZCgpIHsKKyAgICAg
ICAgICAgIGlmICghT2JmdXNjYXRvci5fc2hhcmVkSW5zdGFuY2UpCisgICAgICAgICAgICAgICAg
T2JmdXNjYXRvci5fc2hhcmVkSW5zdGFuY2UgPSBuZXcgT2JmdXNjYXRvcigpOworICAgICAgICAg
ICAgcmV0dXJuIE9iZnVzY2F0b3IuX3NoYXJlZEluc3RhbmNlOworICAgICAgICB9CisgICAgfQor
CisgICAgZnVuY3Rpb24gZWxlbWVudEZyb21NYXJrZG93bihodG1sKSB7CisgICAgICAgIGxldCB0
ZW1wb3JhcnlEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgdGVt
cG9yYXJ5RGl2LmlubmVySFRNTCA9IGh0bWw7CisgICAgICAgIHJldHVybiB0ZW1wb3JhcnlEaXYu
Y2hpbGRyZW5bMF07CisgICAgfQorCisgICAgY2xhc3MgR2xvYmFsTm9kZU1hcCB7CisgICAgICAg
IGNvbnN0cnVjdG9yKG5vZGVzQnlHVUlEKSB7CisgICAgICAgICAgICB0aGlzLl9ub2Rlc0J5R1VJ
RCA9IG5vZGVzQnlHVUlEID8gbm9kZXNCeUdVSUQgOiBuZXcgTWFwKCk7CisgICAgICAgICAgICB0
aGlzLl9ndWlkc0J5Tm9kZSA9IG5ldyBNYXAoKTsKKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRH
VUlEID0gMDsKKyAgICAgICAgICAgIGZvciAobGV0IFtndWlkLCBub2RlXSBvZiB0aGlzLl9ub2Rl
c0J5R1VJRCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2d1aWRzQnlOb2RlLnNldChub2RlLCBn
dWlkKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50R1VJRCA9IE1hdGgubWF4KHRoaXMu
X2N1cnJlbnRHVUlELCBndWlkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2N1
cnJlbnRHVUlEKys7CisgICAgICAgIH0KKworICAgICAgICBub2Rlc0ZvckdVSURzKGd1aWRzKSB7
CisgICAgICAgICAgICBpZiAoIWd1aWRzLm1hcCkKKyAgICAgICAgICAgICAgICBndWlkcyA9IEFy
cmF5LmZyb20oZ3VpZHMpOworICAgICAgICAgICAgcmV0dXJuIGd1aWRzLm1hcChndWlkID0+IHRo
aXMubm9kZUZvckdVSUQoZ3VpZCkpOworICAgICAgICB9CisKKyAgICAgICAgZ3VpZHNGb3JOb2Rl
cyhub2RlcykgeworICAgICAgICAgICAgaWYgKCFub2Rlcy5tYXApCisgICAgICAgICAgICAgICAg
bm9kZXMgPSBBcnJheS5mcm9tKG5vZGVzKTsKKyAgICAgICAgICAgIHJldHVybiBub2Rlcy5tYXAo
bm9kZSA9PiB0aGlzLmd1aWRGb3JOb2RlKG5vZGUpKTsKKyAgICAgICAgfQorCisgICAgICAgIG5v
ZGVGb3JHVUlEKGd1aWQpIHsKKyAgICAgICAgICAgIGlmICghZ3VpZCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbDsKKworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVzQnlHVUlELmdl
dChndWlkKTsKKyAgICAgICAgfQorCisgICAgICAgIGd1aWRGb3JOb2RlKG5vZGUpIHsKKyAgICAg
ICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAg
ICAgaWYgKHRoaXMuaGFzR1VJREZvck5vZGUobm9kZSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2d1aWRzQnlOb2RlLmdldChub2RlKTsKKworICAgICAgICAgICAgY29uc3QgZ3VpZCA9
IHRoaXMuX2N1cnJlbnRHVUlEOworICAgICAgICAgICAgdGhpcy5fZ3VpZHNCeU5vZGUuc2V0KG5v
ZGUsIGd1aWQpOworICAgICAgICAgICAgdGhpcy5fbm9kZXNCeUdVSUQuc2V0KGd1aWQsIG5vZGUp
OworICAgICAgICAgICAgdGhpcy5fY3VycmVudEdVSUQrKzsKKyAgICAgICAgICAgIHJldHVybiBn
dWlkOworICAgICAgICB9CisKKyAgICAgICAgaGFzR1VJREZvck5vZGUobm9kZSkgeworICAgICAg
ICAgICAgcmV0dXJuICEhdGhpcy5fZ3VpZHNCeU5vZGUuZ2V0KG5vZGUpOworICAgICAgICB9CisK
KyAgICAgICAgbm9kZXMoKSB7CisgICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9u
b2Rlc0J5R1VJRC52YWx1ZXMoKSk7CisgICAgICAgIH0KKworICAgICAgICB0b09iamVjdCgpIHsK
KyAgICAgICAgICAgIGxldCBub2Rlc0FuZEdVSURzVG9Qcm9jZXNzID0gW10sIGd1aWRzVG9Qcm9j
ZXNzID0gbmV3IFNldCgpOworICAgICAgICAgICAgbGV0IGd1aWRzQnlOb2RlSXRlcmF0b3IgPSB0
aGlzLl9ndWlkc0J5Tm9kZS5lbnRyaWVzKCk7CisgICAgICAgICAgICBmb3IgKGxldCBlbnRyeSA9
IGd1aWRzQnlOb2RlSXRlcmF0b3IubmV4dCgpOyAhZW50cnkuZG9uZTsgZW50cnkgPSBndWlkc0J5
Tm9kZUl0ZXJhdG9yLm5leHQoKSkgeworICAgICAgICAgICAgICAgIG5vZGVzQW5kR1VJRHNUb1By
b2Nlc3MucHVzaChlbnRyeS52YWx1ZSk7CisgICAgICAgICAgICAgICAgZ3VpZHNUb1Byb2Nlc3Mu
YWRkKGVudHJ5LnZhbHVlWzFdKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGV0IGl0
ZXJhdG9yID0gZG9jdW1lbnQuY3JlYXRlTm9kZUl0ZXJhdG9yKGRvY3VtZW50LmJvZHksIE5vZGVG
aWx0ZXIuU0hPV19BTEwpOworICAgICAgICAgICAgZm9yIChsZXQgbm9kZSA9IGl0ZXJhdG9yLm5l
eHROb2RlKCk7IG5vZGU7IG5vZGUgPSBpdGVyYXRvci5uZXh0Tm9kZSgpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuaGFzR1VJREZvck5vZGUobm9kZSkpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgbGV0IG5ld0dVSUQgPSB0aGlzLmd1aWRGb3JO
b2RlKG5vZGUpOworICAgICAgICAgICAgICAgIG5vZGVzQW5kR1VJRHNUb1Byb2Nlc3MucHVzaChb
bm9kZSwgbmV3R1VJRF0pOworICAgICAgICAgICAgICAgIGd1aWRzVG9Qcm9jZXNzLmFkZChuZXdH
VUlEKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGV0IG5vZGVJbmZvQXJyYXkgPSBb
XTsKKyAgICAgICAgICAgIHdoaWxlIChub2Rlc0FuZEdVSURzVG9Qcm9jZXNzLmxlbmd0aCkgewor
ICAgICAgICAgICAgICAgIGxldCBbbm9kZSwgZ3VpZF0gPSBub2Rlc0FuZEdVSURzVG9Qcm9jZXNz
LnBvcCgpOworICAgICAgICAgICAgICAgIGxldCBpbmZvID0ge307CisgICAgICAgICAgICAgICAg
aW5mby5ndWlkID0gZ3VpZDsKKyAgICAgICAgICAgICAgICBpbmZvLnRhZ05hbWUgPSBub2RlLnRh
Z05hbWU7CisgICAgICAgICAgICAgICAgaW5mby5hdHRyaWJ1dGVzID0gR2xvYmFsTm9kZU1hcC5u
b2RlQXR0cmlidXRlc1RvT2JqZWN0KG5vZGUpOworICAgICAgICAgICAgICAgIGluZm8udHlwZSA9
IG5vZGUubm9kZVR5cGU7CisgICAgICAgICAgICAgICAgaW5mby5kYXRhID0gR2xvYmFsTm9kZU1h
cC5kYXRhRm9yTm9kZShub2RlKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5oYXNDaGlsZE5v
ZGVzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mby5jaGlsZEdVSURzID0gdGhpcy5ndWlk
c0Zvck5vZGVzKG5vZGUuY2hpbGROb2Rlcyk7CisgICAgICAgICAgICAgICAgICAgIGZvciAobGV0
IGNoaWxkR1VJRCBvZiBpbmZvLmNoaWxkR1VJRHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghZ3VpZHNUb1Byb2Nlc3MuaGFzKGNoaWxkR1VJRCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZXNBbmRHVUlEc1RvUHJvY2Vzcy5wdXNoKFt0aGlzLm5vZGVGb3JHVUlEKGNo
aWxkR1VJRCksIGNoaWxkR1VJRF0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIG5vZGVJbmZvQXJyYXkucHVzaChpbmZvKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmZvQXJyYXk7CisgICAgICAgIH0K
KworICAgICAgICBzdGF0aWMgZnJvbU9iamVjdChub2RlSW5mb0FycmF5KSB7CisgICAgICAgICAg
ICBsZXQgbm9kZXNCeUdVSUQgPSBuZXcgTWFwKCk7CisgICAgICAgICAgICBmb3IgKGxldCBpbmZv
IG9mIG5vZGVJbmZvQXJyYXkpIHsKKyAgICAgICAgICAgICAgICBsZXQgbm9kZSA9IG51bGw7Cisg
ICAgICAgICAgICAgICAgaWYgKGluZm8udHlwZSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZSA9IEdsb2JhbE5vZGVNYXAuZWxlbWVudEZyb21UYWdOYW1lKGlu
Zm8udGFnTmFtZSwgaW5mby5hdHRyaWJ1dGVzLCBpbmZvLmRhdGEpOworCisgICAgICAgICAgICAg
ICAgaWYgKGluZm8udHlwZSA9PSBOb2RlLlRFWFRfTk9ERSkKKyAgICAgICAgICAgICAgICAgICAg
bm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGluZm8uZGF0YSk7CisKKyAgICAgICAgICAg
ICAgICBpZiAoaW5mby50eXBlID09IE5vZGUuRE9DVU1FTlRfTk9ERSkKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZSA9IGRvY3VtZW50OworCisgICAgICAgICAgICAgICAgY29uc29sZS5hc3NlcnQo
bm9kZSk7CisgICAgICAgICAgICAgICAgbm9kZXNCeUdVSUQuc2V0KGluZm8uZ3VpZCwgbm9kZSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRoZW4sIHNldCBjaGlsZCBub2RlcyBm
b3IgYWxsIG5vZGVzIHRoYXQgZG8gbm90IGFwcGVhciBpbiB0aGUgRE9NLgorICAgICAgICAgICAg
Zm9yIChsZXQgaW5mbyBvZiBub2RlSW5mb0FycmF5LmZpbHRlcihpbmZvID0+ICEhaW5mby5jaGls
ZEdVSURzKSkgeworICAgICAgICAgICAgICAgIGxldCBub2RlID0gbm9kZXNCeUdVSUQuZ2V0KGlu
Zm8uZ3VpZCk7CisgICAgICAgICAgICAgICAgZm9yIChsZXQgY2hpbGRHVUlEIG9mIGluZm8uY2hp
bGRHVUlEcykKKyAgICAgICAgICAgICAgICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQobm9kZXNCeUdV
SUQuZ2V0KGNoaWxkR1VJRCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4g
bmV3IEdsb2JhbE5vZGVNYXAobm9kZXNCeUdVSUQpOworICAgICAgICB9CisKKyAgICAgICAgc3Rh
dGljIGRhdGFGb3JOb2RlKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09
PSBOb2RlLlRFWFRfTk9ERSkKKyAgICAgICAgICAgICAgICByZXR1cm4gT2JmdXNjYXRvci5zaGFy
ZWQoKS5hcHBseVRvVGV4dChub2RlLmRhdGEpOworCisgICAgICAgICAgICBpZiAobm9kZS50YWdO
YW1lICYmIG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAiYXR0YWNobWVudCIpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0eXBlOiBub2RlLmZp
bGUudHlwZSwKKyAgICAgICAgICAgICAgICAgICAgbmFtZTogT2JmdXNjYXRvci5zaGFyZWQoKS5h
cHBseVRvRmlsZW5hbWUobm9kZS5maWxlLm5hbWUpLAorICAgICAgICAgICAgICAgICAgICBsYXN0
TW9kaWZpZWQ6IG5ldyBEYXRlKCkuZ2V0VGltZSgpCisgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAg
ICBzdGF0aWMgZWxlbWVudEZyb21UYWdOYW1lKHRhZ05hbWUsIGF0dHJpYnV0ZXMsIGRhdGEpIHsK
KyAgICAgICAgICAgIGxldCBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsK
KyAgICAgICAgICAgIGZvciAobGV0IGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlcykKKyAgICAg
ICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVzW2F0
dHJpYnV0ZU5hbWVdKTsKKworICAgICAgICAgICAgaWYgKHRhZ05hbWUudG9Mb3dlckNhc2UoKSA9
PSAiYXR0YWNobWVudCIpIHsKKyAgICAgICAgICAgICAgICBub2RlLmZpbGUgPSBuZXcgRmlsZShb
YEZpbGUgbmFtZWQgJyR7ZGF0YS5uYW1lfSdgXSwgZGF0YS5uYW1lLCB7CisgICAgICAgICAgICAg
ICAgICAgIHR5cGU6IGRhdGEudHlwZSwKKyAgICAgICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVk
OiBkYXRhLmxhc3RNb2RpZmllZAorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJldHVy
bnMgYW4gT2JqZWN0IGNvbnRhaW5pbmcgYXR0cmlidXRlIG5hbWUgPT4gYXR0cmlidXRlIHZhbHVl
CisgICAgICAgIHN0YXRpYyBub2RlQXR0cmlidXRlc1RvT2JqZWN0KG5vZGUsIGF0dHJpYnV0ZXNU
b0V4Y2x1ZGU9W10pIHsKKyAgICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVBdHRyaWJ1dGVzU2V0ID0g
bmV3IFNldChhdHRyaWJ1dGVzVG9FeGNsdWRlKTsKKyAgICAgICAgICAgIGlmICghbm9kZS5hdHRy
aWJ1dGVzKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgICAgICBsZXQg
YXR0cmlidXRlTWFwID0ge307CisgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4
IDwgbm9kZS5hdHRyaWJ1dGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIGNv
bnN0IGF0dHJpYnV0ZSA9IG5vZGUuYXR0cmlidXRlcy5pdGVtKGluZGV4KTsKKyAgICAgICAgICAg
ICAgICBjb25zdCBbbG9jYWxOYW1lLCB2YWx1ZV0gPSBbYXR0cmlidXRlLmxvY2FsTmFtZSwgYXR0
cmlidXRlLnZhbHVlXTsKKyAgICAgICAgICAgICAgICBpZiAoZXhjbHVkZUF0dHJpYnV0ZXNTZXQu
aGFzKGxvY2FsTmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICAgICAgYXR0cmlidXRlTWFwW2xvY2FsTmFtZV0gPSB2YWx1ZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZU1hcDsKKyAgICAgICAgfQorCisgICAgICAg
IGRlc2NyaXB0aW9uSFRNTEZvckdVSUQoZ3VpZCkgeworICAgICAgICAgICAgcmV0dXJuIGA8c3Bh
biBlaC1ndWlkPSR7Z3VpZH0gY2xhc3M9ImVoLW5vZGUiPiR7dGhpcy5ub2RlRm9yR1VJRChndWlk
KS5ub2RlTmFtZX08L3NwYW4+YDsKKyAgICAgICAgfQorCisgICAgICAgIGRlc2NyaXB0aW9uSFRN
TEZvck5vZGUobm9kZSkgeworICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgICAg
IHJldHVybiAiKG51bGwpIjsKKyAgICAgICAgICAgIHJldHVybiBgPHNwYW4gZWgtZ3VpZD0ke3Ro
aXMuZ3VpZEZvck5vZGUobm9kZSl9IGNsYXNzPSJlaC1ub2RlIj4ke25vZGUubm9kZU5hbWV9PC9z
cGFuPmA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBTZWxlY3Rpb25TdGF0ZSB7Cisg
ICAgICAgIGNvbnN0cnVjdG9yKG5vZGVNYXAsIHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE5v
ZGUsIGVuZE9mZnNldCwgYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0LCBmb2N1c05vZGUsIGZvY3Vz
T2Zmc2V0KSB7CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydChub2RlTWFwKTsKKyAgICAgICAg
ICAgIHRoaXMubm9kZU1hcCA9IG5vZGVNYXA7CisgICAgICAgICAgICB0aGlzLnN0YXJ0R1VJRCA9
IG5vZGVNYXAuZ3VpZEZvck5vZGUoc3RhcnROb2RlKTsKKyAgICAgICAgICAgIHRoaXMuc3RhcnRP
ZmZzZXQgPSBzdGFydE9mZnNldDsKKyAgICAgICAgICAgIHRoaXMuZW5kR1VJRCA9IG5vZGVNYXAu
Z3VpZEZvck5vZGUoZW5kTm9kZSk7CisgICAgICAgICAgICB0aGlzLmVuZE9mZnNldCA9IGVuZE9m
ZnNldDsKKyAgICAgICAgICAgIHRoaXMuYW5jaG9yR1VJRCA9IG5vZGVNYXAuZ3VpZEZvck5vZGUo
YW5jaG9yTm9kZSk7CisgICAgICAgICAgICB0aGlzLmFuY2hvck9mZnNldCA9IGFuY2hvck9mZnNl
dDsKKyAgICAgICAgICAgIHRoaXMuZm9jdXNHVUlEID0gbm9kZU1hcC5ndWlkRm9yTm9kZShmb2N1
c05vZGUpOworICAgICAgICAgICAgdGhpcy5mb2N1c09mZnNldCA9IGZvY3VzT2Zmc2V0OworICAg
ICAgICB9CisKKyAgICAgICAgaXNFcXVhbChvdGhlclNlbGVjdGlvblN0YXRlKSB7CisgICAgICAg
ICAgICByZXR1cm4gb3RoZXJTZWxlY3Rpb25TdGF0ZQorICAgICAgICAgICAgICAgICYmIHRoaXMu
c3RhcnRHVUlEID09PSBvdGhlclNlbGVjdGlvblN0YXRlLnN0YXJ0R1VJRCAmJiB0aGlzLnN0YXJ0
T2Zmc2V0ID09PSBvdGhlclNlbGVjdGlvblN0YXRlLnN0YXJ0T2Zmc2V0CisgICAgICAgICAgICAg
ICAgJiYgdGhpcy5lbmRHVUlEID09PSBvdGhlclNlbGVjdGlvblN0YXRlLmVuZEdVSUQgJiYgdGhp
cy5lbmRPZmZzZXQgPT09IG90aGVyU2VsZWN0aW9uU3RhdGUuZW5kT2Zmc2V0CisgICAgICAgICAg
ICAgICAgJiYgdGhpcy5hbmNob3JHVUlEID09PSBvdGhlclNlbGVjdGlvblN0YXRlLmFuY2hvckdV
SUQgJiYgdGhpcy5hbmNob3JPZmZzZXQgPT09IG90aGVyU2VsZWN0aW9uU3RhdGUuYW5jaG9yT2Zm
c2V0CisgICAgICAgICAgICAgICAgJiYgdGhpcy5mb2N1c0dVSUQgPT09IG90aGVyU2VsZWN0aW9u
U3RhdGUuZm9jdXNHVUlEICYmIHRoaXMuZm9jdXNPZmZzZXQgPT09IG90aGVyU2VsZWN0aW9uU3Rh
dGUuZm9jdXNPZmZzZXQ7CisgICAgICAgIH0KKworICAgICAgICBhcHBseVRvU2VsZWN0aW9uKHNl
bGVjdGlvbikgeworICAgICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOworICAg
ICAgICAgICAgbGV0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKKyAgICAgICAgICAg
IHJhbmdlLnNldFN0YXJ0KHRoaXMubm9kZU1hcC5ub2RlRm9yR1VJRCh0aGlzLnN0YXJ0R1VJRCks
IHRoaXMuc3RhcnRPZmZzZXQpOworICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kKHRoaXMubm9kZU1h
cC5ub2RlRm9yR1VJRCh0aGlzLmVuZEdVSUQpLCB0aGlzLmVuZE9mZnNldCk7CisgICAgICAgICAg
ICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpOworICAgICAgICAgICAgc2VsZWN0aW9uLnNldEJh
c2VBbmRFeHRlbnQodGhpcy5ub2RlTWFwLm5vZGVGb3JHVUlEKHRoaXMuYW5jaG9yR1VJRCksIHRo
aXMuYW5jaG9yT2Zmc2V0LCB0aGlzLm5vZGVNYXAubm9kZUZvckdVSUQodGhpcy5mb2N1c0dVSUQp
LCB0aGlzLmZvY3VzT2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBmcm9tU2Vs
ZWN0aW9uKHNlbGVjdGlvbiwgbm9kZU1hcCkgeworICAgICAgICAgICAgbGV0IFtzdGFydE5vZGUs
IHN0YXJ0T2Zmc2V0LCBlbmROb2RlLCBlbmRPZmZzZXRdID0gW251bGwsIDAsIG51bGwsIDBdOwor
ICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50KSB7CisgICAgICAgICAgICAgICAg
bGV0IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKKyAgICAgICAgICAg
ICAgICBzdGFydE5vZGUgPSBzZWxlY3RlZFJhbmdlLnN0YXJ0Q29udGFpbmVyOworICAgICAgICAg
ICAgICAgIHN0YXJ0T2Zmc2V0ID0gc2VsZWN0ZWRSYW5nZS5zdGFydE9mZnNldDsKKyAgICAgICAg
ICAgICAgICBlbmROb2RlID0gc2VsZWN0ZWRSYW5nZS5lbmRDb250YWluZXI7CisgICAgICAgICAg
ICAgICAgZW5kT2Zmc2V0ID0gc2VsZWN0ZWRSYW5nZS5lbmRPZmZzZXQ7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gbmV3IFNlbGVjdGlvblN0YXRlKAorICAgICAgICAgICAgICAg
IG5vZGVNYXAsIHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE5vZGUsIGVuZE9mZnNldCwKKyAg
ICAgICAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSwgc2VsZWN0aW9uLmFuY2hvck9mZnNl
dCwgc2VsZWN0aW9uLmZvY3VzTm9kZSwgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0CisgICAgICAgICAg
ICApOworICAgICAgICB9CisKKyAgICAgICAgdG9PYmplY3QoKSB7CisgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgIHN0YXJ0R1VJRDogdGhpcy5zdGFydEdVSUQsIHN0YXJ0T2Zm
c2V0OiB0aGlzLnN0YXJ0T2Zmc2V0LCBlbmRHVUlEOiB0aGlzLmVuZEdVSUQsIGVuZE9mZnNldDog
dGhpcy5lbmRPZmZzZXQsCisgICAgICAgICAgICAgICAgYW5jaG9yR1VJRDogdGhpcy5hbmNob3JH
VUlELCBhbmNob3JPZmZzZXQ6IHRoaXMuYW5jaG9yT2Zmc2V0LCBmb2N1c0dVSUQ6IHRoaXMuZm9j
dXNHVUlELCBmb2N1c09mZnNldDogdGhpcy5mb2N1c09mZnNldAorICAgICAgICAgICAgfTsKKyAg
ICAgICAgfQorCisgICAgICAgIHN0YXRpYyBmcm9tT2JqZWN0KGpzb24sIG5vZGVNYXApIHsKKyAg
ICAgICAgICAgIGlmICghanNvbikKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAg
ICAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3Rpb25TdGF0ZSgKKyAgICAgICAgICAgICAgICBub2Rl
TWFwLCBub2RlTWFwLm5vZGVGb3JHVUlEKGpzb24uc3RhcnRHVUlEKSwganNvbi5zdGFydE9mZnNl
dCwgbm9kZU1hcC5ub2RlRm9yR1VJRChqc29uLmVuZEdVSUQpLCBqc29uLmVuZE9mZnNldCwKKyAg
ICAgICAgICAgICAgICBub2RlTWFwLm5vZGVGb3JHVUlEKGpzb24uYW5jaG9yR1VJRCksIGpzb24u
YW5jaG9yT2Zmc2V0LCBub2RlTWFwLm5vZGVGb3JHVUlEKGpzb24uZm9jdXNHVUlEKSwganNvbi5m
b2N1c09mZnNldAorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNz
IERPTVVwZGF0ZSB7CisgICAgICAgIGNvbnN0cnVjdG9yKG5vZGVNYXApIHsKKyAgICAgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KG5vZGVNYXApOworICAgICAgICAgICAgdGhpcy5ub2RlTWFwID0gbm9k
ZU1hcDsKKyAgICAgICAgfQorCisgICAgICAgIGFwcGx5KCkgeworICAgICAgICAgICAgdGhyb3cg
IkV4cGVjdGVkIHN1YmNsYXNzIGltcGxlbWVudGF0aW9uLiI7CisgICAgICAgIH0KKworICAgICAg
ICB1bmFwcGx5KCkgeworICAgICAgICAgICAgdGhyb3cgIkV4cGVjdGVkIHN1YmNsYXNzIGltcGxl
bWVudGF0aW9uLiI7CisgICAgICAgIH0KKworICAgICAgICB0YXJnZXROb2RlKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMubm9kZU1hcC5ub2RlRm9yR1VJRCh0aGlzLnRhcmdldEdVSUQpOwor
ICAgICAgICB9CisKKyAgICAgICAgZGV0YWlsc0VsZW1lbnQoKSB7CisgICAgICAgICAgICB0aHJv
dyAiRXhwZWN0ZWQgc3ViY2xhc3MgaW1wbGVtZW50YXRpb24uIjsKKyAgICAgICAgfQorCisgICAg
ICAgIHN0YXRpYyBvZlR5cGUodHlwZSkgeworICAgICAgICAgICAgaWYgKCFET01VcGRhdGUuX2Fs
bFR5cGVzKQorICAgICAgICAgICAgICAgIERPTVVwZGF0ZS5fYWxsVHlwZXMgPSB7IENoaWxkTGlz
dFVwZGF0ZSwgQ2hhcmFjdGVyRGF0YVVwZGF0ZSwgQXR0cmlidXRlVXBkYXRlLCBJbnB1dEV2ZW50
VXBkYXRlLCBTZWxlY3Rpb25VcGRhdGUgfTsKKyAgICAgICAgICAgIHJldHVybiBET01VcGRhdGUu
X2FsbFR5cGVzW3R5cGVdOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGZyb21SZWNvcmRz
KHJlY29yZHMsIG5vZGVNYXApIHsKKyAgICAgICAgICAgIGxldCB1cGRhdGVzID0gW10KKyAgICAg
ICAgICAgICAgICAsIGNoYXJhY3RlckRhdGFVcGRhdGVzID0gW10KKyAgICAgICAgICAgICAgICAs
IGF0dHJpYnV0ZVVwZGF0ZXMgPSBbXTsKKworICAgICAgICAgICAgZm9yIChsZXQgcmVjb3JkIG9m
IHJlY29yZHMpIHsKKyAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gcmVjb3JkLnRhcmdldDsK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY29yZC50eXBlKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSAiY2hhcmFjdGVyRGF0YSI6CisgICAgICAgICAgICAgICAgICAgIHZhciB1cGRhdGUgPSBu
ZXcgQ2hhcmFjdGVyRGF0YVVwZGF0ZShub2RlTWFwLCBub2RlTWFwLmd1aWRGb3JOb2RlKHRhcmdl
dCksIHJlY29yZC5vbGRWYWx1ZSwgdGFyZ2V0LmRhdGEpCisgICAgICAgICAgICAgICAgICAgIHVw
ZGF0ZXMucHVzaCh1cGRhdGUpOworICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJEYXRhVXBk
YXRlcy5wdXNoKHVwZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgImNoaWxkTGlzdCI6CisgICAgICAgICAgICAgICAgICAgIHZhciB1cGRhdGUg
PSBuZXcgQ2hpbGRMaXN0VXBkYXRlKG5vZGVNYXAsIG5vZGVNYXAuZ3VpZEZvck5vZGUodGFyZ2V0
KSwgbm9kZU1hcC5ndWlkc0Zvck5vZGVzKHJlY29yZC5hZGRlZE5vZGVzKSwgbm9kZU1hcC5ndWlk
c0Zvck5vZGVzKHJlY29yZC5yZW1vdmVkTm9kZXMpLCBub2RlTWFwLmd1aWRGb3JOb2RlKHJlY29y
ZC5uZXh0U2libGluZykpCisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZXMucHVzaCh1cGRhdGUp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICJhdHRy
aWJ1dGVzIjoKKyAgICAgICAgICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IG5ldyBBdHRyaWJ1dGVV
cGRhdGUobm9kZU1hcCwgbm9kZU1hcC5ndWlkRm9yTm9kZSh0YXJnZXQpLCByZWNvcmQuYXR0cmli
dXRlTmFtZSwgcmVjb3JkLm9sZFZhbHVlLCB0YXJnZXQuZ2V0QXR0cmlidXRlKHJlY29yZC5hdHRy
aWJ1dGVOYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlcy5wdXNoKHVwZGF0ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVVwZGF0ZXMucHVzaCh1cGRhdGUpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIEFkanVzdCBhbGwgY2hhcmFjdGVyIGRhdGEgdXBkYXRlcyBmb3IgdGhl
IHNhbWUgdGFyZ2V0LgorICAgICAgICAgICAgY2hhcmFjdGVyRGF0YVVwZGF0ZXMuZm9yRWFjaCgo
Y3VycmVudFVwZGF0ZSwgaW5kZXgpID0+IHsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0g
Y2hhcmFjdGVyRGF0YVVwZGF0ZXMubGVuZ3RoIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICAgICAgZm9yIChsZXQgbmV4dFVwZGF0ZUluZGV4ID0gaW5kZXgg
KyAxOyBuZXh0VXBkYXRlSW5kZXggPCBjaGFyYWN0ZXJEYXRhVXBkYXRlcy5sZW5ndGg7IG5leHRV
cGRhdGVJbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0VXBkYXRlID0gY2hh
cmFjdGVyRGF0YVVwZGF0ZXNbbmV4dFVwZGF0ZUluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGN1cnJlbnRVcGRhdGUudGFyZ2V0R1VJRCA9PT0gbmV4dFVwZGF0ZS50YXJnZXRHVUlEKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VXBkYXRlLm5ld0RhdGEgPSBuZXh0VXBk
YXRlLm9sZERhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAg
ICAgICAvLyBBZGp1c3QgYWxsIGF0dHJpYnV0ZSB1cGRhdGVzIGZvciB0aGUgc2FtZSB0YXJnZXQg
YW5kIGF0dHJpYnV0ZSBuYW1lLgorICAgICAgICAgICAgYXR0cmlidXRlVXBkYXRlcy5mb3JFYWNo
KChjdXJyZW50VXBkYXRlLCBpbmRleCkgPT4geworICAgICAgICAgICAgICAgIGlmIChpbmRleCA9
PSBhdHRyaWJ1dGVVcGRhdGVzLmxlbmd0aCAtIDEpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgICAgIGZvciAobGV0IG5leHRVcGRhdGVJbmRleCA9IGluZGV4ICsg
MTsgbmV4dFVwZGF0ZUluZGV4IDwgYXR0cmlidXRlVXBkYXRlcy5sZW5ndGg7IG5leHRVcGRhdGVJ
bmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0VXBkYXRlID0gYXR0cmlidXRl
VXBkYXRlc1tuZXh0VXBkYXRlSW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVu
dFVwZGF0ZS50YXJnZXRHVUlEID09PSBuZXh0VXBkYXRlLnRhcmdldEdVSUQgJiYgY3VycmVudFVw
ZGF0ZS5hdHRyaWJ1dGUgPT09IG5leHRVcGRhdGUuYXR0cmlidXRlKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjdXJyZW50VXBkYXRlLm5ld0RhdGEgPSBuZXh0VXBkYXRlLm9sZERhdGE7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICByZXR1cm4gdXBk
YXRlczsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIENoaWxkTGlzdFVwZGF0ZSBleHRl
bmRzIERPTVVwZGF0ZSB7CisgICAgICAgIGNvbnN0cnVjdG9yKG5vZGVNYXAsIHRhcmdldEdVSUQs
IGFkZGVkR1VJRHMsIHJlbW92ZWRHVUlEcywgbmV4dFNpYmxpbmdHVUlEKSB7CisgICAgICAgICAg
ICBzdXBlcihub2RlTWFwKTsKKyAgICAgICAgICAgIHRoaXMudGFyZ2V0R1VJRCA9IHRhcmdldEdV
SUQ7CisgICAgICAgICAgICB0aGlzLmFkZGVkID0gYWRkZWRHVUlEczsKKyAgICAgICAgICAgIHRo
aXMucmVtb3ZlZCA9IHJlbW92ZWRHVUlEczsKKyAgICAgICAgICAgIHRoaXMubmV4dFNpYmxpbmdH
VUlEID0gbmV4dFNpYmxpbmdHVUlEID09IHVuZGVmaW5lZCA/IG51bGwgOiBuZXh0U2libGluZ0dV
SUQ7CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydChub2RlTWFwLm5vZGVGb3JHVUlEKHRhcmdl
dEdVSUQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGFwcGx5KCkgeworICAgICAgICAgICAgZm9y
IChsZXQgcmVtb3ZlZE5vZGUgb2YgdGhpcy5fcmVtb3ZlZE5vZGVzKCkpCisgICAgICAgICAgICAg
ICAgcmVtb3ZlZE5vZGUucmVtb3ZlKCk7CisKKyAgICAgICAgICAgIGxldCB0YXJnZXQgPSB0aGlz
LnRhcmdldE5vZGUoKTsKKyAgICAgICAgICAgIGZvciAobGV0IGFkZGVkTm9kZSBvZiB0aGlzLl9h
ZGRlZE5vZGVzKCkpCisgICAgICAgICAgICAgICAgdGFyZ2V0Lmluc2VydEJlZm9yZShhZGRlZE5v
ZGUsIHRoaXMuX25leHRTaWJsaW5nKCkpOworICAgICAgICB9CisKKyAgICAgICAgdW5hcHBseSgp
IHsKKyAgICAgICAgICAgIGZvciAobGV0IGFkZGVkTm9kZSBvZiB0aGlzLl9hZGRlZE5vZGVzKCkp
CisgICAgICAgICAgICAgICAgYWRkZWROb2RlLnJlbW92ZSgpOworCisgICAgICAgICAgICBsZXQg
dGFyZ2V0ID0gdGhpcy50YXJnZXROb2RlKCk7CisgICAgICAgICAgICBmb3IgKGxldCByZW1vdmVk
Tm9kZSBvZiB0aGlzLl9yZW1vdmVkTm9kZXMoKSkKKyAgICAgICAgICAgICAgICB0YXJnZXQuaW5z
ZXJ0QmVmb3JlKHJlbW92ZWROb2RlLCB0aGlzLl9uZXh0U2libGluZygpKTsKKyAgICAgICAgfQor
CisgICAgICAgIF9uZXh0U2libGluZygpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLm5leHRTaWJs
aW5nR1VJRCA9PSBudWxsKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMubm9kZU1hcC5ub2RlRm9yR1VJRCh0aGlzLm5leHRTaWJsaW5nR1VJRCk7
CisgICAgICAgIH0KKworICAgICAgICBfcmVtb3ZlZE5vZGVzKCkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMubm9kZU1hcC5ub2Rlc0ZvckdVSURzKHRoaXMucmVtb3ZlZCk7CisgICAgICAgIH0K
KworICAgICAgICBfYWRkZWROb2RlcygpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm5vZGVN
YXAubm9kZXNGb3JHVUlEcyh0aGlzLmFkZGVkKTsKKyAgICAgICAgfQorCisgICAgICAgIHRvT2Jq
ZWN0KCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiAiQ2hp
bGRMaXN0VXBkYXRlIiwKKyAgICAgICAgICAgICAgICB0YXJnZXRHVUlEOiB0aGlzLnRhcmdldEdV
SUQsCisgICAgICAgICAgICAgICAgYWRkZWRHVUlEczogdGhpcy5hZGRlZCwKKyAgICAgICAgICAg
ICAgICByZW1vdmVkR1VJRHM6IHRoaXMucmVtb3ZlZCwKKyAgICAgICAgICAgICAgICBuZXh0U2li
bGluZ0dVSUQ6IHRoaXMubmV4dFNpYmxpbmdHVUlECisgICAgICAgICAgICB9OworICAgICAgICB9
CisKKyAgICAgICAgZGV0YWlsc0VsZW1lbnQoKSB7CisgICAgICAgICAgICBsZXQgbmV4dFNpYmxp
bmcgPSB0aGlzLl9uZXh0U2libGluZygpOworICAgICAgICAgICAgbGV0IGh0bWwgPQorICAgICAg
ICAgICAgYDxkZXRhaWxzPgorICAgICAgICAgICAgICAgIDxzdW1tYXJ5PmNoaWxkIGxpc3QgY2hh
bmdlZDwvc3VtbWFyeT4KKyAgICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgICAg
IDxsaT5wYXJlbnQ6ICR7dGhpcy5ub2RlTWFwLmRlc2NyaXB0aW9uSFRNTEZvckdVSUQodGhpcy50
YXJnZXRHVUlEKX08L2xpPgorICAgICAgICAgICAgICAgICAgICA8bGk+YWRkZWQ6IFsgJHtbdGhp
cy5fYWRkZWROb2RlcygpLm1hcChub2RlID0+IHRoaXMubm9kZU1hcC5kZXNjcmlwdGlvbkhUTUxG
b3JOb2RlKG5vZGUpKV19IF08L2xpPgorICAgICAgICAgICAgICAgICAgICA8bGk+cmVtb3ZlZDog
WyAke1t0aGlzLl9yZW1vdmVkTm9kZXMoKS5tYXAobm9kZSA9PiB0aGlzLm5vZGVNYXAuZGVzY3Jp
cHRpb25IVE1MRm9yTm9kZShub2RlKSldfSBdPC9saT4KKyAgICAgICAgICAgICAgICAgICAgPGxp
PmJlZm9yZSBzaWJsaW5nOiAke25leHRTaWJsaW5nID8gdGhpcy5ub2RlTWFwLmRlc2NyaXB0aW9u
SFRNTEZvck5vZGUobmV4dFNpYmxpbmcpIDogIihudWxsKSJ9PC9saT4KKyAgICAgICAgICAgICAg
ICA8L3VsPgorICAgICAgICAgICAgPC9kZXRhaWxzPmA7CisgICAgICAgICAgICByZXR1cm4gZWxl
bWVudEZyb21NYXJrZG93bihodG1sKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBmcm9t
T2JqZWN0KGpzb24sIG5vZGVNYXApIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2hpbGRMaXN0
VXBkYXRlKG5vZGVNYXAsIGpzb24udGFyZ2V0R1VJRCwganNvbi5hZGRlZEdVSURzLCBqc29uLnJl
bW92ZWRHVUlEcywganNvbi5uZXh0U2libGluZ0dVSUQpOworICAgICAgICB9CisgICAgfQorCisg
ICAgY2xhc3MgQ2hhcmFjdGVyRGF0YVVwZGF0ZSBleHRlbmRzIERPTVVwZGF0ZSB7CisgICAgICAg
IGNvbnN0cnVjdG9yKG5vZGVNYXAsIHRhcmdldEdVSUQsIG9sZERhdGEsIG5ld0RhdGEpIHsKKyAg
ICAgICAgICAgIHN1cGVyKG5vZGVNYXApOworICAgICAgICAgICAgdGhpcy50YXJnZXRHVUlEID0g
dGFyZ2V0R1VJRDsKKyAgICAgICAgICAgIHRoaXMub2xkRGF0YSA9IG9sZERhdGE7CisgICAgICAg
ICAgICB0aGlzLm5ld0RhdGEgPSBuZXdEYXRhOworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQo
bm9kZU1hcC5ub2RlRm9yR1VJRCh0YXJnZXRHVUlEKSk7CisgICAgICAgIH0KKworICAgICAgICBh
cHBseSgpIHsKKyAgICAgICAgICAgIHRoaXMudGFyZ2V0Tm9kZSgpLmRhdGEgPSB0aGlzLm5ld0Rh
dGE7CisgICAgICAgIH0KKworICAgICAgICB1bmFwcGx5KCkgeworICAgICAgICAgICAgdGhpcy50
YXJnZXROb2RlKCkuZGF0YSA9IHRoaXMub2xkRGF0YTsKKyAgICAgICAgfQorCisgICAgICAgIGRl
dGFpbHNFbGVtZW50KCkgeworICAgICAgICAgICAgbGV0IGh0bWwgPQorICAgICAgICAgICAgYDxk
ZXRhaWxzPgorICAgICAgICAgICAgICAgIDxzdW1tYXJ5PmNoYXJhY3RlciBkYXRhIGNoYW5nZWQ8
L3N1bW1hcnk+CisgICAgICAgICAgICAgICAgPHVsPgorICAgICAgICAgICAgICAgICAgICA8bGk+
b2xkOiAke3RoaXMub2xkRGF0YSAhPSBudWxsID8gIiciICsgdGhpcy5vbGREYXRhICsgIiciIDog
IihudWxsKSJ9PC9saT4KKyAgICAgICAgICAgICAgICAgICAgPGxpPm5ldzogJHt0aGlzLm5ld0Rh
dGEgIT0gbnVsbCA/ICInIiArIHRoaXMubmV3RGF0YSArICInIiA6ICIobnVsbCkifTwvbGk+Cisg
ICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgIDwvZGV0YWlscz5gOworICAgICAgICAg
ICAgcmV0dXJuIGVsZW1lbnRGcm9tTWFya2Rvd24oaHRtbCk7CisgICAgICAgIH0KKworICAgICAg
ICB0b09iamVjdCgpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlw
ZTogIkNoYXJhY3RlckRhdGFVcGRhdGUiLAorICAgICAgICAgICAgICAgIHRhcmdldEdVSUQ6IHRo
aXMudGFyZ2V0R1VJRCwKKyAgICAgICAgICAgICAgICBvbGREYXRhOiBPYmZ1c2NhdG9yLnNoYXJl
ZCgpLmFwcGx5VG9UZXh0KHRoaXMub2xkRGF0YSksCisgICAgICAgICAgICAgICAgbmV3RGF0YTog
T2JmdXNjYXRvci5zaGFyZWQoKS5hcHBseVRvVGV4dCh0aGlzLm5ld0RhdGEpCisgICAgICAgICAg
ICB9OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGZyb21PYmplY3QoanNvbiwgbm9kZU1h
cCkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBDaGFyYWN0ZXJEYXRhVXBkYXRlKG5vZGVNYXAs
IGpzb24udGFyZ2V0R1VJRCwganNvbi5vbGREYXRhLCBqc29uLm5ld0RhdGEpOworICAgICAgICB9
CisgICAgfQorCisgICAgY2xhc3MgQXR0cmlidXRlVXBkYXRlIGV4dGVuZHMgRE9NVXBkYXRlIHsK
KyAgICAgICAgY29uc3RydWN0b3Iobm9kZU1hcCwgdGFyZ2V0R1VJRCwgYXR0cmlidXRlLCBvbGRW
YWx1ZSwgbmV3VmFsdWUpIHsKKyAgICAgICAgICAgIHN1cGVyKG5vZGVNYXApOworICAgICAgICAg
ICAgdGhpcy50YXJnZXRHVUlEID0gdGFyZ2V0R1VJRDsKKyAgICAgICAgICAgIHRoaXMuYXR0cmli
dXRlID0gYXR0cmlidXRlOworICAgICAgICAgICAgdGhpcy5vbGRWYWx1ZSA9IG9sZFZhbHVlOwor
ICAgICAgICAgICAgdGhpcy5uZXdWYWx1ZSA9IG5ld1ZhbHVlOworICAgICAgICAgICAgY29uc29s
ZS5hc3NlcnQobm9kZU1hcC5ub2RlRm9yR1VJRCh0YXJnZXRHVUlEKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBhcHBseSgpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLm5ld1ZhbHVlID09IG51bGwp
CisgICAgICAgICAgICAgICAgdGhpcy50YXJnZXROb2RlKCkucmVtb3ZlQXR0cmlidXRlKHRoaXMu
YXR0cmlidXRlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aGlzLnRhcmdl
dE5vZGUoKS5zZXRBdHRyaWJ1dGUodGhpcy5hdHRyaWJ1dGUsIHRoaXMubmV3VmFsdWUpOworICAg
ICAgICB9CisKKyAgICAgICAgdW5hcHBseSgpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLm9sZFZh
bHVlID09IG51bGwpCisgICAgICAgICAgICAgICAgdGhpcy50YXJnZXROb2RlKCkucmVtb3ZlQXR0
cmlidXRlKHRoaXMuYXR0cmlidXRlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICB0aGlzLnRhcmdldE5vZGUoKS5zZXRBdHRyaWJ1dGUodGhpcy5hdHRyaWJ1dGUsIHRoaXMub2xk
VmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgZGV0YWlsc0VsZW1lbnQoKSB7CisgICAgICAg
ICAgICBsZXQgaHRtbCA9CisgICAgICAgICAgICBgPGRldGFpbHM+CisgICAgICAgICAgICAgICAg
PHN1bW1hcnk+YXR0cmlidXRlIGNoYW5nZWQ8L3N1bW1hcnk+CisgICAgICAgICAgICAgICAgPHVs
PgorICAgICAgICAgICAgICAgICAgICA8bGk+dGFyZ2V0OiAke3RoaXMubm9kZU1hcC5kZXNjcmlw
dGlvbkhUTUxGb3JHVUlEKHRoaXMudGFyZ2V0R1VJRCl9PC9saT4KKyAgICAgICAgICAgICAgICAg
ICAgPGxpPmF0dHJpYnV0ZTogJHt0aGlzLmF0dHJpYnV0ZX08L2xpPgorICAgICAgICAgICAgICAg
ICAgICA8bGk+b2xkOiAke3RoaXMub2xkVmFsdWUgIT0gbnVsbCA/ICInIiArIHRoaXMub2xkVmFs
dWUgKyAiJyIgOiAiKG51bGwpIn08L2xpPgorICAgICAgICAgICAgICAgICAgICA8bGk+bmV3OiAk
e3RoaXMubmV3VmFsdWUgIT0gbnVsbCA/ICInIiArIHRoaXMubmV3VmFsdWUgKyAiJyIgOiAiKG51
bGwpIn08L2xpPgorICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8L2RldGFpbHM+
YDsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50RnJvbU1hcmtkb3duKGh0bWwpOworICAgICAg
ICB9CisKKyAgICAgICAgdG9PYmplY3QoKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgIHR5cGU6ICJBdHRyaWJ1dGVVcGRhdGUiLAorICAgICAgICAgICAgICAgIHRhcmdl
dEdVSUQ6IHRoaXMudGFyZ2V0R1VJRCwKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGU6IHRoaXMu
YXR0cmlidXRlLAorICAgICAgICAgICAgICAgIG9sZFZhbHVlOiB0aGlzLm9sZFZhbHVlLAorICAg
ICAgICAgICAgICAgIG5ld1ZhbHVlOiB0aGlzLm5ld1ZhbHVlCisgICAgICAgICAgICB9OworICAg
ICAgICB9CisKKyAgICAgICAgc3RhdGljIGZyb21PYmplY3QoanNvbiwgbm9kZU1hcCkgeworICAg
ICAgICAgICAgcmV0dXJuIG5ldyBBdHRyaWJ1dGVVcGRhdGUobm9kZU1hcCwganNvbi50YXJnZXRH
VUlELCBqc29uLmF0dHJpYnV0ZSwganNvbi5vbGRWYWx1ZSwganNvbi5uZXdWYWx1ZSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBTZWxlY3Rpb25VcGRhdGUgZXh0ZW5kcyBET01VcGRh
dGUgeworICAgICAgICBjb25zdHJ1Y3Rvcihub2RlTWFwLCBzdGF0ZSkgeworICAgICAgICAgICAg
c3VwZXIobm9kZU1hcCk7CisgICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7CisgICAgICAg
IH0KKworICAgICAgICAvLyBTZWxlY3Rpb25VcGRhdGVzIGFyZSBub3QgYXBwbGllZC91bmFwcGxp
ZWQgYnkgdGhlIG5vcm1hbCBtZWFucy4gVGhlIHNlbGVjdGlvbiBpcyBhcHBsaWVkIHZpYQorICAg
ICAgICAvLyBET01VcGRhdGVIaXN0b3J5Q29udGV4dC5hcHBseUN1cnJlbnRTZWxlY3Rpb25TdGF0
ZSBpbnN0ZWFkLCB3aGljaCBjb25zaWRlcnMgdGhlIHVwZGF0ZXMgYmVmb3JlIGFuZCBhZnRlciB0
aGUKKyAgICAgICAgLy8gY3VycmVudCB1cGRhdGUgaW5kZXguCisgICAgICAgIGFwcGx5KCkgeyB9
CisgICAgICAgIHVuYXBwbHkoKSB7IH0KKworICAgICAgICB0b09iamVjdCgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogIlNlbGVjdGlvblVwZGF0ZSIsCisg
ICAgICAgICAgICAgICAgc3RhdGU6IHRoaXMuc3RhdGUgPyB0aGlzLnN0YXRlLnRvT2JqZWN0KCkg
OiBudWxsCisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGZyb21P
YmplY3QoanNvbiwgbm9kZU1hcCkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3Rpb25V
cGRhdGUobm9kZU1hcCwgU2VsZWN0aW9uU3RhdGUuZnJvbU9iamVjdChqc29uLnN0YXRlLCBub2Rl
TWFwKSk7CisgICAgICAgIH0KKworICAgICAgICBfcmFuZ2VEZXNjcmlwdGlvbkhUTUwoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gYCgke3RoaXMubm9kZU1hcC5kZXNjcmlwdGlvbkhUTUxGb3JHVUlE
KHRoaXMuc3RhdGUuc3RhcnRHVUlEKX06JHt0aGlzLnN0YXRlLnN0YXJ0T2Zmc2V0fSwKKyAgICAg
ICAgICAgICAgICAke3RoaXMubm9kZU1hcC5kZXNjcmlwdGlvbkhUTUxGb3JHVUlEKHRoaXMuc3Rh
dGUuZW5kR1VJRCl9OiR7dGhpcy5zdGF0ZS5lbmRPZmZzZXR9KWA7CisgICAgICAgIH0KKworICAg
ICAgICBfYW5jaG9yRGVzY3JpcHRpb25IVE1MKCkgeworICAgICAgICAgICAgcmV0dXJuIGAke3Ro
aXMubm9kZU1hcC5kZXNjcmlwdGlvbkhUTUxGb3JHVUlEKHRoaXMuc3RhdGUuYW5jaG9yR1VJRCl9
OiR7dGhpcy5zdGF0ZS5hbmNob3JPZmZzZXR9YDsKKyAgICAgICAgfQorCisgICAgICAgIF9mb2N1
c0Rlc2NyaXB0aW9uSFRNTCgpIHsKKyAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLm5vZGVNYXAu
ZGVzY3JpcHRpb25IVE1MRm9yR1VJRCh0aGlzLnN0YXRlLmZvY3VzR1VJRCl9OiR7dGhpcy5zdGF0
ZS5mb2N1c09mZnNldH1gOworICAgICAgICB9CisKKyAgICAgICAgZGV0YWlsc0VsZW1lbnQoKSB7
CisgICAgICAgICAgICBsZXQgaHRtbCA9CisgICAgICAgICAgICBgPGRldGFpbHM+CisgICAgICAg
ICAgICAgICAgPHN1bW1hcnk+U2VsZWN0aW9uIGNoYW5nZWQ8L3N1bW1hcnk+CisgICAgICAgICAg
ICAgICAgPHVsPgorICAgICAgICAgICAgICAgICAgICA8bGk+cmFuZ2U6ICR7dGhpcy5fcmFuZ2VE
ZXNjcmlwdGlvbkhUTUwoKX08L2xpPgorICAgICAgICAgICAgICAgICAgICA8bGk+YW5jaG9yOiAk
e3RoaXMuX2FuY2hvckRlc2NyaXB0aW9uSFRNTCgpfTwvbGk+CisgICAgICAgICAgICAgICAgICAg
IDxsaT5mb2N1czogJHt0aGlzLl9mb2N1c0Rlc2NyaXB0aW9uSFRNTCgpfTwvbGk+CisgICAgICAg
ICAgICAgICAgPC91bD4KKyAgICAgICAgICAgIDwvZGV0YWlscz5gOworICAgICAgICAgICAgcmV0
dXJuIGVsZW1lbnRGcm9tTWFya2Rvd24oaHRtbCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBj
bGFzcyBJbnB1dEV2ZW50VXBkYXRlIGV4dGVuZHMgRE9NVXBkYXRlIHsKKyAgICAgICAgY29uc3Ry
dWN0b3Iobm9kZU1hcCwgdXBkYXRlcywgaW5wdXRUeXBlLCBkYXRhLCB0aW1lU3RhbXApIHsKKyAg
ICAgICAgICAgIHN1cGVyKG5vZGVNYXApOworICAgICAgICAgICAgdGhpcy51cGRhdGVzID0gdXBk
YXRlczsKKyAgICAgICAgICAgIHRoaXMuaW5wdXRUeXBlID0gaW5wdXRUeXBlOworICAgICAgICAg
ICAgdGhpcy5kYXRhID0gZGF0YTsKKyAgICAgICAgICAgIHRoaXMudGltZVN0YW1wID0gdGltZVN0
YW1wOworICAgICAgICB9CisKKyAgICAgICAgX29iZnVzY2F0ZWREYXRhKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuaW5wdXRUeXBlLmluZGV4T2YoImluc2VydCIpID09IDAgPyBPYmZ1c2Nh
dG9yLnNoYXJlZCgpLmFwcGx5VG9UZXh0KHRoaXMuZGF0YSkgOiB0aGlzLmRhdGE7CisgICAgICAg
IH0KKworICAgICAgICBhcHBseSgpIHsKKyAgICAgICAgICAgIGZvciAobGV0IHVwZGF0ZSBvZiB0
aGlzLnVwZGF0ZXMpCisgICAgICAgICAgICAgICAgdXBkYXRlLmFwcGx5KCk7CisgICAgICAgIH0K
KworICAgICAgICB1bmFwcGx5KCkgeworICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSB0aGlz
LnVwZGF0ZXMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkKKyAgICAgICAgICAgICAg
ICB0aGlzLnVwZGF0ZXNbaW5kZXhdLnVuYXBwbHkoKTsKKyAgICAgICAgfQorCisgICAgICAgIHRv
T2JqZWN0KCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiAi
SW5wdXRFdmVudFVwZGF0ZSIsCisgICAgICAgICAgICAgICAgaW5wdXRUeXBlOiB0aGlzLmlucHV0
VHlwZSwKKyAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLl9vYmZ1c2NhdGVkRGF0YSgpLAorICAg
ICAgICAgICAgICAgIHRpbWVTdGFtcDogdGhpcy50aW1lU3RhbXAsCisgICAgICAgICAgICAgICAg
dXBkYXRlczogdGhpcy51cGRhdGVzLm1hcCh1cGRhdGUgPT4gdXBkYXRlLnRvT2JqZWN0KCkpCisg
ICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGZyb21PYmplY3QoanNv
biwgbm9kZU1hcCkgeworICAgICAgICAgICAgbGV0IHVwZGF0ZXMgPSBqc29uLnVwZGF0ZXMubWFw
KHVwZGF0ZSA9PiBET01VcGRhdGUub2ZUeXBlKHVwZGF0ZS50eXBlKS5mcm9tT2JqZWN0KHVwZGF0
ZSwgbm9kZU1hcCkpOworICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnB1dEV2ZW50VXBkYXRlKG5v
ZGVNYXAsIHVwZGF0ZXMsIGpzb24uaW5wdXRUeXBlLCBqc29uLmRhdGEsIGpzb24udGltZVN0YW1w
KTsKKyAgICAgICAgfQorCisgICAgICAgIGRldGFpbHNFbGVtZW50KCkgeworICAgICAgICAgICAg
bGV0IGh0bWwgPQorICAgICAgICAgICAgYDxkZXRhaWxzPgorICAgICAgICAgICAgICAgIDxzdW1t
YXJ5PklucHV0ICgke3RoaXMuaW5wdXRUeXBlfSk8L3N1bW1hcnk+CisgICAgICAgICAgICAgICAg
PHVsPgorICAgICAgICAgICAgICAgICAgICA8bGk+dGltZTogJHt0aGlzLnRpbWVTdGFtcH08L2xp
PgorICAgICAgICAgICAgICAgICAgICA8bGk+ZGF0YTogJHshdGhpcy5kYXRhID8gIihudWxsKSIg
OiAiJyIgKyB0aGlzLmRhdGEgKyAiJyJ9PC9saT4KKyAgICAgICAgICAgICAgICA8L3VsPgorICAg
ICAgICAgICAgPC9kZXRhaWxzPmA7CisgICAgICAgICAgICBsZXQgdG9wTGV2ZWxEZXRhaWxzID0g
ZWxlbWVudEZyb21NYXJrZG93bihodG1sKTsKKyAgICAgICAgICAgIGZvciAobGV0IHVwZGF0ZSBv
ZiB0aGlzLnVwZGF0ZXMpCisgICAgICAgICAgICAgICAgdG9wTGV2ZWxEZXRhaWxzLmNoaWxkcmVu
W3RvcExldmVsRGV0YWlscy5jaGlsZEVsZW1lbnRDb3VudCAtIDFdLmFwcGVuZENoaWxkKHVwZGF0
ZS5kZXRhaWxzRWxlbWVudCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0b3BMZXZlbERldGFpbHM7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB3aW5kb3cuRWRpdGluZ0hpc3RvcnkgPSB7CisgICAg
ICAgIEdsb2JhbE5vZGVNYXAsCisgICAgICAgIFNlbGVjdGlvblN0YXRlLAorICAgICAgICBET01V
cGRhdGUsCisgICAgICAgIENoaWxkTGlzdFVwZGF0ZSwKKyAgICAgICAgQ2hhcmFjdGVyRGF0YVVw
ZGF0ZSwKKyAgICAgICAgQXR0cmlidXRlVXBkYXRlLAorICAgICAgICBTZWxlY3Rpb25VcGRhdGUs
CisgICAgICAgIElucHV0RXZlbnRVcGRhdGUsCisgICAgICAgIE9iZnVzY2F0b3IKKyAgICB9Owor
fSkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCAyZGFlNzEwZGNhMjNjMjBiZjVmMmQ2ZmE1MTZjMmM1MWNhYWVlZGM0Li5mMGE2
MjYxODc3MThlNjNjMzU5YzljNzQzNzJiMDEzODUxZTUxY2NmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMjY1LDYgKzIyNjUs
OCBAQAogCQk1MUM4MUI4QTBDNDQyMkY3MDAxOUVDRTMgLyogRlRQRGlyZWN0b3J5UGFyc2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUM4MUI4ODBD
NDQyMkY3MDAxOUVDRTMgLyogRlRQRGlyZWN0b3J5UGFyc2VyLmggKi87IH07CiAJCTUxQ0JGQzk5
MEQxMEU0ODMwMDJEQkY1MSAvKiBDYWNoZWRGcmFtZVBsYXRmb3JtRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFDQkZDOTgwRDEwRTQ4MzAwMkRC
RjUxIC8qIENhY2hlZEZyYW1lUGxhdGZvcm1EYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFEMEM1MTYwREFBOTBCNzAwM0IzODMxIC8qIEpT
U3RvcmFnZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MUQwQzUxNTBEQUE5MEI3MDAzQjM4MzEgLyogSlNTdG9yYWdlQ3VzdG9tLmNwcCAq
LzsgfTsKKwkJNTFEMzk0NzgxREYyNDkyMjAwQUJFODc1IC8qIER1bXBFZGl0aW5nSGlzdG9yeS5q
cyBpbiBDb3B5IEludGVybmFsIFNjcmlwdHMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFEMzk0NzQxREYyNDU0MDAwQUJFODc1IC8qIER1bXBFZGl0aW5nSGlzdG9yeS5qcyAq
LzsgfTsKKwkJNTFEMzk0NzkxREYyNDkyMjAwQUJFODc1IC8qIEVkaXRpbmdIaXN0b3J5VXRpbC5q
cyBpbiBDb3B5IEludGVybmFsIFNjcmlwdHMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFEMzk0NzUxREYyNDU0MDAwQUJFODc1IC8qIEVkaXRpbmdIaXN0b3J5VXRpbC5qcyAq
LzsgfTsKIAkJNTFENzIzNkMxQkI2MTc0OTAwNDc4Q0EzIC8qIElEQlJlc3VsdERhdGEuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzIzNkExQkI2
MEJGRTAwNDc4Q0EzIC8qIElEQlJlc3VsdERhdGEuY3BwICovOyB9OwogCQk1MUQ3MjM2RDFCQjYx
NzQ5MDA0NzhDQTMgLyogSURCUmVzdWx0RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzIzNkIxQkI2MEJGRTAwNDc4Q0EzIC8qIElEQlJlc3Vs
dERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1MUQ3RUZFQTFCREU4RjhDMDBFOTNFMTAgLyogVGhyZWFkU2FmZURhdGFCdWZmZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUZBRUE5MUJEQzk4
OUEwMEI0QUZFNCAvKiBUaHJlYWRTYWZlRGF0YUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02OTU2LDYgKzY5NTgsMTggQEAKIAkJCW5h
bWUgPSAiQ29weSBTY3JpcHRzIjsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OworCQk1MUQzOTQ3NzFERjI0ODY3MDBBQkU4NzUgLyogQ29weSBJbnRlcm5h
bCBTY3JpcHRzICovID0geworCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKKwkJCWJ1
aWxkQWN0aW9uTWFzayA9IDg7CisJCQlkc3RQYXRoID0gIiQoQVBQTEVfSU5URVJOQUxfTElCUkFS
WV9ESVIpL1dlYktpdC9JbnRlcm5hbFNjcmlwdHMiOworCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDA7
CisJCQlmaWxlcyA9ICgKKwkJCQk1MUQzOTQ3ODFERjI0OTIyMDBBQkU4NzUgLyogRHVtcEVkaXRp
bmdIaXN0b3J5LmpzIGluIENvcHkgSW50ZXJuYWwgU2NyaXB0cyAqLywKKwkJCQk1MUQzOTQ3OTFE
RjI0OTIyMDBBQkU4NzUgLyogRWRpdGluZ0hpc3RvcnlVdGlsLmpzIGluIENvcHkgSW50ZXJuYWwg
U2NyaXB0cyAqLywKKwkJCSk7CisJCQluYW1lID0gIkNvcHkgSW50ZXJuYWwgU2NyaXB0cyI7CisJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMTsKKwkJfTsKIAkJQ0QwREJG
MDAxNDIyNzY1NzAwMjgwMjYzIC8qIENvcHkgQXVkaW8gUmVzb3VyY2VzICovID0gewogCQkJaXNh
ID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2
NDc7CkBAIC05NDcwLDYgKzk0ODQsOCBAQAogCQk1MUM4MUI4ODBDNDQyMkY3MDAxOUVDRTMgLyog
RlRQRGlyZWN0b3J5UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
VFBEaXJlY3RvcnlQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFDQkZD
OTgwRDEwRTQ4MzAwMkRCRjUxIC8qIENhY2hlZEZyYW1lUGxhdGZvcm1EYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZEZyYW1lUGxhdGZvcm1EYXRhLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRDBDNTE1MERBQTkwQjcwMDNCMzgzMSAvKiBKU1N0
b3JhZ2VDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNT
dG9yYWdlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFEMzk0NzQx
REYyNDU0MDAwQUJFODc1IC8qIER1bXBFZGl0aW5nSGlzdG9yeS5qcyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9IER1bXBFZGl0aW5nSGlzdG9yeS5qczsgcGF0aCA9IElu
dGVybmFsU2NyaXB0cy9EdW1wRWRpdGluZ0hpc3RvcnkuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUxRDM5NDc1MURGMjQ1NDAwMEFCRTg3NSAvKiBFZGl0aW5nSGlzdG9yeVV0aWwu
anMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IG5hbWUgPSBFZGl0aW5nSGlzdG9y
eVV0aWwuanM7IHBhdGggPSBJbnRlcm5hbFNjcmlwdHMvRWRpdGluZ0hpc3RvcnlVdGlsLmpzOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUQ3MTk2QzE4MTEwNkRGMDAxNkRDNTEgLyog
RE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxRDcxOTZEMTgxMTA2REYwMDE2REM1MSAvKiBET01XaW5kb3dJbmRleGVk
RGF0YWJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NV2luZG93SW5k
ZXhlZERhdGFiYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRDcxOTZFMTgx
MTA2REYwMDE2REM1MSAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNTQwOSw2ICsxNTQyNSw3IEBACiAJCQkJMkU0MzQ2MzEwRjU0NkE2
ODAwQjBGMUJBIC8qIHdvcmtlcnMgKi8sCiAJCQkJRTFGMDQyNDMwOTgzOTM4OTAwNjY5NEVBIC8q
IHhtbCAqLywKIAkJCQk2NTY1ODBFQzA5RDEyQjIwMDAwRTYxRDcgLyogRGVyaXZlZCBTb3VyY2Vz
ICovLAorCQkJCTUxRDM5NDczMURGMjQ0QkEwMEFCRTg3NSAvKiBJbnRlcm5hbFNjcmlwdHMgKi8s
CiAJCQkJMDg5QzE2NjVGRTg0MTE1OEMwMkFBQzA3IC8qIFJlc291cmNlcyAqLywKIAkJCQkzNzE3
RDdFNDE3RUNDMzZDMDAzQzI3NkQgLyogU2NyaXB0cyAqLywKIAkJCQkwODY3RDY5QUZFODQwMjhG
QzAyQUFDMDcgLyogRnJhbWV3b3JrcyAqLywKQEAgLTE3MzAyLDYgKzE3MzE5LDE1IEBACiAJCQlw
YXRoID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNTFEMzk0NzMx
REYyNDRCQTAwQUJFODc1IC8qIEludGVybmFsU2NyaXB0cyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdy
b3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNTFEMzk0NzQxREYyNDU0MDAwQUJFODc1IC8qIER1
bXBFZGl0aW5nSGlzdG9yeS5qcyAqLywKKwkJCQk1MUQzOTQ3NTFERjI0NTQwMDBBQkU4NzUgLyog
RWRpdGluZ0hpc3RvcnlVdGlsLmpzICovLAorCQkJKTsKKwkJCW5hbWUgPSBJbnRlcm5hbFNjcmlw
dHM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1OUI1OTc3MTExMDg2NTU2
MDA3MTU5RTggLyoganNjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKQEAgLTI4Mzg1LDYgKzI4NDExLDcgQEAKIAkJCQkzN0ExRUFBMzE0MjY5OUJDMDA4N0Y0MjUg
LyogQ2hlY2sgRm9yIEluYXBwcm9wcmlhdGUgT2JqZWN0aXZlLUMgQ2xhc3MgTmFtZXMgKi8sCiAJ
CQkJNURGNTA4ODcxMTZGMzA3NzAwNTIwMkFCIC8qIENoZWNrIEZvciBJbmFwcHJvcHJpYXRlIEZp
bGVzIEluIEZyYW1ld29yayAqLywKIAkJCQk3MUQ2QUEzODFEQTRFNjk0MDBCMjM5NjkgLyogQ29w
eSBtb2Rlcm4gbWVkaWEgY29udHJvbHMgY29kZSBhbmQgYXNzZXRzICovLAorCQkJCTUxRDM5NDc3
MURGMjQ4NjcwMEFCRTg3NSAvKiBDb3B5IGludGVybmFsIHNjcmlwdHMgKi8sCiAJCQkpOwogCQkJ
YnVpbGRSdWxlcyA9ICgKIAkJCSk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29s
cy9DaGFuZ2VMb2cKaW5kZXggNzQzZmY5Y2IzMGQyMzZmZGI4MjU5MTM1NDBlYjQzZGQ5Njk0ZGUz
Yy4uNTNmNThlMDM3NzVkYWVhYTk4ZmI5NjYzMWIwNTI1MzY3NGI3MTZkNSAxMDA2NDQKLS0tIGEv
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisy
MDE2LTEyLTAyICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAg
ICAgIEFkZCBhIG5ldyBwcm9qZWN0IGZvciByZWNvcmRpbmcgYW5kIHBsYXlpbmcgYmFjayBlZGl0
aW5nIGNvbW1hbmRzIGluIGVkaXRhYmxlIHdlYiBjb250ZW50CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUxMTQKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzI5NDA4MTM1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZHMgYSBuZXcgWGNvZGUgcHJvamVjdCBjb250YWluaW5nIHdvcmsgdG93YXJkcyBy
ZXdpbmRpbmcgYW5kIHBsYXlpbmcgYmFjayBlZGl0aW5nIGNvbW1hbmRzLiBUaGlzIHdvcmsgaXMK
KyAgICAgICAgd3JhcHBlZCBpbiBhbiBYY29kZSBwcm9qZWN0IHRvIHRha2UgYWR2YW50YWdlIG9m
IHRoZSBYQ1Rlc3QgZnJhbWV3b3JrLiBUbyBtYW51YWxseSB0ZXN0IHJlY29yZGluZywgb3BlbiB0
aGUKKyAgICAgICAgY2FwdHVyZSB0ZXN0IGhhcm5lc3MsIGVkaXQgdGhlIGNvbnRlbnRlZGl0YWJs
ZSBib2R5LCBhbmQgdGhlbiBoaXQgY21kLVMuIFRoaXMgZG93bmxvYWRzIGEgLmpzb24gZmlsZSB3
aGljaCBtYXkKKyAgICAgICAgdGhlbiBiZSBkcmFnZ2VkIGludG8gdGhlIHBsYXliYWNrIHRlc3Qg
aGFybmVzcy4KKworICAgICAgICBBbHNvIGFkZHMgMyBuZXcgdW5pdCB0ZXN0cyBpbiBFZGl0aW5n
SGlzdG9yeVRlc3RzL1Jld2luZEFuZFBsYXliYWNrVGVzdHMubS4gVGhlc2UgdGVzdHMgY2Fycnkg
b3V0IHRoZSBmb2xsb3dpbmcKKyAgICAgICAgc3RlcHM6CisKKyAgICAgICAgMS4gTG9hZCB0aGUg
Y2FwdHVyZSBoYXJuZXNzIGFuZCBwZXJmb3JtIHRlc3Qtc3BlY2lmaWMgZWRpdGluZyBvbiB0aGUg
d2ViIHZpZXcuCisgICAgICAgIDIuIExldCBvcmlnaW5hbFN0YXRlIGJlIGEgZHVtcCBvZiB0aGUg
RE9NIGF0IHRoaXMgcG9pbnQgaW4gdGltZS4KKyAgICAgICAgMy4gRXh0cmFjdCB0aGUgSlNPTi1z
ZXJpYWxpemVkIGVkaXRpbmcgaGlzdG9yeSBkYXRhIGFuZCBsb2FkIHRoZSBwbGF5YmFjayBoYXJu
ZXNzIHdpdGggdGhpcyBkYXRhLgorICAgICAgICA0LiBSZXdpbmQgYWxsIGVkaXRpbmcgdG8gdGhl
IGJlZ2lubmluZy4KKyAgICAgICAgNS4gUGxheWJhY2sgYWxsIGVkaXRpbmcgdG8gdGhlIGVuZC4K
KyAgICAgICAgNi4gRHVtcCB0aGUgc3RhdGUgb2YgdGhlIERPTS4gVGhpcyBzaG91bGQgYmUgaWRl
bnRpY2FsIHRvIG9yaWdpbmFsU3RhdGUuCisKKyAgICAgICAgKiBFZGl0aW5nSGlzdG9yeS9EdW1w
RWRpdGluZ0hpc3RvcnkuanM6IEFkZGVkLgorICAgICAgICAoYmVnaW5Qcm9jZXNzaW5nVG9wTGV2
ZWxVcGRhdGUpOgorICAgICAgICAoZW5kUHJvY2Vzc2luZ1RvcExldmVsVXBkYXRlKToKKyAgICAg
ICAgKGFwcGVuZERPTVVwZGF0ZXNGcm9tUmVjb3Jkcyk6CisgICAgICAgIChhcHBlbmRTZWxlY3Rp
b25VcGRhdGVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChFZGl0aW5nSGlzdG9yeS5nZXRFZGl0aW5n
SGlzdG9yeUFzSlNPTlN0cmluZyk6CisgICAgICAgICogRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hp
c3RvcnkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkZWQuCisgICAgICAgICogRWRpdGlu
Z0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvSW5mby5wbGlzdDogQWRkZWQuCisgICAgICAgICogRWRp
dGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvUmVzb3VyY2VzL0NhcHR1cmVIYXJuZXNzLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIEVkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Jlc291cmNl
cy9ET01UZXN0aW5nVXRpbC5qczogQWRkZWQuCisgICAgICAgICogRWRpdGluZ0hpc3RvcnkvRWRp
dGluZ0hpc3RvcnkvUmVzb3VyY2VzL1BsYXliYWNrSGFybmVzcy5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBFZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9UZXN0UnVubmVyLmg6IEFkZGVkLgor
ICAgICAgICAqIEVkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Rlc3RSdW5uZXIubTogQWRk
ZWQuCisgICAgICAgIChpbmplY3RlZE1lc3NhZ2VFdmVudEhhbmRsZXJTY3JpcHQpOgorICAgICAg
ICAoLVtUZXN0UnVubmVyIGluaXRdKToKKyAgICAgICAgKC1bVGVzdFJ1bm5lciBkZWxldGVCYWNr
d2FyZHM6XSk6CisgICAgICAgICgtW1Rlc3RSdW5uZXIgdHlwZVN0cmluZzpdKToKKyAgICAgICAg
KC1bVGVzdFJ1bm5lciBib2R5RWxlbWVudFN1YnRyZWVdKToKKyAgICAgICAgKC1bVGVzdFJ1bm5l
ciBib2R5VGV4dENvbnRlbnRdKToKKyAgICAgICAgKC1bVGVzdFJ1bm5lciBlZGl0aW5nSGlzdG9y
eUpTT05dKToKKyAgICAgICAgKC1bVGVzdFJ1bm5lciBsb2FkUGxheWJhY2tUZXN0SGFybmVzc1dp
dGhKU09OOl0pOgorICAgICAgICAoLVtUZXN0UnVubmVyIG51bWJlck9mVXBkYXRlc10pOgorICAg
ICAgICAoLVtUZXN0UnVubmVyIGp1bXBUb1VwZGF0ZUluZGV4Ol0pOgorICAgICAgICAoLVtUZXN0
UnVubmVyIGV4cGVjdEV2ZW50czphZnRlclBlcmZvcm1pbmc6XSk6CisgICAgICAgICgtW1Rlc3RS
dW5uZXIgbG9hZENhcHR1cmVUZXN0SGFybmVzc10pOgorICAgICAgICAoLVtUZXN0UnVubmVyIHNl
dFRleHRPYmZ1c2NhdGlvbkVuYWJsZWQ6XSk6CisgICAgICAgICgtW1Rlc3RSdW5uZXIgaXNEb25l
V2FpdGluZ0ZvclBlbmRpbmdFdmVudHNdKToKKyAgICAgICAgKC1bVGVzdFJ1bm5lciB1c2VyQ29u
dGVudENvbnRyb2xsZXI6ZGlkUmVjZWl2ZVNjcmlwdE1lc3NhZ2U6XSk6CisKKyAgICAgICAgVGhl
IFRlc3RSdW5uZXIgcHJvdmlkZXMgdXRpbGl0aWVzIHRoYXQgYSB1bml0IHRlc3Qgc2hvdWxkIHVz
ZSB0byBkcml2ZSB0aGUgdGVzdCBmb3J3YXJkIChlLmcuIGxvYWRpbmcgaGFybmVzc2VzKQorICAg
ICAgICBvciBpbnNwZWN0IHRoZSBzdGF0ZSBvZiB0aGUgbG9hZGVkIHBhZ2UgKGUuZy4gZXh0cmFj
dGluZyBKU09OIGVkaXRpbmcgaGlzdG9yeSBkYXRhIGZyb20gdGhlIGNhcHR1cmUgaGFybmVzcyku
CisKKyAgICAgICAgKiBFZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9UZXN0VXRpbC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBFZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9UZXN0VXRpbC5t
OiBBZGRlZC4KKyAgICAgICAgKHdhaXRVbnRpbFdpdGhUaW1lb3V0KToKKyAgICAgICAgKHdhaXRV
bnRpbCk6CisKKyAgICAgICAgUHJvdmlkZXMgdXRpbGl0aWVzIGZvciBydW5uaW5nIHRlc3RzLiBG
b3Igbm93LCB0aGlzIGlzIGp1c3Qgc3Bpbm5pbmcgdGhlIHJ1bmxvb3Agb24gYSBnaXZlbiBjb25k
aXRpb24uCisKKyAgICAgICAgKiBFZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9XS1dlYlZp
ZXdBZGRpdGlvbnMuaDogQWRkZWQuCisgICAgICAgICogRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hp
c3RvcnkvV0tXZWJWaWV3QWRkaXRpb25zLm06IEFkZGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcg
bG9hZFBhZ2VGcm9tQnVuZGxlTmFtZWQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyB0eXBlQ2hh
cmFjdGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcga2V5UHJlc3NXaXRoQ2hhcmFjdGVyczpr
ZXlDb2RlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdEZyb21TdHJpbmc6XSk6CisKKyAgICAgICAgUHJvdmlkZXMgdXRpbGl0aWVzIGZvciBzaW11
bGF0aW5nIGludGVyYWN0aW9uIGluIGEgd2ViIHZpZXcuCisKKyAgICAgICAgKiBFZGl0aW5nSGlz
dG9yeS9FZGl0aW5nSGlzdG9yeS9tYWluLm06IEFkZGVkLgorICAgICAgICAobWFpbik6CisgICAg
ICAgICogRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnlUZXN0cy9JbmZvLnBsaXN0OiBBZGRl
ZC4KKyAgICAgICAgKiBFZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeVRlc3RzL1Jld2luZEFu
ZFBsYXliYWNrVGVzdHMubTogQWRkZWQuCisgICAgICAgICgtW1Jld2luZEFuZFBsYXliYWNrVGVz
dHMgc2V0VXBdKToKKyAgICAgICAgKC1bUmV3aW5kQW5kUGxheWJhY2tUZXN0cyB0ZWFyRG93bl0p
OgorICAgICAgICAoLVtSZXdpbmRBbmRQbGF5YmFja1Rlc3RzIHRlc3RUeXBpbmdTaW5nbGVMaW5l
T2ZUZXh0XSk6CisgICAgICAgICgtW1Jld2luZEFuZFBsYXliYWNrVGVzdHMgdGVzdFR5cGluZ011
bHRpcGxlTGluZXNPZlRleHRdKToKKyAgICAgICAgKC1bUmV3aW5kQW5kUGxheWJhY2tUZXN0cyB0
ZXN0VHlwaW5nQW5kRGVsZXRpbmdUZXh0XSk6CisgICAgICAgICgtW1Jld2luZEFuZFBsYXliYWNr
VGVzdHMgcmV3aW5kQW5kUGxheWJhY2tFZGl0aW5nSW5QbGF5YmFja1Rlc3RIYXJuZXNzXSk6Cisg
ICAgICAgICgtW1Jld2luZEFuZFBsYXliYWNrVGVzdHMgb3JpZ2luYWxCb2R5U3VidHJlZTppc0Vx
dWFsVG9GaW5hbFN1YnRyZWU6XSk6CisKIDIwMTYtMTEtMjkgIENhcmxvcyBBbGJlcnRvIExvcGV6
IFBlcmV6ICA8Y2xvcGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0xpbnV4XSBydW4tYmVuY2ht
YXJrIHNob3VsZCBiZSBhYmxlIHRvIGV4ZWN1dGUgdGhlIGJlbmNobWFya3Mgd2l0aCBtb3JlIGJy
b3dzZXJzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRHVtcEVkaXRpbmdIaXN0
b3J5LmpzIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRHVtcEVkaXRpbmdIaXN0b3J5LmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjVlZGM1ZWMxMzY0OGNiNGUyZTcyZTliOWI1Mzk1OWI1NWQwMWRlODAKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9EdW1wRWRpdGluZ0hpc3RvcnkuanMKQEAg
LTAsMCArMSw5MyBAQAorKCgpID0+IHsKKyAgICBsZXQgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAg
ICBsZXQgZ2xvYmFsTm9kZU1hcCA9IG5ldyBFZGl0aW5nSGlzdG9yeS5HbG9iYWxOb2RlTWFwKCk7
CisgICAgbGV0IHRvcExldmVsVXBkYXRlcyA9IFtdOworICAgIGxldCBjdXJyZW50Q2hpbGRVcGRh
dGVzID0gW107CisgICAgbGV0IGlzUHJvY2Vzc2luZ1RvcExldmVsVXBkYXRlID0gZmFsc2U7Cisg
ICAgbGV0IGxhc3RLbm93blNlbGVjdGlvblN0YXRlID0gbnVsbDsKKyAgICBsZXQgbXV0YXRpb25P
YnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKHJlY29yZHMgPT4gYXBwZW5kRE9NVXBkYXRl
c0Zyb21SZWNvcmRzKHJlY29yZHMpKTsKKworICAgIGZ1bmN0aW9uIGJlZ2luUHJvY2Vzc2luZ1Rv
cExldmVsVXBkYXRlKCkgeworICAgICAgICBpc1Byb2Nlc3NpbmdUb3BMZXZlbFVwZGF0ZSA9IHRy
dWU7CisgICAgfQorCisgICAgZnVuY3Rpb24gZW5kUHJvY2Vzc2luZ1RvcExldmVsVXBkYXRlKHRv
cExldmVsVXBkYXRlKSB7CisgICAgICAgIHRvcExldmVsVXBkYXRlcy5wdXNoKHRvcExldmVsVXBk
YXRlKTsKKyAgICAgICAgY3VycmVudENoaWxkVXBkYXRlcyA9IFtdOworICAgICAgICBpc1Byb2Nl
c3NpbmdUb3BMZXZlbFVwZGF0ZSA9IGZhbHNlOworICAgIH0KKworICAgIGZ1bmN0aW9uIGFwcGVu
ZERPTVVwZGF0ZXNGcm9tUmVjb3JkcyhyZWNvcmRzKSB7CisgICAgICAgIGlmICghcmVjb3Jkcy5s
ZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbGV0IG5ld1VwZGF0ZXMgPSBF
ZGl0aW5nSGlzdG9yeS5ET01VcGRhdGUuZnJvbVJlY29yZHMocmVjb3JkcywgZ2xvYmFsTm9kZU1h
cCk7CisgICAgICAgIGlmIChpc1Byb2Nlc3NpbmdUb3BMZXZlbFVwZGF0ZSkKKyAgICAgICAgICAg
IGN1cnJlbnRDaGlsZFVwZGF0ZXMgPSBjdXJyZW50Q2hpbGRVcGRhdGVzLmNvbmNhdChuZXdVcGRh
dGVzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdG9wTGV2ZWxVcGRhdGVzID0gdG9wTGV2
ZWxVcGRhdGVzLmNvbmNhdChuZXdVcGRhdGVzKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBhcHBl
bmRTZWxlY3Rpb25VcGRhdGVJZk5lY2Vzc2FyeSgpIHsKKyAgICAgICAgbGV0IG5ld1NlbGVjdGlv
blN0YXRlID0gRWRpdGluZ0hpc3RvcnkuU2VsZWN0aW9uU3RhdGUuZnJvbVNlbGVjdGlvbihnZXRT
ZWxlY3Rpb24oKSwgZ2xvYmFsTm9kZU1hcCk7CisgICAgICAgIGlmIChuZXdTZWxlY3Rpb25TdGF0
ZS5pc0VxdWFsKGxhc3RLbm93blNlbGVjdGlvblN0YXRlKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBsZXQgdXBkYXRlID0gbmV3IEVkaXRpbmdIaXN0b3J5LlNlbGVjdGlvblVwZGF0
ZShnbG9iYWxOb2RlTWFwLCBuZXdTZWxlY3Rpb25TdGF0ZSk7CisgICAgICAgIGlmIChpc1Byb2Nl
c3NpbmdUb3BMZXZlbFVwZGF0ZSkKKyAgICAgICAgICAgIGN1cnJlbnRDaGlsZFVwZGF0ZXMucHVz
aCh1cGRhdGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0b3BMZXZlbFVwZGF0ZXMucHVz
aCh1cGRhdGUpOworICAgICAgICBsYXN0S25vd25TZWxlY3Rpb25TdGF0ZSA9IG5ld1NlbGVjdGlv
blN0YXRlOworICAgIH0KKworICAgIGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCJjb250ZW50
ZWRpdGFibGUiLCB0cnVlKTsKKyAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoImZv
Y3VzIiwgKCkgPT4geworICAgICAgICBpZiAoaW5pdGlhbGl6ZWQpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOworCisgICAgICAgIEVkaXRpbmdIaXN0
b3J5LmdldEVkaXRpbmdIaXN0b3J5QXNKU09OU3RyaW5nID0gKGZvcm1hdHRlZCkgPT4geworICAg
ICAgICAgICAgbGV0IHJlY29yZCA9IHt9OworICAgICAgICAgICAgcmVjb3JkLnVwZGF0ZXMgPSB0
b3BMZXZlbFVwZGF0ZXMubWFwKHVwZGF0ZSA9PiB1cGRhdGUudG9PYmplY3QoKSk7CisgICAgICAg
ICAgICByZWNvcmQuZ2xvYmFsTm9kZU1hcCA9IGdsb2JhbE5vZGVNYXAudG9PYmplY3QoKTsKKyAg
ICAgICAgICAgIHJldHVybiBmb3JtYXR0ZWQgPyBKU09OLnN0cmluZ2lmeShyZWNvcmQsIG51bGws
IDQpIDogSlNPTi5zdHJpbmdpZnkocmVjb3JkKTsKKyAgICAgICAgfTsKKworICAgICAgICBkb2N1
bWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLCAoKSA9PiB7CisgICAgICAg
ICAgICBhcHBlbmRTZWxlY3Rpb25VcGRhdGVJZk5lY2Vzc2FyeSgpOworICAgICAgICB9KTsKKyAg
ICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JlaW5wdXQiLCBldmVudCA9PiB7
CisgICAgICAgICAgICBhcHBlbmRET01VcGRhdGVzRnJvbVJlY29yZHMobXV0YXRpb25PYnNlcnZl
ci50YWtlUmVjb3JkcygpKTsKKyAgICAgICAgICAgIGJlZ2luUHJvY2Vzc2luZ1RvcExldmVsVXBk
YXRlKCk7CisgICAgICAgIH0pOworCisgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIo
ImlucHV0IiwgZXZlbnQgPT4geworICAgICAgICAgICAgYXBwZW5kRE9NVXBkYXRlc0Zyb21SZWNv
cmRzKG11dGF0aW9uT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSk7CisgICAgICAgICAgICBsZXQgZXZl
bnREYXRhID0gZXZlbnQuZGF0YVRyYW5zZmVyID8gZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEo
InRleHQvaHRtbCIpIDogZXZlbnQuZGF0YTsKKyAgICAgICAgICAgIGxhc3RLbm93blNlbGVjdGlv
blN0YXRlID0gbnVsbDsKKyAgICAgICAgICAgIGVuZFByb2Nlc3NpbmdUb3BMZXZlbFVwZGF0ZShu
ZXcgRWRpdGluZ0hpc3RvcnkuSW5wdXRFdmVudFVwZGF0ZShnbG9iYWxOb2RlTWFwLCBjdXJyZW50
Q2hpbGRVcGRhdGVzLCBldmVudC5pbnB1dFR5cGUsIGV2ZW50RGF0YSwgZXZlbnQudGltZVN0YW1w
KSk7CisgICAgICAgIH0pOworCisgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtl
eWRvd24iLCBldmVudCA9PiB7CisgICAgICAgICAgICBpZiAoZXZlbnQua2V5ICE9PSAicyIgfHwg
IWV2ZW50Lm1ldGFLZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBs
ZXQgZmFrZUxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CisgICAgICAgICAgICBm
YWtlTGluay5zZXRBdHRyaWJ1dGUoImhyZWYiLCAiZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRm
LTgsIiArIGVuY29kZVVSSUNvbXBvbmVudChFZGl0aW5nSGlzdG9yeS5nZXRFZGl0aW5nSGlzdG9y
eUFzSlNPTlN0cmluZygpKSk7CisgICAgICAgICAgICBmYWtlTGluay5zZXRBdHRyaWJ1dGUoImRv
d25sb2FkIiwgInJlY29yZC5qc29uIik7CisgICAgICAgICAgICBmYWtlTGluay5jbGljaygpOwor
ICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgbXV0YXRpb25PYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LCB7CisgICAgICAgICAgICBjaGls
ZExpc3Q6IHRydWUsCisgICAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLAorICAgICAgICAgICAg
Y2hhcmFjdGVyRGF0YTogdHJ1ZSwKKyAgICAgICAgICAgIHN1YnRyZWU6IHRydWUsCisgICAgICAg
ICAgICBhdHRyaWJ1dGVPbGRWYWx1ZTogdHJ1ZSwKKyAgICAgICAgICAgIGNoYXJhY3RlckRhdGFP
bGRWYWx1ZTogdHJ1ZSwKKyAgICAgICAgfSk7CisgICAgfSk7Cit9KSgpOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDU2NWNlYzU1MjdiMjMxNzE0YWYwODQwMTc2YmNjODhm
ODYxNmNlOQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdI
aXN0b3J5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTAsMCArMSw0MzMgQEAKKy8vICEk
KlVURjgqJCEKK3sKKwlhcmNoaXZlVmVyc2lvbiA9IDE7CisJY2xhc3NlcyA9IHsKKwl9OworCW9i
amVjdFZlcnNpb24gPSA0NjsKKwlvYmplY3RzID0geworCisvKiBCZWdpbiBQQlhCdWlsZEZpbGUg
c2VjdGlvbiAqLworCQk1MTZBREJFMjFERTE1NkE5MDBFMkI5OEQgLyogQ2FwdHVyZUhhcm5lc3Mu
aHRtbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2
QURCQTgxREUxNTVBQjAwRTJCOThEIC8qIENhcHR1cmVIYXJuZXNzLmh0bWwgKi87IH07CisJCTUx
NkFEQkU1MURFMTU2QTkwMEUyQjk4RCAvKiBQbGF5YmFja0hhcm5lc3MuaHRtbCBpbiBSZXNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2QURCQUIxREUxNTVBQjAw
RTJCOThEIC8qIFBsYXliYWNrSGFybmVzcy5odG1sICovOyB9OworCQk1MTZBREJFNjFERTE1NkJC
MDBFMkI5OEQgLyogbWFpbi5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE2QURCQjExREUxNTVCRDAwRTJCOThEIC8qIG1haW4ubSAqLzsgfTsKKwkJNTE2
QURCRjMxREUxNTdBRDAwRTJCOThEIC8qIFJld2luZEFuZFBsYXliYWNrVGVzdHMubSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNkFEQkYyMURFMTU3QUQw
MEUyQjk4RCAvKiBSZXdpbmRBbmRQbGF5YmFja1Rlc3RzLm0gKi87IH07CisJCTUxN0ZEOTNDMURF
MThEQzkwMEE3MzY3MyAvKiBET01UZXN0aW5nVXRpbC5qcyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3RkQ5M0IxREUxOERDOTAwQTczNjczIC8qIERP
TVRlc3RpbmdVdGlsLmpzICovOyB9OworCQk1MUQzOTQ3QzFERjI0RDQxMDBBQkU4NzUgLyogRHVt
cEVkaXRpbmdIaXN0b3J5LmpzIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MUQzOTQ3QTFERjI0RDQxMDBBQkU4NzUgLyogRHVtcEVkaXRpbmdIaXN0b3J5
LmpzICovOyB9OworCQk1MUQzOTQ3RDFERjI0RDQxMDBBQkU4NzUgLyogRWRpdGluZ0hpc3RvcnlV
dGlsLmpzIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUQzOTQ3QjFERjI0RDQxMDBBQkU4NzUgLyogRWRpdGluZ0hpc3RvcnlVdGlsLmpzICovOyB9Owor
CQk1MUVDQzNFNzFERUUzM0NFMDBDQjI2N0UgLyogVGVzdFV0aWwubSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNkFEQkI1MURFMTU1QkQwMEUyQjk4RCAv
KiBUZXN0VXRpbC5tICovOyB9OworCQk1MUVDQzNFOTFERUUzM0QyMDBDQjI2N0UgLyogV0tXZWJW
aWV3QWRkaXRpb25zLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTZBREJCNzFERTE1NUJEMDBFMkI5OEQgLyogV0tXZWJWaWV3QWRkaXRpb25zLm0gKi87
IH07CisJCTUxRUNDM0VBMURFRTMzREQwMENCMjY3RSAvKiBUZXN0UnVubmVyLm0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTZBREJCMzFERTE1NUJEMDBF
MkI5OEQgLyogVGVzdFJ1bm5lci5tICovOyB9OworLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9u
ICovCisKKy8qIEJlZ2luIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCisJCTUxNkFE
QkY1MURFMTU3QUQwMEUyQjk4RCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CisJCQlp
c2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7CisJCQljb250YWluZXJQb3J0YWwgPSA1MTJEN0E4
QjFERTBGQkVGMDAyOEYwRTYgLyogUHJvamVjdCBvYmplY3QgKi87CisJCQlwcm94eVR5cGUgPSAx
OworCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSA1MTZBREJDMDFERTE1NUZDMDBFMkI5OEQ7CisJ
CQlyZW1vdGVJbmZvID0gRWRpdGluZ0hpc3Rvcnk7CisJCX07CisvKiBFbmQgUEJYQ29udGFpbmVy
SXRlbVByb3h5IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9u
ICovCisJCTUxNkFEQkE4MURFMTU1QUIwMEUyQjk4RCAvKiBDYXB0dXJlSGFybmVzcy5odG1sICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC5odG1sOyBuYW1lID0gQ2FwdHVyZUhhcm5lc3MuaHRtbDsgcGF0aCA9IEVk
aXRpbmdIaXN0b3J5L1Jlc291cmNlcy9DYXB0dXJlSGFybmVzcy5odG1sOyBzb3VyY2VUcmVlID0g
U09VUkNFX1JPT1Q7IH07CisJCTUxNkFEQkFCMURFMTU1QUIwMEUyQjk4RCAvKiBQbGF5YmFja0hh
cm5lc3MuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgbmFtZSA9IFBsYXliYWNrSGFybmVzcy5o
dG1sOyBwYXRoID0gRWRpdGluZ0hpc3RvcnkvUmVzb3VyY2VzL1BsYXliYWNrSGFybmVzcy5odG1s
OyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTUxNkFEQkIwMURFMTU1QkQwMEUyQjk4
RCAvKiBJbmZvLnBsaXN0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5wbGlzdC54bWw7IG5hbWUgPSBJbmZvLnBs
aXN0OyBwYXRoID0gRWRpdGluZ0hpc3RvcnkvSW5mby5wbGlzdDsgc291cmNlVHJlZSA9IFNPVVJD
RV9ST09UOyB9OworCQk1MTZBREJCMTFERTE1NUJEMDBFMkI5OEQgLyogbWFpbi5tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLm9iamM7IG5hbWUgPSBtYWluLm07IHBhdGggPSBFZGl0aW5nSGlzdG9y
eS9tYWluLm07IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNTE2QURCQjIxREUxNTVC
RDAwRTJCOThEIC8qIFRlc3RSdW5uZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gVGVzdFJ1bm5lci5oOyBwYXRoID0gRWRpdGluZ0hpc3RvcnkvVGVzdFJ1bm5lci5oOyBzb3Vy
Y2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTUxNkFEQkIzMURFMTU1QkQwMEUyQjk4RCAvKiBU
ZXN0UnVubmVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgbmFtZSA9IFRlc3RSdW5u
ZXIubTsgcGF0aCA9IEVkaXRpbmdIaXN0b3J5L1Rlc3RSdW5uZXIubTsgc291cmNlVHJlZSA9IFNP
VVJDRV9ST09UOyB9OworCQk1MTZBREJCNDFERTE1NUJEMDBFMkI5OEQgLyogVGVzdFV0aWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVGVzdFV0aWwuaDsgcGF0aCA9IEVkaXRp
bmdIaXN0b3J5L1Rlc3RVdGlsLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNTE2
QURCQjUxREUxNTVCRDAwRTJCOThEIC8qIFRlc3RVdGlsLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMub2JqYzsgbmFtZSA9IFRlc3RVdGlsLm07IHBhdGggPSBFZGl0aW5nSGlzdG9yeS9UZXN0VXRp
bC5tOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTUxNkFEQkI2MURFMTU1QkQwMEUy
Qjk4RCAvKiBXS1dlYlZpZXdBZGRpdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gV0tXZWJWaWV3QWRkaXRpb25zLmg7IHBhdGggPSBFZGl0aW5nSGlzdG9yeS9XS1dlYlZp
ZXdBZGRpdGlvbnMuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk1MTZBREJCNzFE
RTE1NUJEMDBFMkI5OEQgLyogV0tXZWJWaWV3QWRkaXRpb25zLm0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMub2JqYzsgbmFtZSA9IFdLV2ViVmlld0FkZGl0aW9ucy5tOyBwYXRoID0gRWRpdGluZ0hp
c3RvcnkvV0tXZWJWaWV3QWRkaXRpb25zLm07IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsK
KwkJNTE2QURCQzExREUxNTVGQzAwRTJCOThEIC8qIEVkaXRpbmdIaXN0b3J5LmFwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gd3JhcHBlci5hcHBsaWNh
dGlvbjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gRWRpdGluZ0hpc3RvcnkuYXBwOyBzb3Vy
Y2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQk1MTZBREJGMDFERTE1N0FEMDBFMkI5
OEQgLyogRWRpdGluZ0hpc3RvcnlUZXN0cy54Y3Rlc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHdyYXBwZXIuY2ZidW5kbGU7IGluY2x1ZGVJbkluZGV4
ID0gMDsgcGF0aCA9IEVkaXRpbmdIaXN0b3J5VGVzdHMueGN0ZXN0OyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OworCQk1MTZBREJGMjFERTE1N0FEMDBFMkI5OEQgLyogUmV3aW5k
QW5kUGxheWJhY2tUZXN0cy5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBSZXdpbmRBbmRQbGF5YmFja1Rl
c3RzLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNkFEQkY0MURFMTU3QUQwMEUy
Qjk4RCAvKiBJbmZvLnBsaXN0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC5wbGlzdC54bWw7IHBhdGggPSBJbmZvLnBsaXN0OyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MTdGRDkzQjFERTE4REM5MDBBNzM2NzMgLyogRE9NVGVzdGlu
Z1V0aWwuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IG5hbWUgPSBET01UZXN0
aW5nVXRpbC5qczsgcGF0aCA9IEVkaXRpbmdIaXN0b3J5L1Jlc291cmNlcy9ET01UZXN0aW5nVXRp
bC5qczsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk1MUQzOTQ3QTFERjI0RDQxMDBB
QkU4NzUgLyogRHVtcEVkaXRpbmdIaXN0b3J5LmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZh
c2NyaXB0OyBwYXRoID0gRHVtcEVkaXRpbmdIaXN0b3J5LmpzOyBzb3VyY2VUcmVlID0gU09VUkNF
X1JPT1Q7IH07CisJCTUxRDM5NDdCMURGMjRENDEwMEFCRTg3NSAvKiBFZGl0aW5nSGlzdG9yeVV0
aWwuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBFZGl0aW5nSGlz
dG9yeVV0aWwuanM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKy8qIEVuZCBQQlhGaWxl
UmVmZXJlbmNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ug
c2VjdGlvbiAqLworCQk1MTZBREJCRTFERTE1NUZDMDBFMkI5OEQgLyogRnJhbWV3b3JrcyAqLyA9
IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworCQk1MTZBREJFRDFERTE1N0FEMDBFMkI5OEQg
LyogRnJhbWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwor
CQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworLyogRW5kIFBC
WEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYR3JvdXAgc2Vj
dGlvbiAqLworCQk1MTJEN0E4QTFERTBGQkVGMDAyOEYwRTYgPSB7CisJCQlpc2EgPSBQQlhHcm91
cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTUxMkQ3QTk1MURFMEZCRUYwMDI4RjBFNiAvKiBFZGl0
aW5nSGlzdG9yeSAqLywKKwkJCQk1MTZBREJGMTFERTE1N0FEMDBFMkI5OEQgLyogRWRpdGluZ0hp
c3RvcnlUZXN0cyAqLywKKwkJCQk1MTJEN0E5NDFERTBGQkVGMDAyOEYwRTYgLyogUHJvZHVjdHMg
Ki8sCisJCQkpOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNTEyRDdBOTQx
REUwRkJFRjAwMjhGMEU2IC8qIFByb2R1Y3RzICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJ
CQljaGlsZHJlbiA9ICgKKwkJCQk1MTZBREJDMTFERTE1NUZDMDBFMkI5OEQgLyogRWRpdGluZ0hp
c3RvcnkuYXBwICovLAorCQkJCTUxNkFEQkYwMURFMTU3QUQwMEUyQjk4RCAvKiBFZGl0aW5nSGlz
dG9yeVRlc3RzLnhjdGVzdCAqLywKKwkJCSk7CisJCQluYW1lID0gUHJvZHVjdHM7CisJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk1MTJEN0E5NTFERTBGQkVGMDAyOEYwRTYgLyog
RWRpdGluZ0hpc3RvcnkgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0g
KAorCQkJCTUxNkFEQkIwMURFMTU1QkQwMEUyQjk4RCAvKiBJbmZvLnBsaXN0ICovLAorCQkJCTUx
NkFEQkIxMURFMTU1QkQwMEUyQjk4RCAvKiBtYWluLm0gKi8sCisJCQkJNTE2QURCQjIxREUxNTVC
RDAwRTJCOThEIC8qIFRlc3RSdW5uZXIuaCAqLywKKwkJCQk1MTZBREJCMzFERTE1NUJEMDBFMkI5
OEQgLyogVGVzdFJ1bm5lci5tICovLAorCQkJCTUxNkFEQkI0MURFMTU1QkQwMEUyQjk4RCAvKiBU
ZXN0VXRpbC5oICovLAorCQkJCTUxNkFEQkI1MURFMTU1QkQwMEUyQjk4RCAvKiBUZXN0VXRpbC5t
ICovLAorCQkJCTUxNkFEQkI2MURFMTU1QkQwMEUyQjk4RCAvKiBXS1dlYlZpZXdBZGRpdGlvbnMu
aCAqLywKKwkJCQk1MTZBREJCNzFERTE1NUJEMDBFMkI5OEQgLyogV0tXZWJWaWV3QWRkaXRpb25z
Lm0gKi8sCisJCQkJNTEyRDdBQjUxREUwRkM1OTAwMjhGMEU2IC8qIFJlc291cmNlcyAqLywKKwkJ
CSk7CisJCQluYW1lID0gRWRpdGluZ0hpc3Rvcnk7CisJCQlwYXRoID0gRWRpdGluZ0hpc3RvcnlU
ZXN0OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNTEyRDdBQjUxREUwRkM1
OTAwMjhGMEU2IC8qIFJlc291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hp
bGRyZW4gPSAoCisJCQkJNTFEMzk0N0ExREYyNEQ0MTAwQUJFODc1IC8qIER1bXBFZGl0aW5nSGlz
dG9yeS5qcyAqLywKKwkJCQk1MUQzOTQ3QjFERjI0RDQxMDBBQkU4NzUgLyogRWRpdGluZ0hpc3Rv
cnlVdGlsLmpzICovLAorCQkJCTUxN0ZEOTNCMURFMThEQzkwMEE3MzY3MyAvKiBET01UZXN0aW5n
VXRpbC5qcyAqLywKKwkJCQk1MTZBREJBODFERTE1NUFCMDBFMkI5OEQgLyogQ2FwdHVyZUhhcm5l
c3MuaHRtbCAqLywKKwkJCQk1MTZBREJBQjFERTE1NUFCMDBFMkI5OEQgLyogUGxheWJhY2tIYXJu
ZXNzLmh0bWwgKi8sCisJCQkpOworCQkJbmFtZSA9IFJlc291cmNlczsKKwkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CisJCX07CisJCTUxNkFEQkYxMURFMTU3QUQwMEUyQjk4RCAvKiBFZGl0aW5n
SGlzdG9yeVRlc3RzICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgK
KwkJCQk1MTZBREJGMjFERTE1N0FEMDBFMkI5OEQgLyogUmV3aW5kQW5kUGxheWJhY2tUZXN0cy5t
ICovLAorCQkJCTUxNkFEQkY0MURFMTU3QUQwMEUyQjk4RCAvKiBJbmZvLnBsaXN0ICovLAorCQkJ
KTsKKwkJCXBhdGggPSBFZGl0aW5nSGlzdG9yeVRlc3RzOworCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKKwkJfTsKKy8qIEVuZCBQQlhHcm91cCBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWE5h
dGl2ZVRhcmdldCBzZWN0aW9uICovCisJCTUxNkFEQkMwMURFMTU1RkMwMEUyQjk4RCAvKiBFZGl0
aW5nSGlzdG9yeSAqLyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKKwkJCWJ1aWxkQ29u
ZmlndXJhdGlvbkxpc3QgPSA1MTZBREJEQTFERTE1NUZDMDBFMkI5OEQgLyogQnVpbGQgY29uZmln
dXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkVkaXRpbmdIaXN0b3J5IiAqLzsKKwkJ
CWJ1aWxkUGhhc2VzID0gKAorCQkJCTUxNkFEQkJEMURFMTU1RkMwMEUyQjk4RCAvKiBTb3VyY2Vz
ICovLAorCQkJCTUxNkFEQkJFMURFMTU1RkMwMEUyQjk4RCAvKiBGcmFtZXdvcmtzICovLAorCQkJ
CTUxNkFEQkJGMURFMTU1RkMwMEUyQjk4RCAvKiBSZXNvdXJjZXMgKi8sCisJCQkpOworCQkJYnVp
bGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJbmFtZSA9
IEVkaXRpbmdIaXN0b3J5OworCQkJcHJvZHVjdE5hbWUgPSBFZGl0aW5nSGlzdG9yeTsKKwkJCXBy
b2R1Y3RSZWZlcmVuY2UgPSA1MTZBREJDMTFERTE1NUZDMDBFMkI5OEQgLyogRWRpdGluZ0hpc3Rv
cnkuYXBwICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5hcHBs
aWNhdGlvbiI7CisJCX07CisJCTUxNkFEQkVGMURFMTU3QUQwMEUyQjk4RCAvKiBFZGl0aW5nSGlz
dG9yeVRlc3RzICovID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25m
aWd1cmF0aW9uTGlzdCA9IDUxNkFEQkY3MURFMTU3QUQwMEUyQjk4RCAvKiBCdWlsZCBjb25maWd1
cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiRWRpdGluZ0hpc3RvcnlUZXN0cyIgKi87
CisJCQlidWlsZFBoYXNlcyA9ICgKKwkJCQk1MTZBREJFQzFERTE1N0FEMDBFMkI5OEQgLyogU291
cmNlcyAqLywKKwkJCQk1MTZBREJFRDFERTE1N0FEMDBFMkI5OEQgLyogRnJhbWV3b3JrcyAqLywK
KwkJCQk1MTZBREJFRTFERTE1N0FEMDBFMkI5OEQgLyogUmVzb3VyY2VzICovLAorCQkJKTsKKwkJ
CWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJCTUxNkFEQkY2
MURFMTU3QUQwMEUyQjk4RCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAorCQkJKTsKKwkJCW5h
bWUgPSBFZGl0aW5nSGlzdG9yeVRlc3RzOworCQkJcHJvZHVjdE5hbWUgPSBFZGl0aW5nSGlzdG9y
eVRlc3RzOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDUxNkFEQkYwMURFMTU3QUQwMEUyQjk4RCAv
KiBFZGl0aW5nSGlzdG9yeVRlc3RzLnhjdGVzdCAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5h
cHBsZS5wcm9kdWN0LXR5cGUuYnVuZGxlLnVuaXQtdGVzdCI7CisJCX07CisvKiBFbmQgUEJYTmF0
aXZlVGFyZ2V0IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYUHJvamVjdCBzZWN0aW9uICovCisJ
CTUxMkQ3QThCMURFMEZCRUYwMDI4RjBFNiAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKKwkJCWlz
YSA9IFBCWFByb2plY3Q7CisJCQlhdHRyaWJ1dGVzID0geworCQkJCUxhc3RVcGdyYWRlQ2hlY2sg
PSAwODIwOworCQkJCVRhcmdldEF0dHJpYnV0ZXMgPSB7CisJCQkJCTUxNkFEQkMwMURFMTU1RkMw
MEUyQjk4RCA9IHsKKwkJCQkJCUNyZWF0ZWRPblRvb2xzVmVyc2lvbiA9IDguMjsKKwkJCQkJCVBy
b3Zpc2lvbmluZ1N0eWxlID0gQXV0b21hdGljOworCQkJCQl9OworCQkJCQk1MTZBREJFRjFERTE1
N0FEMDBFMkI5OEQgPSB7CisJCQkJCQlDcmVhdGVkT25Ub29sc1ZlcnNpb24gPSA4LjI7CisJCQkJ
CQlQcm92aXNpb25pbmdTdHlsZSA9IEF1dG9tYXRpYzsKKwkJCQkJCVRlc3RUYXJnZXRJRCA9IDUx
NkFEQkMwMURFMTU1RkMwMEUyQjk4RDsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJCWJ1aWxk
Q29uZmlndXJhdGlvbkxpc3QgPSA1MTJEN0E4RTFERTBGQkVGMDAyOEYwRTYgLyogQnVpbGQgY29u
ZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJFZGl0aW5nSGlzdG9yeSIgKi87CisJCQlj
b21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAzLjIiOworCQkJZGV2ZWxvcG1lbnRSZWdpb24g
PSBFbmdsaXNoOworCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDA7CisJCQlrbm93blJlZ2lv
bnMgPSAoCisJCQkJZW4sCisJCQkJQmFzZSwKKwkJCSk7CisJCQltYWluR3JvdXAgPSA1MTJEN0E4
QTFERTBGQkVGMDAyOEYwRTY7CisJCQlwcm9kdWN0UmVmR3JvdXAgPSA1MTJEN0E5NDFERTBGQkVG
MDAyOEYwRTYgLyogUHJvZHVjdHMgKi87CisJCQlwcm9qZWN0RGlyUGF0aCA9ICIiOworCQkJcHJv
amVjdFJvb3QgPSAiIjsKKwkJCXRhcmdldHMgPSAoCisJCQkJNTE2QURCQzAxREUxNTVGQzAwRTJC
OThEIC8qIEVkaXRpbmdIaXN0b3J5ICovLAorCQkJCTUxNkFEQkVGMURFMTU3QUQwMEUyQjk4RCAv
KiBFZGl0aW5nSGlzdG9yeVRlc3RzICovLAorCQkJKTsKKwkJfTsKKy8qIEVuZCBQQlhQcm9qZWN0
IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYUmVzb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICov
CisJCTUxNkFEQkJGMURFMTU1RkMwMEUyQjk4RCAvKiBSZXNvdXJjZXMgKi8gPSB7CisJCQlpc2Eg
PSBQQlhSZXNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0
NzsKKwkJCWZpbGVzID0gKAorCQkJCTUxRDM5NDdDMURGMjRENDEwMEFCRTg3NSAvKiBEdW1wRWRp
dGluZ0hpc3RvcnkuanMgaW4gUmVzb3VyY2VzICovLAorCQkJCTUxNkFEQkUyMURFMTU2QTkwMEUy
Qjk4RCAvKiBDYXB0dXJlSGFybmVzcy5odG1sIGluIFJlc291cmNlcyAqLywKKwkJCQk1MTdGRDkz
QzFERTE4REM5MDBBNzM2NzMgLyogRE9NVGVzdGluZ1V0aWwuanMgaW4gUmVzb3VyY2VzICovLAor
CQkJCTUxNkFEQkU1MURFMTU2QTkwMEUyQjk4RCAvKiBQbGF5YmFja0hhcm5lc3MuaHRtbCBpbiBS
ZXNvdXJjZXMgKi8sCisJCQkJNTFEMzk0N0QxREYyNEQ0MTAwQUJFODc1IC8qIEVkaXRpbmdIaXN0
b3J5VXRpbC5qcyBpbiBSZXNvdXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisJCTUxNkFEQkVFMURFMTU3QUQwMEUyQjk4RCAv
KiBSZXNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhSZXNvdXJjZXNCdWlsZFBoYXNlOworCQkJ
YnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworLyogRW5kIFBCWFJl
c291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQ
aGFzZSBzZWN0aW9uICovCisJCTUxNkFEQkJEMURFMTU1RkMwMEUyQjk4RCAvKiBTb3VyY2VzICov
ID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sg
PSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJNTE2QURCRTYxREUxNTZCQjAwRTJCOThE
IC8qIG1haW4ubSBpbiBTb3VyY2VzICovLAorCQkJCTUxRUNDM0VBMURFRTMzREQwMENCMjY3RSAv
KiBUZXN0UnVubmVyLm0gaW4gU291cmNlcyAqLywKKwkJCQk1MUVDQzNFNzFERUUzM0NFMDBDQjI2
N0UgLyogVGVzdFV0aWwubSBpbiBTb3VyY2VzICovLAorCQkJCTUxRUNDM0U5MURFRTMzRDIwMENC
MjY3RSAvKiBXS1dlYlZpZXdBZGRpdGlvbnMubSBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworCQk1MTZBREJFQzFE
RTE1N0FEMDBFMkI5OEQgLyogU291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWFNvdXJjZXNCdWls
ZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAor
CQkJCTUxNkFEQkYzMURFMTU3QUQwMEUyQjk4RCAvKiBSZXdpbmRBbmRQbGF5YmFja1Rlc3RzLm0g
aW4gU291cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKKwkJfTsKKy8qIEVuZCBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisK
Ky8qIEJlZ2luIFBCWFRhcmdldERlcGVuZGVuY3kgc2VjdGlvbiAqLworCQk1MTZBREJGNjFERTE1
N0FEMDBFMkI5OEQgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKKwkJCWlzYSA9IFBCWFRh
cmdldERlcGVuZGVuY3k7CisJCQl0YXJnZXQgPSA1MTZBREJDMDFERTE1NUZDMDBFMkI5OEQgLyog
RWRpdGluZ0hpc3RvcnkgKi87CisJCQl0YXJnZXRQcm94eSA9IDUxNkFEQkY1MURFMTU3QUQwMEUy
Qjk4RCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CisJCX07CisvKiBFbmQgUEJYVGFyZ2V0
RGVwZW5kZW5jeSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFhDQnVpbGRDb25maWd1cmF0aW9uIHNl
Y3Rpb24gKi8KKwkJNTEyRDdBQTIxREUwRkJFRjAwMjhGMEU2IC8qIERlYnVnICovID0geworCQkJ
aXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUFM
V0FZU19TRUFSQ0hfVVNFUl9QQVRIUyA9IE5POworCQkJCUNMQU5HX0FOQUxZWkVSX05PTk5VTEwg
PSBZRVM7CisJCQkJQ0xBTkdfQ1hYX0xBTkdVQUdFX1NUQU5EQVJEID0gImdudSsrMHgiOworCQkJ
CUNMQU5HX0NYWF9MSUJSQVJZID0gImxpYmMrKyI7CisJCQkJQ0xBTkdfRU5BQkxFX01PRFVMRVMg
PSBZRVM7CisJCQkJQ0xBTkdfRU5BQkxFX09CSkNfQVJDID0gWUVTOworCQkJCUNMQU5HX1dBUk5f
Qk9PTF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fQ09OU1RBTlRfQ09OVkVSU0lP
TiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0RJUkVDVF9PQkpDX0lTQV9VU0FHRSA9IFlFU19FUlJP
UjsKKwkJCQlDTEFOR19XQVJOX0RPQ1VNRU5UQVRJT05fQ09NTUVOVFMgPSBZRVM7CisJCQkJQ0xB
TkdfV0FSTl9FTVBUWV9CT0RZID0gWUVTOworCQkJCUNMQU5HX1dBUk5fRU5VTV9DT05WRVJTSU9O
ID0gWUVTOworCQkJCUNMQU5HX1dBUk5fSU5GSU5JVEVfUkVDVVJTSU9OID0gWUVTOworCQkJCUNM
QU5HX1dBUk5fSU5UX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9PQkpDX1JPT1Rf
Q0xBU1MgPSBZRVNfRVJST1I7CisJCQkJQ0xBTkdfV0FSTl9TVVNQSUNJT1VTX01PVkUgPSBZRVM7
CisJCQkJQ0xBTkdfV0FSTl9VTlJFQUNIQUJMRV9DT0RFID0gWUVTOworCQkJCUNMQU5HX1dBUk5f
X0RVUExJQ0FURV9NRVRIT0RfTUFUQ0ggPSBZRVM7CisJCQkJQ09ERV9TSUdOX0lERU5USVRZID0g
Ii0iOworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBOTzsKKwkJCQlERUJVR19JTkZPUk1BVElPTl9G
T1JNQVQgPSBkd2FyZjsKKwkJCQlFTkFCTEVfU1RSSUNUX09CSkNfTVNHU0VORCA9IFlFUzsKKwkJ
CQlFTkFCTEVfVEVTVEFCSUxJVFkgPSBZRVM7CisJCQkJR0NDX0NfTEFOR1VBR0VfU1RBTkRBUkQg
PSBnbnU5OTsKKwkJCQlHQ0NfRFlOQU1JQ19OT19QSUMgPSBOTzsKKwkJCQlHQ0NfTk9fQ09NTU9O
X0JMT0NLUyA9IFlFUzsKKwkJCQlHQ0NfT1BUSU1JWkFUSU9OX0xFVkVMID0gMDsKKwkJCQlHQ0Nf
UFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gKAorCQkJCQkiREVCVUc9MSIsCisJCQkJCSIkKGlu
aGVyaXRlZCkiLAorCQkJCSk7CisJCQkJR0NDX1dBUk5fNjRfVE9fMzJfQklUX0NPTlZFUlNJT04g
PSBZRVM7CisJCQkJR0NDX1dBUk5fQUJPVVRfUkVUVVJOX1RZUEUgPSBZRVNfRVJST1I7CisJCQkJ
R0NDX1dBUk5fVU5ERUNMQVJFRF9TRUxFQ1RPUiA9IFlFUzsKKwkJCQlHQ0NfV0FSTl9VTklOSVRJ
QUxJWkVEX0FVVE9TID0gWUVTX0FHR1JFU1NJVkU7CisJCQkJR0NDX1dBUk5fVU5VU0VEX0ZVTkNU
SU9OID0gWUVTOworCQkJCUdDQ19XQVJOX1VOVVNFRF9WQVJJQUJMRSA9IFlFUzsKKwkJCQlNQUNP
U1hfREVQTE9ZTUVOVF9UQVJHRVQgPSAxMC4xMzsKKwkJCQlNVExfRU5BQkxFX0RFQlVHX0lORk8g
PSBZRVM7CisJCQkJT05MWV9BQ1RJVkVfQVJDSCA9IFlFUzsKKwkJCQlTREtST09UID0gbWFjb3N4
OworCQkJfTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsKKwkJNTEyRDdBQTMxREUwRkJFRjAwMjhG
MEU2IC8qIFJlbGVhc2UgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJ
CWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQUxXQVlTX1NFQVJDSF9VU0VSX1BBVEhTID0gTk87CisJ
CQkJQ0xBTkdfQU5BTFlaRVJfTk9OTlVMTCA9IFlFUzsKKwkJCQlDTEFOR19DWFhfTEFOR1VBR0Vf
U1RBTkRBUkQgPSAiZ251KysweCI7CisJCQkJQ0xBTkdfQ1hYX0xJQlJBUlkgPSAibGliYysrIjsK
KwkJCQlDTEFOR19FTkFCTEVfTU9EVUxFUyA9IFlFUzsKKwkJCQlDTEFOR19FTkFCTEVfT0JKQ19B
UkMgPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9CT09MX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xB
TkdfV0FSTl9DT05TVEFOVF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fRElSRUNU
X09CSkNfSVNBX1VTQUdFID0gWUVTX0VSUk9SOworCQkJCUNMQU5HX1dBUk5fRE9DVU1FTlRBVElP
Tl9DT01NRU5UUyA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0VNUFRZX0JPRFkgPSBZRVM7CisJCQkJ
Q0xBTkdfV0FSTl9FTlVNX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9JTkZJTklU
RV9SRUNVUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9JTlRfQ09OVkVSU0lPTiA9IFlFUzsK
KwkJCQlDTEFOR19XQVJOX09CSkNfUk9PVF9DTEFTUyA9IFlFU19FUlJPUjsKKwkJCQlDTEFOR19X
QVJOX1NVU1BJQ0lPVVNfTU9WRSA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX1VOUkVBQ0hBQkxFX0NP
REUgPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9fRFVQTElDQVRFX01FVEhPRF9NQVRDSCA9IFlFUzsK
KwkJCQlDT0RFX1NJR05fSURFTlRJVFkgPSAiLSI7CisJCQkJQ09QWV9QSEFTRV9TVFJJUCA9IE5P
OworCQkJCURFQlVHX0lORk9STUFUSU9OX0ZPUk1BVCA9ICJkd2FyZi13aXRoLWRzeW0iOworCQkJ
CUVOQUJMRV9OU19BU1NFUlRJT05TID0gTk87CisJCQkJRU5BQkxFX1NUUklDVF9PQkpDX01TR1NF
TkQgPSBZRVM7CisJCQkJR0NDX0NfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnU5OTsKKwkJCQlHQ0Nf
Tk9fQ09NTU9OX0JMT0NLUyA9IFlFUzsKKwkJCQlHQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09OVkVS
U0lPTiA9IFlFUzsKKwkJCQlHQ0NfV0FSTl9BQk9VVF9SRVRVUk5fVFlQRSA9IFlFU19FUlJPUjsK
KwkJCQlHQ0NfV0FSTl9VTkRFQ0xBUkVEX1NFTEVDVE9SID0gWUVTOworCQkJCUdDQ19XQVJOX1VO
SU5JVElBTElaRURfQVVUT1MgPSBZRVNfQUdHUkVTU0lWRTsKKwkJCQlHQ0NfV0FSTl9VTlVTRURf
RlVOQ1RJT04gPSBZRVM7CisJCQkJR0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxFID0gWUVTOworCQkJ
CU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCA9IDEwLjEzOworCQkJCU1UTF9FTkFCTEVfREVCVUdf
SU5GTyA9IE5POworCQkJCVNES1JPT1QgPSBtYWNvc3g7CisJCQl9OworCQkJbmFtZSA9IFJlbGVh
c2U7CisJCX07CisJCTUxNkFEQkRCMURFMTU1RkMwMEUyQjk4RCAvKiBEZWJ1ZyAqLyA9IHsKKwkJ
CWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlB
U1NFVENBVEFMT0dfQ09NUElMRVJfQVBQSUNPTl9OQU1FID0gQXBwSWNvbjsKKwkJCQlDT01CSU5F
X0hJRFBJX0lNQUdFUyA9IFlFUzsKKwkJCQlJTkZPUExJU1RfRklMRSA9IEVkaXRpbmdIaXN0b3J5
L0luZm8ucGxpc3Q7CisJCQkJTERfUlVOUEFUSF9TRUFSQ0hfUEFUSFMgPSAiJChpbmhlcml0ZWQp
IEBleGVjdXRhYmxlX3BhdGgvLi4vRnJhbWV3b3JrcyI7CisJCQkJUFJPRFVDVF9CVU5ETEVfSURF
TlRJRklFUiA9IGNvbS5hcHBsZS5FZGl0aW5nSGlzdG9yeTsKKwkJCQlQUk9EVUNUX05BTUUgPSAi
JChUQVJHRVRfTkFNRSkiOworCQkJCVNES1JPT1QgPSBtYWNvc3guaW50ZXJuYWw7CisJCQl9Owor
CQkJbmFtZSA9IERlYnVnOworCQl9OworCQk1MTZBREJEQzFERTE1NUZDMDBFMkI5OEQgLyogUmVs
ZWFzZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0
aW5ncyA9IHsKKwkJCQlBU1NFVENBVEFMT0dfQ09NUElMRVJfQVBQSUNPTl9OQU1FID0gQXBwSWNv
bjsKKwkJCQlDT01CSU5FX0hJRFBJX0lNQUdFUyA9IFlFUzsKKwkJCQlJTkZPUExJU1RfRklMRSA9
IEVkaXRpbmdIaXN0b3J5L0luZm8ucGxpc3Q7CisJCQkJTERfUlVOUEFUSF9TRUFSQ0hfUEFUSFMg
PSAiJChpbmhlcml0ZWQpIEBleGVjdXRhYmxlX3BhdGgvLi4vRnJhbWV3b3JrcyI7CisJCQkJUFJP
RFVDVF9CVU5ETEVfSURFTlRJRklFUiA9IGNvbS5hcHBsZS5FZGl0aW5nSGlzdG9yeTsKKwkJCQlQ
Uk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOworCQkJCVNES1JPT1QgPSBtYWNvc3guaW50
ZXJuYWw7CisJCQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTUxNkFEQkY4MURFMTU3
QUQwMEUyQjk4RCAvKiBEZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9u
OworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlCVU5ETEVfTE9BREVSID0gIiQoVEVTVF9IT1NU
KSI7CisJCQkJQ09NQklORV9ISURQSV9JTUFHRVMgPSBZRVM7CisJCQkJR0NDX1BSRVBST0NFU1NP
Ul9ERUZJTklUSU9OUyA9ICgKKwkJCQkJIkRFQlVHPTEiLAorCQkJCQkiJChpbmhlcml0ZWQpIiwK
KwkJCQkJIlRFU1Q9MSIsCisJCQkJKTsKKwkJCQlJTkZPUExJU1RfRklMRSA9IEVkaXRpbmdIaXN0
b3J5VGVzdHMvSW5mby5wbGlzdDsKKwkJCQlMRF9SVU5QQVRIX1NFQVJDSF9QQVRIUyA9ICIkKGlu
aGVyaXRlZCkgQGV4ZWN1dGFibGVfcGF0aC8uLi9GcmFtZXdvcmtzIEBsb2FkZXJfcGF0aC8uLi9G
cmFtZXdvcmtzIjsKKwkJCQlQUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSID0gY29tLmFwcGxlLkVk
aXRpbmdIaXN0b3J5VGVzdHM7CisJCQkJUFJPRFVDVF9OQU1FID0gIiQoVEFSR0VUX05BTUUpIjsK
KwkJCQlURVNUX0hPU1QgPSAiJChCVUlMVF9QUk9EVUNUU19ESVIpL0VkaXRpbmdIaXN0b3J5LmFw
cC9Db250ZW50cy9NYWNPUy9FZGl0aW5nSGlzdG9yeSI7CisJCQl9OworCQkJbmFtZSA9IERlYnVn
OworCQl9OworCQk1MTZBREJGOTFERTE1N0FEMDBFMkI5OEQgLyogUmVsZWFzZSAqLyA9IHsKKwkJ
CWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlC
VU5ETEVfTE9BREVSID0gIiQoVEVTVF9IT1NUKSI7CisJCQkJQ09NQklORV9ISURQSV9JTUFHRVMg
PSBZRVM7CisJCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICJURVNUPTEiOworCQkJ
CUlORk9QTElTVF9GSUxFID0gRWRpdGluZ0hpc3RvcnlUZXN0cy9JbmZvLnBsaXN0OworCQkJCUxE
X1JVTlBBVEhfU0VBUkNIX1BBVEhTID0gIiQoaW5oZXJpdGVkKSBAZXhlY3V0YWJsZV9wYXRoLy4u
L0ZyYW1ld29ya3MgQGxvYWRlcl9wYXRoLy4uL0ZyYW1ld29ya3MiOworCQkJCVBST0RVQ1RfQlVO
RExFX0lERU5USUZJRVIgPSBjb20uYXBwbGUuRWRpdGluZ0hpc3RvcnlUZXN0czsKKwkJCQlQUk9E
VUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOworCQkJCVRFU1RfSE9TVCA9ICIkKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRWRpdGluZ0hpc3RvcnkuYXBwL0NvbnRlbnRzL01hY09TL0VkaXRpbmdIaXN0
b3J5IjsKKwkJCX07CisJCQluYW1lID0gUmVsZWFzZTsKKwkJfTsKKy8qIEVuZCBYQ0J1aWxkQ29u
ZmlndXJhdGlvbiBzZWN0aW9uICovCisKKy8qIEJlZ2luIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2Vj
dGlvbiAqLworCQk1MTJEN0E4RTFERTBGQkVGMDAyOEYwRTYgLyogQnVpbGQgY29uZmlndXJhdGlv
biBsaXN0IGZvciBQQlhQcm9qZWN0ICJFZGl0aW5nSGlzdG9yeSIgKi8gPSB7CisJCQlpc2EgPSBY
Q0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQk1MTJE
N0FBMjFERTBGQkVGMDAyOEYwRTYgLyogRGVidWcgKi8sCisJCQkJNTEyRDdBQTMxREUwRkJFRjAw
MjhGMEU2IC8qIFJlbGVhc2UgKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zp
c2libGUgPSAwOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKKwkJfTsK
KwkJNTE2QURCREExREUxNTVGQzAwRTJCOThEIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYTmF0aXZlVGFyZ2V0ICJFZGl0aW5nSGlzdG9yeSIgKi8gPSB7CisJCQlpc2EgPSBYQ0Nv
bmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQk1MTZBREJE
QjFERTE1NUZDMDBFMkI5OEQgLyogRGVidWcgKi8sCisJCQkJNTE2QURCREMxREUxNTVGQzAwRTJC
OThEIC8qIFJlbGVhc2UgKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2li
bGUgPSAwOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJ
NTE2QURCRjcxREUxNTdBRDAwRTJCOThEIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3Ig
UEJYTmF0aXZlVGFyZ2V0ICJFZGl0aW5nSGlzdG9yeVRlc3RzIiAqLyA9IHsKKwkJCWlzYSA9IFhD
Q29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCTUxNkFE
QkY4MURFMTU3QUQwMEUyQjk4RCAvKiBEZWJ1ZyAqLywKKwkJCQk1MTZBREJGOTFERTE1N0FEMDBF
MkI5OEQgLyogUmVsZWFzZSAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlz
aWJsZSA9IDA7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOworCQl9Owor
LyogRW5kIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLworCX07CisJcm9vdE9iamVjdCA9
IDUxMkQ3QThCMURFMEZCRUYwMDI4RjBFNiAvKiBQcm9qZWN0IG9iamVjdCAqLzsKK30KZGlmZiAt
LWdpdCBhL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L0luZm8ucGxpc3QgYi9U
b29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9JbmZvLnBsaXN0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjhhNGViYmYxY2FiZmYzZDk4NGNiZjU1NmNiNjkwYmQyYmQyMzA1MTUKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9JbmZvLnBsaXN0CkBAIC0w
LDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURP
Q1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8v
d3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KKzxwbGlzdCB2ZXJzaW9u
PSIxLjAiPgorPGRpY3Q+CisJPGtleT5DRkJ1bmRsZURldmVsb3BtZW50UmVnaW9uPC9rZXk+CisJ
PHN0cmluZz5lbjwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVFeGVjdXRhYmxlPC9rZXk+CisJPHN0
cmluZz4kKEVYRUNVVEFCTEVfTkFNRSk8L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlSWNvbkZpbGU8
L2tleT4KKwk8c3RyaW5nPjwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVJZGVudGlmaWVyPC9rZXk+
CisJPHN0cmluZz4kKFBST0RVQ1RfQlVORExFX0lERU5USUZJRVIpPC9zdHJpbmc+CisJPGtleT5D
RkJ1bmRsZUluZm9EaWN0aW9uYXJ5VmVyc2lvbjwva2V5PgorCTxzdHJpbmc+Ni4wPC9zdHJpbmc+
CisJPGtleT5DRkJ1bmRsZU5hbWU8L2tleT4KKwk8c3RyaW5nPiQoUFJPRFVDVF9OQU1FKTwvc3Ry
aW5nPgorCTxrZXk+Q0ZCdW5kbGVQYWNrYWdlVHlwZTwva2V5PgorCTxzdHJpbmc+QVBQTDwvc3Ry
aW5nPgorCTxrZXk+Q0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmc8L2tleT4KKwk8c3RyaW5nPjEu
MDwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVWZXJzaW9uPC9rZXk+CisJPHN0cmluZz4xPC9zdHJp
bmc+CisJPGtleT5MU01pbmltdW1TeXN0ZW1WZXJzaW9uPC9rZXk+CisJPHN0cmluZz4kKE1BQ09T
WF9ERVBMT1lNRU5UX1RBUkdFVCk8L3N0cmluZz4KKwk8a2V5Pk5TUHJpbmNpcGFsQ2xhc3M8L2tl
eT4KKwk8c3RyaW5nPk5TQXBwbGljYXRpb248L3N0cmluZz4KKzwvZGljdD4KKzwvcGxpc3Q+CmRp
ZmYgLS1naXQgYS9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9SZXNvdXJjZXMv
Q2FwdHVyZUhhcm5lc3MuaHRtbCBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5
L1Jlc291cmNlcy9DYXB0dXJlSGFybmVzcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBhMDIyOGNmMzkxNzll
YzdhNWI5MmU1MDk5NzIxMjdhZTNhNzFkOTQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9FZGl0
aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9SZXNvdXJjZXMvQ2FwdHVyZUhhcm5lc3MuaHRtbApA
QCAtMCwwICsxLDE0IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9IkRPTVRlc3RpbmdV
dGlsLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJFZGl0aW5nSGlzdG9yeVV0aWwuanMiPjwv
c2NyaXB0PgorPHNjcmlwdD4KK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgKCkgPT4g
eworICAgIGxldCBzY3JpcHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0
Iik7CisgICAgc2NyaXB0RWxlbWVudC5zcmMgPSAiRHVtcEVkaXRpbmdIaXN0b3J5LmpzIjsKKyAg
ICBzY3JpcHRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCAoKSA9PiBkb2N1bWVudC5i
b2R5LmZvY3VzKCkpOworICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0RWxlbWVu
dCk7Cit9KTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvVG9vbHMv
RWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvUmVzb3VyY2VzL0RPTVRlc3RpbmdVdGlsLmpz
IGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvUmVzb3VyY2VzL0RPTVRlc3Rp
bmdVdGlsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMyYzk5MzQ4ZDljODZkNzViNzM3MjA0MzVjZGJkNGVmNmYx
MGQ3YTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlz
dG9yeS9SZXNvdXJjZXMvRE9NVGVzdGluZ1V0aWwuanMKQEAgLTAsMCArMSwyNCBAQAorKCgpID0+
IHsKKyAgICBmdW5jdGlvbiBzdWJ0cmVlQXNTdHJpbmcobm9kZSwgY3VycmVudERlcHRoID0gMCkg
eworICAgICAgICBsZXQgY2hpbGROb2Rlc0FzU3RyaW5ncyA9IEFycmF5LmZyb20obm9kZS5jaGls
ZE5vZGVzKS5tYXAoY2hpbGQgPT4gc3VidHJlZUFzU3RyaW5nKGNoaWxkLCBjdXJyZW50RGVwdGgg
KyAxKSk7CisgICAgICAgIGxldCBub2RlQXNTdHJpbmcgPSBub2RlLm5vZGVOYW1lOworICAgICAg
ICBpZiAobm9kZS5ub2RlVHlwZSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkgeworICAgICAgICAgICAg
bm9kZUFzU3RyaW5nID0gYDwke25vZGVBc1N0cmluZ30+YAorICAgICAgICAgICAgbGV0IGF0dHJp
YnV0ZURlc2NyaXB0aW9ucyA9IFtdOworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBu
b2RlLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBsZXQgYXR0cmli
dXRlID0gbm9kZS5hdHRyaWJ1dGVzLml0ZW0oaSk7CisgICAgICAgICAgICAgICAgYXR0cmlidXRl
RGVzY3JpcHRpb25zLnB1c2goYCR7YXR0cmlidXRlLmxvY2FsTmFtZX09JHthdHRyaWJ1dGUudmFs
dWV9YCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBub2RlQXNTdHJpbmcgKz0gYDogJHth
dHRyaWJ1dGVEZXNjcmlwdGlvbnMuam9pbigiLCAiKX1gOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKG5vZGUubm9kZVR5cGUgPT0gTm9kZS5URVhUX05PREUpCisgICAgICAgICAgICBub2RlQXNT
dHJpbmcgKz0gYDogJyR7bm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKC9ccy9nLCAiICIpfSdgOwor
CisgICAgICAgIHJldHVybiBgJHsiICAgICIucmVwZWF0KGN1cnJlbnREZXB0aCl9JHtub2RlQXNT
dHJpbmd9XG4ke2NoaWxkTm9kZXNBc1N0cmluZ3Muam9pbigiXG4iKX1gCisgICAgfQorCisgICAg
d2luZG93LkRPTVV0aWwgPSB7CisgICAgICAgIHN1YnRyZWVBc1N0cmluZworICAgIH07Cit9KSgp
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvUmVzb3Vy
Y2VzL1BsYXliYWNrSGFybmVzcy5odG1sIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hp
c3RvcnkvUmVzb3VyY2VzL1BsYXliYWNrSGFybmVzcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJkYmRlOWYz
YjRhNGRmN2NiMjMwZjA5OWMyODQ5NGQyYmMyNTdhNTMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9SZXNvdXJjZXMvUGxheWJhY2tIYXJuZXNz
Lmh0bWwKQEAgLTAsMCArMSwzODggQEAKKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+Citib2R5IHsK
KyAgICBtYXJnaW46IDhweDsKK30KKworI292ZXJsYXkgeworICAgIHdpZHRoOiAzMjBweDsKKyAg
ICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDMycHgpOworICAgIHBvc2l0aW9uOiBmaXhlZDsKKyAgICBy
aWdodDogMTZweDsKKyAgICB0b3A6IDE2cHg7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgy
NTUsIDI1NSwgMjU1LCAwLjc1KTsKK30KKworI3VwZGF0ZUluZm9QYW5lbCB7CisgICAgaGVpZ2h0
OiBjYWxjKDkwJSAtIDIwcHgpOworICAgIG92ZXJmbG93OiBzY3JvbGw7CisgICAgd2hpdGUtc3Bh
Y2U6IG5vd3JhcDsKKyAgICBwYWRkaW5nOiAxMHB4OworfQorCisjY29udHJvbHMgeworICAgIGhl
aWdodDogMTAlOworICAgIGRpc3BsYXk6IGZsZXg7CisgICAgZmxleC1kaXJlY3Rpb246IGNvbHVt
bjsKKyAgICBhbGlnbi1pdGVtczogY2VudGVyOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30K
KworI2NvbnRyb2xzLXdyYXBwZXIgeworICAgIG1hcmdpbjogMCBhdXRvOworfQorCitzdW1tYXJ5
OmZvY3VzIHsKKyAgICBvdXRsaW5lOiBub25lOworfQorCitkZXRhaWxzIHsKKyAgICBwYWRkaW5n
OiA0cHggMDsKK30KKworI3VwZGF0ZU1hcmtlciB7CisgICAgd2lkdGg6IDUwJTsKKyAgICBtYXJn
aW46IDIwcHggMDsKKyAgICBib3JkZXItdG9wOiAxcHggcmVkIGRhc2hlZDsKK30KKworLmVoLW5v
ZGUgeworICAgIG1hcmdpbjogMCAycHg7CisgICAgcGFkZGluZzogMCA0cHg7CisgICAgYmFja2dy
b3VuZC1jb2xvcjogcmdiYSg1OSwgMTMxLCAyMzgsIDAuMjUpOworICAgIGJvcmRlci1yYWRpdXM6
IDRweDsKKyAgICBjdXJzb3I6IGRlZmF1bHQ7Cit9CisKKy5laC1ub2RlOmhvdmVyIHsKKyAgICBi
YWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDU5LCAxMzEsIDIzOCwgMC41KTsKK30KKworLm5vZGUtaGln
aGxpZ2h0IHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgYmFja2dyb3VuZC1jb2xvcjog
cmdiYSg1OSwgMTMxLCAyMzgsIDAuMDUpOworICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYig1OSwg
MTMxLCAyMzgpOworICAgIGJvcmRlci1yYWRpdXM6IDJweDsKKyAgICB6LWluZGV4OiAtMTsKK30K
KworbGkgeworICAgIGxpbmUtaGVpZ2h0OiAxLjU7Cit9CisKK3N1bW1hcnkgeworICAgIG1hcmdp
bi10b3A6IDA7Cit9CisKKyNkcm9wem9uZSB7CisgICAgbWFyZ2luOiAxMDBweDsKKyAgICBwYWRk
aW5nOiA1MHB4OworICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAzMDBweCk7CisgICAgaGVpZ2h0OiBj
YWxjKDEwMCUgLSAzMDBweCk7CisgICAgYm9yZGVyOiAxNXB4ICNFOEU4RTggZGFzaGVkOworICAg
IGRpc3BsYXk6IGZsZXg7CisgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKKyAgICB0ZXh0LWFsaWdu
OiBjZW50ZXI7CisgICAgY3Vyc29yOiBwb2ludGVyOworfQorCithOnZpc2l0ZWQsIGE6bGluayB7
CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGNvbG9yOiByZWQ7Cit9CisKKyN1cGxv
YWQgeworICAgIG9wYWNpdHk6IDA7Cit9CisKKyNkcm9wTWVzc2FnZSB7CisgICAgZm9udC1zaXpl
OiA1MHB4OworICAgIGNvbG9yOiAjRThFOEU4OworICAgIG1hcmdpbjogMCBhdXRvOworICAgIHBv
aW50ZXItZXZlbnRzOiBub25lOworICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtOworfQor
PC9zdHlsZT4KKzxzY3JpcHQgc3JjPSJET01UZXN0aW5nVXRpbC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iRWRpdGluZ0hpc3RvcnlVdGlsLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitjbGFz
cyBET01VcGRhdGVIaXN0b3J5Q29udGV4dCB7CisgICAgY29uc3RydWN0b3Iobm9kZU1hcCwgdXBk
YXRlcykgeworICAgICAgICB0aGlzLl9ub2RlTWFwID0gbm9kZU1hcDsKKyAgICAgICAgdGhpcy5f
dXBkYXRlcyA9IHVwZGF0ZXM7CisgICAgICAgIHRoaXMuX2N1cnJlbnRVcGRhdGVJbmRleCA9IHVw
ZGF0ZXMubGVuZ3RoOworICAgIH0KKworICAgIGN1cnJlbnRJbmRleCgpIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX2N1cnJlbnRVcGRhdGVJbmRleDsKKyAgICB9CisKKyAgICB1cGRhdGVzKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlczsKKyAgICB9CisKKyAgICB1cGRhdGVBdChpbmRl
eCkgeworICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuX3VwZGF0ZXMubGVu
Z3RoKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Vw
ZGF0ZXNbaW5kZXhdOworICAgIH0KKworICAgIHNlbGVjdGlvblN0YXRlQXQoaW5kZXgpIHsKKyAg
ICAgICAgbGV0IGJlZm9yZVVwZGF0ZSA9IHRoaXMudXBkYXRlQXQoaW5kZXggLSAxKTsKKyAgICAg
ICAgbGV0IGFmdGVyVXBkYXRlID0gdGhpcy51cGRhdGVBdChpbmRleCk7CisgICAgICAgIGlmIChi
ZWZvcmVVcGRhdGUgaW5zdGFuY2VvZiBFZGl0aW5nSGlzdG9yeS5TZWxlY3Rpb25VcGRhdGUpCisg
ICAgICAgICAgICByZXR1cm4gYmVmb3JlVXBkYXRlLnN0YXRlOworICAgICAgICBpZiAoYWZ0ZXJV
cGRhdGUgaW5zdGFuY2VvZiBFZGl0aW5nSGlzdG9yeS5TZWxlY3Rpb25VcGRhdGUpCisgICAgICAg
ICAgICByZXR1cm4gYWZ0ZXJVcGRhdGUuc3RhdGU7CisgICAgICAgIHJldHVybiBudWxsOworICAg
IH0KKworICAgIGFwcGx5Q3VycmVudFNlbGVjdGlvblN0YXRlKHNlbGVjdGlvbikgeworICAgICAg
ICBsZXQgc2VsZWN0aW9uU3RhdGUgPSB0aGlzLnNlbGVjdGlvblN0YXRlQXQodGhpcy5fY3VycmVu
dFVwZGF0ZUluZGV4KTsKKyAgICAgICAgaWYgKHNlbGVjdGlvblN0YXRlICYmIHNlbGVjdGlvbikK
KyAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLmFwcGx5VG9TZWxlY3Rpb24oc2VsZWN0aW9uKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwor
ICAgIH0KKworICAgIG5leHQoKSB7CisgICAgICAgIGlmICh0aGlzLl9jdXJyZW50VXBkYXRlSW5k
ZXggPj0gdGhpcy5fdXBkYXRlcy5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgdGhpcy5fdXBkYXRlc1t0aGlzLl9jdXJyZW50VXBkYXRlSW5kZXhdLmFwcGx5KCk7CisgICAg
ICAgIHRoaXMuX2N1cnJlbnRVcGRhdGVJbmRleCsrOworICAgIH0KKworICAgIHByZXZpb3VzKCkg
eworICAgICAgICBpZiAodGhpcy5fY3VycmVudFVwZGF0ZUluZGV4IDw9IDApCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgdGhpcy5fdXBkYXRlc1t0aGlzLl9jdXJyZW50VXBkYXRlSW5k
ZXggLSAxXS51bmFwcGx5KCk7CisgICAgICAgIHRoaXMuX2N1cnJlbnRVcGRhdGVJbmRleC0tOwor
ICAgIH0KKworICAgIGp1bXBUbyhpbmRleCkgeworICAgICAgICBpbmRleCA9IE1hdGgubWF4KE1h
dGgubWluKGluZGV4LCB0aGlzLl91cGRhdGVzLmxlbmd0aCksIDApOworICAgICAgICB3aGlsZSh0
aGlzLl9jdXJyZW50VXBkYXRlSW5kZXggIT0gaW5kZXgpIHsKKyAgICAgICAgICAgIGlmICh0aGlz
Ll9jdXJyZW50VXBkYXRlSW5kZXggPCBpbmRleCkKKyAgICAgICAgICAgICAgICB0aGlzLm5leHQo
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzKCk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3dpbmRvdy5vbmxvYWQgPSAoKSA9PiB7CisgICAgZnVuY3Rp
b24gc2V0dXBFZGl0aW5nSGlzdG9yeShqc29uRGF0YSwgd2l0aENvbnRyb2xzPXRydWUpIHsKKyAg
ICAgICAgbGV0IHBhcnNlZFJlc3VsdCA9IEpTT04ucGFyc2UoanNvbkRhdGEpOworICAgICAgICBs
ZXQgZ2xvYmFsTm9kZU1hcCA9IEVkaXRpbmdIaXN0b3J5Lkdsb2JhbE5vZGVNYXAuZnJvbU9iamVj
dChwYXJzZWRSZXN1bHQuZ2xvYmFsTm9kZU1hcCk7CisgICAgICAgIGxldCB1cGRhdGVzID0gcGFy
c2VkUmVzdWx0LnVwZGF0ZXMubWFwKHVwZGF0ZUluZm8gPT4gRWRpdGluZ0hpc3RvcnkuRE9NVXBk
YXRlLm9mVHlwZSh1cGRhdGVJbmZvLnR5cGUpLmZyb21PYmplY3QodXBkYXRlSW5mbywgZ2xvYmFs
Tm9kZU1hcCkpOworICAgICAgICBFZGl0aW5nSGlzdG9yeS5jb250ZXh0ID0gbmV3IERPTVVwZGF0
ZUhpc3RvcnlDb250ZXh0KGdsb2JhbE5vZGVNYXAsIHVwZGF0ZXMpOworCisgICAgICAgIGZ1bmN0
aW9uIGRldGFpbHNFbGVtZW50QXRJbmRleChpbmRleCkgeworICAgICAgICAgICAgcmV0dXJuIGRv
Y3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCN1cGRhdGVJbmZvLSR7aW5kZXh9YCk7CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiB1cGRhdGVPdmVybGF5KCkgeworICAgICAgICAgICAgbGV0IGN1
cnJlbnRJbmRleCA9IEVkaXRpbmdIaXN0b3J5LmNvbnRleHQuY3VycmVudEluZGV4KCk7CisgICAg
ICAgICAgICBsZXQgbnVtYmVyT2ZVcGRhdGVzID0gRWRpdGluZ0hpc3RvcnkuY29udGV4dC51cGRh
dGVzKCkubGVuZ3RoOworICAgICAgICAgICAgcHJvZ3Jlc3NMYWJlbC50ZXh0Q29udGVudCA9IGAk
e2N1cnJlbnRJbmRleH0vJHtudW1iZXJPZlVwZGF0ZXN9YDsKKyAgICAgICAgICAgIHByZXZpb3Vz
QnV0dG9uLmRpc2FibGVkID0gY3VycmVudEluZGV4IDw9IDA7CisgICAgICAgICAgICBuZXh0QnV0
dG9uLmRpc2FibGVkID0gY3VycmVudEluZGV4ID49IG51bWJlck9mVXBkYXRlczsKKyAgICAgICAg
ICAgIHVwZGF0ZU1hcmtlci5yZW1vdmUoKTsKKyAgICAgICAgICAgIGlmICgwIDw9IGN1cnJlbnRJ
bmRleCAmJiBjdXJyZW50SW5kZXggPD0gbnVtYmVyT2ZVcGRhdGVzKSB7CisgICAgICAgICAgICAg
ICAgbGV0IGN1cnJlbnRVcGRhdGVEZXRhaWxzID0gZGV0YWlsc0VsZW1lbnRBdEluZGV4KGN1cnJl
bnRJbmRleCk7CisgICAgICAgICAgICAgICAgdXBkYXRlSW5mb1BhbmVsLmluc2VydEJlZm9yZSh1
cGRhdGVNYXJrZXIsIGN1cnJlbnRVcGRhdGVEZXRhaWxzKTsKKyAgICAgICAgICAgICAgICBpZiAo
dXBkYXRlTWFya2VyLm9mZnNldFRvcCA8IHVwZGF0ZUluZm9QYW5lbC5zY3JvbGxUb3AKKyAgICAg
ICAgICAgICAgICAgICAgfHwgdXBkYXRlSW5mb1BhbmVsLnNjcm9sbFRvcCArIHVwZGF0ZUluZm9Q
YW5lbC5jbGllbnRIZWlnaHQgPCB1cGRhdGVNYXJrZXIub2Zmc2V0VG9wKQorICAgICAgICAgICAg
ICAgIHVwZGF0ZU1hcmtlci5zY3JvbGxJbnRvVmlldygpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgdXBsb2FkLnJlbW92ZSgpOworICAgICAgICBkcm9wem9uZS5yZW1vdmUo
KTsKKyAgICAgICAgZm9yIChsZXQgbm9kZSBvZiBnbG9iYWxOb2RlTWFwLm5vZGVzKCkpIHsKKyAg
ICAgICAgICAgIGlmIChub2RlLnRhZ05hbWUgPT09ICJCT0RZIikgeworICAgICAgICAgICAgICAg
IGRvY3VtZW50LmJvZHkgPSBub2RlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCF3aXRoQ29udHJvbHMpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgbGV0IG92ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKKyAgICAgICAgb3ZlcmxheS5pZCA9ICJvdmVybGF5IjsKKyAgICAgICAgb3Zlcmxh
eS5pbm5lckhUTUwgPQorICAgICAgICBgPGNvZGU+CisgICAgICAgICAgICA8ZGl2IGlkPSJpbmZv
cm1hdGlvbiI+CisgICAgICAgICAgICAgICAgPGRpdiBpZD0idXBkYXRlSW5mb1BhbmVsIj48L2Rp
dj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPGRpdiBpZD0iY29udHJvbHMiPgor
ICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImV4
cGFuZEJ1dHRvbiI+PGNvZGU+U2hvdyBhbGw8L2NvZGU+PC9idXR0b24+PGJ1dHRvbiBpZD0iY29s
bGFwc2VCdXR0b24iPjxjb2RlPkhpZGUgYWxsPC9jb2RlPjwvYnV0dG9uPgorICAgICAgICAgICAg
ICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgICAgIDxi
dXR0b24gZGlzYWJsZWQgaWQ9InByZXZpb3VzQnV0dG9uIj4mbHQ7PC9idXR0b24+PGJ1dHRvbiBk
aXNhYmxlZCBpZD0ibmV4dEJ1dHRvbiI+Jmd0OzwvYnV0dG9uPgorICAgICAgICAgICAgICAgIDwv
ZGl2PgorICAgICAgICAgICAgICAgIDxkaXYgaWQ9InByb2dyZXNzTGFiZWwiPi0vLTwvZGl2Pgor
ICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvY29kZT5gOworICAgICAgICBkb2N1bWVudC5i
b2R5LmFwcGVuZENoaWxkKG92ZXJsYXkpOworICAgICAgICB1cGRhdGVzLmZvckVhY2goKHVwZGF0
ZSwgaW5kZXgpID0+IHsKKyAgICAgICAgICAgIGxldCBkZXRhaWxzRWxlbWVudCA9IHVwZGF0ZS5k
ZXRhaWxzRWxlbWVudCgpOworICAgICAgICAgICAgbGV0IHN1bW1hcnkgPSBkZXRhaWxzRWxlbWVu
dC5jaGlsZHJlblswXTsKKyAgICAgICAgICAgIGxldCBpbmRleEVsZW1lbnQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgICAgICBpbmRleEVsZW1lbnQuaW5uZXJIVE1M
ID0gYFs8YSBocmVmPSM+JHtpbmRleH08L2E+XSBgOworICAgICAgICAgICAgaW5kZXhFbGVtZW50
LmNoaWxkcmVuWzBdLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4geworICAgICAgICAg
ICAgICAgIEVkaXRpbmdIaXN0b3J5LmNvbnRleHQuanVtcFRvKGluZGV4ICsgMSk7CisgICAgICAg
ICAgICAgICAgRWRpdGluZ0hpc3RvcnkuY29udGV4dC5hcHBseUN1cnJlbnRTZWxlY3Rpb25TdGF0
ZShnZXRTZWxlY3Rpb24oKSk7CisgICAgICAgICAgICAgICAgZGV0YWlsc0VsZW1lbnQub3BlbiA9
IHRydWU7CisgICAgICAgICAgICAgICAgdXBkYXRlT3ZlcmxheSgpOworICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICBzdW1tYXJ5Lmluc2VydEJlZm9yZShpbmRleEVsZW1lbnQsIHN1bW1hcnku
Y2hpbGROb2Rlc1swXSk7CisgICAgICAgICAgICBkZXRhaWxzRWxlbWVudC5pZCA9IGB1cGRhdGVJ
bmZvLSR7aW5kZXh9YDsKKyAgICAgICAgICAgIGRldGFpbHNFbGVtZW50LmNsYXNzTGlzdC5hZGQo
InVwZGF0ZUluZm8iKTsKKyAgICAgICAgICAgIHVwZGF0ZUluZm9QYW5lbC5hcHBlbmQoZGV0YWls
c0VsZW1lbnQpOworICAgICAgICB9KTsKKyAgICAgICAgbGV0IHVwZGF0ZU1hcmtlciA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICB1cGRhdGVNYXJrZXIuaWQgPSAidXBk
YXRlTWFya2VyIjsKKyAgICAgICAgdXBkYXRlSW5mb1BhbmVsLmFwcGVuZCh1cGRhdGVNYXJrZXIp
OworCisgICAgICAgIG5leHRCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7
CisgICAgICAgICAgICBFZGl0aW5nSGlzdG9yeS5jb250ZXh0Lm5leHQoKTsKKyAgICAgICAgICAg
IEVkaXRpbmdIaXN0b3J5LmNvbnRleHQuYXBwbHlDdXJyZW50U2VsZWN0aW9uU3RhdGUoZ2V0U2Vs
ZWN0aW9uKCkpOworICAgICAgICAgICAgdXBkYXRlT3ZlcmxheSgpOworICAgICAgICB9KTsKKwor
ICAgICAgICBwcmV2aW91c0J1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsK
KyAgICAgICAgICAgIEVkaXRpbmdIaXN0b3J5LmNvbnRleHQucHJldmlvdXMoKTsKKyAgICAgICAg
ICAgIEVkaXRpbmdIaXN0b3J5LmNvbnRleHQuYXBwbHlDdXJyZW50U2VsZWN0aW9uU3RhdGUoZ2V0
U2VsZWN0aW9uKCkpOworICAgICAgICAgICAgdXBkYXRlT3ZlcmxheSgpOworICAgICAgICB9KTsK
KworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgZXZlbnQgPT4g
eworICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gIkFycm93UmlnaHQiIHx8IGV2ZW50Lmtl
eSA9PT0gIkFycm93RG93biIpIHsKKyAgICAgICAgICAgICAgICByZW1vdmVBbGxIaWdobGlnaHRz
KCk7CisgICAgICAgICAgICAgICAgRWRpdGluZ0hpc3RvcnkuY29udGV4dC5uZXh0KCk7CisgICAg
ICAgICAgICAgICAgRWRpdGluZ0hpc3RvcnkuY29udGV4dC5hcHBseUN1cnJlbnRTZWxlY3Rpb25T
dGF0ZShnZXRTZWxlY3Rpb24oKSk7CisgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1
bHQoKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVPdmVybGF5KCk7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKGV2ZW50LmtleSA9PT0gIkFycm93TGVmdCIgfHwgZXZlbnQua2V5ID09PSAiQXJyb3dV
cCIpIHsKKyAgICAgICAgICAgICAgICByZW1vdmVBbGxIaWdobGlnaHRzKCk7CisgICAgICAgICAg
ICAgICAgRWRpdGluZ0hpc3RvcnkuY29udGV4dC5wcmV2aW91cygpOworICAgICAgICAgICAgICAg
IEVkaXRpbmdIaXN0b3J5LmNvbnRleHQuYXBwbHlDdXJyZW50U2VsZWN0aW9uU3RhdGUoZ2V0U2Vs
ZWN0aW9uKCkpOworICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAg
ICAgICAgICAgICAgdXBkYXRlT3ZlcmxheSgpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsK
KworICAgICAgICBleHBhbmRCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7
CisgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIudXBkYXRlSW5mbyIpLmZv
ckVhY2goZGV0YWlscyA9PiBkZXRhaWxzLm9wZW4gPSB0cnVlKTsKKyAgICAgICAgICAgIHVwZGF0
ZU92ZXJsYXkoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgY29sbGFwc2VCdXR0b24uYWRkRXZl
bnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CisgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNl
bGVjdG9yQWxsKCIudXBkYXRlSW5mbyIpLmZvckVhY2goZGV0YWlscyA9PiBkZXRhaWxzLm9wZW4g
PSBmYWxzZSk7CisgICAgICAgICAgICB1cGRhdGVPdmVybGF5KCk7CisgICAgICAgIH0pOworCisg
ICAgICAgIFsic2VsZWN0c3RhcnQiLCAiZHJhZ2VudGVyIiwgImRyYWdvdmVyIiwgImRyb3AiLCAi
YmVmb3JlaW5wdXQiXS5mb3JFYWNoKCh0eXBlKSA9PiB7CisgICAgICAgICAgICBkb2N1bWVudC5h
ZGRFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50ID0+IGV2ZW50LnByZXZlbnREZWZhdWx0KCkpOwor
ICAgICAgICB9KTsKKworICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuZWgtbm9k
ZSIpLmZvckVhY2goKG5vZGUpID0+IHsKKyAgICAgICAgICAgIGxldCBndWlkID0gcGFyc2VJbnQo
bm9kZS5nZXRBdHRyaWJ1dGUoImVoLWd1aWQiKSk7CisgICAgICAgICAgICBpZiAoaXNOYU4oZ3Vp
ZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBsZXQgdGFyZ2V0Tm9k
ZSA9IGdsb2JhbE5vZGVNYXAubm9kZUZvckdVSUQoZ3VpZCk7CisgICAgICAgICAgICBub2RlLmFk
ZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gY29uc29sZS5sb2codGFyZ2V0Tm9kZSkpOwor
ICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIiwgKCkgPT4gc2hv
d0hpZ2hsaWdodE92ZXJOb2RlKHRhcmdldE5vZGUpKTsKKyAgICAgICAgICAgIG5vZGUuYWRkRXZl
bnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsIHJlbW92ZUFsbEhpZ2hsaWdodHMpOworICAgICAgICB9
KTsKKworICAgICAgICB1cGRhdGVPdmVybGF5KCk7CisgICAgICAgIEVkaXRpbmdIaXN0b3J5LmNv
bnRleHQuYXBwbHlDdXJyZW50U2VsZWN0aW9uU3RhdGUoZ2V0U2VsZWN0aW9uKCkpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIHNob3dIaWdobGlnaHRPdmVyTm9kZShub2RlKSB7CisgICAgICAgIGlm
ICghZG9jdW1lbnQuYm9keS5jb250YWlucyhub2RlKSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHsKKyAgICAg
ICAgICAgIHNob3dIaWdobGlnaHRPdmVyQm91bmRpbmdSZWN0KG5vZGUuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7CisgICAgICAgICAgICBsZXQgcmFu
Z2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOworICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9k
ZUNvbnRlbnRzKG5vZGUpOworICAgICAgICAgICAgc2hvd0hpZ2hsaWdodE92ZXJCb3VuZGluZ1Jl
Y3QocmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpOworICAgICAgICB9CisgICAgfQorCisg
ICAgZnVuY3Rpb24gc2hvd0hpZ2hsaWdodE92ZXJCb3VuZGluZ1JlY3QoYm91bmRzKSB7CisgICAg
ICAgIGxldCBoaWdobGlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAg
ICAgaGlnaGxpZ2h0LmNsYXNzTGlzdC5hZGQoIm5vZGUtaGlnaGxpZ2h0Iik7CisgICAgICAgIGhp
Z2hsaWdodC5zdHlsZS5sZWZ0ID0gYm91bmRzLmxlZnQgLSAyOworICAgICAgICBoaWdobGlnaHQu
c3R5bGUudG9wID0gYm91bmRzLnRvcCAtIDI7CisgICAgICAgIGhpZ2hsaWdodC5zdHlsZS53aWR0
aCA9IGJvdW5kcy53aWR0aCArIDM7CisgICAgICAgIGhpZ2hsaWdodC5zdHlsZS5oZWlnaHQgPSBi
b3VuZHMuaGVpZ2h0ICsgMzsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoaWdo
bGlnaHQpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHJlbW92ZUFsbEhpZ2hsaWdodHMoKSB7Cisg
ICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5ub2RlLWhpZ2hsaWdodCIpLmZvckVh
Y2goaGlnaGxpZ2h0ID0+IGhpZ2hsaWdodC5yZW1vdmUoKSk7CisgICAgfQorCisgICAgZHJvcHpv
bmUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsIGVtcGhhc2l6ZURyb3ApOworICAgIGRy
b3B6b25lLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLCB1bmVtcGhhc2l6ZURyb3ApOwor
ICAgIGRyb3B6b25lLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdlbnRlciIsIGVtcGhhc2l6ZURyb3Ap
OworICAgIGRyb3B6b25lLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdsZWF2ZSIsIHVuZW1waGFzaXpl
RHJvcCk7CisgICAgZHJvcHpvbmUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLCBldmVudCA9
PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpKTsKKyAgICBkcm9wem9uZS5hZGRFdmVudExpc3RlbmVy
KCJjbGljayIsICgpID0+IHVwbG9hZC5jbGljaygpKTsKKyAgICBkcm9wem9uZS5hZGRFdmVudExp
c3RlbmVyKCJkcm9wIiwgZHJvcEV2ZW50ID0+IHsKKyAgICAgICAgZHJvcEV2ZW50LnByZXZlbnRE
ZWZhdWx0KCk7CisgICAgICAgIGZpbGVTZWxlY3RlZChkcm9wRXZlbnQuZGF0YVRyYW5zZmVyLmZp
bGVzKTsKKyAgICB9KTsKKworICAgIHVwbG9hZC5maWxlcyA9IG51bGw7CisgICAgRWRpdGluZ0hp
c3Rvcnkuc2V0dXBFZGl0aW5nSGlzdG9yeSA9IHNldHVwRWRpdGluZ0hpc3Rvcnk7Cit9OworCitm
dW5jdGlvbiBlbXBoYXNpemVEcm9wKGV2ZW50KSB7CisgICAgZHJvcHpvbmUuc3R5bGUuYm9yZGVy
ID0gIjE1cHggI0Q4RDhEOCBkYXNoZWQiOworICAgIGRyb3BNZXNzYWdlLnN0eWxlLmNvbG9yID0g
IiNEOEQ4RDgiOworICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9CisKK2Z1bmN0aW9uIHVu
ZW1waGFzaXplRHJvcChldmVudCkgeworICAgIGRyb3B6b25lLnN0eWxlLmJvcmRlciA9ICIxNXB4
ICNFOEU4RTggZGFzaGVkIjsKKyAgICBkcm9wTWVzc2FnZS5zdHlsZS5jb2xvciA9ICIjRThFOEU4
IjsKKyAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworfQorCitmdW5jdGlvbiBmaWxlU2VsZWN0
ZWQoZmlsZXMpIHsKKyAgICBkcm9wem9uZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWVudGVy
IiwgZW1waGFzaXplRHJvcCk7CisgICAgZHJvcHpvbmUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91
c2VsZWF2ZSIsIHVuZW1waGFzaXplRHJvcCk7CisgICAgZHJvcHpvbmUucmVtb3ZlRXZlbnRMaXN0
ZW5lcigiZHJhZ2VudGVyIiwgZW1waGFzaXplRHJvcCk7CisgICAgZHJvcHpvbmUucmVtb3ZlRXZl
bnRMaXN0ZW5lcigiZHJhZ2xlYXZlIiwgdW5lbXBoYXNpemVEcm9wKTsKKworICAgIGNvbnNvbGUu
bG9nKGBTZWxlY3RlZCAke2ZpbGVzLmxlbmd0aH0gZmlsZShzKS5gKTsKKworICAgIGxldCByZWFk
ZXIgPSBuZXcgRmlsZVJlYWRlcigpOworICAgIHJlYWRlci5vbmxvYWQgPSBldmVudCA9PiBFZGl0
aW5nSGlzdG9yeS5zZXR1cEVkaXRpbmdIaXN0b3J5KGV2ZW50LnRhcmdldC5yZXN1bHQpOworICAg
IHJlYWRlci5yZWFkQXNUZXh0KGZpbGVzWzBdKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+CisgICAgPGRpdiBpZD0iZHJvcHpvbmUiPgorICAgICAgICA8ZGl2IGlkPSJkcm9wTWVzc2Fn
ZSI+RHJvcCBhbiBlZGl0aW5nIHJlY29yZCBoZXJlPC9kaXY+CisgICAgPC9kaXY+CisgICAgPGlu
cHV0IGlkPSJ1cGxvYWQiIG9uY2hhbmdlPWZpbGVTZWxlY3RlZChmaWxlcykgdHlwZT0iZmlsZSI+
PC9pbnB1dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1Rvb2xzL0VkaXRpbmdIaXN0
b3J5L0VkaXRpbmdIaXN0b3J5L1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0Vk
aXRpbmdIaXN0b3J5L1Rlc3RSdW5uZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMGRjZWQxYTcyM2Y3MDcyN2Zh
OTUxMGU2MzM2MDhiMGQzYWRiNWIxCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRWRpdGluZ0hp
c3RvcnkvRWRpdGluZ0hpc3RvcnkvVGVzdFJ1bm5lci5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+CisjaW1wb3J0IDxGb3VuZGF0aW9uL0Zv
dW5kYXRpb24uaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KKworQGludGVyZmFjZSBUZXN0
UnVubmVyIDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU1dp
bmRvdyAqd2luZG93OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBXS1dlYlZpZXcg
KndlYlZpZXc7CisKKy0gKHZvaWQpZXhwZWN0RXZlbnRzOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcg
KiwgTlNOdW1iZXIgKj4gKilleHBlY3RlZEV2ZW50Q291bnRzIGFmdGVyUGVyZm9ybWluZzooZGlz
cGF0Y2hfYmxvY2tfdClhY3Rpb247CistICh2b2lkKWxvYWRDYXB0dXJlVGVzdEhhcm5lc3M7Cist
ICh2b2lkKWxvYWRQbGF5YmFja1Rlc3RIYXJuZXNzV2l0aEpTT046KE5TU3RyaW5nICopanNvbjsK
Ky0gKHZvaWQpc2V0VGV4dE9iZnVzY2F0aW9uRW5hYmxlZDooQk9PTCllbmFibGVkOworLSAodm9p
ZCl0eXBlU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZzsKKy0gKHZvaWQpanVtcFRvVXBkYXRlSW5k
ZXg6KE5TSW50ZWdlcilpbmRleDsKKy0gKHZvaWQpZGVsZXRlQmFja3dhcmRzOihOU0ludGVnZXIp
dGltZXM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TU3RyaW5nICplZGl0aW5n
SGlzdG9yeUpTT047CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TU3RyaW5nICpi
b2R5RWxlbWVudFN1YnRyZWU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TU3Ry
aW5nICpib2R5VGV4dENvbnRlbnQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5T
SW50ZWdlciBudW1iZXJPZlVwZGF0ZXM7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1Rvb2xzL0VkaXRp
bmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Rlc3RSdW5uZXIubSBiL1Rvb2xzL0VkaXRpbmdIaXN0
b3J5L0VkaXRpbmdIaXN0b3J5L1Rlc3RSdW5uZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MzFiZjQ3ZGViNzcz
MjM2MWFhZmEwMDE3MTRlN2U0Mzk0MmVhOWVhCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRWRp
dGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvVGVzdFJ1bm5lci5tCkBAIC0wLDAgKzEsMTYwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UnVubmVyLmgi
CisKKyNpbXBvcnQgIlRlc3RVdGlsLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdBZGRpdGlvbnMuaCIK
KyNpbXBvcnQgPENhcmJvbi9DYXJib24uaD4KKworc3RhdGljIFdLVXNlclNjcmlwdCAqaW5qZWN0
ZWRNZXNzYWdlRXZlbnRIYW5kbGVyU2NyaXB0KE5TU3RyaW5nICpsaXN0ZW5lciwgTlNTdHJpbmcg
KmV2ZW50KQoreworICAgIE5TU3RyaW5nICpzb3VyY2UgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpAIiVALmFkZEV2ZW50TGlzdGVuZXIoJyVAJywgKCkgPT4geyIKKyAgICAgICAgInNldFRp
bWVvdXQoKCkgPT4gd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5ldmVudEhhbmRsZXIucG9zdE1lc3Nh
Z2UoJyVAJyksIDApOyIKKyAgICAgICAgIn0pOyIsIGxpc3RlbmVyLCBldmVudCwgZXZlbnRdOwor
ICAgIHJldHVybiBbW1dLVXNlclNjcmlwdCBhbGxvY10gaW5pdFdpdGhTb3VyY2U6c291cmNlIGlu
amVjdGlvblRpbWU6V0tVc2VyU2NyaXB0SW5qZWN0aW9uVGltZUF0RG9jdW1lbnRFbmQgZm9yTWFp
bkZyYW1lT25seTpZRVNdOworfQorCitAaW50ZXJmYWNlIFRlc3RSdW5uZXIgKCkgPFdLU2NyaXB0
TWVzc2FnZUhhbmRsZXI+CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBOU011dGFibGVEaWN0aW9u
YXJ5ICpwZW5kaW5nRXZlbnRDb3VudHM7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RS
dW5uZXIKKworLSAoaW5zdGFuY2V0eXBlKWluaXQKK3sKKyAgICBOU1dpbmRvdyAqd2luZG93ID0g
W1tOU1dpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDpOU01ha2VSZWN0KDAsIDAsIDgw
MCwgNjAwKSBzdHlsZU1hc2s6TlNXaW5kb3dTdHlsZU1hc2tCb3JkZXJsZXNzIGJhY2tpbmc6TlNC
YWNraW5nU3RvcmVCdWZmZXJlZCBkZWZlcjpOT107CisgICAgW3dpbmRvdyBzZXRGcmFtZU9yaWdp
bjpOU01ha2VQb2ludCgwLCAwKV07CisgICAgW3dpbmRvdyBzZXRJc1Zpc2libGU6WUVTXTsKKwor
ICAgIFdLV2ViVmlldyAqd2ViVmlldyA9IFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
Ok5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApXTsKKyAgICBbW3dpbmRvdyBjb250ZW50Vmlld10g
YWRkU3Vidmlldzp3ZWJWaWV3XTsKKyAgICBbd2luZG93IG1ha2VLZXlBbmRPcmRlckZyb250Ondl
YlZpZXddOworICAgIFt3ZWJWaWV3IGJlY29tZUZpcnN0UmVzcG9uZGVyXTsKKworICAgIF93aW5k
b3cgPSB3aW5kb3c7CisgICAgX3dlYlZpZXcgPSB3ZWJWaWV3OworICAgIF9wZW5kaW5nRXZlbnRD
b3VudHMgPSBuaWw7CisKKyAgICBXS1VzZXJDb250ZW50Q29udHJvbGxlciAqY29udGVudENvbnRy
b2xsZXIgPSB3ZWJWaWV3LmNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyOworICAg
IFtjb250ZW50Q29udHJvbGxlciBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpzZWxmIG5hbWU6QCJl
dmVudEhhbmRsZXIiXTsKKyAgICBbY29udGVudENvbnRyb2xsZXIgYWRkVXNlclNjcmlwdDppbmpl
Y3RlZE1lc3NhZ2VFdmVudEhhbmRsZXJTY3JpcHQoQCJkb2N1bWVudC5ib2R5IiwgQCJmb2N1cyIp
XTsKKyAgICBbY29udGVudENvbnRyb2xsZXIgYWRkVXNlclNjcmlwdDppbmplY3RlZE1lc3NhZ2VF
dmVudEhhbmRsZXJTY3JpcHQoQCJkb2N1bWVudCIsIEAiaW5wdXQiKV07CisgICAgW2NvbnRlbnRD
b250cm9sbGVyIGFkZFVzZXJTY3JpcHQ6aW5qZWN0ZWRNZXNzYWdlRXZlbnRIYW5kbGVyU2NyaXB0
KEAiZG9jdW1lbnQiLCBAInNlbGVjdGlvbmNoYW5nZSIpXTsKKworICAgIHJldHVybiBzZWxmOwor
fQorCistICh2b2lkKWRlbGV0ZUJhY2t3YXJkczooTlNJbnRlZ2VyKXRpbWVzCit7CisgICAgZm9y
IChOU0ludGVnZXIgaSA9IDA7IGkgPCB0aW1lczsgaSsrKSB7CisgICAgICAgIFtzZWxmIGV4cGVj
dEV2ZW50czpAeyBAImlucHV0IjogQDEsIEAic2VsZWN0aW9uY2hhbmdlIjogQDEgfSBhZnRlclBl
cmZvcm1pbmc6XigpIHsKKyAgICAgICAgICAgIFtfd2ViVmlldyBrZXlQcmVzc1dpdGhDaGFyYWN0
ZXJzOm5pbCBrZXlDb2RlOktleUNvZGVUeXBlRGVsZXRlQmFja3dhcmRdOworICAgICAgICB9XTsK
KyAgICB9Cit9CisKKy0gKHZvaWQpdHlwZVN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAg
ICBmb3IgKE5TSW50ZWdlciBjaGFySW5kZXggPSAwOyBjaGFySW5kZXggPCBzdHJpbmcubGVuZ3Ro
OyBjaGFySW5kZXgrKykgeworICAgICAgICBbc2VsZiBleHBlY3RFdmVudHM6QHsgQCJpbnB1dCI6
IEAxLCBAInNlbGVjdGlvbmNoYW5nZSI6IEAxIH0gYWZ0ZXJQZXJmb3JtaW5nOl4oKSB7CisgICAg
ICAgICAgICBbX3dlYlZpZXcgdHlwZUNoYXJhY3Rlcjpbc3RyaW5nIGNoYXJhY3RlckF0SW5kZXg6
Y2hhckluZGV4XV07CisgICAgICAgIH1dOworICAgIH0KK30KKworLSAoTlNTdHJpbmcgKilib2R5
RWxlbWVudFN1YnRyZWUKK3sKKyAgICByZXR1cm4gW193ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHRGcm9tU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRE9NVXRp
bC5zdWJ0cmVlQXNTdHJpbmcoZG9jdW1lbnQuYm9keSkiXV07Cit9CisKKy0gKE5TU3RyaW5nICop
Ym9keVRleHRDb250ZW50Cit7CisgICAgcmV0dXJuIFtfd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0RnJvbVN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImRvY3Vt
ZW50LmJvZHkudGV4dENvbnRlbnQiXV07Cit9CisKKy0gKE5TU3RyaW5nICopZWRpdGluZ0hpc3Rv
cnlKU09OCit7CisgICAgcmV0dXJuIFtfd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0RnJvbVN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkVkaXRpbmdIaXN0b3J5
LmdldEVkaXRpbmdIaXN0b3J5QXNKU09OU3RyaW5nKGZhbHNlKSJdXTsKK30KKworLSAodm9pZCls
b2FkUGxheWJhY2tUZXN0SGFybmVzc1dpdGhKU09OOihOU1N0cmluZyAqKWpzb24KK3sKKyAgICBb
X3dlYlZpZXcgbG9hZFBhZ2VGcm9tQnVuZGxlTmFtZWQ6QCJQbGF5YmFja0hhcm5lc3MiXTsKKyAg
ICB3YWl0VW50aWwoQ09ORElUSU9OX0JMT0NLKFtbX3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdEZyb21TdHJpbmc6QCIhIXdpbmRvdy5FZGl0aW5nSGlzdG9yeSAmJiAhIUVkaXRp
bmdIaXN0b3J5LnNldHVwRWRpdGluZ0hpc3RvcnkiXSBib29sVmFsdWVdKSk7CisKKyAgICBqc29u
ID0gW1tqc29uIHN0cmluZ0J5UmVwbGFjaW5nT2NjdXJyZW5jZXNPZlN0cmluZzpAIlxcIiB3aXRo
U3RyaW5nOkAiXFxcXCJdIHN0cmluZ0J5UmVwbGFjaW5nT2NjdXJyZW5jZXNPZlN0cmluZzpAImAi
IHdpdGhTdHJpbmc6QCJcXGAiXTsKKyAgICBbX3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdEZyb21TdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFZGl0aW5nSGlz
dG9yeS5zZXR1cEVkaXRpbmdIaXN0b3J5KGAlQGAsIGZhbHNlKSIsIGpzb25dXTsKK30KKworLSAo
TlNJbnRlZ2VyKW51bWJlck9mVXBkYXRlcyB7CisgICAgcmV0dXJuIFtbX3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6QCJFZGl0aW5nSGlzdG9yeS5jb250ZXh0
LnVwZGF0ZXMoKS5sZW5ndGgiXSBpbnRlZ2VyVmFsdWVdOworfQorCistICh2b2lkKWp1bXBUb1Vw
ZGF0ZUluZGV4OihOU0ludGVnZXIpaW5kZXgKK3sKKyAgICBbX3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJF
ZGl0aW5nSGlzdG9yeS5jb250ZXh0Lmp1bXBUbygldHUpIiwgaW5kZXhdXTsKK30KKworLSAodm9p
ZClleHBlY3RFdmVudHM6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBOU051bWJlciAqPiAqKWV4
cGVjdGVkRXZlbnRDb3VudHMgYWZ0ZXJQZXJmb3JtaW5nOihkaXNwYXRjaF9ibG9ja190KWFjdGlv
bgoreworICAgIF9wZW5kaW5nRXZlbnRDb3VudHMgPSBbZXhwZWN0ZWRFdmVudENvdW50cyBtdXRh
YmxlQ29weV07CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwg
YWN0aW9uKTsKKyAgICB3YWl0VW50aWwoQ09ORElUSU9OX0JMT0NLKHNlbGYuaXNEb25lV2FpdGlu
Z0ZvclBlbmRpbmdFdmVudHMpKTsKKyAgICBfcGVuZGluZ0V2ZW50Q291bnRzID0gbmlsOworfQor
CistICh2b2lkKWxvYWRDYXB0dXJlVGVzdEhhcm5lc3MKK3sKKyAgICBbc2VsZiBleHBlY3RFdmVu
dHM6QHsgQCJmb2N1cyIgOiBAMSB9IGFmdGVyUGVyZm9ybWluZzpeKCkgeworICAgICAgICBbX3dl
YlZpZXcgbG9hZFBhZ2VGcm9tQnVuZGxlTmFtZWQ6QCJDYXB0dXJlSGFybmVzcyJdOworICAgIH1d
OworfQorCistICh2b2lkKXNldFRleHRPYmZ1c2NhdGlvbkVuYWJsZWQ6KEJPT0wpZW5hYmxlZAor
eworICAgIFtfd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzpb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkVkaXRpbmdIaXN0b3J5Lk9iZnVzY2F0b3Iuc2hh
cmVkKCkuZW5hYmxlZCA9ICVzIiwgZW5hYmxlZCA/ICJ0cnVlIiA6ICJmYWxzZSJdXTsKK30KKwor
LSAoQk9PTClpc0RvbmVXYWl0aW5nRm9yUGVuZGluZ0V2ZW50cworeworICAgIE5TSW50ZWdlciBu
dW1iZXJPZlBlbmRpbmdFdmVudHMgPSAwOworICAgIGZvciAoTlNOdW1iZXIgKmNvdW50IGluIF9w
ZW5kaW5nRXZlbnRDb3VudHMuYWxsVmFsdWVzKQorICAgICAgICBudW1iZXJPZlBlbmRpbmdFdmVu
dHMgKz0gW2NvdW50IGludGVnZXJWYWx1ZV07CisgICAgcmV0dXJuIF9wZW5kaW5nRXZlbnRDb3Vu
dHMgJiYgIW51bWJlck9mUGVuZGluZ0V2ZW50czsKK30KKworLSAodm9pZCl1c2VyQ29udGVudENv
bnRyb2xsZXI6KFdLVXNlckNvbnRlbnRDb250cm9sbGVyICopdXNlckNvbnRlbnRDb250cm9sbGVy
IGRpZFJlY2VpdmVTY3JpcHRNZXNzYWdlOihXS1NjcmlwdE1lc3NhZ2UgKiltZXNzYWdlCit7Cisg
ICAgaWYgKFttZXNzYWdlLm5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiZXZlbnRIYW5kbGVyIl0gJiYg
X3BlbmRpbmdFdmVudENvdW50cykgeworICAgICAgICBOU1N0cmluZyAqZXZlbnRUeXBlID0gbWVz
c2FnZS5ib2R5OworICAgICAgICBfcGVuZGluZ0V2ZW50Q291bnRzW2V2ZW50VHlwZV0gPSBAKE1B
WCgwLCBbX3BlbmRpbmdFdmVudENvdW50c1tldmVudFR5cGVdIGludGVnZXJWYWx1ZV0gLSAxKSk7
CisgICAgfQorfQorCitAZW5kCmRpZmYgLS1naXQgYS9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0
aW5nSGlzdG9yeS9UZXN0VXRpbC5oIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3Rv
cnkvVGVzdFV0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZDRjMzEzZmQxZjdkMTFiMzJiZTY3ODFkYTRiYmE0
NmI4NWRlZmE0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGlu
Z0hpc3RvcnkvVGVzdFV0aWwuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisvLyBTb21lIG5h
bWVkIGtleSBjb2RlcywgbWFpbmx5IGZvciBjb252ZW5pZW5jZS4KK2VudW0gS2V5Q29kZVR5cGUg
eworICAgIEtleUNvZGVUeXBlRGVsZXRlQmFja3dhcmQgPSAweDMzLAorICAgIEtleUNvZGVUeXBl
TGVmdEFycm93ID0gMHg3QiwKKyAgICBLZXlDb2RlVHlwZVJpZ2h0QXJyb3cgPSAweDdDCit9Owor
CisvKioKKyAqIFJldHVybiBZRVMgd2hlbiB0aGUgY29uZGl0aW9uIGlzIGRvbmUgYW5kIHRoZSBw
cm9ncmFtIHNob3VsZCBzdG9wIHNwaW5uaW5nLgorICovCit0eXBlZGVmIEJPT0wgKF5Db25kaXRp
b25CbG9jaykoKTsKKyNkZWZpbmUgQ09ORElUSU9OX0JMT0NLKGV4cHIpIF5CT09MKCkgeyByZXR1
cm4gZXhwcjsgfQorCisvKioKKyAqIFNwaW5zIGEgcnVubG9vcCB1bnRpbCB0aGUgZ2l2ZW4gY29u
ZGl0aW9uIGJsb2NrIGV2YWx1YXRlcyB0byBZRVMuIElmIHRoZSBnaXZlbiB0aW1lb3V0IGludGVy
dmFsIGhhcyBlbGFwc2VkLCBhbmQgdGhlIGNvbmRpdGlvbiBpcyBzdGlsbCB1bnNhdGlzZmllZCwK
KyAqIHN0b3Agc3Bpbm5pbmcgYW5kIHJldHVybiBOTy4gT3RoZXJ3aXNlLCByZXR1cm4gWUVTLgor
ICovCitCT09MIHdhaXRVbnRpbFdpdGhUaW1lb3V0KENvbmRpdGlvbkJsb2NrLCBOU1RpbWVJbnRl
cnZhbCk7CitCT09MIHdhaXRVbnRpbChDb25kaXRpb25CbG9jayk7CmRpZmYgLS1naXQgYS9Ub29s
cy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9UZXN0VXRpbC5tIGIvVG9vbHMvRWRpdGlu
Z0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvVGVzdFV0aWwubQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZDkzZTZkNjhh
M2E1YjAwODRjNjdjNzAyM2Q1MGY4Y2I2NGEyNTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
RWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvVGVzdFV0aWwubQpAQCAtMCwwICsxLDQ0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0VXRpbC5oIgor
Citjb25zdCBOU1RpbWVJbnRlcnZhbCBEZWZhdWx0VGltZW91dEludGVydmFsID0gMTA7CisKK0JP
T0wgd2FpdFVudGlsV2l0aFRpbWVvdXQoQ29uZGl0aW9uQmxvY2sgY29uZGl0aW9uLCBOU1RpbWVJ
bnRlcnZhbCB0aW1lb3V0KQoreworICAgIE5TVGltZUludGVydmFsIHN0YXJ0VGltZSA9IFtOU0Rh
dGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXTsKKyAgICB3aGlsZSAoW1tOU1J1bkxv
b3AgY3VycmVudFJ1bkxvb3BdIHJ1bk1vZGU6TlNEZWZhdWx0UnVuTG9vcE1vZGUgYmVmb3JlRGF0
ZTpbTlNEYXRlIGRpc3RhbnRQYXN0XV0gJiYgW05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVy
ZW5jZURhdGVdIC0gc3RhcnRUaW1lIDwgdGltZW91dCkgeworICAgICAgICBpZiAoY29uZGl0aW9u
KCkpCisgICAgICAgICAgICByZXR1cm4gWUVTOworICAgIH0KKyAgICByZXR1cm4gTk87Cit9CisK
K0JPT0wgd2FpdFVudGlsKENvbmRpdGlvbkJsb2NrIGNvbmRpdGlvbikKK3sKKyAgICByZXR1cm4g
d2FpdFVudGlsV2l0aFRpbWVvdXQoY29uZGl0aW9uLCBEZWZhdWx0VGltZW91dEludGVydmFsKTsK
K30KZGlmZiAtLWdpdCBhL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1dLV2Vi
Vmlld0FkZGl0aW9ucy5oIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvV0tX
ZWJWaWV3QWRkaXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGZkMzgzMzBkYjNmYWUyYjQ1YTcyYjRmNjNj
YTY4ZTc3YWZmNzdjNQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0Vk
aXRpbmdIaXN0b3J5L1dLV2ViVmlld0FkZGl0aW9ucy5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CisKK05TX0FTU1VNRV9OT05OVUxMX0JF
R0lOCisKK0BpbnRlcmZhY2UgV0tXZWJWaWV3IChFZGl0aW5nSGlzdG9yeVRlc3QpCisKKy0gKHZv
aWQpbG9hZFBhZ2VGcm9tQnVuZGxlTmFtZWQ6KE5TU3RyaW5nICopbmFtZTsKKy0gKHZvaWQpdHlw
ZUNoYXJhY3RlcjooY2hhciljaGFyYWN0ZXI7CistICh2b2lkKWtleVByZXNzV2l0aENoYXJhY3Rl
cnM6KG51bGxhYmxlIE5TU3RyaW5nICopY2hhcmFjdGVycyBrZXlDb2RlOihjaGFyKWtleUNvZGU7
CistIChudWxsYWJsZSBOU1N0cmluZyAqKXN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9t
U3RyaW5nOihOU1N0cmluZyAqKXNjcmlwdDsKKworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9F
TkQKZGlmZiAtLWdpdCBhL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1dLV2Vi
Vmlld0FkZGl0aW9ucy5tIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvV0tX
ZWJWaWV3QWRkaXRpb25zLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDk3OTMwZGNkZDZjMTJkOTdkMDk3MWFhM2Y5
MTI1ZDA1NjA4MTg1YwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0Vk
aXRpbmdIaXN0b3J5L1dLV2ViVmlld0FkZGl0aW9ucy5tCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldLV2ViVmlld0FkZGl0aW9ucy5o
IgorCisjaW1wb3J0ICJUZXN0VXRpbC5oIgorCisjaW1wb3J0IDxDYXJib24vQ2FyYm9uLmg+CisK
K0BpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKEVkaXRpbmdIaXN0b3J5VGVzdCkKKworLSAodm9p
ZClsb2FkUGFnZUZyb21CdW5kbGVOYW1lZDooTlNTdHJpbmcgKiluYW1lCit7CisgICAgTlNVUkwg
KnBhdGhUb1BhZ2UgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOm5hbWUg
d2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpuaWxdOworICAgIFtzZWxmIGxvYWRS
ZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6cGF0aFRvUGFnZV1dOworfQorCist
ICh2b2lkKXR5cGVDaGFyYWN0ZXI6KGNoYXIpY2hhcmFjdGVyCit7CisgICAgW3NlbGYga2V5UHJl
c3NXaXRoQ2hhcmFjdGVyczpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVjIiwgY2hhcmFj
dGVyXSBrZXlDb2RlOmNoYXJhY3Rlcl07Cit9CisKKy0gKHZvaWQpa2V5UHJlc3NXaXRoQ2hhcmFj
dGVyczoobnVsbGFibGUgTlNTdHJpbmcgKiljaGFyYWN0ZXJzIGtleUNvZGU6KGNoYXIpa2V5Q29k
ZQoreworICAgIE5TRXZlbnRUeXBlIGtleURvd25FdmVudFR5cGUgPSBOU0V2ZW50VHlwZUtleURv
d247CisgICAgTlNFdmVudFR5cGUga2V5VXBFdmVudFR5cGUgPSBOU0V2ZW50VHlwZUtleVVwOwor
ICAgIFtzZWxmIGtleURvd246W05TRXZlbnQga2V5RXZlbnRXaXRoVHlwZTprZXlEb3duRXZlbnRU
eXBlIGxvY2F0aW9uOk5TWmVyb1BvaW50IG1vZGlmaWVyRmxhZ3M6MCB0aW1lc3RhbXA6R2V0Q3Vy
cmVudEV2ZW50VGltZSgpIHdpbmRvd051bWJlcjpzZWxmLndpbmRvdy53aW5kb3dOdW1iZXIgY29u
dGV4dDpuaWwgY2hhcmFjdGVyczpjaGFyYWN0ZXJzIGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVy
czpjaGFyYWN0ZXJzIGlzQVJlcGVhdDpOTyBrZXlDb2RlOmtleUNvZGVdXTsKKyAgICBbc2VsZiBr
ZXlVcDpbTlNFdmVudCBrZXlFdmVudFdpdGhUeXBlOmtleVVwRXZlbnRUeXBlIGxvY2F0aW9uOk5T
WmVyb1BvaW50IG1vZGlmaWVyRmxhZ3M6MCB0aW1lc3RhbXA6R2V0Q3VycmVudEV2ZW50VGltZSgp
IHdpbmRvd051bWJlcjpzZWxmLndpbmRvdy53aW5kb3dOdW1iZXIgY29udGV4dDpuaWwgY2hhcmFj
dGVyczpjaGFyYWN0ZXJzIGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyczpjaGFyYWN0ZXJzIGlz
QVJlcGVhdDpOTyBrZXlDb2RlOmtleUNvZGVdXTsKK30KKworLSAobnVsbGFibGUgTlNTdHJpbmcg
KilzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzooTlNTdHJpbmcgKilzY3Jp
cHQKK3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZUV2YWx1YXRpbmdKYXZhU2NyaXB0ID0gZmFsc2U7
CisgICAgX19ibG9jayBOU1N0cmluZyAqcmV0dXJuUmVzdWx0ID0gbmlsOworICAgIFtzZWxmIGV2
YWx1YXRlSmF2YVNjcmlwdDpzY3JpcHQgY29tcGxldGlvbkhhbmRsZXI6XihpZCByZXR1cm5WYWx1
ZSwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgTlNM
b2coQCJFcnJvciBldmFsdWF0aW5nIEphdmFTY3JpcHQ6ICVAIiwgZXJyb3IpOworCisgICAgICAg
IHJldHVyblJlc3VsdCA9IGVycm9yIHx8ICFyZXR1cm5WYWx1ZSA/IG5pbCA6IFtOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiJUAiLCByZXR1cm5WYWx1ZV07CisgICAgICAgIGRvbmVFdmFsdWF0
aW5nSmF2YVNjcmlwdCA9IHRydWU7CisgICAgfV07CisgICAgd2FpdFVudGlsKENPTkRJVElPTl9C
TE9DSyhkb25lRXZhbHVhdGluZ0phdmFTY3JpcHQpKTsKKyAgICByZXR1cm4gcmV0dXJuUmVzdWx0
OworfQorCitAZW5kCmRpZmYgLS1naXQgYS9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlz
dG9yeS9tYWluLm0gYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9tYWluLm0K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNTdlODQ4NTBhOWM0MDhlZGJlMGM1NDAxZmNiNmQ3M2FmM2Q2OGU4MwotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L21haW4u
bQpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8QXBwS2l0L0FwcEtpdC5o
PgorI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KKworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNo
YXIgKiBhcmd2W10pCit7CisgICAgW1tOU1dvcmtzcGFjZSBzaGFyZWRXb3Jrc3BhY2VdIG9wZW5G
aWxlOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gcGF0aEZvclJlc291cmNlOkAiUGxheWJhY2tIYXJu
ZXNzIiBvZlR5cGU6QCJodG1sIl0gd2l0aEFwcGxpY2F0aW9uOkAiU2FmYXJpIl07CisKKyAgICBy
ZXR1cm4gTlNBcHBsaWNhdGlvbk1haW4oYXJnYywgYXJndik7Cit9CmRpZmYgLS1naXQgYS9Ub29s
cy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeVRlc3RzL0luZm8ucGxpc3QgYi9Ub29scy9F
ZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeVRlc3RzL0luZm8ucGxpc3QKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NmM2YzIzYzQzYWRjODg2MjFjZTNhYmZiZDE1ODVjODc5MmJkMTY1YwotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5VGVzdHMvSW5mby5wbGlzdApA
QCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pgor
PCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0
cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Cis8cGxpc3QgdmVy
c2lvbj0iMS4wIj4KKzxkaWN0PgorCTxrZXk+Q0ZCdW5kbGVEZXZlbG9wbWVudFJlZ2lvbjwva2V5
PgorCTxzdHJpbmc+ZW48L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlRXhlY3V0YWJsZTwva2V5Pgor
CTxzdHJpbmc+JChFWEVDVVRBQkxFX05BTUUpPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZUlkZW50
aWZpZXI8L2tleT4KKwk8c3RyaW5nPiQoUFJPRFVDVF9CVU5ETEVfSURFTlRJRklFUik8L3N0cmlu
Zz4KKwk8a2V5PkNGQnVuZGxlSW5mb0RpY3Rpb25hcnlWZXJzaW9uPC9rZXk+CisJPHN0cmluZz42
LjA8L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlTmFtZTwva2V5PgorCTxzdHJpbmc+JChQUk9EVUNU
X05BTUUpPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZVBhY2thZ2VUeXBlPC9rZXk+CisJPHN0cmlu
Zz5CTkRMPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZzwva2V5Pgor
CTxzdHJpbmc+MS4wPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZVZlcnNpb248L2tleT4KKwk8c3Ry
aW5nPjE8L3N0cmluZz4KKzwvZGljdD4KKzwvcGxpc3Q+CmRpZmYgLS1naXQgYS9Ub29scy9FZGl0
aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeVRlc3RzL1Jld2luZEFuZFBsYXliYWNrVGVzdHMubSBi
L1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5VGVzdHMvUmV3aW5kQW5kUGxheWJh
Y2tUZXN0cy5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJjYmY0OGE3ZjZjMWJlMjk5ZmYyYmM2MTkzMjlhMWUxYTQy
ZDBkZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlz
dG9yeVRlc3RzL1Jld2luZEFuZFBsYXliYWNrVGVzdHMubQpAQCAtMCwwICsxLDEwOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbXBvcnQgIlRlc3RSdW5uZXIuaCIKKyNpbXBvcnQgIlRlc3RVdGlsLmgiCisj
aW1wb3J0ICJXS1dlYlZpZXdBZGRpdGlvbnMuaCIKKyNpbXBvcnQgPFhDVGVzdC9YQ1Rlc3QuaD4K
KworQGludGVyZmFjZSBSZXdpbmRBbmRQbGF5YmFja1Rlc3RzIDogWENUZXN0Q2FzZQorCitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBSZXdpbmRBbmRQbGF5YmFja1Rlc3RzIHsKKyAgICBUZXN0UnVu
bmVyICp0ZXN0UnVubmVyOworfQorCistICh2b2lkKXNldFVwCit7CisgICAgdGVzdFJ1bm5lciA9
IFtbVGVzdFJ1bm5lciBhbGxvY10gaW5pdF07CisgICAgW3Rlc3RSdW5uZXIgbG9hZENhcHR1cmVU
ZXN0SGFybmVzc107CisgICAgW3Rlc3RSdW5uZXIgc2V0VGV4dE9iZnVzY2F0aW9uRW5hYmxlZDpO
T107Cit9CisKKy0gKHZvaWQpdGVhckRvd24KK3sKKyAgICB0ZXN0UnVubmVyID0gbmlsOworfQor
CistICh2b2lkKXRlc3RUeXBpbmdTaW5nbGVMaW5lT2ZUZXh0Cit7CisgICAgW3Rlc3RSdW5uZXIg
dHlwZVN0cmluZzpAImhlbGxvIHdvcmxkIl07CisgICAgTlNTdHJpbmcgKm9yaWdpbmFsU3VidHJl
ZSA9IHRlc3RSdW5uZXIuYm9keUVsZW1lbnRTdWJ0cmVlOworCisgICAgW3NlbGYgcmV3aW5kQW5k
UGxheWJhY2tFZGl0aW5nSW5QbGF5YmFja1Rlc3RIYXJuZXNzXTsKKyAgICBYQ1RBc3NlcnRUcnVl
KFtzZWxmIG9yaWdpbmFsQm9keVN1YnRyZWU6b3JpZ2luYWxTdWJ0cmVlIGlzRXF1YWxUb0ZpbmFs
U3VidHJlZTp0ZXN0UnVubmVyLmJvZHlFbGVtZW50U3VidHJlZV0pOworICAgIFhDVEFzc2VydEVx
dWFsT2JqZWN0cyh0ZXN0UnVubmVyLmJvZHlUZXh0Q29udGVudCwgQCJoZWxsbyB3b3JsZCIpOwor
fQorCistICh2b2lkKXRlc3RUeXBpbmdNdWx0aXBsZUxpbmVzT2ZUZXh0Cit7CisgICAgW3Rlc3RS
dW5uZXIgdHlwZVN0cmluZzpAImZvbyJdOworICAgIFt0ZXN0UnVubmVyIHR5cGVTdHJpbmc6QCJc
biJdOworICAgIFt0ZXN0UnVubmVyIHR5cGVTdHJpbmc6QCJiYXIiXTsKKyAgICBOU1N0cmluZyAq
b3JpZ2luYWxTdWJ0cmVlID0gdGVzdFJ1bm5lci5ib2R5RWxlbWVudFN1YnRyZWU7CisKKyAgICBb
c2VsZiByZXdpbmRBbmRQbGF5YmFja0VkaXRpbmdJblBsYXliYWNrVGVzdEhhcm5lc3NdOworICAg
IFhDVEFzc2VydFRydWUoW3NlbGYgb3JpZ2luYWxCb2R5U3VidHJlZTpvcmlnaW5hbFN1YnRyZWUg
aXNFcXVhbFRvRmluYWxTdWJ0cmVlOnRlc3RSdW5uZXIuYm9keUVsZW1lbnRTdWJ0cmVlXSk7Cisg
ICAgWENUQXNzZXJ0RXF1YWxPYmplY3RzKHRlc3RSdW5uZXIuYm9keVRleHRDb250ZW50LCBAImZv
b2JhciIpOworfQorCistICh2b2lkKXRlc3RUeXBpbmdBbmREZWxldGluZ1RleHQKK3sKKyAgICBb
dGVzdFJ1bm5lciB0eXBlU3RyaW5nOkAiYXBwbGUiXTsKKyAgICBbdGVzdFJ1bm5lciBkZWxldGVC
YWNrd2FyZHM6M107CisKKyAgICBOU1N0cmluZyAqb3JpZ2luYWxTdWJ0cmVlID0gdGVzdFJ1bm5l
ci5ib2R5RWxlbWVudFN1YnRyZWU7CisKKyAgICBbc2VsZiByZXdpbmRBbmRQbGF5YmFja0VkaXRp
bmdJblBsYXliYWNrVGVzdEhhcm5lc3NdOworICAgIFhDVEFzc2VydFRydWUoW3NlbGYgb3JpZ2lu
YWxCb2R5U3VidHJlZTpvcmlnaW5hbFN1YnRyZWUgaXNFcXVhbFRvRmluYWxTdWJ0cmVlOnRlc3RS
dW5uZXIuYm9keUVsZW1lbnRTdWJ0cmVlXSk7CisgICAgWENUQXNzZXJ0RXF1YWxPYmplY3RzKHRl
c3RSdW5uZXIuYm9keVRleHRDb250ZW50LCBAImFwIik7Cit9CisKKy0gKHZvaWQpcmV3aW5kQW5k
UGxheWJhY2tFZGl0aW5nSW5QbGF5YmFja1Rlc3RIYXJuZXNzCit7CisgICAgLy8gVGhpcyBhc3N1
bWVzIHRoYXQgdGhlIHRlc3QgcnVubmVyIGhhcyBsb2FkZWQgdGhlIGNhcHR1cmUgdGVzdCBoYXJu
ZXNzLgorICAgIFt0ZXN0UnVubmVyIGxvYWRQbGF5YmFja1Rlc3RIYXJuZXNzV2l0aEpTT046dGVz
dFJ1bm5lci5lZGl0aW5nSGlzdG9yeUpTT05dOworCisgICAgLy8gUmV3aW5kIHRvIHRoZSB2ZXJ5
IGJlZ2lubmluZywgdGhlbiBwbGF5IGJhY2sgYWxsIGVkaXRpbmcgYWdhaW4uCisgICAgW3Rlc3RS
dW5uZXIganVtcFRvVXBkYXRlSW5kZXg6MF07CisgICAgW3Rlc3RSdW5uZXIganVtcFRvVXBkYXRl
SW5kZXg6dGVzdFJ1bm5lci5udW1iZXJPZlVwZGF0ZXNdOworfQorCistIChCT09MKW9yaWdpbmFs
Qm9keVN1YnRyZWU6KE5TU3RyaW5nICopb3JpZ2luYWxTdWJ0cmVlIGlzRXF1YWxUb0ZpbmFsU3Vi
dHJlZTooTlNTdHJpbmcgKilmaW5hbFN1YnRyZWUKK3sKKyAgICBpZiAoW29yaWdpbmFsU3VidHJl
ZSBpc0VxdWFsVG9TdHJpbmc6ZmluYWxTdWJ0cmVlXSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKwor
ICAgIE5TTG9nKEAiPj4+Pj4+PiIpOworICAgIE5TTG9nKEAiVGhlIG9yaWdpbmFsIHN1YnRyZWUg
aXM6XG4lQCIsIG9yaWdpbmFsU3VidHJlZSk7CisgICAgTlNMb2coQCI9PT09PT09Iik7CisgICAg
TlNMb2coQCJUaGUgZmluYWwgc3VidHJlZSBpczpcbiVAIiwgZmluYWxTdWJ0cmVlKTsKKyAgICBO
U0xvZyhAIjw8PDw8PDwiKTsKKworICAgIHJldHVybiBOTzsKK30KKworQGVuZApkaWZmIC0tZ2l0
IGEvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnlVdGlsLmpzIGIvVG9vbHMvRWRp
dGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnlVdGlsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0NTg3MGIzZDBh
OWIyMDY1YmRhZWRhOWFjOTJjOTQ2ZjczZjU5NjAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9F
ZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeVV0aWwuanMKQEAgLTAsMCArMSw2OTMgQEAKKygo
KSA9PiB7CisgICAgY2xhc3MgT2JmdXNjYXRvciB7CisgICAgICAgIGNvbnN0cnVjdG9yKCkgewor
ICAgICAgICAgICAgdGhpcy5fc2NyYW1ibGVkTG93ZXJjYXNlTGV0dGVycyA9IHRoaXMuX3NjcmFt
YmxlKEFycmF5KDI2KS5maWxsKCkubWFwKChfLCBpKSA9PiA5NyArIGkpKTsKKyAgICAgICAgICAg
IHRoaXMuX3NjcmFtYmxlZFVwcGVyY2FzZUxldHRlcnMgPSB0aGlzLl9zY3JhbWJsZShBcnJheSgy
NikuZmlsbCgpLm1hcCgoXywgaSkgPT4gNjUgKyBpKSk7CisgICAgICAgICAgICB0aGlzLl9zY3Jh
bWJsZWROdW1iZXJzID0gdGhpcy5fc2NyYW1ibGUoQXJyYXkoMTApLmZpbGwoKS5tYXAoKF8sIGkp
ID0+IDQ4ICsgaSkpOworICAgICAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2U7CisgICAgICAg
IH0KKworICAgICAgICBfc2NyYW1ibGUoYXJyYXkpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSBhcnJheS5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7CisgICAgICAgICAgICAgICAgbGV0IGog
PSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoaSArIDEpKTsKKyAgICAgICAgICAgICAgICBs
ZXQgdGVtcCA9IGFycmF5W2ldOworICAgICAgICAgICAgICAgIGFycmF5W2ldID0gYXJyYXlbal07
CisgICAgICAgICAgICAgICAgYXJyYXlbal0gPSB0ZW1wOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIGFycmF5OworICAgICAgICB9CisKKyAgICAgICAgYXBwbHlUb1RleHQodGV4
dCkgeworICAgICAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgIXRleHQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRleHQ7CisKKyAgICAgICAgICAgIGxldCByZXN1bHQgPSAiIjsKKyAgICAg
ICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0ZXh0Lmxlbmd0aDsgaW5kZXgrKykg
eworICAgICAgICAgICAgICAgIGxldCBjb2RlID0gdGV4dC5jaGFyQ29kZUF0KGluZGV4KTsKKyAg
ICAgICAgICAgICAgICBsZXQgbnVtYmVySW5kZXggPSB0aGlzLl9zY3JhbWJlZE51bWJlckluZGV4
Rm9yQ29kZShjb2RlKTsKKyAgICAgICAgICAgICAgICBsZXQgbG93ZXJjYXNlSW5kZXggPSB0aGlz
Ll9zY3JhbWJlZExvd2VyY2FzZUluZGV4Rm9yQ29kZShjb2RlKTsKKyAgICAgICAgICAgICAgICBs
ZXQgdXBwZXJjYXNlSW5kZXggPSB0aGlzLl9zY3JhbWJlZFVwcGVyY2FzZUluZGV4Rm9yQ29kZShj
b2RlKTsKKworICAgICAgICAgICAgICAgIGlmIChudW1iZXJJbmRleCAhPSBudWxsKQorICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9zY3JhbWJs
ZWROdW1iZXJzW251bWJlckluZGV4XSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobG93ZXJj
YXNlSW5kZXggIT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5m
cm9tQ2hhckNvZGUodGhpcy5fc2NyYW1ibGVkTG93ZXJjYXNlTGV0dGVyc1tsb3dlcmNhc2VJbmRl
eF0pOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVwcGVyY2FzZUluZGV4ICE9IG51bGwpCisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX3Nj
cmFtYmxlZFVwcGVyY2FzZUxldHRlcnNbdXBwZXJjYXNlSW5kZXhdKTsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB0ZXh0LmNoYXJBdChpbmRleCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisK
KyAgICAgICAgYXBwbHlUb0ZpbGVuYW1lKGZpbGVuYW1lKSB7CisgICAgICAgICAgICBpZiAoIXRo
aXMuZW5hYmxlZCB8fCAhZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVuYW1l
OworCisgICAgICAgICAgICBsZXQgY29tcG9uZW50cyA9IGZpbGVuYW1lLnNwbGl0KCIuIik7Cisg
ICAgICAgICAgICByZXR1cm4gY29tcG9uZW50cy5tYXAoKGNvbXBvbmVudCwgaW5kZXgpID0+IHsK
KyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gY29tcG9uZW50cy5sZW5ndGggLSAxKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gY29tcG9uZW50OworCisgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuYXBwbHlUb1RleHQoY29tcG9uZW50KTsKKyAgICAgICAgICAgIH0pLmpvaW4oIi4i
KTsKKyAgICAgICAgfQorCisgICAgICAgIF9zY3JhbWJlZE51bWJlckluZGV4Rm9yQ29kZShjb2Rl
KSB7CisgICAgICAgICAgICByZXR1cm4gNDggPD0gY29kZSAmJiBjb2RlIDw9IDU3ID8gY29kZSAt
IDQ4IDogbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIF9zY3JhbWJlZExvd2VyY2FzZUluZGV4
Rm9yQ29kZShjb2RlKSB7CisgICAgICAgICAgICByZXR1cm4gOTcgPD0gY29kZSAmJiBjb2RlIDw9
IDEyMiA/IGNvZGUgLSA5NyA6IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBfc2NyYW1iZWRV
cHBlcmNhc2VJbmRleEZvckNvZGUoY29kZSkgeworICAgICAgICAgICAgcmV0dXJuIDY1IDw9IGNv
ZGUgJiYgY29kZSA8PSA5MCA/IGNvZGUgLSA2NSA6IG51bGw7CisgICAgICAgIH0KKworICAgICAg
ICBzdGF0aWMgc2hhcmVkKCkgeworICAgICAgICAgICAgaWYgKCFPYmZ1c2NhdG9yLl9zaGFyZWRJ
bnN0YW5jZSkKKyAgICAgICAgICAgICAgICBPYmZ1c2NhdG9yLl9zaGFyZWRJbnN0YW5jZSA9IG5l
dyBPYmZ1c2NhdG9yKCk7CisgICAgICAgICAgICByZXR1cm4gT2JmdXNjYXRvci5fc2hhcmVkSW5z
dGFuY2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBlbGVtZW50RnJvbU1hcmtk
b3duKGh0bWwpIHsKKyAgICAgICAgbGV0IHRlbXBvcmFyeURpdiA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOworICAgICAgICB0ZW1wb3JhcnlEaXYuaW5uZXJIVE1MID0gaHRtbDsKKyAg
ICAgICAgcmV0dXJuIHRlbXBvcmFyeURpdi5jaGlsZHJlblswXTsKKyAgICB9CisKKyAgICBjbGFz
cyBHbG9iYWxOb2RlTWFwIHsKKyAgICAgICAgY29uc3RydWN0b3Iobm9kZXNCeUdVSUQpIHsKKyAg
ICAgICAgICAgIHRoaXMuX25vZGVzQnlHVUlEID0gbm9kZXNCeUdVSUQgPyBub2Rlc0J5R1VJRCA6
IG5ldyBNYXAoKTsKKyAgICAgICAgICAgIHRoaXMuX2d1aWRzQnlOb2RlID0gbmV3IE1hcCgpOwor
ICAgICAgICAgICAgdGhpcy5fY3VycmVudEdVSUQgPSAwOworICAgICAgICAgICAgZm9yIChsZXQg
W2d1aWQsIG5vZGVdIG9mIHRoaXMuX25vZGVzQnlHVUlEKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fZ3VpZHNCeU5vZGUuc2V0KG5vZGUsIGd1aWQpOworICAgICAgICAgICAgICAgIHRoaXMuX2N1
cnJlbnRHVUlEID0gTWF0aC5tYXgodGhpcy5fY3VycmVudEdVSUQsIGd1aWQpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdGhpcy5fY3VycmVudEdVSUQrKzsKKyAgICAgICAgfQorCisgICAg
ICAgIG5vZGVzRm9yR1VJRHMoZ3VpZHMpIHsKKyAgICAgICAgICAgIGlmICghZ3VpZHMubWFwKQor
ICAgICAgICAgICAgICAgIGd1aWRzID0gQXJyYXkuZnJvbShndWlkcyk7CisgICAgICAgICAgICBy
ZXR1cm4gZ3VpZHMubWFwKGd1aWQgPT4gdGhpcy5ub2RlRm9yR1VJRChndWlkKSk7CisgICAgICAg
IH0KKworICAgICAgICBndWlkc0Zvck5vZGVzKG5vZGVzKSB7CisgICAgICAgICAgICBpZiAoIW5v
ZGVzLm1hcCkKKyAgICAgICAgICAgICAgICBub2RlcyA9IEFycmF5LmZyb20obm9kZXMpOworICAg
ICAgICAgICAgcmV0dXJuIG5vZGVzLm1hcChub2RlID0+IHRoaXMuZ3VpZEZvck5vZGUobm9kZSkp
OworICAgICAgICB9CisKKyAgICAgICAgbm9kZUZvckdVSUQoZ3VpZCkgeworICAgICAgICAgICAg
aWYgKCFndWlkKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fbm9kZXNCeUdVSUQuZ2V0KGd1aWQpOworICAgICAgICB9CisKKyAgICAgICAg
Z3VpZEZvck5vZGUobm9kZSkgeworICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAg
ICAgIHJldHVybiAwOworCisgICAgICAgICAgICBpZiAodGhpcy5oYXNHVUlERm9yTm9kZShub2Rl
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ3VpZHNCeU5vZGUuZ2V0KG5vZGUpOwor
CisgICAgICAgICAgICBjb25zdCBndWlkID0gdGhpcy5fY3VycmVudEdVSUQ7CisgICAgICAgICAg
ICB0aGlzLl9ndWlkc0J5Tm9kZS5zZXQobm9kZSwgZ3VpZCk7CisgICAgICAgICAgICB0aGlzLl9u
b2Rlc0J5R1VJRC5zZXQoZ3VpZCwgbm9kZSk7CisgICAgICAgICAgICB0aGlzLl9jdXJyZW50R1VJ
RCsrOworICAgICAgICAgICAgcmV0dXJuIGd1aWQ7CisgICAgICAgIH0KKworICAgICAgICBoYXNH
VUlERm9yTm9kZShub2RlKSB7CisgICAgICAgICAgICByZXR1cm4gISF0aGlzLl9ndWlkc0J5Tm9k
ZS5nZXQobm9kZSk7CisgICAgICAgIH0KKworICAgICAgICBub2RlcygpIHsKKyAgICAgICAgICAg
IHJldHVybiBBcnJheS5mcm9tKHRoaXMuX25vZGVzQnlHVUlELnZhbHVlcygpKTsKKyAgICAgICAg
fQorCisgICAgICAgIHRvT2JqZWN0KCkgeworICAgICAgICAgICAgbGV0IG5vZGVzQW5kR1VJRHNU
b1Byb2Nlc3MgPSBbXSwgZ3VpZHNUb1Byb2Nlc3MgPSBuZXcgU2V0KCk7CisgICAgICAgICAgICBs
ZXQgZ3VpZHNCeU5vZGVJdGVyYXRvciA9IHRoaXMuX2d1aWRzQnlOb2RlLmVudHJpZXMoKTsKKyAg
ICAgICAgICAgIGZvciAobGV0IGVudHJ5ID0gZ3VpZHNCeU5vZGVJdGVyYXRvci5uZXh0KCk7ICFl
bnRyeS5kb25lOyBlbnRyeSA9IGd1aWRzQnlOb2RlSXRlcmF0b3IubmV4dCgpKSB7CisgICAgICAg
ICAgICAgICAgbm9kZXNBbmRHVUlEc1RvUHJvY2Vzcy5wdXNoKGVudHJ5LnZhbHVlKTsKKyAgICAg
ICAgICAgICAgICBndWlkc1RvUHJvY2Vzcy5hZGQoZW50cnkudmFsdWVbMV0pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBsZXQgaXRlcmF0b3IgPSBkb2N1bWVudC5jcmVhdGVOb2RlSXRl
cmF0b3IoZG9jdW1lbnQuYm9keSwgTm9kZUZpbHRlci5TSE9XX0FMTCk7CisgICAgICAgICAgICBm
b3IgKGxldCBub2RlID0gaXRlcmF0b3IubmV4dE5vZGUoKTsgbm9kZTsgbm9kZSA9IGl0ZXJhdG9y
Lm5leHROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNHVUlERm9yTm9kZShu
b2RlKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBs
ZXQgbmV3R1VJRCA9IHRoaXMuZ3VpZEZvck5vZGUobm9kZSk7CisgICAgICAgICAgICAgICAgbm9k
ZXNBbmRHVUlEc1RvUHJvY2Vzcy5wdXNoKFtub2RlLCBuZXdHVUlEXSk7CisgICAgICAgICAgICAg
ICAgZ3VpZHNUb1Byb2Nlc3MuYWRkKG5ld0dVSUQpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBsZXQgbm9kZUluZm9BcnJheSA9IFtdOworICAgICAgICAgICAgd2hpbGUgKG5vZGVzQW5k
R1VJRHNUb1Byb2Nlc3MubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgbGV0IFtub2RlLCBndWlk
XSA9IG5vZGVzQW5kR1VJRHNUb1Byb2Nlc3MucG9wKCk7CisgICAgICAgICAgICAgICAgbGV0IGlu
Zm8gPSB7fTsKKyAgICAgICAgICAgICAgICBpbmZvLmd1aWQgPSBndWlkOworICAgICAgICAgICAg
ICAgIGluZm8udGFnTmFtZSA9IG5vZGUudGFnTmFtZTsKKyAgICAgICAgICAgICAgICBpbmZvLmF0
dHJpYnV0ZXMgPSBHbG9iYWxOb2RlTWFwLm5vZGVBdHRyaWJ1dGVzVG9PYmplY3Qobm9kZSk7Cisg
ICAgICAgICAgICAgICAgaW5mby50eXBlID0gbm9kZS5ub2RlVHlwZTsKKyAgICAgICAgICAgICAg
ICBpbmZvLmRhdGEgPSBHbG9iYWxOb2RlTWFwLmRhdGFGb3JOb2RlKG5vZGUpOworICAgICAgICAg
ICAgICAgIGlmIChub2RlLmhhc0NoaWxkTm9kZXMoKSkgeworICAgICAgICAgICAgICAgICAgICBp
bmZvLmNoaWxkR1VJRHMgPSB0aGlzLmd1aWRzRm9yTm9kZXMobm9kZS5jaGlsZE5vZGVzKTsKKyAg
ICAgICAgICAgICAgICAgICAgZm9yIChsZXQgY2hpbGRHVUlEIG9mIGluZm8uY2hpbGRHVUlEcykg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFndWlkc1RvUHJvY2Vzcy5oYXMoY2hpbGRH
VUlEKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlc0FuZEdVSURzVG9Qcm9jZXNz
LnB1c2goW3RoaXMubm9kZUZvckdVSUQoY2hpbGRHVUlEKSwgY2hpbGRHVUlEXSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbm9kZUlu
Zm9BcnJheS5wdXNoKGluZm8pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4g
bm9kZUluZm9BcnJheTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBmcm9tT2JqZWN0KG5v
ZGVJbmZvQXJyYXkpIHsKKyAgICAgICAgICAgIGxldCBub2Rlc0J5R1VJRCA9IG5ldyBNYXAoKTsK
KyAgICAgICAgICAgIGZvciAobGV0IGluZm8gb2Ygbm9kZUluZm9BcnJheSkgeworICAgICAgICAg
ICAgICAgIGxldCBub2RlID0gbnVsbDsKKyAgICAgICAgICAgICAgICBpZiAoaW5mby50eXBlID09
IE5vZGUuRUxFTUVOVF9OT0RFKQorICAgICAgICAgICAgICAgICAgICBub2RlID0gR2xvYmFsTm9k
ZU1hcC5lbGVtZW50RnJvbVRhZ05hbWUoaW5mby50YWdOYW1lLCBpbmZvLmF0dHJpYnV0ZXMsIGlu
Zm8uZGF0YSk7CisKKyAgICAgICAgICAgICAgICBpZiAoaW5mby50eXBlID09IE5vZGUuVEVYVF9O
T0RFKQorICAgICAgICAgICAgICAgICAgICBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
aW5mby5kYXRhKTsKKworICAgICAgICAgICAgICAgIGlmIChpbmZvLnR5cGUgPT0gTm9kZS5ET0NV
TUVOVF9OT0RFKQorICAgICAgICAgICAgICAgICAgICBub2RlID0gZG9jdW1lbnQ7CisKKyAgICAg
ICAgICAgICAgICBjb25zb2xlLmFzc2VydChub2RlKTsKKyAgICAgICAgICAgICAgICBub2Rlc0J5
R1VJRC5zZXQoaW5mby5ndWlkLCBub2RlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gVGhlbiwgc2V0IGNoaWxkIG5vZGVzIGZvciBhbGwgbm9kZXMgdGhhdCBkbyBub3QgYXBwZWFy
IGluIHRoZSBET00uCisgICAgICAgICAgICBmb3IgKGxldCBpbmZvIG9mIG5vZGVJbmZvQXJyYXku
ZmlsdGVyKGluZm8gPT4gISFpbmZvLmNoaWxkR1VJRHMpKSB7CisgICAgICAgICAgICAgICAgbGV0
IG5vZGUgPSBub2Rlc0J5R1VJRC5nZXQoaW5mby5ndWlkKTsKKyAgICAgICAgICAgICAgICBmb3Ig
KGxldCBjaGlsZEdVSUQgb2YgaW5mby5jaGlsZEdVSURzKQorICAgICAgICAgICAgICAgICAgICAg
bm9kZS5hcHBlbmRDaGlsZChub2Rlc0J5R1VJRC5nZXQoY2hpbGRHVUlEKSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybiBuZXcgR2xvYmFsTm9kZU1hcChub2Rlc0J5R1VJRCk7
CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgZGF0YUZvck5vZGUobm9kZSkgeworICAgICAg
ICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKQorICAgICAgICAgICAg
ICAgIHJldHVybiBPYmZ1c2NhdG9yLnNoYXJlZCgpLmFwcGx5VG9UZXh0KG5vZGUuZGF0YSk7CisK
KyAgICAgICAgICAgIGlmIChub2RlLnRhZ05hbWUgJiYgbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNl
KCkgPT09ICJhdHRhY2htZW50IikgeworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgICAgIHR5cGU6IG5vZGUuZmlsZS50eXBlLAorICAgICAgICAgICAgICAgICAgICBu
YW1lOiBPYmZ1c2NhdG9yLnNoYXJlZCgpLmFwcGx5VG9GaWxlbmFtZShub2RlLmZpbGUubmFtZSks
CisgICAgICAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZDogbmV3IERhdGUoKS5nZXRUaW1lKCkK
KyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBlbGVtZW50RnJvbVRhZ05hbWUodGFn
TmFtZSwgYXR0cmlidXRlcywgZGF0YSkgeworICAgICAgICAgICAgbGV0IG5vZGUgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOworICAgICAgICAgICAgZm9yIChsZXQgYXR0cmlidXRl
TmFtZSBpbiBhdHRyaWJ1dGVzKQorICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0
dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0pOworCisgICAgICAgICAgICBp
ZiAodGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICJhdHRhY2htZW50IikgeworICAgICAgICAgICAg
ICAgIG5vZGUuZmlsZSA9IG5ldyBGaWxlKFtgRmlsZSBuYW1lZCAnJHtkYXRhLm5hbWV9J2BdLCBk
YXRhLm5hbWUsIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogZGF0YS50eXBlLAorICAgICAg
ICAgICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IGRhdGEubGFzdE1vZGlmaWVkCisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gUmV0dXJucyBhbiBPYmplY3QgY29udGFpbmluZyBhdHRyaWJ1
dGUgbmFtZSA9PiBhdHRyaWJ1dGUgdmFsdWUKKyAgICAgICAgc3RhdGljIG5vZGVBdHRyaWJ1dGVz
VG9PYmplY3Qobm9kZSwgYXR0cmlidXRlc1RvRXhjbHVkZT1bXSkgeworICAgICAgICAgICAgY29u
c3QgZXhjbHVkZUF0dHJpYnV0ZXNTZXQgPSBuZXcgU2V0KGF0dHJpYnV0ZXNUb0V4Y2x1ZGUpOwor
ICAgICAgICAgICAgaWYgKCFub2RlLmF0dHJpYnV0ZXMpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGw7CisKKyAgICAgICAgICAgIGxldCBhdHRyaWJ1dGVNYXAgPSB7fTsKKyAgICAgICAgICAg
IGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBub2RlLmF0dHJpYnV0ZXMubGVuZ3RoOyBpbmRl
eCsrKSB7CisgICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlID0gbm9kZS5hdHRyaWJ1dGVz
Lml0ZW0oaW5kZXgpOworICAgICAgICAgICAgICAgIGNvbnN0IFtsb2NhbE5hbWUsIHZhbHVlXSA9
IFthdHRyaWJ1dGUubG9jYWxOYW1lLCBhdHRyaWJ1dGUudmFsdWVdOworICAgICAgICAgICAgICAg
IGlmIChleGNsdWRlQXR0cmlidXRlc1NldC5oYXMobG9jYWxOYW1lKSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVNYXBbbG9jYWxOYW1l
XSA9IHZhbHVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRl
TWFwOworICAgICAgICB9CisKKyAgICAgICAgZGVzY3JpcHRpb25IVE1MRm9yR1VJRChndWlkKSB7
CisgICAgICAgICAgICByZXR1cm4gYDxzcGFuIGVoLWd1aWQ9JHtndWlkfSBjbGFzcz0iZWgtbm9k
ZSI+JHt0aGlzLm5vZGVGb3JHVUlEKGd1aWQpLm5vZGVOYW1lfTwvc3Bhbj5gOworICAgICAgICB9
CisKKyAgICAgICAgZGVzY3JpcHRpb25IVE1MRm9yTm9kZShub2RlKSB7CisgICAgICAgICAgICBp
ZiAoIW5vZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuICIobnVsbCkiOworICAgICAgICAgICAg
cmV0dXJuIGA8c3BhbiBlaC1ndWlkPSR7dGhpcy5ndWlkRm9yTm9kZShub2RlKX0gY2xhc3M9ImVo
LW5vZGUiPiR7bm9kZS5ub2RlTmFtZX08L3NwYW4+YDsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGNsYXNzIFNlbGVjdGlvblN0YXRlIHsKKyAgICAgICAgY29uc3RydWN0b3Iobm9kZU1hcCwgc3Rh
cnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0LCBhbmNob3JOb2RlLCBhbmNo
b3JPZmZzZXQsIGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpIHsKKyAgICAgICAgICAgIGNvbnNvbGUu
YXNzZXJ0KG5vZGVNYXApOworICAgICAgICAgICAgdGhpcy5ub2RlTWFwID0gbm9kZU1hcDsKKyAg
ICAgICAgICAgIHRoaXMuc3RhcnRHVUlEID0gbm9kZU1hcC5ndWlkRm9yTm9kZShzdGFydE5vZGUp
OworICAgICAgICAgICAgdGhpcy5zdGFydE9mZnNldCA9IHN0YXJ0T2Zmc2V0OworICAgICAgICAg
ICAgdGhpcy5lbmRHVUlEID0gbm9kZU1hcC5ndWlkRm9yTm9kZShlbmROb2RlKTsKKyAgICAgICAg
ICAgIHRoaXMuZW5kT2Zmc2V0ID0gZW5kT2Zmc2V0OworICAgICAgICAgICAgdGhpcy5hbmNob3JH
VUlEID0gbm9kZU1hcC5ndWlkRm9yTm9kZShhbmNob3JOb2RlKTsKKyAgICAgICAgICAgIHRoaXMu
YW5jaG9yT2Zmc2V0ID0gYW5jaG9yT2Zmc2V0OworICAgICAgICAgICAgdGhpcy5mb2N1c0dVSUQg
PSBub2RlTWFwLmd1aWRGb3JOb2RlKGZvY3VzTm9kZSk7CisgICAgICAgICAgICB0aGlzLmZvY3Vz
T2Zmc2V0ID0gZm9jdXNPZmZzZXQ7CisgICAgICAgIH0KKworICAgICAgICBpc0VxdWFsKG90aGVy
U2VsZWN0aW9uU3RhdGUpIHsKKyAgICAgICAgICAgIHJldHVybiBvdGhlclNlbGVjdGlvblN0YXRl
CisgICAgICAgICAgICAgICAgJiYgdGhpcy5zdGFydEdVSUQgPT09IG90aGVyU2VsZWN0aW9uU3Rh
dGUuc3RhcnRHVUlEICYmIHRoaXMuc3RhcnRPZmZzZXQgPT09IG90aGVyU2VsZWN0aW9uU3RhdGUu
c3RhcnRPZmZzZXQKKyAgICAgICAgICAgICAgICAmJiB0aGlzLmVuZEdVSUQgPT09IG90aGVyU2Vs
ZWN0aW9uU3RhdGUuZW5kR1VJRCAmJiB0aGlzLmVuZE9mZnNldCA9PT0gb3RoZXJTZWxlY3Rpb25T
dGF0ZS5lbmRPZmZzZXQKKyAgICAgICAgICAgICAgICAmJiB0aGlzLmFuY2hvckdVSUQgPT09IG90
aGVyU2VsZWN0aW9uU3RhdGUuYW5jaG9yR1VJRCAmJiB0aGlzLmFuY2hvck9mZnNldCA9PT0gb3Ro
ZXJTZWxlY3Rpb25TdGF0ZS5hbmNob3JPZmZzZXQKKyAgICAgICAgICAgICAgICAmJiB0aGlzLmZv
Y3VzR1VJRCA9PT0gb3RoZXJTZWxlY3Rpb25TdGF0ZS5mb2N1c0dVSUQgJiYgdGhpcy5mb2N1c09m
ZnNldCA9PT0gb3RoZXJTZWxlY3Rpb25TdGF0ZS5mb2N1c09mZnNldDsKKyAgICAgICAgfQorCisg
ICAgICAgIGFwcGx5VG9TZWxlY3Rpb24oc2VsZWN0aW9uKSB7CisgICAgICAgICAgICBzZWxlY3Rp
b24ucmVtb3ZlQWxsUmFuZ2VzKCk7CisgICAgICAgICAgICBsZXQgcmFuZ2UgPSBkb2N1bWVudC5j
cmVhdGVSYW5nZSgpOworICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQodGhpcy5ub2RlTWFwLm5v
ZGVGb3JHVUlEKHRoaXMuc3RhcnRHVUlEKSwgdGhpcy5zdGFydE9mZnNldCk7CisgICAgICAgICAg
ICByYW5nZS5zZXRFbmQodGhpcy5ub2RlTWFwLm5vZGVGb3JHVUlEKHRoaXMuZW5kR1VJRCksIHRo
aXMuZW5kT2Zmc2V0KTsKKyAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7Cisg
ICAgICAgICAgICBzZWxlY3Rpb24uc2V0QmFzZUFuZEV4dGVudCh0aGlzLm5vZGVNYXAubm9kZUZv
ckdVSUQodGhpcy5hbmNob3JHVUlEKSwgdGhpcy5hbmNob3JPZmZzZXQsIHRoaXMubm9kZU1hcC5u
b2RlRm9yR1VJRCh0aGlzLmZvY3VzR1VJRCksIHRoaXMuZm9jdXNPZmZzZXQpOworICAgICAgICB9
CisKKyAgICAgICAgc3RhdGljIGZyb21TZWxlY3Rpb24oc2VsZWN0aW9uLCBub2RlTWFwKSB7Cisg
ICAgICAgICAgICBsZXQgW3N0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE5vZGUsIGVuZE9mZnNl
dF0gPSBbbnVsbCwgMCwgbnVsbCwgMF07CisgICAgICAgICAgICBpZiAoc2VsZWN0aW9uLnJhbmdl
Q291bnQpIHsKKyAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5n
ZXRSYW5nZUF0KDApOworICAgICAgICAgICAgICAgIHN0YXJ0Tm9kZSA9IHNlbGVjdGVkUmFuZ2Uu
c3RhcnRDb250YWluZXI7CisgICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSBzZWxlY3RlZFJh
bmdlLnN0YXJ0T2Zmc2V0OworICAgICAgICAgICAgICAgIGVuZE5vZGUgPSBzZWxlY3RlZFJhbmdl
LmVuZENvbnRhaW5lcjsKKyAgICAgICAgICAgICAgICBlbmRPZmZzZXQgPSBzZWxlY3RlZFJhbmdl
LmVuZE9mZnNldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBuZXcgU2VsZWN0
aW9uU3RhdGUoCisgICAgICAgICAgICAgICAgbm9kZU1hcCwgc3RhcnROb2RlLCBzdGFydE9mZnNl
dCwgZW5kTm9kZSwgZW5kT2Zmc2V0LAorICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JO
b2RlLCBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LCBzZWxlY3Rpb24uZm9jdXNOb2RlLCBzZWxlY3Rp
b24uZm9jdXNPZmZzZXQKKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKworICAgICAgICB0b09i
amVjdCgpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgc3RhcnRHVUlE
OiB0aGlzLnN0YXJ0R1VJRCwgc3RhcnRPZmZzZXQ6IHRoaXMuc3RhcnRPZmZzZXQsIGVuZEdVSUQ6
IHRoaXMuZW5kR1VJRCwgZW5kT2Zmc2V0OiB0aGlzLmVuZE9mZnNldCwKKyAgICAgICAgICAgICAg
ICBhbmNob3JHVUlEOiB0aGlzLmFuY2hvckdVSUQsIGFuY2hvck9mZnNldDogdGhpcy5hbmNob3JP
ZmZzZXQsIGZvY3VzR1VJRDogdGhpcy5mb2N1c0dVSUQsIGZvY3VzT2Zmc2V0OiB0aGlzLmZvY3Vz
T2Zmc2V0CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGZyb21P
YmplY3QoanNvbiwgbm9kZU1hcCkgeworICAgICAgICAgICAgaWYgKCFqc29uKQorICAgICAgICAg
ICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgICAgICByZXR1cm4gbmV3IFNlbGVjdGlvblN0
YXRlKAorICAgICAgICAgICAgICAgIG5vZGVNYXAsIG5vZGVNYXAubm9kZUZvckdVSUQoanNvbi5z
dGFydEdVSUQpLCBqc29uLnN0YXJ0T2Zmc2V0LCBub2RlTWFwLm5vZGVGb3JHVUlEKGpzb24uZW5k
R1VJRCksIGpzb24uZW5kT2Zmc2V0LAorICAgICAgICAgICAgICAgIG5vZGVNYXAubm9kZUZvckdV
SUQoanNvbi5hbmNob3JHVUlEKSwganNvbi5hbmNob3JPZmZzZXQsIG5vZGVNYXAubm9kZUZvckdV
SUQoanNvbi5mb2N1c0dVSUQpLCBqc29uLmZvY3VzT2Zmc2V0CisgICAgICAgICAgICApOworICAg
ICAgICB9CisgICAgfQorCisgICAgY2xhc3MgRE9NVXBkYXRlIHsKKyAgICAgICAgY29uc3RydWN0
b3Iobm9kZU1hcCkgeworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQobm9kZU1hcCk7CisgICAg
ICAgICAgICB0aGlzLm5vZGVNYXAgPSBub2RlTWFwOworICAgICAgICB9CisKKyAgICAgICAgYXBw
bHkoKSB7CisgICAgICAgICAgICB0aHJvdyAiRXhwZWN0ZWQgc3ViY2xhc3MgaW1wbGVtZW50YXRp
b24uIjsKKyAgICAgICAgfQorCisgICAgICAgIHVuYXBwbHkoKSB7CisgICAgICAgICAgICB0aHJv
dyAiRXhwZWN0ZWQgc3ViY2xhc3MgaW1wbGVtZW50YXRpb24uIjsKKyAgICAgICAgfQorCisgICAg
ICAgIHRhcmdldE5vZGUoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5ub2RlTWFwLm5vZGVG
b3JHVUlEKHRoaXMudGFyZ2V0R1VJRCk7CisgICAgICAgIH0KKworICAgICAgICBkZXRhaWxzRWxl
bWVudCgpIHsKKyAgICAgICAgICAgIHRocm93ICJFeHBlY3RlZCBzdWJjbGFzcyBpbXBsZW1lbnRh
dGlvbi4iOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIG9mVHlwZSh0eXBlKSB7CisgICAg
ICAgICAgICBpZiAoIURPTVVwZGF0ZS5fYWxsVHlwZXMpCisgICAgICAgICAgICAgICAgRE9NVXBk
YXRlLl9hbGxUeXBlcyA9IHsgQ2hpbGRMaXN0VXBkYXRlLCBDaGFyYWN0ZXJEYXRhVXBkYXRlLCBB
dHRyaWJ1dGVVcGRhdGUsIElucHV0RXZlbnRVcGRhdGUsIFNlbGVjdGlvblVwZGF0ZSB9OworICAg
ICAgICAgICAgcmV0dXJuIERPTVVwZGF0ZS5fYWxsVHlwZXNbdHlwZV07CisgICAgICAgIH0KKwor
ICAgICAgICBzdGF0aWMgZnJvbVJlY29yZHMocmVjb3Jkcywgbm9kZU1hcCkgeworICAgICAgICAg
ICAgbGV0IHVwZGF0ZXMgPSBbXQorICAgICAgICAgICAgICAgICwgY2hhcmFjdGVyRGF0YVVwZGF0
ZXMgPSBbXQorICAgICAgICAgICAgICAgICwgYXR0cmlidXRlVXBkYXRlcyA9IFtdOworCisgICAg
ICAgICAgICBmb3IgKGxldCByZWNvcmQgb2YgcmVjb3JkcykgeworICAgICAgICAgICAgICAgIGxl
dCB0YXJnZXQgPSByZWNvcmQudGFyZ2V0OworICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3Jk
LnR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlICJjaGFyYWN0ZXJEYXRhIjoKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IG5ldyBDaGFyYWN0ZXJEYXRhVXBkYXRlKG5vZGVNYXAs
IG5vZGVNYXAuZ3VpZEZvck5vZGUodGFyZ2V0KSwgcmVjb3JkLm9sZFZhbHVlLCB0YXJnZXQuZGF0
YSkKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlcy5wdXNoKHVwZGF0ZSk7CisgICAgICAgICAg
ICAgICAgICAgIGNoYXJhY3RlckRhdGFVcGRhdGVzLnB1c2godXBkYXRlKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAiY2hpbGRMaXN0IjoKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IG5ldyBDaGlsZExpc3RVcGRhdGUobm9kZU1hcCwg
bm9kZU1hcC5ndWlkRm9yTm9kZSh0YXJnZXQpLCBub2RlTWFwLmd1aWRzRm9yTm9kZXMocmVjb3Jk
LmFkZGVkTm9kZXMpLCBub2RlTWFwLmd1aWRzRm9yTm9kZXMocmVjb3JkLnJlbW92ZWROb2Rlcyks
IG5vZGVNYXAuZ3VpZEZvck5vZGUocmVjb3JkLm5leHRTaWJsaW5nKSkKKyAgICAgICAgICAgICAg
ICAgICAgdXBkYXRlcy5wdXNoKHVwZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgImF0dHJpYnV0ZXMiOgorICAgICAgICAgICAgICAgICAgICB2
YXIgdXBkYXRlID0gbmV3IEF0dHJpYnV0ZVVwZGF0ZShub2RlTWFwLCBub2RlTWFwLmd1aWRGb3JO
b2RlKHRhcmdldCksIHJlY29yZC5hdHRyaWJ1dGVOYW1lLCByZWNvcmQub2xkVmFsdWUsIHRhcmdl
dC5nZXRBdHRyaWJ1dGUocmVjb3JkLmF0dHJpYnV0ZU5hbWUpKQorICAgICAgICAgICAgICAgICAg
ICB1cGRhdGVzLnB1c2godXBkYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVXBk
YXRlcy5wdXNoKHVwZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWRqdXN0IGFsbCBjaGFy
YWN0ZXIgZGF0YSB1cGRhdGVzIGZvciB0aGUgc2FtZSB0YXJnZXQuCisgICAgICAgICAgICBjaGFy
YWN0ZXJEYXRhVXBkYXRlcy5mb3JFYWNoKChjdXJyZW50VXBkYXRlLCBpbmRleCkgPT4geworICAg
ICAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGFyYWN0ZXJEYXRhVXBkYXRlcy5sZW5ndGggLSAx
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBmb3IgKGxl
dCBuZXh0VXBkYXRlSW5kZXggPSBpbmRleCArIDE7IG5leHRVcGRhdGVJbmRleCA8IGNoYXJhY3Rl
ckRhdGFVcGRhdGVzLmxlbmd0aDsgbmV4dFVwZGF0ZUluZGV4KyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgbGV0IG5leHRVcGRhdGUgPSBjaGFyYWN0ZXJEYXRhVXBkYXRlc1tuZXh0VXBkYXRlSW5k
ZXhdOworICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFVwZGF0ZS50YXJnZXRHVUlEID09
PSBuZXh0VXBkYXRlLnRhcmdldEdVSUQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRVcGRhdGUubmV3RGF0YSA9IG5leHRVcGRhdGUub2xkRGF0YTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIEFkanVzdCBhbGwgYXR0cmlidXRlIHVw
ZGF0ZXMgZm9yIHRoZSBzYW1lIHRhcmdldCBhbmQgYXR0cmlidXRlIG5hbWUuCisgICAgICAgICAg
ICBhdHRyaWJ1dGVVcGRhdGVzLmZvckVhY2goKGN1cnJlbnRVcGRhdGUsIGluZGV4KSA9PiB7Cisg
ICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IGF0dHJpYnV0ZVVwZGF0ZXMubGVuZ3RoIC0gMSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgZm9yIChsZXQg
bmV4dFVwZGF0ZUluZGV4ID0gaW5kZXggKyAxOyBuZXh0VXBkYXRlSW5kZXggPCBhdHRyaWJ1dGVV
cGRhdGVzLmxlbmd0aDsgbmV4dFVwZGF0ZUluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAg
bGV0IG5leHRVcGRhdGUgPSBhdHRyaWJ1dGVVcGRhdGVzW25leHRVcGRhdGVJbmRleF07CisgICAg
ICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VXBkYXRlLnRhcmdldEdVSUQgPT09IG5leHRVcGRh
dGUudGFyZ2V0R1VJRCAmJiBjdXJyZW50VXBkYXRlLmF0dHJpYnV0ZSA9PT0gbmV4dFVwZGF0ZS5h
dHRyaWJ1dGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRVcGRhdGUubmV3RGF0
YSA9IG5leHRVcGRhdGUub2xkRGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7
CisKKyAgICAgICAgICAgIHJldHVybiB1cGRhdGVzOworICAgICAgICB9CisgICAgfQorCisgICAg
Y2xhc3MgQ2hpbGRMaXN0VXBkYXRlIGV4dGVuZHMgRE9NVXBkYXRlIHsKKyAgICAgICAgY29uc3Ry
dWN0b3Iobm9kZU1hcCwgdGFyZ2V0R1VJRCwgYWRkZWRHVUlEcywgcmVtb3ZlZEdVSURzLCBuZXh0
U2libGluZ0dVSUQpIHsKKyAgICAgICAgICAgIHN1cGVyKG5vZGVNYXApOworICAgICAgICAgICAg
dGhpcy50YXJnZXRHVUlEID0gdGFyZ2V0R1VJRDsKKyAgICAgICAgICAgIHRoaXMuYWRkZWQgPSBh
ZGRlZEdVSURzOworICAgICAgICAgICAgdGhpcy5yZW1vdmVkID0gcmVtb3ZlZEdVSURzOworICAg
ICAgICAgICAgdGhpcy5uZXh0U2libGluZ0dVSUQgPSBuZXh0U2libGluZ0dVSUQgPT0gdW5kZWZp
bmVkID8gbnVsbCA6IG5leHRTaWJsaW5nR1VJRDsKKyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0
KG5vZGVNYXAubm9kZUZvckdVSUQodGFyZ2V0R1VJRCkpOworICAgICAgICB9CisKKyAgICAgICAg
YXBwbHkoKSB7CisgICAgICAgICAgICBmb3IgKGxldCByZW1vdmVkTm9kZSBvZiB0aGlzLl9yZW1v
dmVkTm9kZXMoKSkKKyAgICAgICAgICAgICAgICByZW1vdmVkTm9kZS5yZW1vdmUoKTsKKworICAg
ICAgICAgICAgbGV0IHRhcmdldCA9IHRoaXMudGFyZ2V0Tm9kZSgpOworICAgICAgICAgICAgZm9y
IChsZXQgYWRkZWROb2RlIG9mIHRoaXMuX2FkZGVkTm9kZXMoKSkKKyAgICAgICAgICAgICAgICB0
YXJnZXQuaW5zZXJ0QmVmb3JlKGFkZGVkTm9kZSwgdGhpcy5fbmV4dFNpYmxpbmcoKSk7CisgICAg
ICAgIH0KKworICAgICAgICB1bmFwcGx5KCkgeworICAgICAgICAgICAgZm9yIChsZXQgYWRkZWRO
b2RlIG9mIHRoaXMuX2FkZGVkTm9kZXMoKSkKKyAgICAgICAgICAgICAgICBhZGRlZE5vZGUucmVt
b3ZlKCk7CisKKyAgICAgICAgICAgIGxldCB0YXJnZXQgPSB0aGlzLnRhcmdldE5vZGUoKTsKKyAg
ICAgICAgICAgIGZvciAobGV0IHJlbW92ZWROb2RlIG9mIHRoaXMuX3JlbW92ZWROb2RlcygpKQor
ICAgICAgICAgICAgICAgIHRhcmdldC5pbnNlcnRCZWZvcmUocmVtb3ZlZE5vZGUsIHRoaXMuX25l
eHRTaWJsaW5nKCkpOworICAgICAgICB9CisKKyAgICAgICAgX25leHRTaWJsaW5nKCkgeworICAg
ICAgICAgICAgaWYgKHRoaXMubmV4dFNpYmxpbmdHVUlEID09IG51bGwpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5ub2RlTWFwLm5vZGVGb3JH
VUlEKHRoaXMubmV4dFNpYmxpbmdHVUlEKTsKKyAgICAgICAgfQorCisgICAgICAgIF9yZW1vdmVk
Tm9kZXMoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5ub2RlTWFwLm5vZGVzRm9yR1VJRHMo
dGhpcy5yZW1vdmVkKTsKKyAgICAgICAgfQorCisgICAgICAgIF9hZGRlZE5vZGVzKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMubm9kZU1hcC5ub2Rlc0ZvckdVSURzKHRoaXMuYWRkZWQpOwor
ICAgICAgICB9CisKKyAgICAgICAgdG9PYmplY3QoKSB7CisgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgIHR5cGU6ICJDaGlsZExpc3RVcGRhdGUiLAorICAgICAgICAgICAgICAg
IHRhcmdldEdVSUQ6IHRoaXMudGFyZ2V0R1VJRCwKKyAgICAgICAgICAgICAgICBhZGRlZEdVSURz
OiB0aGlzLmFkZGVkLAorICAgICAgICAgICAgICAgIHJlbW92ZWRHVUlEczogdGhpcy5yZW1vdmVk
LAorICAgICAgICAgICAgICAgIG5leHRTaWJsaW5nR1VJRDogdGhpcy5uZXh0U2libGluZ0dVSUQK
KyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBkZXRhaWxzRWxlbWVudCgpIHsK
KyAgICAgICAgICAgIGxldCBuZXh0U2libGluZyA9IHRoaXMuX25leHRTaWJsaW5nKCk7CisgICAg
ICAgICAgICBsZXQgaHRtbCA9CisgICAgICAgICAgICBgPGRldGFpbHM+CisgICAgICAgICAgICAg
ICAgPHN1bW1hcnk+Y2hpbGQgbGlzdCBjaGFuZ2VkPC9zdW1tYXJ5PgorICAgICAgICAgICAgICAg
IDx1bD4KKyAgICAgICAgICAgICAgICAgICAgPGxpPnBhcmVudDogJHt0aGlzLm5vZGVNYXAuZGVz
Y3JpcHRpb25IVE1MRm9yR1VJRCh0aGlzLnRhcmdldEdVSUQpfTwvbGk+CisgICAgICAgICAgICAg
ICAgICAgIDxsaT5hZGRlZDogWyAke1t0aGlzLl9hZGRlZE5vZGVzKCkubWFwKG5vZGUgPT4gdGhp
cy5ub2RlTWFwLmRlc2NyaXB0aW9uSFRNTEZvck5vZGUobm9kZSkpXX0gXTwvbGk+CisgICAgICAg
ICAgICAgICAgICAgIDxsaT5yZW1vdmVkOiBbICR7W3RoaXMuX3JlbW92ZWROb2RlcygpLm1hcChu
b2RlID0+IHRoaXMubm9kZU1hcC5kZXNjcmlwdGlvbkhUTUxGb3JOb2RlKG5vZGUpKV19IF08L2xp
PgorICAgICAgICAgICAgICAgICAgICA8bGk+YmVmb3JlIHNpYmxpbmc6ICR7bmV4dFNpYmxpbmcg
PyB0aGlzLm5vZGVNYXAuZGVzY3JpcHRpb25IVE1MRm9yTm9kZShuZXh0U2libGluZykgOiAiKG51
bGwpIn08L2xpPgorICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8L2RldGFpbHM+
YDsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50RnJvbU1hcmtkb3duKGh0bWwpOworICAgICAg
ICB9CisKKyAgICAgICAgc3RhdGljIGZyb21PYmplY3QoanNvbiwgbm9kZU1hcCkgeworICAgICAg
ICAgICAgcmV0dXJuIG5ldyBDaGlsZExpc3RVcGRhdGUobm9kZU1hcCwganNvbi50YXJnZXRHVUlE
LCBqc29uLmFkZGVkR1VJRHMsIGpzb24ucmVtb3ZlZEdVSURzLCBqc29uLm5leHRTaWJsaW5nR1VJ
RCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBDaGFyYWN0ZXJEYXRhVXBkYXRlIGV4
dGVuZHMgRE9NVXBkYXRlIHsKKyAgICAgICAgY29uc3RydWN0b3Iobm9kZU1hcCwgdGFyZ2V0R1VJ
RCwgb2xkRGF0YSwgbmV3RGF0YSkgeworICAgICAgICAgICAgc3VwZXIobm9kZU1hcCk7CisgICAg
ICAgICAgICB0aGlzLnRhcmdldEdVSUQgPSB0YXJnZXRHVUlEOworICAgICAgICAgICAgdGhpcy5v
bGREYXRhID0gb2xkRGF0YTsKKyAgICAgICAgICAgIHRoaXMubmV3RGF0YSA9IG5ld0RhdGE7Cisg
ICAgICAgICAgICBjb25zb2xlLmFzc2VydChub2RlTWFwLm5vZGVGb3JHVUlEKHRhcmdldEdVSUQp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGFwcGx5KCkgeworICAgICAgICAgICAgdGhpcy50YXJn
ZXROb2RlKCkuZGF0YSA9IHRoaXMubmV3RGF0YTsKKyAgICAgICAgfQorCisgICAgICAgIHVuYXBw
bHkoKSB7CisgICAgICAgICAgICB0aGlzLnRhcmdldE5vZGUoKS5kYXRhID0gdGhpcy5vbGREYXRh
OworICAgICAgICB9CisKKyAgICAgICAgZGV0YWlsc0VsZW1lbnQoKSB7CisgICAgICAgICAgICBs
ZXQgaHRtbCA9CisgICAgICAgICAgICBgPGRldGFpbHM+CisgICAgICAgICAgICAgICAgPHN1bW1h
cnk+Y2hhcmFjdGVyIGRhdGEgY2hhbmdlZDwvc3VtbWFyeT4KKyAgICAgICAgICAgICAgICA8dWw+
CisgICAgICAgICAgICAgICAgICAgIDxsaT5vbGQ6ICR7dGhpcy5vbGREYXRhICE9IG51bGwgPyAi
JyIgKyB0aGlzLm9sZERhdGEgKyAiJyIgOiAiKG51bGwpIn08L2xpPgorICAgICAgICAgICAgICAg
ICAgICA8bGk+bmV3OiAke3RoaXMubmV3RGF0YSAhPSBudWxsID8gIiciICsgdGhpcy5uZXdEYXRh
ICsgIiciIDogIihudWxsKSJ9PC9saT4KKyAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAg
ICAgPC9kZXRhaWxzPmA7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudEZyb21NYXJrZG93biho
dG1sKTsKKyAgICAgICAgfQorCisgICAgICAgIHRvT2JqZWN0KCkgeworICAgICAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiAiQ2hhcmFjdGVyRGF0YVVwZGF0ZSIsCisgICAg
ICAgICAgICAgICAgdGFyZ2V0R1VJRDogdGhpcy50YXJnZXRHVUlELAorICAgICAgICAgICAgICAg
IG9sZERhdGE6IE9iZnVzY2F0b3Iuc2hhcmVkKCkuYXBwbHlUb1RleHQodGhpcy5vbGREYXRhKSwK
KyAgICAgICAgICAgICAgICBuZXdEYXRhOiBPYmZ1c2NhdG9yLnNoYXJlZCgpLmFwcGx5VG9UZXh0
KHRoaXMubmV3RGF0YSkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBzdGF0
aWMgZnJvbU9iamVjdChqc29uLCBub2RlTWFwKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IENo
YXJhY3RlckRhdGFVcGRhdGUobm9kZU1hcCwganNvbi50YXJnZXRHVUlELCBqc29uLm9sZERhdGEs
IGpzb24ubmV3RGF0YSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBBdHRyaWJ1dGVV
cGRhdGUgZXh0ZW5kcyBET01VcGRhdGUgeworICAgICAgICBjb25zdHJ1Y3Rvcihub2RlTWFwLCB0
YXJnZXRHVUlELCBhdHRyaWJ1dGUsIG9sZFZhbHVlLCBuZXdWYWx1ZSkgeworICAgICAgICAgICAg
c3VwZXIobm9kZU1hcCk7CisgICAgICAgICAgICB0aGlzLnRhcmdldEdVSUQgPSB0YXJnZXRHVUlE
OworICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGUgPSBhdHRyaWJ1dGU7CisgICAgICAgICAgICB0
aGlzLm9sZFZhbHVlID0gb2xkVmFsdWU7CisgICAgICAgICAgICB0aGlzLm5ld1ZhbHVlID0gbmV3
VmFsdWU7CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydChub2RlTWFwLm5vZGVGb3JHVUlEKHRh
cmdldEdVSUQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGFwcGx5KCkgeworICAgICAgICAgICAg
aWYgKHRoaXMubmV3VmFsdWUgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICB0aGlzLnRhcmdldE5v
ZGUoKS5yZW1vdmVBdHRyaWJ1dGUodGhpcy5hdHRyaWJ1dGUpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0Tm9kZSgpLnNldEF0dHJpYnV0ZSh0aGlzLmF0dHJp
YnV0ZSwgdGhpcy5uZXdWYWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICB1bmFwcGx5KCkgewor
ICAgICAgICAgICAgaWYgKHRoaXMub2xkVmFsdWUgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICB0
aGlzLnRhcmdldE5vZGUoKS5yZW1vdmVBdHRyaWJ1dGUodGhpcy5hdHRyaWJ1dGUpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0Tm9kZSgpLnNldEF0dHJpYnV0
ZSh0aGlzLmF0dHJpYnV0ZSwgdGhpcy5vbGRWYWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBk
ZXRhaWxzRWxlbWVudCgpIHsKKyAgICAgICAgICAgIGxldCBodG1sID0KKyAgICAgICAgICAgIGA8
ZGV0YWlscz4KKyAgICAgICAgICAgICAgICA8c3VtbWFyeT5hdHRyaWJ1dGUgY2hhbmdlZDwvc3Vt
bWFyeT4KKyAgICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgICAgIDxsaT50YXJn
ZXQ6ICR7dGhpcy5ub2RlTWFwLmRlc2NyaXB0aW9uSFRNTEZvckdVSUQodGhpcy50YXJnZXRHVUlE
KX08L2xpPgorICAgICAgICAgICAgICAgICAgICA8bGk+YXR0cmlidXRlOiAke3RoaXMuYXR0cmli
dXRlfTwvbGk+CisgICAgICAgICAgICAgICAgICAgIDxsaT5vbGQ6ICR7dGhpcy5vbGRWYWx1ZSAh
PSBudWxsID8gIiciICsgdGhpcy5vbGRWYWx1ZSArICInIiA6ICIobnVsbCkifTwvbGk+CisgICAg
ICAgICAgICAgICAgICAgIDxsaT5uZXc6ICR7dGhpcy5uZXdWYWx1ZSAhPSBudWxsID8gIiciICsg
dGhpcy5uZXdWYWx1ZSArICInIiA6ICIobnVsbCkifTwvbGk+CisgICAgICAgICAgICAgICAgPC91
bD4KKyAgICAgICAgICAgIDwvZGV0YWlscz5gOworICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRG
cm9tTWFya2Rvd24oaHRtbCk7CisgICAgICAgIH0KKworICAgICAgICB0b09iamVjdCgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogIkF0dHJpYnV0ZVVwZGF0
ZSIsCisgICAgICAgICAgICAgICAgdGFyZ2V0R1VJRDogdGhpcy50YXJnZXRHVUlELAorICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZTogdGhpcy5hdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgb2xk
VmFsdWU6IHRoaXMub2xkVmFsdWUsCisgICAgICAgICAgICAgICAgbmV3VmFsdWU6IHRoaXMubmV3
VmFsdWUKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgZnJvbU9i
amVjdChqc29uLCBub2RlTWFwKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IEF0dHJpYnV0ZVVw
ZGF0ZShub2RlTWFwLCBqc29uLnRhcmdldEdVSUQsIGpzb24uYXR0cmlidXRlLCBqc29uLm9sZFZh
bHVlLCBqc29uLm5ld1ZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIFNlbGVj
dGlvblVwZGF0ZSBleHRlbmRzIERPTVVwZGF0ZSB7CisgICAgICAgIGNvbnN0cnVjdG9yKG5vZGVN
YXAsIHN0YXRlKSB7CisgICAgICAgICAgICBzdXBlcihub2RlTWFwKTsKKyAgICAgICAgICAgIHRo
aXMuc3RhdGUgPSBzdGF0ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNlbGVjdGlvblVwZGF0
ZXMgYXJlIG5vdCBhcHBsaWVkL3VuYXBwbGllZCBieSB0aGUgbm9ybWFsIG1lYW5zLiBUaGUgc2Vs
ZWN0aW9uIGlzIGFwcGxpZWQgdmlhCisgICAgICAgIC8vIERPTVVwZGF0ZUhpc3RvcnlDb250ZXh0
LmFwcGx5Q3VycmVudFNlbGVjdGlvblN0YXRlIGluc3RlYWQsIHdoaWNoIGNvbnNpZGVycyB0aGUg
dXBkYXRlcyBiZWZvcmUgYW5kIGFmdGVyIHRoZQorICAgICAgICAvLyBjdXJyZW50IHVwZGF0ZSBp
bmRleC4KKyAgICAgICAgYXBwbHkoKSB7IH0KKyAgICAgICAgdW5hcHBseSgpIHsgfQorCisgICAg
ICAgIHRvT2JqZWN0KCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0
eXBlOiAiU2VsZWN0aW9uVXBkYXRlIiwKKyAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5zdGF0
ZSA/IHRoaXMuc3RhdGUudG9PYmplY3QoKSA6IG51bGwKKyAgICAgICAgICAgIH07CisgICAgICAg
IH0KKworICAgICAgICBzdGF0aWMgZnJvbU9iamVjdChqc29uLCBub2RlTWFwKSB7CisgICAgICAg
ICAgICByZXR1cm4gbmV3IFNlbGVjdGlvblVwZGF0ZShub2RlTWFwLCBTZWxlY3Rpb25TdGF0ZS5m
cm9tT2JqZWN0KGpzb24uc3RhdGUsIG5vZGVNYXApKTsKKyAgICAgICAgfQorCisgICAgICAgIF9y
YW5nZURlc2NyaXB0aW9uSFRNTCgpIHsKKyAgICAgICAgICAgIHJldHVybiBgKCR7dGhpcy5ub2Rl
TWFwLmRlc2NyaXB0aW9uSFRNTEZvckdVSUQodGhpcy5zdGF0ZS5zdGFydEdVSUQpfToke3RoaXMu
c3RhdGUuc3RhcnRPZmZzZXR9LAorICAgICAgICAgICAgICAgICR7dGhpcy5ub2RlTWFwLmRlc2Ny
aXB0aW9uSFRNTEZvckdVSUQodGhpcy5zdGF0ZS5lbmRHVUlEKX06JHt0aGlzLnN0YXRlLmVuZE9m
ZnNldH0pYDsKKyAgICAgICAgfQorCisgICAgICAgIF9hbmNob3JEZXNjcmlwdGlvbkhUTUwoKSB7
CisgICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5ub2RlTWFwLmRlc2NyaXB0aW9uSFRNTEZvckdV
SUQodGhpcy5zdGF0ZS5hbmNob3JHVUlEKX06JHt0aGlzLnN0YXRlLmFuY2hvck9mZnNldH1gOwor
ICAgICAgICB9CisKKyAgICAgICAgX2ZvY3VzRGVzY3JpcHRpb25IVE1MKCkgeworICAgICAgICAg
ICAgcmV0dXJuIGAke3RoaXMubm9kZU1hcC5kZXNjcmlwdGlvbkhUTUxGb3JHVUlEKHRoaXMuc3Rh
dGUuZm9jdXNHVUlEKX06JHt0aGlzLnN0YXRlLmZvY3VzT2Zmc2V0fWA7CisgICAgICAgIH0KKwor
ICAgICAgICBkZXRhaWxzRWxlbWVudCgpIHsKKyAgICAgICAgICAgIGxldCBodG1sID0KKyAgICAg
ICAgICAgIGA8ZGV0YWlscz4KKyAgICAgICAgICAgICAgICA8c3VtbWFyeT5TZWxlY3Rpb24gY2hh
bmdlZDwvc3VtbWFyeT4KKyAgICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgICAg
IDxsaT5yYW5nZTogJHt0aGlzLl9yYW5nZURlc2NyaXB0aW9uSFRNTCgpfTwvbGk+CisgICAgICAg
ICAgICAgICAgICAgIDxsaT5hbmNob3I6ICR7dGhpcy5fYW5jaG9yRGVzY3JpcHRpb25IVE1MKCl9
PC9saT4KKyAgICAgICAgICAgICAgICAgICAgPGxpPmZvY3VzOiAke3RoaXMuX2ZvY3VzRGVzY3Jp
cHRpb25IVE1MKCl9PC9saT4KKyAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPC9k
ZXRhaWxzPmA7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudEZyb21NYXJrZG93bihodG1sKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIElucHV0RXZlbnRVcGRhdGUgZXh0ZW5kcyBE
T01VcGRhdGUgeworICAgICAgICBjb25zdHJ1Y3Rvcihub2RlTWFwLCB1cGRhdGVzLCBpbnB1dFR5
cGUsIGRhdGEsIHRpbWVTdGFtcCkgeworICAgICAgICAgICAgc3VwZXIobm9kZU1hcCk7CisgICAg
ICAgICAgICB0aGlzLnVwZGF0ZXMgPSB1cGRhdGVzOworICAgICAgICAgICAgdGhpcy5pbnB1dFR5
cGUgPSBpbnB1dFR5cGU7CisgICAgICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOworICAgICAgICAg
ICAgdGhpcy50aW1lU3RhbXAgPSB0aW1lU3RhbXA7CisgICAgICAgIH0KKworICAgICAgICBfb2Jm
dXNjYXRlZERhdGEoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dFR5cGUuaW5kZXhP
ZigiaW5zZXJ0IikgPT0gMCA/IE9iZnVzY2F0b3Iuc2hhcmVkKCkuYXBwbHlUb1RleHQodGhpcy5k
YXRhKSA6IHRoaXMuZGF0YTsKKyAgICAgICAgfQorCisgICAgICAgIGFwcGx5KCkgeworICAgICAg
ICAgICAgZm9yIChsZXQgdXBkYXRlIG9mIHRoaXMudXBkYXRlcykKKyAgICAgICAgICAgICAgICB1
cGRhdGUuYXBwbHkoKTsKKyAgICAgICAgfQorCisgICAgICAgIHVuYXBwbHkoKSB7CisgICAgICAg
ICAgICBmb3IgKGxldCBpbmRleCA9IHRoaXMudXBkYXRlcy5sZW5ndGggLSAxOyBpbmRleCA+PSAw
OyBpbmRleC0tKQorICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlc1tpbmRleF0udW5hcHBseSgp
OworICAgICAgICB9CisKKyAgICAgICAgdG9PYmplY3QoKSB7CisgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgIHR5cGU6ICJJbnB1dEV2ZW50VXBkYXRlIiwKKyAgICAgICAgICAg
ICAgICBpbnB1dFR5cGU6IHRoaXMuaW5wdXRUeXBlLAorICAgICAgICAgICAgICAgIGRhdGE6IHRo
aXMuX29iZnVzY2F0ZWREYXRhKCksCisgICAgICAgICAgICAgICAgdGltZVN0YW1wOiB0aGlzLnRp
bWVTdGFtcCwKKyAgICAgICAgICAgICAgICB1cGRhdGVzOiB0aGlzLnVwZGF0ZXMubWFwKHVwZGF0
ZSA9PiB1cGRhdGUudG9PYmplY3QoKSkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAg
ICAgICBzdGF0aWMgZnJvbU9iamVjdChqc29uLCBub2RlTWFwKSB7CisgICAgICAgICAgICBsZXQg
dXBkYXRlcyA9IGpzb24udXBkYXRlcy5tYXAodXBkYXRlID0+IERPTVVwZGF0ZS5vZlR5cGUodXBk
YXRlLnR5cGUpLmZyb21PYmplY3QodXBkYXRlLCBub2RlTWFwKSk7CisgICAgICAgICAgICByZXR1
cm4gbmV3IElucHV0RXZlbnRVcGRhdGUobm9kZU1hcCwgdXBkYXRlcywganNvbi5pbnB1dFR5cGUs
IGpzb24uZGF0YSwganNvbi50aW1lU3RhbXApOworICAgICAgICB9CisKKyAgICAgICAgZGV0YWls
c0VsZW1lbnQoKSB7CisgICAgICAgICAgICBsZXQgaHRtbCA9CisgICAgICAgICAgICBgPGRldGFp
bHM+CisgICAgICAgICAgICAgICAgPHN1bW1hcnk+SW5wdXQgKCR7dGhpcy5pbnB1dFR5cGV9KTwv
c3VtbWFyeT4KKyAgICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgICAgIDxsaT50
aW1lOiAke3RoaXMudGltZVN0YW1wfTwvbGk+CisgICAgICAgICAgICAgICAgICAgIDxsaT5kYXRh
OiAkeyF0aGlzLmRhdGEgPyAiKG51bGwpIiA6ICInIiArIHRoaXMuZGF0YSArICInIn08L2xpPgor
ICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8L2RldGFpbHM+YDsKKyAgICAgICAg
ICAgIGxldCB0b3BMZXZlbERldGFpbHMgPSBlbGVtZW50RnJvbU1hcmtkb3duKGh0bWwpOworICAg
ICAgICAgICAgZm9yIChsZXQgdXBkYXRlIG9mIHRoaXMudXBkYXRlcykKKyAgICAgICAgICAgICAg
ICB0b3BMZXZlbERldGFpbHMuY2hpbGRyZW5bdG9wTGV2ZWxEZXRhaWxzLmNoaWxkRWxlbWVudENv
dW50IC0gMV0uYXBwZW5kQ2hpbGQodXBkYXRlLmRldGFpbHNFbGVtZW50KCkpOworICAgICAgICAg
ICAgcmV0dXJuIHRvcExldmVsRGV0YWlsczsKKyAgICAgICAgfQorICAgIH0KKworICAgIHdpbmRv
dy5FZGl0aW5nSGlzdG9yeSA9IHsKKyAgICAgICAgR2xvYmFsTm9kZU1hcCwKKyAgICAgICAgU2Vs
ZWN0aW9uU3RhdGUsCisgICAgICAgIERPTVVwZGF0ZSwKKyAgICAgICAgQ2hpbGRMaXN0VXBkYXRl
LAorICAgICAgICBDaGFyYWN0ZXJEYXRhVXBkYXRlLAorICAgICAgICBBdHRyaWJ1dGVVcGRhdGUs
CisgICAgICAgIFNlbGVjdGlvblVwZGF0ZSwKKyAgICAgICAgSW5wdXRFdmVudFVwZGF0ZSwKKyAg
ICAgICAgT2JmdXNjYXRvcgorICAgIH07Cit9KSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296028</attachid>
            <date>2016-12-02 17:22:45 -0800</date>
            <delta_ts>2016-12-07 11:41:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165114-20161202172214.patch</filename>
            <type>text/plain</type>
            <size>109590</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA5MTI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTNkNTJlM2JiNzQyODA2
ODUyYzUyNWIwYTJiMDI5OTY2NWJlODFmMi4uYWU0MzllZDcyMzBiZDhlOTk0OWNlZGI0YjExMmE2
ZDhhMjllNWMwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNyBAQAorMjAxNi0xMi0wMiAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBuZXcg
cHJvamVjdCBmb3IgcmVjb3JkaW5nIGFuZCBwbGF5aW5nIGJhY2sgZWRpdGluZyBjb21tYW5kcyBp
biBlZGl0YWJsZSB3ZWIgY29udGVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY1MTE0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yOTQwODEzNT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIG5l
dyBzY3JpcHRzIHVzZWQgdG8gcmVjb3JkIGFuZCBwbGF5IGJhY2sgZWRpdGluZywgYXMgd2VsbCBh
cyBhIG5ldyBYY29kZSBDb3B5IGZpbGVzIHBoYXNlIHRoYXQgcHVzaGVzIHRoZXNlCisgICAgICAg
IHNjcmlwdHMgdG8gdGhlIGludGVybmFsIHN5c3RlbSBkaXJlY3Rvcnkgd2hlbiBpb25zdGFsbGlu
Zy4gU2VlIHRoZSBUb29scyBDaGFuZ2VMb2cgYW5kIGluZGl2aWR1YWwgY29tbWVudHMgYmVsb3cK
KyAgICAgICAgZm9yIG1vcmUgZGV0YWlscy4gQ292ZXJlZCBieSAzIG5ldyB1bml0IHRlc3RzIGlu
IHRoZSBFZGl0aW5nSGlzdG9yeSBwcm9qZWN0LgorCisgICAgICAgICogSW50ZXJuYWxTY3JpcHRz
L0R1bXBFZGl0aW5nSGlzdG9yeS5qczogQWRkZWQuCisgICAgICAgIChiZWdpblByb2Nlc3NpbmdU
b3BMZXZlbFVwZGF0ZSk6CisgICAgICAgIChlbmRQcm9jZXNzaW5nVG9wTGV2ZWxVcGRhdGUpOgor
ICAgICAgICAoYXBwZW5kRE9NVXBkYXRlc0Zyb21SZWNvcmRzKToKKyAgICAgICAgKGFwcGVuZFNl
bGVjdGlvblVwZGF0ZUlmTmVjZXNzYXJ5KToKKworICAgICAgICBBZGRzIG5ldyBlbnRyaWVzIGlu
dG8gdGhlIHRvcC1sZXZlbCBsaXN0IG9mIERPTSB1cGRhdGVzIGNhcHR1cmVkIHdoZW4gZWRpdGlu
Zy4gUmVzcGVjdGl2ZWx5LCB0aGVzZSBhcmUgaW5wdXQKKyAgICAgICAgZXZlbnRzIGFuZCBzZWxl
Y3Rpb24gY2hhbmdlcy4KKworICAgICAgICAoRWRpdGluZ0hpc3RvcnkuZ2V0RWRpdGluZ0hpc3Rv
cnlBc0pTT05TdHJpbmcpOgorICAgICAgICAqIEludGVybmFsU2NyaXB0cy9FZGl0aW5nSGlzdG9y
eVV0aWwuanM6IEFkZGVkLgorICAgICAgICAocHJvdG90eXBlLl9zY3JhbWJsZSk6CisgICAgICAg
IChwcm90b3R5cGUuYXBwbHlUb1RleHQpOgorICAgICAgICAocHJvdG90eXBlLmFwcGx5VG9GaWxl
bmFtZSk6CisgICAgICAgIChwcm90b3R5cGUuX3NjcmFtYmVkTnVtYmVySW5kZXhGb3JDb2RlKToK
KyAgICAgICAgKHByb3RvdHlwZS5fc2NyYW1iZWRMb3dlcmNhc2VJbmRleEZvckNvZGUpOgorICAg
ICAgICAocHJvdG90eXBlLl9zY3JhbWJlZFVwcGVyY2FzZUluZGV4Rm9yQ29kZSk6CisKKyAgICAg
ICAgTmFpdmUgaW1wbGVtZW50YXRpb24gb2YgYW4gb2JmdXNjYXRvci4gQ3VycmVudGx5LCB0aGlz
IG9ubHkgYWZmZWN0cyBhbHBoYW51bWVyaWMgY2hhcmFjdGVycy4gT2JmdXNjYXRpb24gaXMgb2Zm
CisgICAgICAgIGJ5IGRlZmF1bHQsIGJ1dCBjYW4gYmUgdG9nZ2xlZCBvbiBpbiBKYXZhU2NyaXB0
LgorCisgICAgICAgIChlbGVtZW50RnJvbU1hcmtkb3duKToKKyAgICAgICAgKEdsb2JhbE5vZGVN
YXApOgorICAgICAgICAoR2xvYmFsTm9kZU1hcC5wcm90b3R5cGUubm9kZXNGb3JHVUlEcyk6Cisg
ICAgICAgIChHbG9iYWxOb2RlTWFwLnByb3RvdHlwZS5ndWlkc0ZvclROb2Rlcyk6CisgICAgICAg
IChHbG9iYWxOb2RlTWFwLnByb3RvdHlwZS5ub2RlRm9yR1VJRCk6CisgICAgICAgIChHbG9iYWxO
b2RlTWFwLnByb3RvdHlwZS5ndWlkRm9yTm9kZSk6CisgICAgICAgIChHbG9iYWxOb2RlTWFwLnBy
b3RvdHlwZS5oYXNHVUlERm9yTm9kZSk6CisgICAgICAgIChHbG9iYWxOb2RlTWFwLnByb3RvdHlw
ZS5ub2Rlcyk6CisgICAgICAgIChHbG9iYWxOb2RlTWFwLnByb3RvdHlwZS50b09iamVjdCk6Cisg
ICAgICAgIChHbG9iYWxOb2RlTWFwLmZyb21PYmplY3QpOgorICAgICAgICAoR2xvYmFsTm9kZU1h
cC5kYXRhRm9yTm9kZSk6CisgICAgICAgIChHbG9iYWxOb2RlTWFwLmVsZW1lbnRGcm9tVGFnTmFt
ZSk6CisgICAgICAgIChHbG9iYWxOb2RlTWFwLm5vZGVBdHRyaWJ1dGVzVG9PYmplY3QpOgorICAg
ICAgICAoR2xvYmFsTm9kZU1hcC5wcm90b3R5cGUuZGVzY3JpcHRpb25IVE1MRm9yR1VJRCk6Cisg
ICAgICAgIChHbG9iYWxOb2RlTWFwLnByb3RvdHlwZS5kZXNjcmlwdGlvbkhUTUxGb3JOb2RlKToK
KworICAgICAgICBUaGUgR2xvYmFsTm9kZU1hcCBrZWVwcyB0cmFjayBvZiBldmVyeSBub2RlIHRo
YXQgaGFzIGFwcGVhcmVkIGluIHRoZSBET00sIGFzc2lnbmluZyBlYWNoIG5vZGUgYSBnbG9iYWxs
eSB1bmlxdWUKKyAgICAgICAgaWRlbnRpZmllciAoR1VJRCkuIFRoaXMgR1VJRCBpcyB1c2VkIHdo
ZW4gcmVjb25zdHJ1Y3RpbmcgdGhlIERPTSwgYXMgd2VsbCBhcyB1bmFwcGx5aW5nIG9yIGFwcGx5
aW5nIGVkaXRpbmcuCisKKyAgICAgICAgKFNlbGVjdGlvblN0YXRlKToKKyAgICAgICAgKFNlbGVj
dGlvblN0YXRlLnByb3RvdHlwZS5pc0VxdWFsKToKKyAgICAgICAgKFNlbGVjdGlvblN0YXRlLnBy
b3RvdHlwZS5hcHBseVRvU2VsZWN0aW9uKToKKyAgICAgICAgKFNlbGVjdGlvblN0YXRlLmZyb21T
ZWxlY3Rpb24pOgorICAgICAgICAoU2VsZWN0aW9uU3RhdGUucHJvdG90eXBlLnRvT2JqZWN0KToK
KyAgICAgICAgKFNlbGVjdGlvblN0YXRlLmZyb21PYmplY3QpOgorCisgICAgICAgIFJlcHJlc2Vu
dHMgYSBzbmFwc2hvdCBvZiB0aGUgU2VsZWN0aW9uIHN0YXRlIChkZXRlcm1pbmVkIGJ5IGdldFNl
bGVjdGlvbigpKS4KKworICAgICAgICAoRE9NVXBkYXRlKToKKyAgICAgICAgKERPTVVwZGF0ZS5w
cm90b3R5cGUuYXBwbHkpOgorICAgICAgICAoRE9NVXBkYXRlLnByb3RvdHlwZS51bmFwcGx5KToK
KyAgICAgICAgKERPTVVwZGF0ZS5wcm90b3R5cGUudGFyZ2V0Tm9kZSk6CisgICAgICAgIChET01V
cGRhdGUucHJvdG90eXBlLmRldGFpbHNFbGVtZW50KToKKyAgICAgICAgKERPTVVwZGF0ZS5vZlR5
cGUpOgorICAgICAgICAoRE9NVXBkYXRlLmZyb21SZWNvcmRzKToKKworICAgICAgICBBIERPTVVw
ZGF0ZSBpcyBhbiBhYnN0cmFjdCBvYmplY3QgcmVwcmVzZW50aW5nIGEgY2hhbmdlIGluIHRoZSBE
T00gdGhhdCBtYXkgYmUgYXBwbGllZCBhbmQgdW5hcHBsaWVkLiBUaGVzZSBhcmUKKyAgICAgICAg
YWxzbyBzZXJpYWxpemFibGUgYXMgaGFzaGVzLCB3aGljaCBtYXkgdGhlbiBiZSBjb252ZXJ0ZWQg
dG8gSlNPTiB3aGVuIGdlbmVyYXRpbmcgZWRpdGluZyBoaXN0b3J5IGRhdGEuCisKKyAgICAgICAg
KENoaWxkTGlzdFVwZGF0ZSk6CisgICAgICAgIChDaGlsZExpc3RVcGRhdGUucHJvdG90eXBlLmFw
cGx5KToKKyAgICAgICAgKENoaWxkTGlzdFVwZGF0ZS5wcm90b3R5cGUudW5hcHBseSk6CisgICAg
ICAgIChDaGlsZExpc3RVcGRhdGUucHJvdG90eXBlLl9uZXh0U2libGluZyk6CisgICAgICAgIChD
aGlsZExpc3RVcGRhdGUucHJvdG90eXBlLl9yZW1vdmVkTm9kZXMpOgorICAgICAgICAoQ2hpbGRM
aXN0VXBkYXRlLnByb3RvdHlwZS5fYWRkZWROb2Rlcyk6CisgICAgICAgIChDaGlsZExpc3RVcGRh
dGUucHJvdG90eXBlLnRvT2JqZWN0KToKKyAgICAgICAgKENoaWxkTGlzdFVwZGF0ZS5wcm90b3R5
cGUuZGV0YWlsc0VsZW1lbnQpOgorICAgICAgICAoQ2hpbGRMaXN0VXBkYXRlLmZyb21PYmplY3Qp
OgorCisgICAgICAgIFRoZXNlIHRocmVlIHVwZGF0ZSB0eXBlcyBjb3JyZXNwb25kIHRvIHRoZSB0
aHJlZSB0eXBlcyBvZiBET00gbXV0YXRpb25zLiBUaGVzZSBtYXkgYXBwZWFyIGFzIHRvcC1sZXZl
bCB1cGRhdGVzCisgICAgICAgIGlmIHRoZXkgYXJlIG5vdCBjYXB0dXJlZCBkdXJpbmcgYW4gaW5w
dXQgZXZlbnQsIGJ1dCBmb3IgdGhlIG1ham9yaXR5IG9mIHVzZXItaW5wdXQtZHJpdmVuIGNoYW5n
ZXMsIHRoZXkgd2lsbCBiZQorICAgICAgICBjaGlsZHJlbiBvZiBhbiBpbnB1dCBldmVudC4KKwor
ICAgICAgICAoQ2hhcmFjdGVyRGF0YVVwZGF0ZSk6CisgICAgICAgIChDaGFyYWN0ZXJEYXRhVXBk
YXRlLnByb3RvdHlwZS5hcHBseSk6CisgICAgICAgIChDaGFyYWN0ZXJEYXRhVXBkYXRlLnByb3Rv
dHlwZS51bmFwcGx5KToKKyAgICAgICAgKENoYXJhY3RlckRhdGFVcGRhdGUucHJvdG90eXBlLmRl
dGFpbHNFbGVtZW50KToKKyAgICAgICAgKENoYXJhY3RlckRhdGFVcGRhdGUucHJvdG90eXBlLnRv
T2JqZWN0KToKKyAgICAgICAgKENoYXJhY3RlckRhdGFVcGRhdGUuZnJvbU9iamVjdCk6CisgICAg
ICAgIChBdHRyaWJ1dGVVcGRhdGUpOgorICAgICAgICAoQXR0cmlidXRlVXBkYXRlLnByb3RvdHlw
ZS5hcHBseSk6CisgICAgICAgIChBdHRyaWJ1dGVVcGRhdGUucHJvdG90eXBlLnVuYXBwbHkpOgor
ICAgICAgICAoQXR0cmlidXRlVXBkYXRlLnByb3RvdHlwZS5kZXRhaWxzRWxlbWVudCk6CisgICAg
ICAgIChBdHRyaWJ1dGVVcGRhdGUucHJvdG90eXBlLnRvT2JqZWN0KToKKyAgICAgICAgKEF0dHJp
YnV0ZVVwZGF0ZS5mcm9tT2JqZWN0KToKKyAgICAgICAgKFNlbGVjdGlvblVwZGF0ZSk6CisgICAg
ICAgIChTZWxlY3Rpb25VcGRhdGUucHJvdG90eXBlLmFwcGx5KToKKyAgICAgICAgKFNlbGVjdGlv
blVwZGF0ZS5wcm90b3R5cGUudW5hcHBseSk6CisgICAgICAgIChTZWxlY3Rpb25VcGRhdGUucHJv
dG90eXBlLnRvT2JqZWN0KToKKyAgICAgICAgKFNlbGVjdGlvblVwZGF0ZS5mcm9tT2JqZWN0KToK
KyAgICAgICAgKFNlbGVjdGlvblVwZGF0ZS5wcm90b3R5cGUuX3JhbmdlRGVzY3JpcHRpb25IVE1M
KToKKyAgICAgICAgKFNlbGVjdGlvblVwZGF0ZS5wcm90b3R5cGUuX2FuY2hvckRlc2NyaXB0aW9u
SFRNTCk6CisgICAgICAgIChTZWxlY3Rpb25VcGRhdGUucHJvdG90eXBlLl9mb2N1c0Rlc2NyaXB0
aW9uSFRNTCk6CisgICAgICAgIChTZWxlY3Rpb25VcGRhdGUucHJvdG90eXBlLmRldGFpbHNFbGVt
ZW50KToKKworICAgICAgICBSZXByZXNlbnRzIGEgY2hhbmdlIGluIHRoZSBTZWxlY3Rpb24uIFdo
aWxlIG5vIGNoYW5nZXMgdG8gdGhlIERPTSBzdHJ1Y3R1cmUgb2NjdXIgYXMgYSByZXN1bHQgb2Yg
YQorICAgICAgICBTZWxlY3Rpb25VcGRhdGUsIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4g
dGhlc2UgdXBkYXRlcyBpcyB1c2VkIHRvIGRldGVybWluZSB3aGVyZSB0aGUgc2VsZWN0aW9uIHNo
b3VsZCBiZQorICAgICAgICB3aGVuIHJld2luZGluZyBvciBwbGF5aW5nIGJhY2sgdGhlIGVkaXRp
bmcgaGlzdG9yeS4KKworICAgICAgICAoSW5wdXRFdmVudFVwZGF0ZSk6CisgICAgICAgIChJbnB1
dEV2ZW50VXBkYXRlLnByb3RvdHlwZS5fb2JmdXNjYXRlZERhdGEpOgorICAgICAgICAoSW5wdXRF
dmVudFVwZGF0ZS5wcm90b3R5cGUuYXBwbHkpOgorICAgICAgICAoSW5wdXRFdmVudFVwZGF0ZS5w
cm90b3R5cGUudW5hcHBseSk6CisgICAgICAgIChJbnB1dEV2ZW50VXBkYXRlLnByb3RvdHlwZS50
b09iamVjdCk6CisgICAgICAgIChJbnB1dEV2ZW50VXBkYXRlLmZyb21PYmplY3QpOgorICAgICAg
ICAoSW5wdXRFdmVudFVwZGF0ZS5wcm90b3R5cGUuZGV0YWlsc0VsZW1lbnQpOgorCisgICAgICAg
IFJlcHJlc2VudHMgYW4gdXBkYXRlIGR1ZSB0byB1c2VyIGlucHV0LCB3aGljaCBjb25zaXN0cyBv
ZiBzb21lIG51bWJlciBvZiBjaGlsZCBET00gbXV0YXRpb24gdXBkYXRlcy4KKworICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxNi0xMS0zMCAgQ3NhYmEg
T3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgc3Bl
Y3VsYXRpdmUgY21ha2UgYnVpbGRmaXggYWZ0ZXIgcjIwOTA3MC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0ludGVybmFsU2NyaXB0cy9EdW1wRWRpdGluZ0hpc3RvcnkuanMgYi9Tb3VyY2Uv
V2ViQ29yZS9JbnRlcm5hbFNjcmlwdHMvRHVtcEVkaXRpbmdIaXN0b3J5LmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjVlZGM1ZWMxMzY0OGNiNGUyZTcyZTliOWI1Mzk1OWI1NWQwMWRlODAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9JbnRlcm5hbFNjcmlwdHMvRHVtcEVkaXRpbmdIaXN0b3J5Lmpz
CkBAIC0wLDAgKzEsOTMgQEAKKygoKSA9PiB7CisgICAgbGV0IGluaXRpYWxpemVkID0gZmFsc2U7
CisgICAgbGV0IGdsb2JhbE5vZGVNYXAgPSBuZXcgRWRpdGluZ0hpc3RvcnkuR2xvYmFsTm9kZU1h
cCgpOworICAgIGxldCB0b3BMZXZlbFVwZGF0ZXMgPSBbXTsKKyAgICBsZXQgY3VycmVudENoaWxk
VXBkYXRlcyA9IFtdOworICAgIGxldCBpc1Byb2Nlc3NpbmdUb3BMZXZlbFVwZGF0ZSA9IGZhbHNl
OworICAgIGxldCBsYXN0S25vd25TZWxlY3Rpb25TdGF0ZSA9IG51bGw7CisgICAgbGV0IG11dGF0
aW9uT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihyZWNvcmRzID0+IGFwcGVuZERPTVVw
ZGF0ZXNGcm9tUmVjb3JkcyhyZWNvcmRzKSk7CisKKyAgICBmdW5jdGlvbiBiZWdpblByb2Nlc3Np
bmdUb3BMZXZlbFVwZGF0ZSgpIHsKKyAgICAgICAgaXNQcm9jZXNzaW5nVG9wTGV2ZWxVcGRhdGUg
PSB0cnVlOworICAgIH0KKworICAgIGZ1bmN0aW9uIGVuZFByb2Nlc3NpbmdUb3BMZXZlbFVwZGF0
ZSh0b3BMZXZlbFVwZGF0ZSkgeworICAgICAgICB0b3BMZXZlbFVwZGF0ZXMucHVzaCh0b3BMZXZl
bFVwZGF0ZSk7CisgICAgICAgIGN1cnJlbnRDaGlsZFVwZGF0ZXMgPSBbXTsKKyAgICAgICAgaXNQ
cm9jZXNzaW5nVG9wTGV2ZWxVcGRhdGUgPSBmYWxzZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBh
cHBlbmRET01VcGRhdGVzRnJvbVJlY29yZHMocmVjb3JkcykgeworICAgICAgICBpZiAoIXJlY29y
ZHMubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGxldCBuZXdVcGRhdGVz
ID0gRWRpdGluZ0hpc3RvcnkuRE9NVXBkYXRlLmZyb21SZWNvcmRzKHJlY29yZHMsIGdsb2JhbE5v
ZGVNYXApOworICAgICAgICBpZiAoaXNQcm9jZXNzaW5nVG9wTGV2ZWxVcGRhdGUpCisgICAgICAg
ICAgICBjdXJyZW50Q2hpbGRVcGRhdGVzID0gY3VycmVudENoaWxkVXBkYXRlcy5jb25jYXQobmV3
VXBkYXRlcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRvcExldmVsVXBkYXRlcyA9IHRv
cExldmVsVXBkYXRlcy5jb25jYXQobmV3VXBkYXRlcyk7CisgICAgfQorCisgICAgZnVuY3Rpb24g
YXBwZW5kU2VsZWN0aW9uVXBkYXRlSWZOZWNlc3NhcnkoKSB7CisgICAgICAgIGxldCBuZXdTZWxl
Y3Rpb25TdGF0ZSA9IEVkaXRpbmdIaXN0b3J5LlNlbGVjdGlvblN0YXRlLmZyb21TZWxlY3Rpb24o
Z2V0U2VsZWN0aW9uKCksIGdsb2JhbE5vZGVNYXApOworICAgICAgICBpZiAobmV3U2VsZWN0aW9u
U3RhdGUuaXNFcXVhbChsYXN0S25vd25TZWxlY3Rpb25TdGF0ZSkpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgbGV0IHVwZGF0ZSA9IG5ldyBFZGl0aW5nSGlzdG9yeS5TZWxlY3Rpb25V
cGRhdGUoZ2xvYmFsTm9kZU1hcCwgbmV3U2VsZWN0aW9uU3RhdGUpOworICAgICAgICBpZiAoaXNQ
cm9jZXNzaW5nVG9wTGV2ZWxVcGRhdGUpCisgICAgICAgICAgICBjdXJyZW50Q2hpbGRVcGRhdGVz
LnB1c2godXBkYXRlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdG9wTGV2ZWxVcGRhdGVz
LnB1c2godXBkYXRlKTsKKyAgICAgICAgbGFzdEtub3duU2VsZWN0aW9uU3RhdGUgPSBuZXdTZWxl
Y3Rpb25TdGF0ZTsKKyAgICB9CisKKyAgICBkb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZSgiY29u
dGVudGVkaXRhYmxlIiwgdHJ1ZSk7CisgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVy
KCJmb2N1cyIsICgpID0+IHsKKyAgICAgICAgaWYgKGluaXRpYWxpemVkKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgICAgICBFZGl0aW5n
SGlzdG9yeS5nZXRFZGl0aW5nSGlzdG9yeUFzSlNPTlN0cmluZyA9IChmb3JtYXR0ZWQpID0+IHsK
KyAgICAgICAgICAgIGxldCByZWNvcmQgPSB7fTsKKyAgICAgICAgICAgIHJlY29yZC51cGRhdGVz
ID0gdG9wTGV2ZWxVcGRhdGVzLm1hcCh1cGRhdGUgPT4gdXBkYXRlLnRvT2JqZWN0KCkpOworICAg
ICAgICAgICAgcmVjb3JkLmdsb2JhbE5vZGVNYXAgPSBnbG9iYWxOb2RlTWFwLnRvT2JqZWN0KCk7
CisgICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkID8gSlNPTi5zdHJpbmdpZnkocmVjb3JkLCBu
dWxsLCA0KSA6IEpTT04uc3RyaW5naWZ5KHJlY29yZCk7CisgICAgICAgIH07CisKKyAgICAgICAg
ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIiwgKCkgPT4geworICAg
ICAgICAgICAgYXBwZW5kU2VsZWN0aW9uVXBkYXRlSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgfSk7
CisgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZWlucHV0IiwgZXZlbnQg
PT4geworICAgICAgICAgICAgYXBwZW5kRE9NVXBkYXRlc0Zyb21SZWNvcmRzKG11dGF0aW9uT2Jz
ZXJ2ZXIudGFrZVJlY29yZHMoKSk7CisgICAgICAgICAgICBiZWdpblByb2Nlc3NpbmdUb3BMZXZl
bFVwZGF0ZSgpOworICAgICAgICB9KTsKKworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3Rl
bmVyKCJpbnB1dCIsIGV2ZW50ID0+IHsKKyAgICAgICAgICAgIGFwcGVuZERPTVVwZGF0ZXNGcm9t
UmVjb3JkcyhtdXRhdGlvbk9ic2VydmVyLnRha2VSZWNvcmRzKCkpOworICAgICAgICAgICAgbGV0
IGV2ZW50RGF0YSA9IGV2ZW50LmRhdGFUcmFuc2ZlciA/IGV2ZW50LmRhdGFUcmFuc2Zlci5nZXRE
YXRhKCJ0ZXh0L2h0bWwiKSA6IGV2ZW50LmRhdGE7CisgICAgICAgICAgICBsYXN0S25vd25TZWxl
Y3Rpb25TdGF0ZSA9IG51bGw7CisgICAgICAgICAgICBlbmRQcm9jZXNzaW5nVG9wTGV2ZWxVcGRh
dGUobmV3IEVkaXRpbmdIaXN0b3J5LklucHV0RXZlbnRVcGRhdGUoZ2xvYmFsTm9kZU1hcCwgY3Vy
cmVudENoaWxkVXBkYXRlcywgZXZlbnQuaW5wdXRUeXBlLCBldmVudERhdGEsIGV2ZW50LnRpbWVT
dGFtcCkpOworICAgICAgICB9KTsKKworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVy
KCJrZXlkb3duIiwgZXZlbnQgPT4geworICAgICAgICAgICAgaWYgKGV2ZW50LmtleSAhPT0gInMi
IHx8ICFldmVudC5tZXRhS2V5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg
ICAgbGV0IGZha2VMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOworICAgICAgICAg
ICAgZmFrZUxpbmsuc2V0QXR0cmlidXRlKCJocmVmIiwgImRhdGE6dGV4dC9wbGFpbjtjaGFyc2V0
PXV0Zi04LCIgKyBlbmNvZGVVUklDb21wb25lbnQoRWRpdGluZ0hpc3RvcnkuZ2V0RWRpdGluZ0hp
c3RvcnlBc0pTT05TdHJpbmcoKSkpOworICAgICAgICAgICAgZmFrZUxpbmsuc2V0QXR0cmlidXRl
KCJkb3dubG9hZCIsICJyZWNvcmQuanNvbiIpOworICAgICAgICAgICAgZmFrZUxpbmsuY2xpY2so
KTsKKyAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgIH0pOworCisg
ICAgICAgIG11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwgeworICAgICAgICAgICAg
Y2hpbGRMaXN0OiB0cnVlLAorICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSwKKyAgICAgICAg
ICAgIGNoYXJhY3RlckRhdGE6IHRydWUsCisgICAgICAgICAgICBzdWJ0cmVlOiB0cnVlLAorICAg
ICAgICAgICAgYXR0cmlidXRlT2xkVmFsdWU6IHRydWUsCisgICAgICAgICAgICBjaGFyYWN0ZXJE
YXRhT2xkVmFsdWU6IHRydWUsCisgICAgICAgIH0pOworICAgIH0pOworfSkoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0ludGVybmFsU2NyaXB0cy9FZGl0aW5nSGlzdG9yeVV0aWwuanMg
Yi9Tb3VyY2UvV2ViQ29yZS9JbnRlcm5hbFNjcmlwdHMvRWRpdGluZ0hpc3RvcnlVdGlsLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjY0NTg3MGIzZDBhOWIyMDY1YmRhZWRhOWFjOTJjOTQ2ZjczZjU5NjAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9JbnRlcm5hbFNjcmlwdHMvRWRpdGluZ0hpc3Rv
cnlVdGlsLmpzCkBAIC0wLDAgKzEsNjkzIEBACisoKCkgPT4geworICAgIGNsYXNzIE9iZnVzY2F0
b3IgeworICAgICAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgICAgICAgIHRoaXMuX3NjcmFtYmxl
ZExvd2VyY2FzZUxldHRlcnMgPSB0aGlzLl9zY3JhbWJsZShBcnJheSgyNikuZmlsbCgpLm1hcCgo
XywgaSkgPT4gOTcgKyBpKSk7CisgICAgICAgICAgICB0aGlzLl9zY3JhbWJsZWRVcHBlcmNhc2VM
ZXR0ZXJzID0gdGhpcy5fc2NyYW1ibGUoQXJyYXkoMjYpLmZpbGwoKS5tYXAoKF8sIGkpID0+IDY1
ICsgaSkpOworICAgICAgICAgICAgdGhpcy5fc2NyYW1ibGVkTnVtYmVycyA9IHRoaXMuX3NjcmFt
YmxlKEFycmF5KDEwKS5maWxsKCkubWFwKChfLCBpKSA9PiA0OCArIGkpKTsKKyAgICAgICAgICAg
IHRoaXMuZW5hYmxlZCA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgX3NjcmFtYmxlKGFy
cmF5KSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gYXJyYXkubGVuZ3RoIC0gMTsgaSA+IDA7
IGktLSkgeworICAgICAgICAgICAgICAgIGxldCBqID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgp
ICogKGkgKyAxKSk7CisgICAgICAgICAgICAgICAgbGV0IHRlbXAgPSBhcnJheVtpXTsKKyAgICAg
ICAgICAgICAgICBhcnJheVtpXSA9IGFycmF5W2pdOworICAgICAgICAgICAgICAgIGFycmF5W2pd
ID0gdGVtcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBhcnJheTsKKyAgICAg
ICAgfQorCisgICAgICAgIGFwcGx5VG9UZXh0KHRleHQpIHsKKyAgICAgICAgICAgIGlmICghdGhp
cy5lbmFibGVkIHx8ICF0ZXh0KQorICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0OworCisgICAg
ICAgICAgICBsZXQgcmVzdWx0ID0gIiI7CisgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7
IGluZGV4IDwgdGV4dC5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICBsZXQgY29k
ZSA9IHRleHQuY2hhckNvZGVBdChpbmRleCk7CisgICAgICAgICAgICAgICAgbGV0IG51bWJlcklu
ZGV4ID0gdGhpcy5fc2NyYW1iZWROdW1iZXJJbmRleEZvckNvZGUoY29kZSk7CisgICAgICAgICAg
ICAgICAgbGV0IGxvd2VyY2FzZUluZGV4ID0gdGhpcy5fc2NyYW1iZWRMb3dlcmNhc2VJbmRleEZv
ckNvZGUoY29kZSk7CisgICAgICAgICAgICAgICAgbGV0IHVwcGVyY2FzZUluZGV4ID0gdGhpcy5f
c2NyYW1iZWRVcHBlcmNhc2VJbmRleEZvckNvZGUoY29kZSk7CisKKyAgICAgICAgICAgICAgICBp
ZiAobnVtYmVySW5kZXggIT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFN0
cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fc2NyYW1ibGVkTnVtYmVyc1tudW1iZXJJbmRleF0pOwor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxvd2VyY2FzZUluZGV4ICE9IG51bGwpCisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX3NjcmFtYmxl
ZExvd2VyY2FzZUxldHRlcnNbbG93ZXJjYXNlSW5kZXhdKTsKKyAgICAgICAgICAgICAgICBlbHNl
IGlmICh1cHBlcmNhc2VJbmRleCAhPSBudWxsKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQg
Kz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9zY3JhbWJsZWRVcHBlcmNhc2VMZXR0ZXJzW3Vw
cGVyY2FzZUluZGV4XSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgKz0gdGV4dC5jaGFyQXQoaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIGFwcGx5VG9GaWxlbmFtZShm
aWxlbmFtZSkgeworICAgICAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgIWZpbGVuYW1lKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmaWxlbmFtZTsKKworICAgICAgICAgICAgbGV0IGNvbXBv
bmVudHMgPSBmaWxlbmFtZS5zcGxpdCgiLiIpOworICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVu
dHMubWFwKChjb21wb25lbnQsIGluZGV4KSA9PiB7CisgICAgICAgICAgICAgICAgaWYgKGluZGV4
ID09IGNvbXBvbmVudHMubGVuZ3RoIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNv
bXBvbmVudDsKKworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGx5VG9UZXh0KGNvbXBv
bmVudCk7CisgICAgICAgICAgICB9KS5qb2luKCIuIik7CisgICAgICAgIH0KKworICAgICAgICBf
c2NyYW1iZWROdW1iZXJJbmRleEZvckNvZGUoY29kZSkgeworICAgICAgICAgICAgcmV0dXJuIDQ4
IDw9IGNvZGUgJiYgY29kZSA8PSA1NyA/IGNvZGUgLSA0OCA6IG51bGw7CisgICAgICAgIH0KKwor
ICAgICAgICBfc2NyYW1iZWRMb3dlcmNhc2VJbmRleEZvckNvZGUoY29kZSkgeworICAgICAgICAg
ICAgcmV0dXJuIDk3IDw9IGNvZGUgJiYgY29kZSA8PSAxMjIgPyBjb2RlIC0gOTcgOiBudWxsOwor
ICAgICAgICB9CisKKyAgICAgICAgX3NjcmFtYmVkVXBwZXJjYXNlSW5kZXhGb3JDb2RlKGNvZGUp
IHsKKyAgICAgICAgICAgIHJldHVybiA2NSA8PSBjb2RlICYmIGNvZGUgPD0gOTAgPyBjb2RlIC0g
NjUgOiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHNoYXJlZCgpIHsKKyAgICAg
ICAgICAgIGlmICghT2JmdXNjYXRvci5fc2hhcmVkSW5zdGFuY2UpCisgICAgICAgICAgICAgICAg
T2JmdXNjYXRvci5fc2hhcmVkSW5zdGFuY2UgPSBuZXcgT2JmdXNjYXRvcigpOworICAgICAgICAg
ICAgcmV0dXJuIE9iZnVzY2F0b3IuX3NoYXJlZEluc3RhbmNlOworICAgICAgICB9CisgICAgfQor
CisgICAgZnVuY3Rpb24gZWxlbWVudEZyb21NYXJrZG93bihodG1sKSB7CisgICAgICAgIGxldCB0
ZW1wb3JhcnlEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgdGVt
cG9yYXJ5RGl2LmlubmVySFRNTCA9IGh0bWw7CisgICAgICAgIHJldHVybiB0ZW1wb3JhcnlEaXYu
Y2hpbGRyZW5bMF07CisgICAgfQorCisgICAgY2xhc3MgR2xvYmFsTm9kZU1hcCB7CisgICAgICAg
IGNvbnN0cnVjdG9yKG5vZGVzQnlHVUlEKSB7CisgICAgICAgICAgICB0aGlzLl9ub2Rlc0J5R1VJ
RCA9IG5vZGVzQnlHVUlEID8gbm9kZXNCeUdVSUQgOiBuZXcgTWFwKCk7CisgICAgICAgICAgICB0
aGlzLl9ndWlkc0J5Tm9kZSA9IG5ldyBNYXAoKTsKKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRH
VUlEID0gMDsKKyAgICAgICAgICAgIGZvciAobGV0IFtndWlkLCBub2RlXSBvZiB0aGlzLl9ub2Rl
c0J5R1VJRCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2d1aWRzQnlOb2RlLnNldChub2RlLCBn
dWlkKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50R1VJRCA9IE1hdGgubWF4KHRoaXMu
X2N1cnJlbnRHVUlELCBndWlkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2N1
cnJlbnRHVUlEKys7CisgICAgICAgIH0KKworICAgICAgICBub2Rlc0ZvckdVSURzKGd1aWRzKSB7
CisgICAgICAgICAgICBpZiAoIWd1aWRzLm1hcCkKKyAgICAgICAgICAgICAgICBndWlkcyA9IEFy
cmF5LmZyb20oZ3VpZHMpOworICAgICAgICAgICAgcmV0dXJuIGd1aWRzLm1hcChndWlkID0+IHRo
aXMubm9kZUZvckdVSUQoZ3VpZCkpOworICAgICAgICB9CisKKyAgICAgICAgZ3VpZHNGb3JOb2Rl
cyhub2RlcykgeworICAgICAgICAgICAgaWYgKCFub2Rlcy5tYXApCisgICAgICAgICAgICAgICAg
bm9kZXMgPSBBcnJheS5mcm9tKG5vZGVzKTsKKyAgICAgICAgICAgIHJldHVybiBub2Rlcy5tYXAo
bm9kZSA9PiB0aGlzLmd1aWRGb3JOb2RlKG5vZGUpKTsKKyAgICAgICAgfQorCisgICAgICAgIG5v
ZGVGb3JHVUlEKGd1aWQpIHsKKyAgICAgICAgICAgIGlmICghZ3VpZCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbDsKKworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVzQnlHVUlELmdl
dChndWlkKTsKKyAgICAgICAgfQorCisgICAgICAgIGd1aWRGb3JOb2RlKG5vZGUpIHsKKyAgICAg
ICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAg
ICAgaWYgKHRoaXMuaGFzR1VJREZvck5vZGUobm9kZSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2d1aWRzQnlOb2RlLmdldChub2RlKTsKKworICAgICAgICAgICAgY29uc3QgZ3VpZCA9
IHRoaXMuX2N1cnJlbnRHVUlEOworICAgICAgICAgICAgdGhpcy5fZ3VpZHNCeU5vZGUuc2V0KG5v
ZGUsIGd1aWQpOworICAgICAgICAgICAgdGhpcy5fbm9kZXNCeUdVSUQuc2V0KGd1aWQsIG5vZGUp
OworICAgICAgICAgICAgdGhpcy5fY3VycmVudEdVSUQrKzsKKyAgICAgICAgICAgIHJldHVybiBn
dWlkOworICAgICAgICB9CisKKyAgICAgICAgaGFzR1VJREZvck5vZGUobm9kZSkgeworICAgICAg
ICAgICAgcmV0dXJuICEhdGhpcy5fZ3VpZHNCeU5vZGUuZ2V0KG5vZGUpOworICAgICAgICB9CisK
KyAgICAgICAgbm9kZXMoKSB7CisgICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9u
b2Rlc0J5R1VJRC52YWx1ZXMoKSk7CisgICAgICAgIH0KKworICAgICAgICB0b09iamVjdCgpIHsK
KyAgICAgICAgICAgIGxldCBub2Rlc0FuZEdVSURzVG9Qcm9jZXNzID0gW10sIGd1aWRzVG9Qcm9j
ZXNzID0gbmV3IFNldCgpOworICAgICAgICAgICAgbGV0IGd1aWRzQnlOb2RlSXRlcmF0b3IgPSB0
aGlzLl9ndWlkc0J5Tm9kZS5lbnRyaWVzKCk7CisgICAgICAgICAgICBmb3IgKGxldCBlbnRyeSA9
IGd1aWRzQnlOb2RlSXRlcmF0b3IubmV4dCgpOyAhZW50cnkuZG9uZTsgZW50cnkgPSBndWlkc0J5
Tm9kZUl0ZXJhdG9yLm5leHQoKSkgeworICAgICAgICAgICAgICAgIG5vZGVzQW5kR1VJRHNUb1By
b2Nlc3MucHVzaChlbnRyeS52YWx1ZSk7CisgICAgICAgICAgICAgICAgZ3VpZHNUb1Byb2Nlc3Mu
YWRkKGVudHJ5LnZhbHVlWzFdKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGV0IGl0
ZXJhdG9yID0gZG9jdW1lbnQuY3JlYXRlTm9kZUl0ZXJhdG9yKGRvY3VtZW50LmJvZHksIE5vZGVG
aWx0ZXIuU0hPV19BTEwpOworICAgICAgICAgICAgZm9yIChsZXQgbm9kZSA9IGl0ZXJhdG9yLm5l
eHROb2RlKCk7IG5vZGU7IG5vZGUgPSBpdGVyYXRvci5uZXh0Tm9kZSgpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuaGFzR1VJREZvck5vZGUobm9kZSkpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgbGV0IG5ld0dVSUQgPSB0aGlzLmd1aWRGb3JO
b2RlKG5vZGUpOworICAgICAgICAgICAgICAgIG5vZGVzQW5kR1VJRHNUb1Byb2Nlc3MucHVzaChb
bm9kZSwgbmV3R1VJRF0pOworICAgICAgICAgICAgICAgIGd1aWRzVG9Qcm9jZXNzLmFkZChuZXdH
VUlEKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGV0IG5vZGVJbmZvQXJyYXkgPSBb
XTsKKyAgICAgICAgICAgIHdoaWxlIChub2Rlc0FuZEdVSURzVG9Qcm9jZXNzLmxlbmd0aCkgewor
ICAgICAgICAgICAgICAgIGxldCBbbm9kZSwgZ3VpZF0gPSBub2Rlc0FuZEdVSURzVG9Qcm9jZXNz
LnBvcCgpOworICAgICAgICAgICAgICAgIGxldCBpbmZvID0ge307CisgICAgICAgICAgICAgICAg
aW5mby5ndWlkID0gZ3VpZDsKKyAgICAgICAgICAgICAgICBpbmZvLnRhZ05hbWUgPSBub2RlLnRh
Z05hbWU7CisgICAgICAgICAgICAgICAgaW5mby5hdHRyaWJ1dGVzID0gR2xvYmFsTm9kZU1hcC5u
b2RlQXR0cmlidXRlc1RvT2JqZWN0KG5vZGUpOworICAgICAgICAgICAgICAgIGluZm8udHlwZSA9
IG5vZGUubm9kZVR5cGU7CisgICAgICAgICAgICAgICAgaW5mby5kYXRhID0gR2xvYmFsTm9kZU1h
cC5kYXRhRm9yTm9kZShub2RlKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5oYXNDaGlsZE5v
ZGVzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mby5jaGlsZEdVSURzID0gdGhpcy5ndWlk
c0Zvck5vZGVzKG5vZGUuY2hpbGROb2Rlcyk7CisgICAgICAgICAgICAgICAgICAgIGZvciAobGV0
IGNoaWxkR1VJRCBvZiBpbmZvLmNoaWxkR1VJRHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghZ3VpZHNUb1Byb2Nlc3MuaGFzKGNoaWxkR1VJRCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZXNBbmRHVUlEc1RvUHJvY2Vzcy5wdXNoKFt0aGlzLm5vZGVGb3JHVUlEKGNo
aWxkR1VJRCksIGNoaWxkR1VJRF0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIG5vZGVJbmZvQXJyYXkucHVzaChpbmZvKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmZvQXJyYXk7CisgICAgICAgIH0K
KworICAgICAgICBzdGF0aWMgZnJvbU9iamVjdChub2RlSW5mb0FycmF5KSB7CisgICAgICAgICAg
ICBsZXQgbm9kZXNCeUdVSUQgPSBuZXcgTWFwKCk7CisgICAgICAgICAgICBmb3IgKGxldCBpbmZv
IG9mIG5vZGVJbmZvQXJyYXkpIHsKKyAgICAgICAgICAgICAgICBsZXQgbm9kZSA9IG51bGw7Cisg
ICAgICAgICAgICAgICAgaWYgKGluZm8udHlwZSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZSA9IEdsb2JhbE5vZGVNYXAuZWxlbWVudEZyb21UYWdOYW1lKGlu
Zm8udGFnTmFtZSwgaW5mby5hdHRyaWJ1dGVzLCBpbmZvLmRhdGEpOworCisgICAgICAgICAgICAg
ICAgaWYgKGluZm8udHlwZSA9PSBOb2RlLlRFWFRfTk9ERSkKKyAgICAgICAgICAgICAgICAgICAg
bm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGluZm8uZGF0YSk7CisKKyAgICAgICAgICAg
ICAgICBpZiAoaW5mby50eXBlID09IE5vZGUuRE9DVU1FTlRfTk9ERSkKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZSA9IGRvY3VtZW50OworCisgICAgICAgICAgICAgICAgY29uc29sZS5hc3NlcnQo
bm9kZSk7CisgICAgICAgICAgICAgICAgbm9kZXNCeUdVSUQuc2V0KGluZm8uZ3VpZCwgbm9kZSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRoZW4sIHNldCBjaGlsZCBub2RlcyBm
b3IgYWxsIG5vZGVzIHRoYXQgZG8gbm90IGFwcGVhciBpbiB0aGUgRE9NLgorICAgICAgICAgICAg
Zm9yIChsZXQgaW5mbyBvZiBub2RlSW5mb0FycmF5LmZpbHRlcihpbmZvID0+ICEhaW5mby5jaGls
ZEdVSURzKSkgeworICAgICAgICAgICAgICAgIGxldCBub2RlID0gbm9kZXNCeUdVSUQuZ2V0KGlu
Zm8uZ3VpZCk7CisgICAgICAgICAgICAgICAgZm9yIChsZXQgY2hpbGRHVUlEIG9mIGluZm8uY2hp
bGRHVUlEcykKKyAgICAgICAgICAgICAgICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQobm9kZXNCeUdV
SUQuZ2V0KGNoaWxkR1VJRCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4g
bmV3IEdsb2JhbE5vZGVNYXAobm9kZXNCeUdVSUQpOworICAgICAgICB9CisKKyAgICAgICAgc3Rh
dGljIGRhdGFGb3JOb2RlKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09
PSBOb2RlLlRFWFRfTk9ERSkKKyAgICAgICAgICAgICAgICByZXR1cm4gT2JmdXNjYXRvci5zaGFy
ZWQoKS5hcHBseVRvVGV4dChub2RlLmRhdGEpOworCisgICAgICAgICAgICBpZiAobm9kZS50YWdO
YW1lICYmIG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAiYXR0YWNobWVudCIpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0eXBlOiBub2RlLmZp
bGUudHlwZSwKKyAgICAgICAgICAgICAgICAgICAgbmFtZTogT2JmdXNjYXRvci5zaGFyZWQoKS5h
cHBseVRvRmlsZW5hbWUobm9kZS5maWxlLm5hbWUpLAorICAgICAgICAgICAgICAgICAgICBsYXN0
TW9kaWZpZWQ6IG5ldyBEYXRlKCkuZ2V0VGltZSgpCisgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAg
ICBzdGF0aWMgZWxlbWVudEZyb21UYWdOYW1lKHRhZ05hbWUsIGF0dHJpYnV0ZXMsIGRhdGEpIHsK
KyAgICAgICAgICAgIGxldCBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsK
KyAgICAgICAgICAgIGZvciAobGV0IGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlcykKKyAgICAg
ICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVzW2F0
dHJpYnV0ZU5hbWVdKTsKKworICAgICAgICAgICAgaWYgKHRhZ05hbWUudG9Mb3dlckNhc2UoKSA9
PSAiYXR0YWNobWVudCIpIHsKKyAgICAgICAgICAgICAgICBub2RlLmZpbGUgPSBuZXcgRmlsZShb
YEZpbGUgbmFtZWQgJyR7ZGF0YS5uYW1lfSdgXSwgZGF0YS5uYW1lLCB7CisgICAgICAgICAgICAg
ICAgICAgIHR5cGU6IGRhdGEudHlwZSwKKyAgICAgICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVk
OiBkYXRhLmxhc3RNb2RpZmllZAorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJldHVy
bnMgYW4gT2JqZWN0IGNvbnRhaW5pbmcgYXR0cmlidXRlIG5hbWUgPT4gYXR0cmlidXRlIHZhbHVl
CisgICAgICAgIHN0YXRpYyBub2RlQXR0cmlidXRlc1RvT2JqZWN0KG5vZGUsIGF0dHJpYnV0ZXNU
b0V4Y2x1ZGU9W10pIHsKKyAgICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVBdHRyaWJ1dGVzU2V0ID0g
bmV3IFNldChhdHRyaWJ1dGVzVG9FeGNsdWRlKTsKKyAgICAgICAgICAgIGlmICghbm9kZS5hdHRy
aWJ1dGVzKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgICAgICBsZXQg
YXR0cmlidXRlTWFwID0ge307CisgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4
IDwgbm9kZS5hdHRyaWJ1dGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIGNv
bnN0IGF0dHJpYnV0ZSA9IG5vZGUuYXR0cmlidXRlcy5pdGVtKGluZGV4KTsKKyAgICAgICAgICAg
ICAgICBjb25zdCBbbG9jYWxOYW1lLCB2YWx1ZV0gPSBbYXR0cmlidXRlLmxvY2FsTmFtZSwgYXR0
cmlidXRlLnZhbHVlXTsKKyAgICAgICAgICAgICAgICBpZiAoZXhjbHVkZUF0dHJpYnV0ZXNTZXQu
aGFzKGxvY2FsTmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICAgICAgYXR0cmlidXRlTWFwW2xvY2FsTmFtZV0gPSB2YWx1ZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZU1hcDsKKyAgICAgICAgfQorCisgICAgICAg
IGRlc2NyaXB0aW9uSFRNTEZvckdVSUQoZ3VpZCkgeworICAgICAgICAgICAgcmV0dXJuIGA8c3Bh
biBlaC1ndWlkPSR7Z3VpZH0gY2xhc3M9ImVoLW5vZGUiPiR7dGhpcy5ub2RlRm9yR1VJRChndWlk
KS5ub2RlTmFtZX08L3NwYW4+YDsKKyAgICAgICAgfQorCisgICAgICAgIGRlc2NyaXB0aW9uSFRN
TEZvck5vZGUobm9kZSkgeworICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgICAg
IHJldHVybiAiKG51bGwpIjsKKyAgICAgICAgICAgIHJldHVybiBgPHNwYW4gZWgtZ3VpZD0ke3Ro
aXMuZ3VpZEZvck5vZGUobm9kZSl9IGNsYXNzPSJlaC1ub2RlIj4ke25vZGUubm9kZU5hbWV9PC9z
cGFuPmA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBTZWxlY3Rpb25TdGF0ZSB7Cisg
ICAgICAgIGNvbnN0cnVjdG9yKG5vZGVNYXAsIHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE5v
ZGUsIGVuZE9mZnNldCwgYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0LCBmb2N1c05vZGUsIGZvY3Vz
T2Zmc2V0KSB7CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydChub2RlTWFwKTsKKyAgICAgICAg
ICAgIHRoaXMubm9kZU1hcCA9IG5vZGVNYXA7CisgICAgICAgICAgICB0aGlzLnN0YXJ0R1VJRCA9
IG5vZGVNYXAuZ3VpZEZvck5vZGUoc3RhcnROb2RlKTsKKyAgICAgICAgICAgIHRoaXMuc3RhcnRP
ZmZzZXQgPSBzdGFydE9mZnNldDsKKyAgICAgICAgICAgIHRoaXMuZW5kR1VJRCA9IG5vZGVNYXAu
Z3VpZEZvck5vZGUoZW5kTm9kZSk7CisgICAgICAgICAgICB0aGlzLmVuZE9mZnNldCA9IGVuZE9m
ZnNldDsKKyAgICAgICAgICAgIHRoaXMuYW5jaG9yR1VJRCA9IG5vZGVNYXAuZ3VpZEZvck5vZGUo
YW5jaG9yTm9kZSk7CisgICAgICAgICAgICB0aGlzLmFuY2hvck9mZnNldCA9IGFuY2hvck9mZnNl
dDsKKyAgICAgICAgICAgIHRoaXMuZm9jdXNHVUlEID0gbm9kZU1hcC5ndWlkRm9yTm9kZShmb2N1
c05vZGUpOworICAgICAgICAgICAgdGhpcy5mb2N1c09mZnNldCA9IGZvY3VzT2Zmc2V0OworICAg
ICAgICB9CisKKyAgICAgICAgaXNFcXVhbChvdGhlclNlbGVjdGlvblN0YXRlKSB7CisgICAgICAg
ICAgICByZXR1cm4gb3RoZXJTZWxlY3Rpb25TdGF0ZQorICAgICAgICAgICAgICAgICYmIHRoaXMu
c3RhcnRHVUlEID09PSBvdGhlclNlbGVjdGlvblN0YXRlLnN0YXJ0R1VJRCAmJiB0aGlzLnN0YXJ0
T2Zmc2V0ID09PSBvdGhlclNlbGVjdGlvblN0YXRlLnN0YXJ0T2Zmc2V0CisgICAgICAgICAgICAg
ICAgJiYgdGhpcy5lbmRHVUlEID09PSBvdGhlclNlbGVjdGlvblN0YXRlLmVuZEdVSUQgJiYgdGhp
cy5lbmRPZmZzZXQgPT09IG90aGVyU2VsZWN0aW9uU3RhdGUuZW5kT2Zmc2V0CisgICAgICAgICAg
ICAgICAgJiYgdGhpcy5hbmNob3JHVUlEID09PSBvdGhlclNlbGVjdGlvblN0YXRlLmFuY2hvckdV
SUQgJiYgdGhpcy5hbmNob3JPZmZzZXQgPT09IG90aGVyU2VsZWN0aW9uU3RhdGUuYW5jaG9yT2Zm
c2V0CisgICAgICAgICAgICAgICAgJiYgdGhpcy5mb2N1c0dVSUQgPT09IG90aGVyU2VsZWN0aW9u
U3RhdGUuZm9jdXNHVUlEICYmIHRoaXMuZm9jdXNPZmZzZXQgPT09IG90aGVyU2VsZWN0aW9uU3Rh
dGUuZm9jdXNPZmZzZXQ7CisgICAgICAgIH0KKworICAgICAgICBhcHBseVRvU2VsZWN0aW9uKHNl
bGVjdGlvbikgeworICAgICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOworICAg
ICAgICAgICAgbGV0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKKyAgICAgICAgICAg
IHJhbmdlLnNldFN0YXJ0KHRoaXMubm9kZU1hcC5ub2RlRm9yR1VJRCh0aGlzLnN0YXJ0R1VJRCks
IHRoaXMuc3RhcnRPZmZzZXQpOworICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kKHRoaXMubm9kZU1h
cC5ub2RlRm9yR1VJRCh0aGlzLmVuZEdVSUQpLCB0aGlzLmVuZE9mZnNldCk7CisgICAgICAgICAg
ICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpOworICAgICAgICAgICAgc2VsZWN0aW9uLnNldEJh
c2VBbmRFeHRlbnQodGhpcy5ub2RlTWFwLm5vZGVGb3JHVUlEKHRoaXMuYW5jaG9yR1VJRCksIHRo
aXMuYW5jaG9yT2Zmc2V0LCB0aGlzLm5vZGVNYXAubm9kZUZvckdVSUQodGhpcy5mb2N1c0dVSUQp
LCB0aGlzLmZvY3VzT2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBmcm9tU2Vs
ZWN0aW9uKHNlbGVjdGlvbiwgbm9kZU1hcCkgeworICAgICAgICAgICAgbGV0IFtzdGFydE5vZGUs
IHN0YXJ0T2Zmc2V0LCBlbmROb2RlLCBlbmRPZmZzZXRdID0gW251bGwsIDAsIG51bGwsIDBdOwor
ICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50KSB7CisgICAgICAgICAgICAgICAg
bGV0IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKKyAgICAgICAgICAg
ICAgICBzdGFydE5vZGUgPSBzZWxlY3RlZFJhbmdlLnN0YXJ0Q29udGFpbmVyOworICAgICAgICAg
ICAgICAgIHN0YXJ0T2Zmc2V0ID0gc2VsZWN0ZWRSYW5nZS5zdGFydE9mZnNldDsKKyAgICAgICAg
ICAgICAgICBlbmROb2RlID0gc2VsZWN0ZWRSYW5nZS5lbmRDb250YWluZXI7CisgICAgICAgICAg
ICAgICAgZW5kT2Zmc2V0ID0gc2VsZWN0ZWRSYW5nZS5lbmRPZmZzZXQ7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gbmV3IFNlbGVjdGlvblN0YXRlKAorICAgICAgICAgICAgICAg
IG5vZGVNYXAsIHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE5vZGUsIGVuZE9mZnNldCwKKyAg
ICAgICAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSwgc2VsZWN0aW9uLmFuY2hvck9mZnNl
dCwgc2VsZWN0aW9uLmZvY3VzTm9kZSwgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0CisgICAgICAgICAg
ICApOworICAgICAgICB9CisKKyAgICAgICAgdG9PYmplY3QoKSB7CisgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgIHN0YXJ0R1VJRDogdGhpcy5zdGFydEdVSUQsIHN0YXJ0T2Zm
c2V0OiB0aGlzLnN0YXJ0T2Zmc2V0LCBlbmRHVUlEOiB0aGlzLmVuZEdVSUQsIGVuZE9mZnNldDog
dGhpcy5lbmRPZmZzZXQsCisgICAgICAgICAgICAgICAgYW5jaG9yR1VJRDogdGhpcy5hbmNob3JH
VUlELCBhbmNob3JPZmZzZXQ6IHRoaXMuYW5jaG9yT2Zmc2V0LCBmb2N1c0dVSUQ6IHRoaXMuZm9j
dXNHVUlELCBmb2N1c09mZnNldDogdGhpcy5mb2N1c09mZnNldAorICAgICAgICAgICAgfTsKKyAg
ICAgICAgfQorCisgICAgICAgIHN0YXRpYyBmcm9tT2JqZWN0KGpzb24sIG5vZGVNYXApIHsKKyAg
ICAgICAgICAgIGlmICghanNvbikKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAg
ICAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3Rpb25TdGF0ZSgKKyAgICAgICAgICAgICAgICBub2Rl
TWFwLCBub2RlTWFwLm5vZGVGb3JHVUlEKGpzb24uc3RhcnRHVUlEKSwganNvbi5zdGFydE9mZnNl
dCwgbm9kZU1hcC5ub2RlRm9yR1VJRChqc29uLmVuZEdVSUQpLCBqc29uLmVuZE9mZnNldCwKKyAg
ICAgICAgICAgICAgICBub2RlTWFwLm5vZGVGb3JHVUlEKGpzb24uYW5jaG9yR1VJRCksIGpzb24u
YW5jaG9yT2Zmc2V0LCBub2RlTWFwLm5vZGVGb3JHVUlEKGpzb24uZm9jdXNHVUlEKSwganNvbi5m
b2N1c09mZnNldAorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNz
IERPTVVwZGF0ZSB7CisgICAgICAgIGNvbnN0cnVjdG9yKG5vZGVNYXApIHsKKyAgICAgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KG5vZGVNYXApOworICAgICAgICAgICAgdGhpcy5ub2RlTWFwID0gbm9k
ZU1hcDsKKyAgICAgICAgfQorCisgICAgICAgIGFwcGx5KCkgeworICAgICAgICAgICAgdGhyb3cg
IkV4cGVjdGVkIHN1YmNsYXNzIGltcGxlbWVudGF0aW9uLiI7CisgICAgICAgIH0KKworICAgICAg
ICB1bmFwcGx5KCkgeworICAgICAgICAgICAgdGhyb3cgIkV4cGVjdGVkIHN1YmNsYXNzIGltcGxl
bWVudGF0aW9uLiI7CisgICAgICAgIH0KKworICAgICAgICB0YXJnZXROb2RlKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMubm9kZU1hcC5ub2RlRm9yR1VJRCh0aGlzLnRhcmdldEdVSUQpOwor
ICAgICAgICB9CisKKyAgICAgICAgZGV0YWlsc0VsZW1lbnQoKSB7CisgICAgICAgICAgICB0aHJv
dyAiRXhwZWN0ZWQgc3ViY2xhc3MgaW1wbGVtZW50YXRpb24uIjsKKyAgICAgICAgfQorCisgICAg
ICAgIHN0YXRpYyBvZlR5cGUodHlwZSkgeworICAgICAgICAgICAgaWYgKCFET01VcGRhdGUuX2Fs
bFR5cGVzKQorICAgICAgICAgICAgICAgIERPTVVwZGF0ZS5fYWxsVHlwZXMgPSB7IENoaWxkTGlz
dFVwZGF0ZSwgQ2hhcmFjdGVyRGF0YVVwZGF0ZSwgQXR0cmlidXRlVXBkYXRlLCBJbnB1dEV2ZW50
VXBkYXRlLCBTZWxlY3Rpb25VcGRhdGUgfTsKKyAgICAgICAgICAgIHJldHVybiBET01VcGRhdGUu
X2FsbFR5cGVzW3R5cGVdOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGZyb21SZWNvcmRz
KHJlY29yZHMsIG5vZGVNYXApIHsKKyAgICAgICAgICAgIGxldCB1cGRhdGVzID0gW10KKyAgICAg
ICAgICAgICAgICAsIGNoYXJhY3RlckRhdGFVcGRhdGVzID0gW10KKyAgICAgICAgICAgICAgICAs
IGF0dHJpYnV0ZVVwZGF0ZXMgPSBbXTsKKworICAgICAgICAgICAgZm9yIChsZXQgcmVjb3JkIG9m
IHJlY29yZHMpIHsKKyAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gcmVjb3JkLnRhcmdldDsK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY29yZC50eXBlKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSAiY2hhcmFjdGVyRGF0YSI6CisgICAgICAgICAgICAgICAgICAgIHZhciB1cGRhdGUgPSBu
ZXcgQ2hhcmFjdGVyRGF0YVVwZGF0ZShub2RlTWFwLCBub2RlTWFwLmd1aWRGb3JOb2RlKHRhcmdl
dCksIHJlY29yZC5vbGRWYWx1ZSwgdGFyZ2V0LmRhdGEpCisgICAgICAgICAgICAgICAgICAgIHVw
ZGF0ZXMucHVzaCh1cGRhdGUpOworICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJEYXRhVXBk
YXRlcy5wdXNoKHVwZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgImNoaWxkTGlzdCI6CisgICAgICAgICAgICAgICAgICAgIHZhciB1cGRhdGUg
PSBuZXcgQ2hpbGRMaXN0VXBkYXRlKG5vZGVNYXAsIG5vZGVNYXAuZ3VpZEZvck5vZGUodGFyZ2V0
KSwgbm9kZU1hcC5ndWlkc0Zvck5vZGVzKHJlY29yZC5hZGRlZE5vZGVzKSwgbm9kZU1hcC5ndWlk
c0Zvck5vZGVzKHJlY29yZC5yZW1vdmVkTm9kZXMpLCBub2RlTWFwLmd1aWRGb3JOb2RlKHJlY29y
ZC5uZXh0U2libGluZykpCisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZXMucHVzaCh1cGRhdGUp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICJhdHRy
aWJ1dGVzIjoKKyAgICAgICAgICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IG5ldyBBdHRyaWJ1dGVV
cGRhdGUobm9kZU1hcCwgbm9kZU1hcC5ndWlkRm9yTm9kZSh0YXJnZXQpLCByZWNvcmQuYXR0cmli
dXRlTmFtZSwgcmVjb3JkLm9sZFZhbHVlLCB0YXJnZXQuZ2V0QXR0cmlidXRlKHJlY29yZC5hdHRy
aWJ1dGVOYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlcy5wdXNoKHVwZGF0ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVVwZGF0ZXMucHVzaCh1cGRhdGUpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIEFkanVzdCBhbGwgY2hhcmFjdGVyIGRhdGEgdXBkYXRlcyBmb3IgdGhl
IHNhbWUgdGFyZ2V0LgorICAgICAgICAgICAgY2hhcmFjdGVyRGF0YVVwZGF0ZXMuZm9yRWFjaCgo
Y3VycmVudFVwZGF0ZSwgaW5kZXgpID0+IHsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0g
Y2hhcmFjdGVyRGF0YVVwZGF0ZXMubGVuZ3RoIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICAgICAgZm9yIChsZXQgbmV4dFVwZGF0ZUluZGV4ID0gaW5kZXgg
KyAxOyBuZXh0VXBkYXRlSW5kZXggPCBjaGFyYWN0ZXJEYXRhVXBkYXRlcy5sZW5ndGg7IG5leHRV
cGRhdGVJbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0VXBkYXRlID0gY2hh
cmFjdGVyRGF0YVVwZGF0ZXNbbmV4dFVwZGF0ZUluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGN1cnJlbnRVcGRhdGUudGFyZ2V0R1VJRCA9PT0gbmV4dFVwZGF0ZS50YXJnZXRHVUlEKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VXBkYXRlLm5ld0RhdGEgPSBuZXh0VXBk
YXRlLm9sZERhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAg
ICAgICAvLyBBZGp1c3QgYWxsIGF0dHJpYnV0ZSB1cGRhdGVzIGZvciB0aGUgc2FtZSB0YXJnZXQg
YW5kIGF0dHJpYnV0ZSBuYW1lLgorICAgICAgICAgICAgYXR0cmlidXRlVXBkYXRlcy5mb3JFYWNo
KChjdXJyZW50VXBkYXRlLCBpbmRleCkgPT4geworICAgICAgICAgICAgICAgIGlmIChpbmRleCA9
PSBhdHRyaWJ1dGVVcGRhdGVzLmxlbmd0aCAtIDEpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgICAgIGZvciAobGV0IG5leHRVcGRhdGVJbmRleCA9IGluZGV4ICsg
MTsgbmV4dFVwZGF0ZUluZGV4IDwgYXR0cmlidXRlVXBkYXRlcy5sZW5ndGg7IG5leHRVcGRhdGVJ
bmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0VXBkYXRlID0gYXR0cmlidXRl
VXBkYXRlc1tuZXh0VXBkYXRlSW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVu
dFVwZGF0ZS50YXJnZXRHVUlEID09PSBuZXh0VXBkYXRlLnRhcmdldEdVSUQgJiYgY3VycmVudFVw
ZGF0ZS5hdHRyaWJ1dGUgPT09IG5leHRVcGRhdGUuYXR0cmlidXRlKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjdXJyZW50VXBkYXRlLm5ld0RhdGEgPSBuZXh0VXBkYXRlLm9sZERhdGE7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICByZXR1cm4gdXBk
YXRlczsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIENoaWxkTGlzdFVwZGF0ZSBleHRl
bmRzIERPTVVwZGF0ZSB7CisgICAgICAgIGNvbnN0cnVjdG9yKG5vZGVNYXAsIHRhcmdldEdVSUQs
IGFkZGVkR1VJRHMsIHJlbW92ZWRHVUlEcywgbmV4dFNpYmxpbmdHVUlEKSB7CisgICAgICAgICAg
ICBzdXBlcihub2RlTWFwKTsKKyAgICAgICAgICAgIHRoaXMudGFyZ2V0R1VJRCA9IHRhcmdldEdV
SUQ7CisgICAgICAgICAgICB0aGlzLmFkZGVkID0gYWRkZWRHVUlEczsKKyAgICAgICAgICAgIHRo
aXMucmVtb3ZlZCA9IHJlbW92ZWRHVUlEczsKKyAgICAgICAgICAgIHRoaXMubmV4dFNpYmxpbmdH
VUlEID0gbmV4dFNpYmxpbmdHVUlEID09IHVuZGVmaW5lZCA/IG51bGwgOiBuZXh0U2libGluZ0dV
SUQ7CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydChub2RlTWFwLm5vZGVGb3JHVUlEKHRhcmdl
dEdVSUQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGFwcGx5KCkgeworICAgICAgICAgICAgZm9y
IChsZXQgcmVtb3ZlZE5vZGUgb2YgdGhpcy5fcmVtb3ZlZE5vZGVzKCkpCisgICAgICAgICAgICAg
ICAgcmVtb3ZlZE5vZGUucmVtb3ZlKCk7CisKKyAgICAgICAgICAgIGxldCB0YXJnZXQgPSB0aGlz
LnRhcmdldE5vZGUoKTsKKyAgICAgICAgICAgIGZvciAobGV0IGFkZGVkTm9kZSBvZiB0aGlzLl9h
ZGRlZE5vZGVzKCkpCisgICAgICAgICAgICAgICAgdGFyZ2V0Lmluc2VydEJlZm9yZShhZGRlZE5v
ZGUsIHRoaXMuX25leHRTaWJsaW5nKCkpOworICAgICAgICB9CisKKyAgICAgICAgdW5hcHBseSgp
IHsKKyAgICAgICAgICAgIGZvciAobGV0IGFkZGVkTm9kZSBvZiB0aGlzLl9hZGRlZE5vZGVzKCkp
CisgICAgICAgICAgICAgICAgYWRkZWROb2RlLnJlbW92ZSgpOworCisgICAgICAgICAgICBsZXQg
dGFyZ2V0ID0gdGhpcy50YXJnZXROb2RlKCk7CisgICAgICAgICAgICBmb3IgKGxldCByZW1vdmVk
Tm9kZSBvZiB0aGlzLl9yZW1vdmVkTm9kZXMoKSkKKyAgICAgICAgICAgICAgICB0YXJnZXQuaW5z
ZXJ0QmVmb3JlKHJlbW92ZWROb2RlLCB0aGlzLl9uZXh0U2libGluZygpKTsKKyAgICAgICAgfQor
CisgICAgICAgIF9uZXh0U2libGluZygpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLm5leHRTaWJs
aW5nR1VJRCA9PSBudWxsKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMubm9kZU1hcC5ub2RlRm9yR1VJRCh0aGlzLm5leHRTaWJsaW5nR1VJRCk7
CisgICAgICAgIH0KKworICAgICAgICBfcmVtb3ZlZE5vZGVzKCkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMubm9kZU1hcC5ub2Rlc0ZvckdVSURzKHRoaXMucmVtb3ZlZCk7CisgICAgICAgIH0K
KworICAgICAgICBfYWRkZWROb2RlcygpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm5vZGVN
YXAubm9kZXNGb3JHVUlEcyh0aGlzLmFkZGVkKTsKKyAgICAgICAgfQorCisgICAgICAgIHRvT2Jq
ZWN0KCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiAiQ2hp
bGRMaXN0VXBkYXRlIiwKKyAgICAgICAgICAgICAgICB0YXJnZXRHVUlEOiB0aGlzLnRhcmdldEdV
SUQsCisgICAgICAgICAgICAgICAgYWRkZWRHVUlEczogdGhpcy5hZGRlZCwKKyAgICAgICAgICAg
ICAgICByZW1vdmVkR1VJRHM6IHRoaXMucmVtb3ZlZCwKKyAgICAgICAgICAgICAgICBuZXh0U2li
bGluZ0dVSUQ6IHRoaXMubmV4dFNpYmxpbmdHVUlECisgICAgICAgICAgICB9OworICAgICAgICB9
CisKKyAgICAgICAgZGV0YWlsc0VsZW1lbnQoKSB7CisgICAgICAgICAgICBsZXQgbmV4dFNpYmxp
bmcgPSB0aGlzLl9uZXh0U2libGluZygpOworICAgICAgICAgICAgbGV0IGh0bWwgPQorICAgICAg
ICAgICAgYDxkZXRhaWxzPgorICAgICAgICAgICAgICAgIDxzdW1tYXJ5PmNoaWxkIGxpc3QgY2hh
bmdlZDwvc3VtbWFyeT4KKyAgICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgICAg
IDxsaT5wYXJlbnQ6ICR7dGhpcy5ub2RlTWFwLmRlc2NyaXB0aW9uSFRNTEZvckdVSUQodGhpcy50
YXJnZXRHVUlEKX08L2xpPgorICAgICAgICAgICAgICAgICAgICA8bGk+YWRkZWQ6IFsgJHtbdGhp
cy5fYWRkZWROb2RlcygpLm1hcChub2RlID0+IHRoaXMubm9kZU1hcC5kZXNjcmlwdGlvbkhUTUxG
b3JOb2RlKG5vZGUpKV19IF08L2xpPgorICAgICAgICAgICAgICAgICAgICA8bGk+cmVtb3ZlZDog
WyAke1t0aGlzLl9yZW1vdmVkTm9kZXMoKS5tYXAobm9kZSA9PiB0aGlzLm5vZGVNYXAuZGVzY3Jp
cHRpb25IVE1MRm9yTm9kZShub2RlKSldfSBdPC9saT4KKyAgICAgICAgICAgICAgICAgICAgPGxp
PmJlZm9yZSBzaWJsaW5nOiAke25leHRTaWJsaW5nID8gdGhpcy5ub2RlTWFwLmRlc2NyaXB0aW9u
SFRNTEZvck5vZGUobmV4dFNpYmxpbmcpIDogIihudWxsKSJ9PC9saT4KKyAgICAgICAgICAgICAg
ICA8L3VsPgorICAgICAgICAgICAgPC9kZXRhaWxzPmA7CisgICAgICAgICAgICByZXR1cm4gZWxl
bWVudEZyb21NYXJrZG93bihodG1sKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBmcm9t
T2JqZWN0KGpzb24sIG5vZGVNYXApIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2hpbGRMaXN0
VXBkYXRlKG5vZGVNYXAsIGpzb24udGFyZ2V0R1VJRCwganNvbi5hZGRlZEdVSURzLCBqc29uLnJl
bW92ZWRHVUlEcywganNvbi5uZXh0U2libGluZ0dVSUQpOworICAgICAgICB9CisgICAgfQorCisg
ICAgY2xhc3MgQ2hhcmFjdGVyRGF0YVVwZGF0ZSBleHRlbmRzIERPTVVwZGF0ZSB7CisgICAgICAg
IGNvbnN0cnVjdG9yKG5vZGVNYXAsIHRhcmdldEdVSUQsIG9sZERhdGEsIG5ld0RhdGEpIHsKKyAg
ICAgICAgICAgIHN1cGVyKG5vZGVNYXApOworICAgICAgICAgICAgdGhpcy50YXJnZXRHVUlEID0g
dGFyZ2V0R1VJRDsKKyAgICAgICAgICAgIHRoaXMub2xkRGF0YSA9IG9sZERhdGE7CisgICAgICAg
ICAgICB0aGlzLm5ld0RhdGEgPSBuZXdEYXRhOworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQo
bm9kZU1hcC5ub2RlRm9yR1VJRCh0YXJnZXRHVUlEKSk7CisgICAgICAgIH0KKworICAgICAgICBh
cHBseSgpIHsKKyAgICAgICAgICAgIHRoaXMudGFyZ2V0Tm9kZSgpLmRhdGEgPSB0aGlzLm5ld0Rh
dGE7CisgICAgICAgIH0KKworICAgICAgICB1bmFwcGx5KCkgeworICAgICAgICAgICAgdGhpcy50
YXJnZXROb2RlKCkuZGF0YSA9IHRoaXMub2xkRGF0YTsKKyAgICAgICAgfQorCisgICAgICAgIGRl
dGFpbHNFbGVtZW50KCkgeworICAgICAgICAgICAgbGV0IGh0bWwgPQorICAgICAgICAgICAgYDxk
ZXRhaWxzPgorICAgICAgICAgICAgICAgIDxzdW1tYXJ5PmNoYXJhY3RlciBkYXRhIGNoYW5nZWQ8
L3N1bW1hcnk+CisgICAgICAgICAgICAgICAgPHVsPgorICAgICAgICAgICAgICAgICAgICA8bGk+
b2xkOiAke3RoaXMub2xkRGF0YSAhPSBudWxsID8gIiciICsgdGhpcy5vbGREYXRhICsgIiciIDog
IihudWxsKSJ9PC9saT4KKyAgICAgICAgICAgICAgICAgICAgPGxpPm5ldzogJHt0aGlzLm5ld0Rh
dGEgIT0gbnVsbCA/ICInIiArIHRoaXMubmV3RGF0YSArICInIiA6ICIobnVsbCkifTwvbGk+Cisg
ICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgIDwvZGV0YWlscz5gOworICAgICAgICAg
ICAgcmV0dXJuIGVsZW1lbnRGcm9tTWFya2Rvd24oaHRtbCk7CisgICAgICAgIH0KKworICAgICAg
ICB0b09iamVjdCgpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlw
ZTogIkNoYXJhY3RlckRhdGFVcGRhdGUiLAorICAgICAgICAgICAgICAgIHRhcmdldEdVSUQ6IHRo
aXMudGFyZ2V0R1VJRCwKKyAgICAgICAgICAgICAgICBvbGREYXRhOiBPYmZ1c2NhdG9yLnNoYXJl
ZCgpLmFwcGx5VG9UZXh0KHRoaXMub2xkRGF0YSksCisgICAgICAgICAgICAgICAgbmV3RGF0YTog
T2JmdXNjYXRvci5zaGFyZWQoKS5hcHBseVRvVGV4dCh0aGlzLm5ld0RhdGEpCisgICAgICAgICAg
ICB9OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGZyb21PYmplY3QoanNvbiwgbm9kZU1h
cCkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBDaGFyYWN0ZXJEYXRhVXBkYXRlKG5vZGVNYXAs
IGpzb24udGFyZ2V0R1VJRCwganNvbi5vbGREYXRhLCBqc29uLm5ld0RhdGEpOworICAgICAgICB9
CisgICAgfQorCisgICAgY2xhc3MgQXR0cmlidXRlVXBkYXRlIGV4dGVuZHMgRE9NVXBkYXRlIHsK
KyAgICAgICAgY29uc3RydWN0b3Iobm9kZU1hcCwgdGFyZ2V0R1VJRCwgYXR0cmlidXRlLCBvbGRW
YWx1ZSwgbmV3VmFsdWUpIHsKKyAgICAgICAgICAgIHN1cGVyKG5vZGVNYXApOworICAgICAgICAg
ICAgdGhpcy50YXJnZXRHVUlEID0gdGFyZ2V0R1VJRDsKKyAgICAgICAgICAgIHRoaXMuYXR0cmli
dXRlID0gYXR0cmlidXRlOworICAgICAgICAgICAgdGhpcy5vbGRWYWx1ZSA9IG9sZFZhbHVlOwor
ICAgICAgICAgICAgdGhpcy5uZXdWYWx1ZSA9IG5ld1ZhbHVlOworICAgICAgICAgICAgY29uc29s
ZS5hc3NlcnQobm9kZU1hcC5ub2RlRm9yR1VJRCh0YXJnZXRHVUlEKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBhcHBseSgpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLm5ld1ZhbHVlID09IG51bGwp
CisgICAgICAgICAgICAgICAgdGhpcy50YXJnZXROb2RlKCkucmVtb3ZlQXR0cmlidXRlKHRoaXMu
YXR0cmlidXRlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aGlzLnRhcmdl
dE5vZGUoKS5zZXRBdHRyaWJ1dGUodGhpcy5hdHRyaWJ1dGUsIHRoaXMubmV3VmFsdWUpOworICAg
ICAgICB9CisKKyAgICAgICAgdW5hcHBseSgpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLm9sZFZh
bHVlID09IG51bGwpCisgICAgICAgICAgICAgICAgdGhpcy50YXJnZXROb2RlKCkucmVtb3ZlQXR0
cmlidXRlKHRoaXMuYXR0cmlidXRlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICB0aGlzLnRhcmdldE5vZGUoKS5zZXRBdHRyaWJ1dGUodGhpcy5hdHRyaWJ1dGUsIHRoaXMub2xk
VmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgZGV0YWlsc0VsZW1lbnQoKSB7CisgICAgICAg
ICAgICBsZXQgaHRtbCA9CisgICAgICAgICAgICBgPGRldGFpbHM+CisgICAgICAgICAgICAgICAg
PHN1bW1hcnk+YXR0cmlidXRlIGNoYW5nZWQ8L3N1bW1hcnk+CisgICAgICAgICAgICAgICAgPHVs
PgorICAgICAgICAgICAgICAgICAgICA8bGk+dGFyZ2V0OiAke3RoaXMubm9kZU1hcC5kZXNjcmlw
dGlvbkhUTUxGb3JHVUlEKHRoaXMudGFyZ2V0R1VJRCl9PC9saT4KKyAgICAgICAgICAgICAgICAg
ICAgPGxpPmF0dHJpYnV0ZTogJHt0aGlzLmF0dHJpYnV0ZX08L2xpPgorICAgICAgICAgICAgICAg
ICAgICA8bGk+b2xkOiAke3RoaXMub2xkVmFsdWUgIT0gbnVsbCA/ICInIiArIHRoaXMub2xkVmFs
dWUgKyAiJyIgOiAiKG51bGwpIn08L2xpPgorICAgICAgICAgICAgICAgICAgICA8bGk+bmV3OiAk
e3RoaXMubmV3VmFsdWUgIT0gbnVsbCA/ICInIiArIHRoaXMubmV3VmFsdWUgKyAiJyIgOiAiKG51
bGwpIn08L2xpPgorICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8L2RldGFpbHM+
YDsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50RnJvbU1hcmtkb3duKGh0bWwpOworICAgICAg
ICB9CisKKyAgICAgICAgdG9PYmplY3QoKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgIHR5cGU6ICJBdHRyaWJ1dGVVcGRhdGUiLAorICAgICAgICAgICAgICAgIHRhcmdl
dEdVSUQ6IHRoaXMudGFyZ2V0R1VJRCwKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGU6IHRoaXMu
YXR0cmlidXRlLAorICAgICAgICAgICAgICAgIG9sZFZhbHVlOiB0aGlzLm9sZFZhbHVlLAorICAg
ICAgICAgICAgICAgIG5ld1ZhbHVlOiB0aGlzLm5ld1ZhbHVlCisgICAgICAgICAgICB9OworICAg
ICAgICB9CisKKyAgICAgICAgc3RhdGljIGZyb21PYmplY3QoanNvbiwgbm9kZU1hcCkgeworICAg
ICAgICAgICAgcmV0dXJuIG5ldyBBdHRyaWJ1dGVVcGRhdGUobm9kZU1hcCwganNvbi50YXJnZXRH
VUlELCBqc29uLmF0dHJpYnV0ZSwganNvbi5vbGRWYWx1ZSwganNvbi5uZXdWYWx1ZSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBTZWxlY3Rpb25VcGRhdGUgZXh0ZW5kcyBET01VcGRh
dGUgeworICAgICAgICBjb25zdHJ1Y3Rvcihub2RlTWFwLCBzdGF0ZSkgeworICAgICAgICAgICAg
c3VwZXIobm9kZU1hcCk7CisgICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7CisgICAgICAg
IH0KKworICAgICAgICAvLyBTZWxlY3Rpb25VcGRhdGVzIGFyZSBub3QgYXBwbGllZC91bmFwcGxp
ZWQgYnkgdGhlIG5vcm1hbCBtZWFucy4gVGhlIHNlbGVjdGlvbiBpcyBhcHBsaWVkIHZpYQorICAg
ICAgICAvLyBET01VcGRhdGVIaXN0b3J5Q29udGV4dC5hcHBseUN1cnJlbnRTZWxlY3Rpb25TdGF0
ZSBpbnN0ZWFkLCB3aGljaCBjb25zaWRlcnMgdGhlIHVwZGF0ZXMgYmVmb3JlIGFuZCBhZnRlciB0
aGUKKyAgICAgICAgLy8gY3VycmVudCB1cGRhdGUgaW5kZXguCisgICAgICAgIGFwcGx5KCkgeyB9
CisgICAgICAgIHVuYXBwbHkoKSB7IH0KKworICAgICAgICB0b09iamVjdCgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogIlNlbGVjdGlvblVwZGF0ZSIsCisg
ICAgICAgICAgICAgICAgc3RhdGU6IHRoaXMuc3RhdGUgPyB0aGlzLnN0YXRlLnRvT2JqZWN0KCkg
OiBudWxsCisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGZyb21P
YmplY3QoanNvbiwgbm9kZU1hcCkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3Rpb25V
cGRhdGUobm9kZU1hcCwgU2VsZWN0aW9uU3RhdGUuZnJvbU9iamVjdChqc29uLnN0YXRlLCBub2Rl
TWFwKSk7CisgICAgICAgIH0KKworICAgICAgICBfcmFuZ2VEZXNjcmlwdGlvbkhUTUwoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gYCgke3RoaXMubm9kZU1hcC5kZXNjcmlwdGlvbkhUTUxGb3JHVUlE
KHRoaXMuc3RhdGUuc3RhcnRHVUlEKX06JHt0aGlzLnN0YXRlLnN0YXJ0T2Zmc2V0fSwKKyAgICAg
ICAgICAgICAgICAke3RoaXMubm9kZU1hcC5kZXNjcmlwdGlvbkhUTUxGb3JHVUlEKHRoaXMuc3Rh
dGUuZW5kR1VJRCl9OiR7dGhpcy5zdGF0ZS5lbmRPZmZzZXR9KWA7CisgICAgICAgIH0KKworICAg
ICAgICBfYW5jaG9yRGVzY3JpcHRpb25IVE1MKCkgeworICAgICAgICAgICAgcmV0dXJuIGAke3Ro
aXMubm9kZU1hcC5kZXNjcmlwdGlvbkhUTUxGb3JHVUlEKHRoaXMuc3RhdGUuYW5jaG9yR1VJRCl9
OiR7dGhpcy5zdGF0ZS5hbmNob3JPZmZzZXR9YDsKKyAgICAgICAgfQorCisgICAgICAgIF9mb2N1
c0Rlc2NyaXB0aW9uSFRNTCgpIHsKKyAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLm5vZGVNYXAu
ZGVzY3JpcHRpb25IVE1MRm9yR1VJRCh0aGlzLnN0YXRlLmZvY3VzR1VJRCl9OiR7dGhpcy5zdGF0
ZS5mb2N1c09mZnNldH1gOworICAgICAgICB9CisKKyAgICAgICAgZGV0YWlsc0VsZW1lbnQoKSB7
CisgICAgICAgICAgICBsZXQgaHRtbCA9CisgICAgICAgICAgICBgPGRldGFpbHM+CisgICAgICAg
ICAgICAgICAgPHN1bW1hcnk+U2VsZWN0aW9uIGNoYW5nZWQ8L3N1bW1hcnk+CisgICAgICAgICAg
ICAgICAgPHVsPgorICAgICAgICAgICAgICAgICAgICA8bGk+cmFuZ2U6ICR7dGhpcy5fcmFuZ2VE
ZXNjcmlwdGlvbkhUTUwoKX08L2xpPgorICAgICAgICAgICAgICAgICAgICA8bGk+YW5jaG9yOiAk
e3RoaXMuX2FuY2hvckRlc2NyaXB0aW9uSFRNTCgpfTwvbGk+CisgICAgICAgICAgICAgICAgICAg
IDxsaT5mb2N1czogJHt0aGlzLl9mb2N1c0Rlc2NyaXB0aW9uSFRNTCgpfTwvbGk+CisgICAgICAg
ICAgICAgICAgPC91bD4KKyAgICAgICAgICAgIDwvZGV0YWlscz5gOworICAgICAgICAgICAgcmV0
dXJuIGVsZW1lbnRGcm9tTWFya2Rvd24oaHRtbCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBj
bGFzcyBJbnB1dEV2ZW50VXBkYXRlIGV4dGVuZHMgRE9NVXBkYXRlIHsKKyAgICAgICAgY29uc3Ry
dWN0b3Iobm9kZU1hcCwgdXBkYXRlcywgaW5wdXRUeXBlLCBkYXRhLCB0aW1lU3RhbXApIHsKKyAg
ICAgICAgICAgIHN1cGVyKG5vZGVNYXApOworICAgICAgICAgICAgdGhpcy51cGRhdGVzID0gdXBk
YXRlczsKKyAgICAgICAgICAgIHRoaXMuaW5wdXRUeXBlID0gaW5wdXRUeXBlOworICAgICAgICAg
ICAgdGhpcy5kYXRhID0gZGF0YTsKKyAgICAgICAgICAgIHRoaXMudGltZVN0YW1wID0gdGltZVN0
YW1wOworICAgICAgICB9CisKKyAgICAgICAgX29iZnVzY2F0ZWREYXRhKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuaW5wdXRUeXBlLmluZGV4T2YoImluc2VydCIpID09IDAgPyBPYmZ1c2Nh
dG9yLnNoYXJlZCgpLmFwcGx5VG9UZXh0KHRoaXMuZGF0YSkgOiB0aGlzLmRhdGE7CisgICAgICAg
IH0KKworICAgICAgICBhcHBseSgpIHsKKyAgICAgICAgICAgIGZvciAobGV0IHVwZGF0ZSBvZiB0
aGlzLnVwZGF0ZXMpCisgICAgICAgICAgICAgICAgdXBkYXRlLmFwcGx5KCk7CisgICAgICAgIH0K
KworICAgICAgICB1bmFwcGx5KCkgeworICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSB0aGlz
LnVwZGF0ZXMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkKKyAgICAgICAgICAgICAg
ICB0aGlzLnVwZGF0ZXNbaW5kZXhdLnVuYXBwbHkoKTsKKyAgICAgICAgfQorCisgICAgICAgIHRv
T2JqZWN0KCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiAi
SW5wdXRFdmVudFVwZGF0ZSIsCisgICAgICAgICAgICAgICAgaW5wdXRUeXBlOiB0aGlzLmlucHV0
VHlwZSwKKyAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLl9vYmZ1c2NhdGVkRGF0YSgpLAorICAg
ICAgICAgICAgICAgIHRpbWVTdGFtcDogdGhpcy50aW1lU3RhbXAsCisgICAgICAgICAgICAgICAg
dXBkYXRlczogdGhpcy51cGRhdGVzLm1hcCh1cGRhdGUgPT4gdXBkYXRlLnRvT2JqZWN0KCkpCisg
ICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGZyb21PYmplY3QoanNv
biwgbm9kZU1hcCkgeworICAgICAgICAgICAgbGV0IHVwZGF0ZXMgPSBqc29uLnVwZGF0ZXMubWFw
KHVwZGF0ZSA9PiBET01VcGRhdGUub2ZUeXBlKHVwZGF0ZS50eXBlKS5mcm9tT2JqZWN0KHVwZGF0
ZSwgbm9kZU1hcCkpOworICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnB1dEV2ZW50VXBkYXRlKG5v
ZGVNYXAsIHVwZGF0ZXMsIGpzb24uaW5wdXRUeXBlLCBqc29uLmRhdGEsIGpzb24udGltZVN0YW1w
KTsKKyAgICAgICAgfQorCisgICAgICAgIGRldGFpbHNFbGVtZW50KCkgeworICAgICAgICAgICAg
bGV0IGh0bWwgPQorICAgICAgICAgICAgYDxkZXRhaWxzPgorICAgICAgICAgICAgICAgIDxzdW1t
YXJ5PklucHV0ICgke3RoaXMuaW5wdXRUeXBlfSk8L3N1bW1hcnk+CisgICAgICAgICAgICAgICAg
PHVsPgorICAgICAgICAgICAgICAgICAgICA8bGk+dGltZTogJHt0aGlzLnRpbWVTdGFtcH08L2xp
PgorICAgICAgICAgICAgICAgICAgICA8bGk+ZGF0YTogJHshdGhpcy5kYXRhID8gIihudWxsKSIg
OiAiJyIgKyB0aGlzLmRhdGEgKyAiJyJ9PC9saT4KKyAgICAgICAgICAgICAgICA8L3VsPgorICAg
ICAgICAgICAgPC9kZXRhaWxzPmA7CisgICAgICAgICAgICBsZXQgdG9wTGV2ZWxEZXRhaWxzID0g
ZWxlbWVudEZyb21NYXJrZG93bihodG1sKTsKKyAgICAgICAgICAgIGZvciAobGV0IHVwZGF0ZSBv
ZiB0aGlzLnVwZGF0ZXMpCisgICAgICAgICAgICAgICAgdG9wTGV2ZWxEZXRhaWxzLmNoaWxkcmVu
W3RvcExldmVsRGV0YWlscy5jaGlsZEVsZW1lbnRDb3VudCAtIDFdLmFwcGVuZENoaWxkKHVwZGF0
ZS5kZXRhaWxzRWxlbWVudCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0b3BMZXZlbERldGFpbHM7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB3aW5kb3cuRWRpdGluZ0hpc3RvcnkgPSB7CisgICAg
ICAgIEdsb2JhbE5vZGVNYXAsCisgICAgICAgIFNlbGVjdGlvblN0YXRlLAorICAgICAgICBET01V
cGRhdGUsCisgICAgICAgIENoaWxkTGlzdFVwZGF0ZSwKKyAgICAgICAgQ2hhcmFjdGVyRGF0YVVw
ZGF0ZSwKKyAgICAgICAgQXR0cmlidXRlVXBkYXRlLAorICAgICAgICBTZWxlY3Rpb25VcGRhdGUs
CisgICAgICAgIElucHV0RXZlbnRVcGRhdGUsCisgICAgICAgIE9iZnVzY2F0b3IKKyAgICB9Owor
fSkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCAyZGFlNzEwZGNhMjNjMjBiZjVmMmQ2ZmE1MTZjMmM1MWNhYWVlZGM0Li5mMGE2
MjYxODc3MThlNjNjMzU5YzljNzQzNzJiMDEzODUxZTUxY2NmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMjY1LDYgKzIyNjUs
OCBAQAogCQk1MUM4MUI4QTBDNDQyMkY3MDAxOUVDRTMgLyogRlRQRGlyZWN0b3J5UGFyc2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUM4MUI4ODBD
NDQyMkY3MDAxOUVDRTMgLyogRlRQRGlyZWN0b3J5UGFyc2VyLmggKi87IH07CiAJCTUxQ0JGQzk5
MEQxMEU0ODMwMDJEQkY1MSAvKiBDYWNoZWRGcmFtZVBsYXRmb3JtRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFDQkZDOTgwRDEwRTQ4MzAwMkRC
RjUxIC8qIENhY2hlZEZyYW1lUGxhdGZvcm1EYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFEMEM1MTYwREFBOTBCNzAwM0IzODMxIC8qIEpT
U3RvcmFnZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MUQwQzUxNTBEQUE5MEI3MDAzQjM4MzEgLyogSlNTdG9yYWdlQ3VzdG9tLmNwcCAq
LzsgfTsKKwkJNTFEMzk0NzgxREYyNDkyMjAwQUJFODc1IC8qIER1bXBFZGl0aW5nSGlzdG9yeS5q
cyBpbiBDb3B5IEludGVybmFsIFNjcmlwdHMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFEMzk0NzQxREYyNDU0MDAwQUJFODc1IC8qIER1bXBFZGl0aW5nSGlzdG9yeS5qcyAq
LzsgfTsKKwkJNTFEMzk0NzkxREYyNDkyMjAwQUJFODc1IC8qIEVkaXRpbmdIaXN0b3J5VXRpbC5q
cyBpbiBDb3B5IEludGVybmFsIFNjcmlwdHMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFEMzk0NzUxREYyNDU0MDAwQUJFODc1IC8qIEVkaXRpbmdIaXN0b3J5VXRpbC5qcyAq
LzsgfTsKIAkJNTFENzIzNkMxQkI2MTc0OTAwNDc4Q0EzIC8qIElEQlJlc3VsdERhdGEuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzIzNkExQkI2
MEJGRTAwNDc4Q0EzIC8qIElEQlJlc3VsdERhdGEuY3BwICovOyB9OwogCQk1MUQ3MjM2RDFCQjYx
NzQ5MDA0NzhDQTMgLyogSURCUmVzdWx0RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzIzNkIxQkI2MEJGRTAwNDc4Q0EzIC8qIElEQlJlc3Vs
dERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1MUQ3RUZFQTFCREU4RjhDMDBFOTNFMTAgLyogVGhyZWFkU2FmZURhdGFCdWZmZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUZBRUE5MUJEQzk4
OUEwMEI0QUZFNCAvKiBUaHJlYWRTYWZlRGF0YUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02OTU2LDYgKzY5NTgsMTggQEAKIAkJCW5h
bWUgPSAiQ29weSBTY3JpcHRzIjsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OworCQk1MUQzOTQ3NzFERjI0ODY3MDBBQkU4NzUgLyogQ29weSBJbnRlcm5h
bCBTY3JpcHRzICovID0geworCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKKwkJCWJ1
aWxkQWN0aW9uTWFzayA9IDg7CisJCQlkc3RQYXRoID0gIiQoQVBQTEVfSU5URVJOQUxfTElCUkFS
WV9ESVIpL1dlYktpdC9JbnRlcm5hbFNjcmlwdHMiOworCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDA7
CisJCQlmaWxlcyA9ICgKKwkJCQk1MUQzOTQ3ODFERjI0OTIyMDBBQkU4NzUgLyogRHVtcEVkaXRp
bmdIaXN0b3J5LmpzIGluIENvcHkgSW50ZXJuYWwgU2NyaXB0cyAqLywKKwkJCQk1MUQzOTQ3OTFE
RjI0OTIyMDBBQkU4NzUgLyogRWRpdGluZ0hpc3RvcnlVdGlsLmpzIGluIENvcHkgSW50ZXJuYWwg
U2NyaXB0cyAqLywKKwkJCSk7CisJCQluYW1lID0gIkNvcHkgSW50ZXJuYWwgU2NyaXB0cyI7CisJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMTsKKwkJfTsKIAkJQ0QwREJG
MDAxNDIyNzY1NzAwMjgwMjYzIC8qIENvcHkgQXVkaW8gUmVzb3VyY2VzICovID0gewogCQkJaXNh
ID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2
NDc7CkBAIC05NDcwLDYgKzk0ODQsOCBAQAogCQk1MUM4MUI4ODBDNDQyMkY3MDAxOUVDRTMgLyog
RlRQRGlyZWN0b3J5UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
VFBEaXJlY3RvcnlQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFDQkZD
OTgwRDEwRTQ4MzAwMkRCRjUxIC8qIENhY2hlZEZyYW1lUGxhdGZvcm1EYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZEZyYW1lUGxhdGZvcm1EYXRhLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRDBDNTE1MERBQTkwQjcwMDNCMzgzMSAvKiBKU1N0
b3JhZ2VDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNT
dG9yYWdlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFEMzk0NzQx
REYyNDU0MDAwQUJFODc1IC8qIER1bXBFZGl0aW5nSGlzdG9yeS5qcyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9IER1bXBFZGl0aW5nSGlzdG9yeS5qczsgcGF0aCA9IElu
dGVybmFsU2NyaXB0cy9EdW1wRWRpdGluZ0hpc3RvcnkuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUxRDM5NDc1MURGMjQ1NDAwMEFCRTg3NSAvKiBFZGl0aW5nSGlzdG9yeVV0aWwu
anMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IG5hbWUgPSBFZGl0aW5nSGlzdG9y
eVV0aWwuanM7IHBhdGggPSBJbnRlcm5hbFNjcmlwdHMvRWRpdGluZ0hpc3RvcnlVdGlsLmpzOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUQ3MTk2QzE4MTEwNkRGMDAxNkRDNTEgLyog
RE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxRDcxOTZEMTgxMTA2REYwMDE2REM1MSAvKiBET01XaW5kb3dJbmRleGVk
RGF0YWJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NV2luZG93SW5k
ZXhlZERhdGFiYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRDcxOTZFMTgx
MTA2REYwMDE2REM1MSAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNTQwOSw2ICsxNTQyNSw3IEBACiAJCQkJMkU0MzQ2MzEwRjU0NkE2
ODAwQjBGMUJBIC8qIHdvcmtlcnMgKi8sCiAJCQkJRTFGMDQyNDMwOTgzOTM4OTAwNjY5NEVBIC8q
IHhtbCAqLywKIAkJCQk2NTY1ODBFQzA5RDEyQjIwMDAwRTYxRDcgLyogRGVyaXZlZCBTb3VyY2Vz
ICovLAorCQkJCTUxRDM5NDczMURGMjQ0QkEwMEFCRTg3NSAvKiBJbnRlcm5hbFNjcmlwdHMgKi8s
CiAJCQkJMDg5QzE2NjVGRTg0MTE1OEMwMkFBQzA3IC8qIFJlc291cmNlcyAqLywKIAkJCQkzNzE3
RDdFNDE3RUNDMzZDMDAzQzI3NkQgLyogU2NyaXB0cyAqLywKIAkJCQkwODY3RDY5QUZFODQwMjhG
QzAyQUFDMDcgLyogRnJhbWV3b3JrcyAqLywKQEAgLTE3MzAyLDYgKzE3MzE5LDE1IEBACiAJCQlw
YXRoID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNTFEMzk0NzMx
REYyNDRCQTAwQUJFODc1IC8qIEludGVybmFsU2NyaXB0cyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdy
b3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNTFEMzk0NzQxREYyNDU0MDAwQUJFODc1IC8qIER1
bXBFZGl0aW5nSGlzdG9yeS5qcyAqLywKKwkJCQk1MUQzOTQ3NTFERjI0NTQwMDBBQkU4NzUgLyog
RWRpdGluZ0hpc3RvcnlVdGlsLmpzICovLAorCQkJKTsKKwkJCW5hbWUgPSBJbnRlcm5hbFNjcmlw
dHM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1OUI1OTc3MTExMDg2NTU2
MDA3MTU5RTggLyoganNjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKQEAgLTI4Mzg1LDYgKzI4NDExLDcgQEAKIAkJCQkzN0ExRUFBMzE0MjY5OUJDMDA4N0Y0MjUg
LyogQ2hlY2sgRm9yIEluYXBwcm9wcmlhdGUgT2JqZWN0aXZlLUMgQ2xhc3MgTmFtZXMgKi8sCiAJ
CQkJNURGNTA4ODcxMTZGMzA3NzAwNTIwMkFCIC8qIENoZWNrIEZvciBJbmFwcHJvcHJpYXRlIEZp
bGVzIEluIEZyYW1ld29yayAqLywKIAkJCQk3MUQ2QUEzODFEQTRFNjk0MDBCMjM5NjkgLyogQ29w
eSBtb2Rlcm4gbWVkaWEgY29udHJvbHMgY29kZSBhbmQgYXNzZXRzICovLAorCQkJCTUxRDM5NDc3
MURGMjQ4NjcwMEFCRTg3NSAvKiBDb3B5IGludGVybmFsIHNjcmlwdHMgKi8sCiAJCQkpOwogCQkJ
YnVpbGRSdWxlcyA9ICgKIAkJCSk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29s
cy9DaGFuZ2VMb2cKaW5kZXggNzQzZmY5Y2IzMGQyMzZmZGI4MjU5MTM1NDBlYjQzZGQ5Njk0ZGUz
Yy4uOTQzNjM0YzcyN2YzMmMyZWZhMzY0M2FiNGVkNzZjYzA1N2MxNWU4YSAxMDA2NDQKLS0tIGEv
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisy
MDE2LTEyLTAyICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAg
ICAgIEFkZCBhIG5ldyBwcm9qZWN0IGZvciByZWNvcmRpbmcgYW5kIHBsYXlpbmcgYmFjayBlZGl0
aW5nIGNvbW1hbmRzIGluIGVkaXRhYmxlIHdlYiBjb250ZW50CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUxMTQKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzI5NDA4MTM1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZHMgYSBuZXcgWGNvZGUgcHJvamVjdCBjb250YWluaW5nIHdvcmsgdG93YXJkcyBy
ZXdpbmRpbmcgYW5kIHBsYXlpbmcgYmFjayBlZGl0aW5nIGNvbW1hbmRzLiBUaGlzIHdvcmsgaXMK
KyAgICAgICAgd3JhcHBlZCBpbiBhbiBYY29kZSBwcm9qZWN0IHRvIHRha2UgYWR2YW50YWdlIG9m
IHRoZSBYQ1Rlc3QgZnJhbWV3b3JrLiBUbyBtYW51YWxseSB0ZXN0IHJlY29yZGluZywgb3BlbiB0
aGUKKyAgICAgICAgY2FwdHVyZSB0ZXN0IGhhcm5lc3MsIGVkaXQgdGhlIGNvbnRlbnRlZGl0YWJs
ZSBib2R5LCBhbmQgdGhlbiBoaXQgY21kLVMuIFRoaXMgZG93bmxvYWRzIGEgLmpzb24gZmlsZSB3
aGljaCBtYXkKKyAgICAgICAgdGhlbiBiZSBkcmFnZ2VkIGludG8gdGhlIHBsYXliYWNrIHRlc3Qg
aGFybmVzcy4KKworICAgICAgICBBbHNvIGFkZHMgMyBuZXcgdW5pdCB0ZXN0cyBpbiBFZGl0aW5n
SGlzdG9yeVRlc3RzL1Jld2luZEFuZFBsYXliYWNrVGVzdHMubS4gVGhlc2UgdGVzdHMgY2Fycnkg
b3V0IHRoZSBmb2xsb3dpbmcKKyAgICAgICAgc3RlcHM6CisKKyAgICAgICAgMS4gTG9hZCB0aGUg
Y2FwdHVyZSBoYXJuZXNzIGFuZCBwZXJmb3JtIHRlc3Qtc3BlY2lmaWMgZWRpdGluZyBvbiB0aGUg
d2ViIHZpZXcuCisgICAgICAgIDIuIExldCBvcmlnaW5hbFN0YXRlIGJlIGEgZHVtcCBvZiB0aGUg
RE9NIGF0IHRoaXMgcG9pbnQgaW4gdGltZS4KKyAgICAgICAgMy4gRXh0cmFjdCB0aGUgSlNPTi1z
ZXJpYWxpemVkIGVkaXRpbmcgaGlzdG9yeSBkYXRhIGFuZCBsb2FkIHRoZSBwbGF5YmFjayBoYXJu
ZXNzIHdpdGggdGhpcyBkYXRhLgorICAgICAgICA0LiBSZXdpbmQgYWxsIGVkaXRpbmcgdG8gdGhl
IGJlZ2lubmluZy4KKyAgICAgICAgNS4gUGxheWJhY2sgYWxsIGVkaXRpbmcgdG8gdGhlIGVuZC4K
KyAgICAgICAgNi4gRHVtcCB0aGUgc3RhdGUgb2YgdGhlIERPTS4gVGhpcyBzaG91bGQgYmUgaWRl
bnRpY2FsIHRvIG9yaWdpbmFsU3RhdGUuCisKKyAgICAgICAgKiBFZGl0aW5nSGlzdG9yeS9FZGl0
aW5nSGlzdG9yeS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGRlZC4KKyAgICAgICAgKiBF
ZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9JbmZvLnBsaXN0OiBBZGRlZC4KKyAgICAgICAg
KiBFZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9SZXNvdXJjZXMvQ2FwdHVyZUhhcm5lc3Mu
aHRtbDogQWRkZWQuCisgICAgICAgICogRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvUmVz
b3VyY2VzL0RPTVRlc3RpbmdVdGlsLmpzOiBBZGRlZC4KKyAgICAgICAgKiBFZGl0aW5nSGlzdG9y
eS9FZGl0aW5nSGlzdG9yeS9SZXNvdXJjZXMvUGxheWJhY2tIYXJuZXNzLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIEVkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Rlc3RSdW5uZXIuaDogQWRk
ZWQuCisgICAgICAgICogRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvVGVzdFJ1bm5lci5t
OiBBZGRlZC4KKyAgICAgICAgKGluamVjdGVkTWVzc2FnZUV2ZW50SGFuZGxlclNjcmlwdCk6Cisg
ICAgICAgICgtW1Rlc3RSdW5uZXIgaW5pdF0pOgorICAgICAgICAoLVtUZXN0UnVubmVyIGRlbGV0
ZUJhY2t3YXJkczpdKToKKyAgICAgICAgKC1bVGVzdFJ1bm5lciB0eXBlU3RyaW5nOl0pOgorICAg
ICAgICAoLVtUZXN0UnVubmVyIGJvZHlFbGVtZW50U3VidHJlZV0pOgorICAgICAgICAoLVtUZXN0
UnVubmVyIGJvZHlUZXh0Q29udGVudF0pOgorICAgICAgICAoLVtUZXN0UnVubmVyIGVkaXRpbmdI
aXN0b3J5SlNPTl0pOgorICAgICAgICAoLVtUZXN0UnVubmVyIGxvYWRQbGF5YmFja1Rlc3RIYXJu
ZXNzV2l0aEpTT046XSk6CisgICAgICAgICgtW1Rlc3RSdW5uZXIgbnVtYmVyT2ZVcGRhdGVzXSk6
CisgICAgICAgICgtW1Rlc3RSdW5uZXIganVtcFRvVXBkYXRlSW5kZXg6XSk6CisgICAgICAgICgt
W1Rlc3RSdW5uZXIgZXhwZWN0RXZlbnRzOmFmdGVyUGVyZm9ybWluZzpdKToKKyAgICAgICAgKC1b
VGVzdFJ1bm5lciBsb2FkQ2FwdHVyZVRlc3RIYXJuZXNzXSk6CisgICAgICAgICgtW1Rlc3RSdW5u
ZXIgc2V0VGV4dE9iZnVzY2F0aW9uRW5hYmxlZDpdKToKKyAgICAgICAgKC1bVGVzdFJ1bm5lciBp
c0RvbmVXYWl0aW5nRm9yUGVuZGluZ0V2ZW50c10pOgorICAgICAgICAoLVtUZXN0UnVubmVyIHVz
ZXJDb250ZW50Q29udHJvbGxlcjpkaWRSZWNlaXZlU2NyaXB0TWVzc2FnZTpdKToKKworICAgICAg
ICBUaGUgVGVzdFJ1bm5lciBwcm92aWRlcyB1dGlsaXRpZXMgdGhhdCBhIHVuaXQgdGVzdCBzaG91
bGQgdXNlIHRvIGRyaXZlIHRoZSB0ZXN0IGZvcndhcmQgKGUuZy4gbG9hZGluZyBoYXJuZXNzZXMp
CisgICAgICAgIG9yIGluc3BlY3QgdGhlIHN0YXRlIG9mIHRoZSBsb2FkZWQgcGFnZSAoZS5nLiBl
eHRyYWN0aW5nIEpTT04gZWRpdGluZyBoaXN0b3J5IGRhdGEgZnJvbSB0aGUgY2FwdHVyZSBoYXJu
ZXNzKS4KKworICAgICAgICAqIEVkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Rlc3RVdGls
Lmg6IEFkZGVkLgorICAgICAgICAqIEVkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Rlc3RV
dGlsLm06IEFkZGVkLgorICAgICAgICAod2FpdFVudGlsV2l0aFRpbWVvdXQpOgorICAgICAgICAo
d2FpdFVudGlsKToKKworICAgICAgICBQcm92aWRlcyB1dGlsaXRpZXMgZm9yIHJ1bm5pbmcgdGVz
dHMuIEZvciBub3csIHRoaXMgaXMganVzdCBzcGlubmluZyB0aGUgcnVubG9vcCBvbiBhIGdpdmVu
IGNvbmRpdGlvbi4KKworICAgICAgICAqIEVkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1dL
V2ViVmlld0FkZGl0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKiBFZGl0aW5nSGlzdG9yeS9FZGl0
aW5nSGlzdG9yeS9XS1dlYlZpZXdBZGRpdGlvbnMubTogQWRkZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyBsb2FkUGFnZUZyb21CdW5kbGVOYW1lZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHR5
cGVDaGFyYWN0ZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBrZXlQcmVzc1dpdGhDaGFyYWN0
ZXJzOmtleUNvZGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0RnJvbVN0cmluZzpdKToKKworICAgICAgICBQcm92aWRlcyB1dGlsaXRpZXMgZm9y
IHNpbXVsYXRpbmcgaW50ZXJhY3Rpb24gaW4gYSB3ZWIgdmlldy4KKworICAgICAgICAqIEVkaXRp
bmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L21haW4ubTogQWRkZWQuCisgICAgICAgIChtYWluKToK
KyAgICAgICAgKiBFZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeVRlc3RzL0luZm8ucGxpc3Q6
IEFkZGVkLgorICAgICAgICAqIEVkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5VGVzdHMvUmV3
aW5kQW5kUGxheWJhY2tUZXN0cy5tOiBBZGRlZC4KKyAgICAgICAgKC1bUmV3aW5kQW5kUGxheWJh
Y2tUZXN0cyBzZXRVcF0pOgorICAgICAgICAoLVtSZXdpbmRBbmRQbGF5YmFja1Rlc3RzIHRlYXJE
b3duXSk6CisgICAgICAgICgtW1Jld2luZEFuZFBsYXliYWNrVGVzdHMgdGVzdFR5cGluZ1Npbmds
ZUxpbmVPZlRleHRdKToKKyAgICAgICAgKC1bUmV3aW5kQW5kUGxheWJhY2tUZXN0cyB0ZXN0VHlw
aW5nTXVsdGlwbGVMaW5lc09mVGV4dF0pOgorICAgICAgICAoLVtSZXdpbmRBbmRQbGF5YmFja1Rl
c3RzIHRlc3RUeXBpbmdBbmREZWxldGluZ1RleHRdKToKKyAgICAgICAgKC1bUmV3aW5kQW5kUGxh
eWJhY2tUZXN0cyByZXdpbmRBbmRQbGF5YmFja0VkaXRpbmdJblBsYXliYWNrVGVzdEhhcm5lc3Nd
KToKKyAgICAgICAgKC1bUmV3aW5kQW5kUGxheWJhY2tUZXN0cyBvcmlnaW5hbEJvZHlTdWJ0cmVl
OmlzRXF1YWxUb0ZpbmFsU3VidHJlZTpdKToKKwogMjAxNi0xMS0yOSAgQ2FybG9zIEFsYmVydG8g
TG9wZXogUGVyZXogIDxjbG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBbTGludXhdIHJ1bi1i
ZW5jaG1hcmsgc2hvdWxkIGJlIGFibGUgdG8gZXhlY3V0ZSB0aGUgYmVuY2htYXJrcyB3aXRoIG1v
cmUgYnJvd3NlcnMuCmRpZmYgLS1naXQgYS9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlz
dG9yeS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRp
dGluZ0hpc3RvcnkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMjM0YmI4
MzE5YThmYTNiMWNjMDllYmU0MThhMjgzZDJhYmU3ZTY2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMCwwICsxLDQzMyBAQAorLy8gISQqVVRGOCokIQoreworCWFyY2hpdmVWZXJzaW9uID0g
MTsKKwljbGFzc2VzID0geworCX07CisJb2JqZWN0VmVyc2lvbiA9IDQ2OworCW9iamVjdHMgPSB7
CisKKy8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCisJCTUxNkFEQkUyMURFMTU2QTkw
MEUyQjk4RCAvKiBDYXB0dXJlSGFybmVzcy5odG1sIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTZBREJBODFERTE1NUFCMDBFMkI5OEQgLyogQ2FwdHVy
ZUhhcm5lc3MuaHRtbCAqLzsgfTsKKwkJNTE2QURCRTUxREUxNTZBOTAwRTJCOThEIC8qIFBsYXli
YWNrSGFybmVzcy5odG1sIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTZBREJBQjFERTE1NUFCMDBFMkI5OEQgLyogUGxheWJhY2tIYXJuZXNzLmh0bWwg
Ki87IH07CisJCTUxNkFEQkU2MURFMTU2QkIwMEUyQjk4RCAvKiBtYWluLm0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTZBREJCMTFERTE1NUJEMDBFMkI5
OEQgLyogbWFpbi5tICovOyB9OworCQk1MTZBREJGMzFERTE1N0FEMDBFMkI5OEQgLyogUmV3aW5k
QW5kUGxheWJhY2tUZXN0cy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE2QURCRjIxREUxNTdBRDAwRTJCOThEIC8qIFJld2luZEFuZFBsYXliYWNrVGVz
dHMubSAqLzsgfTsKKwkJNTE3RkQ5M0MxREUxOERDOTAwQTczNjczIC8qIERPTVRlc3RpbmdVdGls
LmpzIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdG
RDkzQjFERTE4REM5MDBBNzM2NzMgLyogRE9NVGVzdGluZ1V0aWwuanMgKi87IH07CisJCTUxRDM5
NDgwMURGMjU0MUQwMEFCRTg3NSAvKiBEdW1wRWRpdGluZ0hpc3RvcnkuanMgaW4gUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDM5NDdFMURGMjU0MUQwMEFC
RTg3NSAvKiBEdW1wRWRpdGluZ0hpc3RvcnkuanMgKi87IH07CisJCTUxRDM5NDgxMURGMjU0MUQw
MEFCRTg3NSAvKiBFZGl0aW5nSGlzdG9yeVV0aWwuanMgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDM5NDdGMURGMjU0MUQwMEFCRTg3NSAvKiBFZGl0
aW5nSGlzdG9yeVV0aWwuanMgKi87IH07CisJCTUxRUNDM0U3MURFRTMzQ0UwMENCMjY3RSAvKiBU
ZXN0VXRpbC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE2QURCQjUxREUxNTVCRDAwRTJCOThEIC8qIFRlc3RVdGlsLm0gKi87IH07CisJCTUxRUNDM0U5
MURFRTMzRDIwMENCMjY3RSAvKiBXS1dlYlZpZXdBZGRpdGlvbnMubSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNkFEQkI3MURFMTU1QkQwMEUyQjk4RCAv
KiBXS1dlYlZpZXdBZGRpdGlvbnMubSAqLzsgfTsKKwkJNTFFQ0MzRUExREVFMzNERDAwQ0IyNjdF
IC8qIFRlc3RSdW5uZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxNkFEQkIzMURFMTU1QkQwMEUyQjk4RCAvKiBUZXN0UnVubmVyLm0gKi87IH07Cisv
KiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYQ29udGFpbmVySXRl
bVByb3h5IHNlY3Rpb24gKi8KKwkJNTE2QURCRjUxREUxNTdBRDAwRTJCOThEIC8qIFBCWENvbnRh
aW5lckl0ZW1Qcm94eSAqLyA9IHsKKwkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKKwkJ
CWNvbnRhaW5lclBvcnRhbCA9IDUxMkQ3QThCMURFMEZCRUYwMDI4RjBFNiAvKiBQcm9qZWN0IG9i
amVjdCAqLzsKKwkJCXByb3h5VHlwZSA9IDE7CisJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDUx
NkFEQkMwMURFMTU1RkMwMEUyQjk4RDsKKwkJCXJlbW90ZUluZm8gPSBFZGl0aW5nSGlzdG9yeTsK
KwkJfTsKKy8qIEVuZCBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLworCisvKiBCZWdp
biBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KKwkJNTE2QURCQTgxREUxNTVBQjAwRTJCOThE
IC8qIENhcHR1cmVIYXJuZXNzLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IG5hbWUgPSBDYXB0
dXJlSGFybmVzcy5odG1sOyBwYXRoID0gRWRpdGluZ0hpc3RvcnkvUmVzb3VyY2VzL0NhcHR1cmVI
YXJuZXNzLmh0bWw7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNTE2QURCQUIxREUx
NTVBQjAwRTJCOThEIC8qIFBsYXliYWNrSGFybmVzcy5odG1sICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1s
OyBuYW1lID0gUGxheWJhY2tIYXJuZXNzLmh0bWw7IHBhdGggPSBFZGl0aW5nSGlzdG9yeS9SZXNv
dXJjZXMvUGxheWJhY2tIYXJuZXNzLmh0bWw7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsK
KwkJNTE2QURCQjAxREUxNTVCRDAwRTJCOThEIC8qIEluZm8ucGxpc3QgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
LnBsaXN0LnhtbDsgbmFtZSA9IEluZm8ucGxpc3Q7IHBhdGggPSBFZGl0aW5nSGlzdG9yeS9JbmZv
LnBsaXN0OyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTUxNkFEQkIxMURFMTU1QkQw
MEUyQjk4RCAvKiBtYWluLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgbmFtZSA9IG1h
aW4ubTsgcGF0aCA9IEVkaXRpbmdIaXN0b3J5L21haW4ubTsgc291cmNlVHJlZSA9IFNPVVJDRV9S
T09UOyB9OworCQk1MTZBREJCMjFERTE1NUJEMDBFMkI5OEQgLyogVGVzdFJ1bm5lci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBUZXN0UnVubmVyLmg7IHBhdGggPSBFZGl0aW5n
SGlzdG9yeS9UZXN0UnVubmVyLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNTE2
QURCQjMxREUxNTVCRDAwRTJCOThEIC8qIFRlc3RSdW5uZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5vYmpjOyBuYW1lID0gVGVzdFJ1bm5lci5tOyBwYXRoID0gRWRpdGluZ0hpc3RvcnkvVGVz
dFJ1bm5lci5tOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTUxNkFEQkI0MURFMTU1
QkQwMEUyQjk4RCAvKiBUZXN0VXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBUZXN0VXRpbC5oOyBwYXRoID0gRWRpdGluZ0hpc3RvcnkvVGVzdFV0aWwuaDsgc291cmNlVHJl
ZSA9IFNPVVJDRV9ST09UOyB9OworCQk1MTZBREJCNTFERTE1NUJEMDBFMkI5OEQgLyogVGVzdFV0
aWwubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBuYW1lID0gVGVzdFV0aWwubTsgcGF0
aCA9IEVkaXRpbmdIaXN0b3J5L1Rlc3RVdGlsLm07IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsg
fTsKKwkJNTE2QURCQjYxREUxNTVCRDAwRTJCOThEIC8qIFdLV2ViVmlld0FkZGl0aW9ucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS1dlYlZpZXdBZGRpdGlvbnMuaDsgcGF0
aCA9IEVkaXRpbmdIaXN0b3J5L1dLV2ViVmlld0FkZGl0aW9ucy5oOyBzb3VyY2VUcmVlID0gU09V
UkNFX1JPT1Q7IH07CisJCTUxNkFEQkI3MURFMTU1QkQwMEUyQjk4RCAvKiBXS1dlYlZpZXdBZGRp
dGlvbnMubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBuYW1lID0gV0tXZWJWaWV3QWRk
aXRpb25zLm07IHBhdGggPSBFZGl0aW5nSGlzdG9yeS9XS1dlYlZpZXdBZGRpdGlvbnMubTsgc291
cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk1MTZBREJDMTFERTE1NUZDMDBFMkI5OEQgLyog
RWRpdGluZ0hpc3RvcnkuYXBwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSB3cmFwcGVyLmFwcGxpY2F0aW9uOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGgg
PSBFZGl0aW5nSGlzdG9yeS5hcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07
CisJCTUxNkFEQkYwMURFMTU3QUQwMEUyQjk4RCAvKiBFZGl0aW5nSGlzdG9yeVRlc3RzLnhjdGVz
dCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gd3JhcHBl
ci5jZmJ1bmRsZTsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gRWRpdGluZ0hpc3RvcnlUZXN0
cy54Y3Rlc3Q7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTUxNkFEQkYy
MURFMTU3QUQwMEUyQjk4RCAvKiBSZXdpbmRBbmRQbGF5YmFja1Rlc3RzLm0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsg
cGF0aCA9IFJld2luZEFuZFBsYXliYWNrVGVzdHMubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTE2QURCRjQxREUxNTdBRDAwRTJCOThEIC8qIEluZm8ucGxpc3QgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0LnhtbDsgcGF0
aCA9IEluZm8ucGxpc3Q7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxN0ZEOTNCMURF
MThEQzkwMEE3MzY3MyAvKiBET01UZXN0aW5nVXRpbC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
amF2YXNjcmlwdDsgbmFtZSA9IERPTVRlc3RpbmdVdGlsLmpzOyBwYXRoID0gRWRpdGluZ0hpc3Rv
cnkvUmVzb3VyY2VzL0RPTVRlc3RpbmdVdGlsLmpzOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7
IH07CisJCTUxRDM5NDdFMURGMjU0MUQwMEFCRTg3NSAvKiBEdW1wRWRpdGluZ0hpc3RvcnkuanMg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IG5hbWUgPSBEdW1wRWRpdGluZ0hpc3Rv
cnkuanM7IHBhdGggPSAuLi8uLi9Tb3VyY2UvV2ViQ29yZS9JbnRlcm5hbFNjcmlwdHMvRHVtcEVk
aXRpbmdIaXN0b3J5LmpzOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTUxRDM5NDdG
MURGMjU0MUQwMEFCRTg3NSAvKiBFZGl0aW5nSGlzdG9yeVV0aWwuanMgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmphdmFzY3JpcHQ7IG5hbWUgPSBFZGl0aW5nSGlzdG9yeVV0aWwuanM7IHBhdGggPSAu
Li8uLi9Tb3VyY2UvV2ViQ29yZS9JbnRlcm5hbFNjcmlwdHMvRWRpdGluZ0hpc3RvcnlVdGlsLmpz
OyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBz
ZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8K
KwkJNTE2QURCQkUxREUxNTVGQzAwRTJCOThEIC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2Eg
PSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2
NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKKwkJfTsKKwkJNTE2QURCRUQxREUxNTdBRDAwRTJCOThEIC8qIEZyYW1ld29y
a3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0
aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKy8qIEVuZCBQQlhGcmFtZXdvcmtz
QnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEdyb3VwIHNlY3Rpb24gKi8KKwkJ
NTEyRDdBOEExREUwRkJFRjAwMjhGMEU2ID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGls
ZHJlbiA9ICgKKwkJCQk1MTJEN0E5NTFERTBGQkVGMDAyOEYwRTYgLyogRWRpdGluZ0hpc3Rvcnkg
Ki8sCisJCQkJNTE2QURCRjExREUxNTdBRDAwRTJCOThEIC8qIEVkaXRpbmdIaXN0b3J5VGVzdHMg
Ki8sCisJCQkJNTEyRDdBOTQxREUwRkJFRjAwMjhGMEU2IC8qIFByb2R1Y3RzICovLAorCQkJKTsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTUxMkQ3QTk0MURFMEZCRUYwMDI4
RjBFNiAvKiBQcm9kdWN0cyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4g
PSAoCisJCQkJNTE2QURCQzExREUxNTVGQzAwRTJCOThEIC8qIEVkaXRpbmdIaXN0b3J5LmFwcCAq
LywKKwkJCQk1MTZBREJGMDFERTE1N0FEMDBFMkI5OEQgLyogRWRpdGluZ0hpc3RvcnlUZXN0cy54
Y3Rlc3QgKi8sCisJCQkpOworCQkJbmFtZSA9IFByb2R1Y3RzOworCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKKwkJfTsKKwkJNTEyRDdBOTUxREUwRkJFRjAwMjhGMEU2IC8qIEVkaXRpbmdIaXN0
b3J5ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk1MTZB
REJCMDFERTE1NUJEMDBFMkI5OEQgLyogSW5mby5wbGlzdCAqLywKKwkJCQk1MTZBREJCMTFERTE1
NUJEMDBFMkI5OEQgLyogbWFpbi5tICovLAorCQkJCTUxNkFEQkIyMURFMTU1QkQwMEUyQjk4RCAv
KiBUZXN0UnVubmVyLmggKi8sCisJCQkJNTE2QURCQjMxREUxNTVCRDAwRTJCOThEIC8qIFRlc3RS
dW5uZXIubSAqLywKKwkJCQk1MTZBREJCNDFERTE1NUJEMDBFMkI5OEQgLyogVGVzdFV0aWwuaCAq
LywKKwkJCQk1MTZBREJCNTFERTE1NUJEMDBFMkI5OEQgLyogVGVzdFV0aWwubSAqLywKKwkJCQk1
MTZBREJCNjFERTE1NUJEMDBFMkI5OEQgLyogV0tXZWJWaWV3QWRkaXRpb25zLmggKi8sCisJCQkJ
NTE2QURCQjcxREUxNTVCRDAwRTJCOThEIC8qIFdLV2ViVmlld0FkZGl0aW9ucy5tICovLAorCQkJ
CTUxMkQ3QUI1MURFMEZDNTkwMDI4RjBFNiAvKiBSZXNvdXJjZXMgKi8sCisJCQkpOworCQkJbmFt
ZSA9IEVkaXRpbmdIaXN0b3J5OworCQkJcGF0aCA9IEVkaXRpbmdIaXN0b3J5VGVzdDsKKwkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTUxMkQ3QUI1MURFMEZDNTkwMDI4RjBFNiAv
KiBSZXNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAor
CQkJCTUxRDM5NDdFMURGMjU0MUQwMEFCRTg3NSAvKiBEdW1wRWRpdGluZ0hpc3RvcnkuanMgKi8s
CisJCQkJNTFEMzk0N0YxREYyNTQxRDAwQUJFODc1IC8qIEVkaXRpbmdIaXN0b3J5VXRpbC5qcyAq
LywKKwkJCQk1MTdGRDkzQjFERTE4REM5MDBBNzM2NzMgLyogRE9NVGVzdGluZ1V0aWwuanMgKi8s
CisJCQkJNTE2QURCQTgxREUxNTVBQjAwRTJCOThEIC8qIENhcHR1cmVIYXJuZXNzLmh0bWwgKi8s
CisJCQkJNTE2QURCQUIxREUxNTVBQjAwRTJCOThEIC8qIFBsYXliYWNrSGFybmVzcy5odG1sICov
LAorCQkJKTsKKwkJCW5hbWUgPSBSZXNvdXJjZXM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OworCQl9OworCQk1MTZBREJGMTFERTE1N0FEMDBFMkI5OEQgLyogRWRpdGluZ0hpc3RvcnlUZXN0
cyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNTE2QURC
RjIxREUxNTdBRDAwRTJCOThEIC8qIFJld2luZEFuZFBsYXliYWNrVGVzdHMubSAqLywKKwkJCQk1
MTZBREJGNDFERTE1N0FEMDBFMkI5OEQgLyogSW5mby5wbGlzdCAqLywKKwkJCSk7CisJCQlwYXRo
ID0gRWRpdGluZ0hpc3RvcnlUZXN0czsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07
CisvKiBFbmQgUEJYR3JvdXAgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhOYXRpdmVUYXJnZXQg
c2VjdGlvbiAqLworCQk1MTZBREJDMDFERTE1NUZDMDBFMkI5OEQgLyogRWRpdGluZ0hpc3Rvcnkg
Ki8gPSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25M
aXN0ID0gNTE2QURCREExREUxNTVGQzAwRTJCOThEIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlz
dCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJFZGl0aW5nSGlzdG9yeSIgKi87CisJCQlidWlsZFBoYXNl
cyA9ICgKKwkJCQk1MTZBREJCRDFERTE1NUZDMDBFMkI5OEQgLyogU291cmNlcyAqLywKKwkJCQk1
MTZBREJCRTFERTE1NUZDMDBFMkI5OEQgLyogRnJhbWV3b3JrcyAqLywKKwkJCQk1MTZBREJCRjFE
RTE1NUZDMDBFMkI5OEQgLyogUmVzb3VyY2VzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAo
CisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSBFZGl0aW5nSGlz
dG9yeTsKKwkJCXByb2R1Y3ROYW1lID0gRWRpdGluZ0hpc3Rvcnk7CisJCQlwcm9kdWN0UmVmZXJl
bmNlID0gNTE2QURCQzExREUxNTVGQzAwRTJCOThEIC8qIEVkaXRpbmdIaXN0b3J5LmFwcCAqLzsK
KwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUuYXBwbGljYXRpb24iOwor
CQl9OworCQk1MTZBREJFRjFERTE1N0FEMDBFMkI5OEQgLyogRWRpdGluZ0hpc3RvcnlUZXN0cyAq
LyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxp
c3QgPSA1MTZBREJGNzFERTE1N0FEMDBFMkI5OEQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0
IGZvciBQQlhOYXRpdmVUYXJnZXQgIkVkaXRpbmdIaXN0b3J5VGVzdHMiICovOworCQkJYnVpbGRQ
aGFzZXMgPSAoCisJCQkJNTE2QURCRUMxREUxNTdBRDAwRTJCOThEIC8qIFNvdXJjZXMgKi8sCisJ
CQkJNTE2QURCRUQxREUxNTdBRDAwRTJCOThEIC8qIEZyYW1ld29ya3MgKi8sCisJCQkJNTE2QURC
RUUxREUxNTdBRDAwRTJCOThEIC8qIFJlc291cmNlcyAqLywKKwkJCSk7CisJCQlidWlsZFJ1bGVz
ID0gKAorCQkJKTsKKwkJCWRlcGVuZGVuY2llcyA9ICgKKwkJCQk1MTZBREJGNjFERTE1N0FEMDBF
MkI5OEQgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKKwkJCSk7CisJCQluYW1lID0gRWRpdGlu
Z0hpc3RvcnlUZXN0czsKKwkJCXByb2R1Y3ROYW1lID0gRWRpdGluZ0hpc3RvcnlUZXN0czsKKwkJ
CXByb2R1Y3RSZWZlcmVuY2UgPSA1MTZBREJGMDFERTE1N0FEMDBFMkI5OEQgLyogRWRpdGluZ0hp
c3RvcnlUZXN0cy54Y3Rlc3QgKi87CisJCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVj
dC10eXBlLmJ1bmRsZS51bml0LXRlc3QiOworCQl9OworLyogRW5kIFBCWE5hdGl2ZVRhcmdldCBz
ZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWFByb2plY3Qgc2VjdGlvbiAqLworCQk1MTJEN0E4QjFE
RTBGQkVGMDAyOEYwRTYgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7CisJCQlpc2EgPSBQQlhQcm9q
ZWN0OworCQkJYXR0cmlidXRlcyA9IHsKKwkJCQlMYXN0VXBncmFkZUNoZWNrID0gMDgyMDsKKwkJ
CQlUYXJnZXRBdHRyaWJ1dGVzID0geworCQkJCQk1MTZBREJDMDFERTE1NUZDMDBFMkI5OEQgPSB7
CisJCQkJCQlDcmVhdGVkT25Ub29sc1ZlcnNpb24gPSA4LjI7CisJCQkJCQlQcm92aXNpb25pbmdT
dHlsZSA9IEF1dG9tYXRpYzsKKwkJCQkJfTsKKwkJCQkJNTE2QURCRUYxREUxNTdBRDAwRTJCOThE
ID0geworCQkJCQkJQ3JlYXRlZE9uVG9vbHNWZXJzaW9uID0gOC4yOworCQkJCQkJUHJvdmlzaW9u
aW5nU3R5bGUgPSBBdXRvbWF0aWM7CisJCQkJCQlUZXN0VGFyZ2V0SUQgPSA1MTZBREJDMDFERTE1
NUZDMDBFMkI5OEQ7CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisJCQlidWlsZENvbmZpZ3VyYXRp
b25MaXN0ID0gNTEyRDdBOEUxREUwRkJFRjAwMjhGMEU2IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24g
bGlzdCBmb3IgUEJYUHJvamVjdCAiRWRpdGluZ0hpc3RvcnkiICovOworCQkJY29tcGF0aWJpbGl0
eVZlcnNpb24gPSAiWGNvZGUgMy4yIjsKKwkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsK
KwkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAwOworCQkJa25vd25SZWdpb25zID0gKAorCQkJ
CWVuLAorCQkJCUJhc2UsCisJCQkpOworCQkJbWFpbkdyb3VwID0gNTEyRDdBOEExREUwRkJFRjAw
MjhGMEU2OworCQkJcHJvZHVjdFJlZkdyb3VwID0gNTEyRDdBOTQxREUwRkJFRjAwMjhGMEU2IC8q
IFByb2R1Y3RzICovOworCQkJcHJvamVjdERpclBhdGggPSAiIjsKKwkJCXByb2plY3RSb290ID0g
IiI7CisJCQl0YXJnZXRzID0gKAorCQkJCTUxNkFEQkMwMURFMTU1RkMwMEUyQjk4RCAvKiBFZGl0
aW5nSGlzdG9yeSAqLywKKwkJCQk1MTZBREJFRjFERTE1N0FEMDBFMkI5OEQgLyogRWRpdGluZ0hp
c3RvcnlUZXN0cyAqLywKKwkJCSk7CisJCX07CisvKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICov
CisKKy8qIEJlZ2luIFBCWFJlc291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQk1MTZBREJC
RjFERTE1NUZDMDBFMkI5OEQgLyogUmVzb3VyY2VzICovID0geworCQkJaXNhID0gUEJYUmVzb3Vy
Y2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxl
cyA9ICgKKwkJCQk1MUQzOTQ4MDFERjI1NDFEMDBBQkU4NzUgLyogRHVtcEVkaXRpbmdIaXN0b3J5
LmpzIGluIFJlc291cmNlcyAqLywKKwkJCQk1MTZBREJFMjFERTE1NkE5MDBFMkI5OEQgLyogQ2Fw
dHVyZUhhcm5lc3MuaHRtbCBpbiBSZXNvdXJjZXMgKi8sCisJCQkJNTE3RkQ5M0MxREUxOERDOTAw
QTczNjczIC8qIERPTVRlc3RpbmdVdGlsLmpzIGluIFJlc291cmNlcyAqLywKKwkJCQk1MTZBREJF
NTFERTE1NkE5MDBFMkI5OEQgLyogUGxheWJhY2tIYXJuZXNzLmh0bWwgaW4gUmVzb3VyY2VzICov
LAorCQkJCTUxRDM5NDgxMURGMjU0MUQwMEFCRTg3NSAvKiBFZGl0aW5nSGlzdG9yeVV0aWwuanMg
aW4gUmVzb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOworCQl9OworCQk1MTZBREJFRTFERTE1N0FEMDBFMkI5OEQgLyogUmVzb3VyY2Vz
ICovID0geworCQkJaXNhID0gUEJYUmVzb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9u
TWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKy8qIEVuZCBQQlhSZXNvdXJjZXNCdWls
ZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlv
biAqLworCQk1MTZBREJCRDFERTE1NUZDMDBFMkI5OEQgLyogU291cmNlcyAqLyA9IHsKKwkJCWlz
YSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0
NzsKKwkJCWZpbGVzID0gKAorCQkJCTUxNkFEQkU2MURFMTU2QkIwMEUyQjk4RCAvKiBtYWluLm0g
aW4gU291cmNlcyAqLywKKwkJCQk1MUVDQzNFQTFERUUzM0REMDBDQjI2N0UgLyogVGVzdFJ1bm5l
ci5tIGluIFNvdXJjZXMgKi8sCisJCQkJNTFFQ0MzRTcxREVFMzNDRTAwQ0IyNjdFIC8qIFRlc3RV
dGlsLm0gaW4gU291cmNlcyAqLywKKwkJCQk1MUVDQzNFOTFERUUzM0QyMDBDQjI2N0UgLyogV0tX
ZWJWaWV3QWRkaXRpb25zLm0gaW4gU291cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKwkJNTE2QURCRUMxREUxNTdBRDAwRTJC
OThEIC8qIFNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKKwkJ
CWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQk1MTZBREJG
MzFERTE1N0FEMDBFMkI5OEQgLyogUmV3aW5kQW5kUGxheWJhY2tUZXN0cy5tIGluIFNvdXJjZXMg
Ki8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJ
CX07CisvKiBFbmQgUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCisvKiBCZWdpbiBQ
QlhUYXJnZXREZXBlbmRlbmN5IHNlY3Rpb24gKi8KKwkJNTE2QURCRjYxREUxNTdBRDAwRTJCOThE
IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CisJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRl
bmN5OworCQkJdGFyZ2V0ID0gNTE2QURCQzAxREUxNTVGQzAwRTJCOThEIC8qIEVkaXRpbmdIaXN0
b3J5ICovOworCQkJdGFyZ2V0UHJveHkgPSA1MTZBREJGNTFERTE1N0FEMDBFMkI5OEQgLyogUEJY
Q29udGFpbmVySXRlbVByb3h5ICovOworCQl9OworLyogRW5kIFBCWFRhcmdldERlcGVuZGVuY3kg
c2VjdGlvbiAqLworCisvKiBCZWdpbiBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCisJ
CTUxMkQ3QUEyMURFMEZCRUYwMDI4RjBFNiAvKiBEZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVp
bGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlBTFdBWVNfU0VBUkNI
X1VTRVJfUEFUSFMgPSBOTzsKKwkJCQlDTEFOR19BTkFMWVpFUl9OT05OVUxMID0gWUVTOworCQkJ
CUNMQU5HX0NYWF9MQU5HVUFHRV9TVEFOREFSRCA9ICJnbnUrKzB4IjsKKwkJCQlDTEFOR19DWFhf
TElCUkFSWSA9ICJsaWJjKysiOworCQkJCUNMQU5HX0VOQUJMRV9NT0RVTEVTID0gWUVTOworCQkJ
CUNMQU5HX0VOQUJMRV9PQkpDX0FSQyA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0JPT0xfQ09OVkVS
U0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0NPTlNUQU5UX0NPTlZFUlNJT04gPSBZRVM7CisJ
CQkJQ0xBTkdfV0FSTl9ESVJFQ1RfT0JKQ19JU0FfVVNBR0UgPSBZRVNfRVJST1I7CisJCQkJQ0xB
TkdfV0FSTl9ET0NVTUVOVEFUSU9OX0NPTU1FTlRTID0gWUVTOworCQkJCUNMQU5HX1dBUk5fRU1Q
VFlfQk9EWSA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0VOVU1fQ09OVkVSU0lPTiA9IFlFUzsKKwkJ
CQlDTEFOR19XQVJOX0lORklOSVRFX1JFQ1VSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0lO
VF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fT0JKQ19ST09UX0NMQVNTID0gWUVT
X0VSUk9SOworCQkJCUNMQU5HX1dBUk5fU1VTUElDSU9VU19NT1ZFID0gWUVTOworCQkJCUNMQU5H
X1dBUk5fVU5SRUFDSEFCTEVfQ09ERSA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX19EVVBMSUNBVEVf
TUVUSE9EX01BVENIID0gWUVTOworCQkJCUNPREVfU0lHTl9JREVOVElUWSA9ICItIjsKKwkJCQlD
T1BZX1BIQVNFX1NUUklQID0gTk87CisJCQkJREVCVUdfSU5GT1JNQVRJT05fRk9STUFUID0gZHdh
cmY7CisJCQkJRU5BQkxFX1NUUklDVF9PQkpDX01TR1NFTkQgPSBZRVM7CisJCQkJRU5BQkxFX1RF
U1RBQklMSVRZID0gWUVTOworCQkJCUdDQ19DX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251OTk7CisJ
CQkJR0NDX0RZTkFNSUNfTk9fUElDID0gTk87CisJCQkJR0NDX05PX0NPTU1PTl9CTE9DS1MgPSBZ
RVM7CisJCQkJR0NDX09QVElNSVpBVElPTl9MRVZFTCA9IDA7CisJCQkJR0NDX1BSRVBST0NFU1NP
Ul9ERUZJTklUSU9OUyA9ICgKKwkJCQkJIkRFQlVHPTEiLAorCQkJCQkiJChpbmhlcml0ZWQpIiwK
KwkJCQkpOworCQkJCUdDQ19XQVJOXzY0X1RPXzMyX0JJVF9DT05WRVJTSU9OID0gWUVTOworCQkJ
CUdDQ19XQVJOX0FCT1VUX1JFVFVSTl9UWVBFID0gWUVTX0VSUk9SOworCQkJCUdDQ19XQVJOX1VO
REVDTEFSRURfU0VMRUNUT1IgPSBZRVM7CisJCQkJR0NDX1dBUk5fVU5JTklUSUFMSVpFRF9BVVRP
UyA9IFlFU19BR0dSRVNTSVZFOworCQkJCUdDQ19XQVJOX1VOVVNFRF9GVU5DVElPTiA9IFlFUzsK
KwkJCQlHQ0NfV0FSTl9VTlVTRURfVkFSSUFCTEUgPSBZRVM7CisJCQkJTUFDT1NYX0RFUExPWU1F
TlRfVEFSR0VUID0gMTAuMTM7CisJCQkJTVRMX0VOQUJMRV9ERUJVR19JTkZPID0gWUVTOworCQkJ
CU9OTFlfQUNUSVZFX0FSQ0ggPSBZRVM7CisJCQkJU0RLUk9PVCA9IG1hY29zeDsKKwkJCX07CisJ
CQluYW1lID0gRGVidWc7CisJCX07CisJCTUxMkQ3QUEzMURFMEZCRUYwMDI4RjBFNiAvKiBSZWxl
YXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRp
bmdzID0geworCQkJCUFMV0FZU19TRUFSQ0hfVVNFUl9QQVRIUyA9IE5POworCQkJCUNMQU5HX0FO
QUxZWkVSX05PTk5VTEwgPSBZRVM7CisJCQkJQ0xBTkdfQ1hYX0xBTkdVQUdFX1NUQU5EQVJEID0g
ImdudSsrMHgiOworCQkJCUNMQU5HX0NYWF9MSUJSQVJZID0gImxpYmMrKyI7CisJCQkJQ0xBTkdf
RU5BQkxFX01PRFVMRVMgPSBZRVM7CisJCQkJQ0xBTkdfRU5BQkxFX09CSkNfQVJDID0gWUVTOwor
CQkJCUNMQU5HX1dBUk5fQk9PTF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fQ09O
U1RBTlRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0RJUkVDVF9PQkpDX0lTQV9V
U0FHRSA9IFlFU19FUlJPUjsKKwkJCQlDTEFOR19XQVJOX0RPQ1VNRU5UQVRJT05fQ09NTUVOVFMg
PSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9FTVBUWV9CT0RZID0gWUVTOworCQkJCUNMQU5HX1dBUk5f
RU5VTV9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fSU5GSU5JVEVfUkVDVVJTSU9O
ID0gWUVTOworCQkJCUNMQU5HX1dBUk5fSU5UX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdf
V0FSTl9PQkpDX1JPT1RfQ0xBU1MgPSBZRVNfRVJST1I7CisJCQkJQ0xBTkdfV0FSTl9TVVNQSUNJ
T1VTX01PVkUgPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9VTlJFQUNIQUJMRV9DT0RFID0gWUVTOwor
CQkJCUNMQU5HX1dBUk5fX0RVUExJQ0FURV9NRVRIT0RfTUFUQ0ggPSBZRVM7CisJCQkJQ09ERV9T
SUdOX0lERU5USVRZID0gIi0iOworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBOTzsKKwkJCQlERUJV
R19JTkZPUk1BVElPTl9GT1JNQVQgPSAiZHdhcmYtd2l0aC1kc3ltIjsKKwkJCQlFTkFCTEVfTlNf
QVNTRVJUSU9OUyA9IE5POworCQkJCUVOQUJMRV9TVFJJQ1RfT0JKQ19NU0dTRU5EID0gWUVTOwor
CQkJCUdDQ19DX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251OTk7CisJCQkJR0NDX05PX0NPTU1PTl9C
TE9DS1MgPSBZRVM7CisJCQkJR0NDX1dBUk5fNjRfVE9fMzJfQklUX0NPTlZFUlNJT04gPSBZRVM7
CisJCQkJR0NDX1dBUk5fQUJPVVRfUkVUVVJOX1RZUEUgPSBZRVNfRVJST1I7CisJCQkJR0NDX1dB
Uk5fVU5ERUNMQVJFRF9TRUxFQ1RPUiA9IFlFUzsKKwkJCQlHQ0NfV0FSTl9VTklOSVRJQUxJWkVE
X0FVVE9TID0gWUVTX0FHR1JFU1NJVkU7CisJCQkJR0NDX1dBUk5fVU5VU0VEX0ZVTkNUSU9OID0g
WUVTOworCQkJCUdDQ19XQVJOX1VOVVNFRF9WQVJJQUJMRSA9IFlFUzsKKwkJCQlNQUNPU1hfREVQ
TE9ZTUVOVF9UQVJHRVQgPSAxMC4xMzsKKwkJCQlNVExfRU5BQkxFX0RFQlVHX0lORk8gPSBOTzsK
KwkJCQlTREtST09UID0gbWFjb3N4OworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNlOworCQl9Owor
CQk1MTZBREJEQjFERTE1NUZDMDBFMkI5OEQgLyogRGVidWcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1
aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQVNTRVRDQVRBTE9H
X0NPTVBJTEVSX0FQUElDT05fTkFNRSA9IEFwcEljb247CisJCQkJQ09NQklORV9ISURQSV9JTUFH
RVMgPSBZRVM7CisJCQkJSU5GT1BMSVNUX0ZJTEUgPSBFZGl0aW5nSGlzdG9yeS9JbmZvLnBsaXN0
OworCQkJCUxEX1JVTlBBVEhfU0VBUkNIX1BBVEhTID0gIiQoaW5oZXJpdGVkKSBAZXhlY3V0YWJs
ZV9wYXRoLy4uL0ZyYW1ld29ya3MiOworCQkJCVBST0RVQ1RfQlVORExFX0lERU5USUZJRVIgPSBj
b20uYXBwbGUuRWRpdGluZ0hpc3Rvcnk7CisJCQkJUFJPRFVDVF9OQU1FID0gIiQoVEFSR0VUX05B
TUUpIjsKKwkJCQlTREtST09UID0gbWFjb3N4LmludGVybmFsOworCQkJfTsKKwkJCW5hbWUgPSBE
ZWJ1ZzsKKwkJfTsKKwkJNTE2QURCREMxREUxNTVGQzAwRTJCOThEIC8qIFJlbGVhc2UgKi8gPSB7
CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJ
CQkJQVNTRVRDQVRBTE9HX0NPTVBJTEVSX0FQUElDT05fTkFNRSA9IEFwcEljb247CisJCQkJQ09N
QklORV9ISURQSV9JTUFHRVMgPSBZRVM7CisJCQkJSU5GT1BMSVNUX0ZJTEUgPSBFZGl0aW5nSGlz
dG9yeS9JbmZvLnBsaXN0OworCQkJCUxEX1JVTlBBVEhfU0VBUkNIX1BBVEhTID0gIiQoaW5oZXJp
dGVkKSBAZXhlY3V0YWJsZV9wYXRoLy4uL0ZyYW1ld29ya3MiOworCQkJCVBST0RVQ1RfQlVORExF
X0lERU5USUZJRVIgPSBjb20uYXBwbGUuRWRpdGluZ0hpc3Rvcnk7CisJCQkJUFJPRFVDVF9OQU1F
ID0gIiQoVEFSR0VUX05BTUUpIjsKKwkJCQlTREtST09UID0gbWFjb3N4LmludGVybmFsOworCQkJ
fTsKKwkJCW5hbWUgPSBSZWxlYXNlOworCQl9OworCQk1MTZBREJGODFERTE1N0FEMDBFMkI5OEQg
LyogRGVidWcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxk
U2V0dGluZ3MgPSB7CisJCQkJQlVORExFX0xPQURFUiA9ICIkKFRFU1RfSE9TVCkiOworCQkJCUNP
TUJJTkVfSElEUElfSU1BR0VTID0gWUVTOworCQkJCUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElP
TlMgPSAoCisJCQkJCSJERUJVRz0xIiwKKwkJCQkJIiQoaW5oZXJpdGVkKSIsCisJCQkJCSJURVNU
PTEiLAorCQkJCSk7CisJCQkJSU5GT1BMSVNUX0ZJTEUgPSBFZGl0aW5nSGlzdG9yeVRlc3RzL0lu
Zm8ucGxpc3Q7CisJCQkJTERfUlVOUEFUSF9TRUFSQ0hfUEFUSFMgPSAiJChpbmhlcml0ZWQpIEBl
eGVjdXRhYmxlX3BhdGgvLi4vRnJhbWV3b3JrcyBAbG9hZGVyX3BhdGgvLi4vRnJhbWV3b3JrcyI7
CisJCQkJUFJPRFVDVF9CVU5ETEVfSURFTlRJRklFUiA9IGNvbS5hcHBsZS5FZGl0aW5nSGlzdG9y
eVRlc3RzOworCQkJCVBST0RVQ1RfTkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7CisJCQkJVEVTVF9I
T1NUID0gIiQoQlVJTFRfUFJPRFVDVFNfRElSKS9FZGl0aW5nSGlzdG9yeS5hcHAvQ29udGVudHMv
TWFjT1MvRWRpdGluZ0hpc3RvcnkiOworCQkJfTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsKKwkJ
NTE2QURCRjkxREUxNTdBRDAwRTJCOThEIC8qIFJlbGVhc2UgKi8gPSB7CisJCQlpc2EgPSBYQ0J1
aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQlVORExFX0xPQURF
UiA9ICIkKFRFU1RfSE9TVCkiOworCQkJCUNPTUJJTkVfSElEUElfSU1BR0VTID0gWUVTOworCQkJ
CUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAiVEVTVD0xIjsKKwkJCQlJTkZPUExJU1Rf
RklMRSA9IEVkaXRpbmdIaXN0b3J5VGVzdHMvSW5mby5wbGlzdDsKKwkJCQlMRF9SVU5QQVRIX1NF
QVJDSF9QQVRIUyA9ICIkKGluaGVyaXRlZCkgQGV4ZWN1dGFibGVfcGF0aC8uLi9GcmFtZXdvcmtz
IEBsb2FkZXJfcGF0aC8uLi9GcmFtZXdvcmtzIjsKKwkJCQlQUk9EVUNUX0JVTkRMRV9JREVOVElG
SUVSID0gY29tLmFwcGxlLkVkaXRpbmdIaXN0b3J5VGVzdHM7CisJCQkJUFJPRFVDVF9OQU1FID0g
IiQoVEFSR0VUX05BTUUpIjsKKwkJCQlURVNUX0hPU1QgPSAiJChCVUlMVF9QUk9EVUNUU19ESVIp
L0VkaXRpbmdIaXN0b3J5LmFwcC9Db250ZW50cy9NYWNPUy9FZGl0aW5nSGlzdG9yeSI7CisJCQl9
OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CisvKiBFbmQgWENCdWlsZENvbmZpZ3VyYXRpb24g
c2VjdGlvbiAqLworCisvKiBCZWdpbiBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KKwkJ
NTEyRDdBOEUxREUwRkJFRjAwMjhGMEU2IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3Ig
UEJYUHJvamVjdCAiRWRpdGluZ0hpc3RvcnkiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0
aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJNTEyRDdBQTIxREUwRkJF
RjAwMjhGMEU2IC8qIERlYnVnICovLAorCQkJCTUxMkQ3QUEzMURFMEZCRUYwMDI4RjBFNiAvKiBS
ZWxlYXNlICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsK
KwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTUxNkFEQkRB
MURFMTU1RkMwMEUyQjk4RCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2
ZVRhcmdldCAiRWRpdGluZ0hpc3RvcnkiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9u
TGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJNTE2QURCREIxREUxNTVGQzAw
RTJCOThEIC8qIERlYnVnICovLAorCQkJCTUxNkFEQkRDMURFMTU1RkMwMEUyQjk4RCAvKiBSZWxl
YXNlICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKKwkJ
CWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTUxNkFEQkY3MURF
MTU3QUQwMEUyQjk4RCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRh
cmdldCAiRWRpdGluZ0hpc3RvcnlUZXN0cyIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRp
b25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQk1MTZBREJGODFERTE1N0FE
MDBFMkI5OEQgLyogRGVidWcgKi8sCisJCQkJNTE2QURCRjkxREUxNTdBRDAwRTJCOThEIC8qIFJl
bGVhc2UgKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwor
CQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKKwkJfTsKKy8qIEVuZCBYQ0Nv
bmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KKwl9OworCXJvb3RPYmplY3QgPSA1MTJEN0E4QjFE
RTBGQkVGMDAyOEYwRTYgLyogUHJvamVjdCBvYmplY3QgKi87Cit9CmRpZmYgLS1naXQgYS9Ub29s
cy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9JbmZvLnBsaXN0IGIvVG9vbHMvRWRpdGlu
Z0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvSW5mby5wbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YTRlYmJmMWNh
YmZmM2Q5ODRjYmY1NTZjYjY5MGJkMmJkMjMwNTE1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
RWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvSW5mby5wbGlzdApAQCAtMCwwICsxLDI4IEBA
Cis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIHBsaXN0
IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5j
b20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Cis8cGxpc3QgdmVyc2lvbj0iMS4wIj4KKzxk
aWN0PgorCTxrZXk+Q0ZCdW5kbGVEZXZlbG9wbWVudFJlZ2lvbjwva2V5PgorCTxzdHJpbmc+ZW48
L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlRXhlY3V0YWJsZTwva2V5PgorCTxzdHJpbmc+JChFWEVD
VVRBQkxFX05BTUUpPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZUljb25GaWxlPC9rZXk+CisJPHN0
cmluZz48L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlSWRlbnRpZmllcjwva2V5PgorCTxzdHJpbmc+
JChQUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSKTwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVJbmZv
RGljdGlvbmFyeVZlcnNpb248L2tleT4KKwk8c3RyaW5nPjYuMDwvc3RyaW5nPgorCTxrZXk+Q0ZC
dW5kbGVOYW1lPC9rZXk+CisJPHN0cmluZz4kKFBST0RVQ1RfTkFNRSk8L3N0cmluZz4KKwk8a2V5
PkNGQnVuZGxlUGFja2FnZVR5cGU8L2tleT4KKwk8c3RyaW5nPkFQUEw8L3N0cmluZz4KKwk8a2V5
PkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nPC9rZXk+CisJPHN0cmluZz4xLjA8L3N0cmluZz4K
Kwk8a2V5PkNGQnVuZGxlVmVyc2lvbjwva2V5PgorCTxzdHJpbmc+MTwvc3RyaW5nPgorCTxrZXk+
TFNNaW5pbXVtU3lzdGVtVmVyc2lvbjwva2V5PgorCTxzdHJpbmc+JChNQUNPU1hfREVQTE9ZTUVO
VF9UQVJHRVQpPC9zdHJpbmc+CisJPGtleT5OU1ByaW5jaXBhbENsYXNzPC9rZXk+CisJPHN0cmlu
Zz5OU0FwcGxpY2F0aW9uPC9zdHJpbmc+Cis8L2RpY3Q+Cis8L3BsaXN0PgpkaWZmIC0tZ2l0IGEv
VG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvUmVzb3VyY2VzL0NhcHR1cmVIYXJu
ZXNzLmh0bWwgYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9SZXNvdXJjZXMv
Q2FwdHVyZUhhcm5lc3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYTAyMjhjZjM5MTc5ZWM3YTViOTJlNTA5
OTcyMTI3YWUzYTcxZDk0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRWRpdGluZ0hpc3Rvcnkv
RWRpdGluZ0hpc3RvcnkvUmVzb3VyY2VzL0NhcHR1cmVIYXJuZXNzLmh0bWwKQEAgLTAsMCArMSwx
NCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJET01UZXN0aW5nVXRpbC5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iRWRpdGluZ0hpc3RvcnlVdGlsLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQ+Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsICgpID0+IHsKKyAgICBsZXQg
c2NyaXB0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOworICAgIHNj
cmlwdEVsZW1lbnQuc3JjID0gIkR1bXBFZGl0aW5nSGlzdG9yeS5qcyI7CisgICAgc2NyaXB0RWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgKCkgPT4gZG9jdW1lbnQuYm9keS5mb2N1cygp
KTsKKyAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdEVsZW1lbnQpOworfSk7Cis8
L3NjcmlwdD4KKzwvaGVhZD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1Rvb2xzL0VkaXRpbmdIaXN0
b3J5L0VkaXRpbmdIaXN0b3J5L1Jlc291cmNlcy9ET01UZXN0aW5nVXRpbC5qcyBiL1Rvb2xzL0Vk
aXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Jlc291cmNlcy9ET01UZXN0aW5nVXRpbC5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jMmM5OTM0OGQ5Yzg2ZDc1YjczNzIwNDM1Y2RiZDRlZjZmMTBkN2E2Ci0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvUmVzb3Vy
Y2VzL0RPTVRlc3RpbmdVdGlsLmpzCkBAIC0wLDAgKzEsMjQgQEAKKygoKSA9PiB7CisgICAgZnVu
Y3Rpb24gc3VidHJlZUFzU3RyaW5nKG5vZGUsIGN1cnJlbnREZXB0aCA9IDApIHsKKyAgICAgICAg
bGV0IGNoaWxkTm9kZXNBc1N0cmluZ3MgPSBBcnJheS5mcm9tKG5vZGUuY2hpbGROb2RlcykubWFw
KGNoaWxkID0+IHN1YnRyZWVBc1N0cmluZyhjaGlsZCwgY3VycmVudERlcHRoICsgMSkpOworICAg
ICAgICBsZXQgbm9kZUFzU3RyaW5nID0gbm9kZS5ub2RlTmFtZTsKKyAgICAgICAgaWYgKG5vZGUu
bm9kZVR5cGUgPT0gTm9kZS5FTEVNRU5UX05PREUpIHsKKyAgICAgICAgICAgIG5vZGVBc1N0cmlu
ZyA9IGA8JHtub2RlQXNTdHJpbmd9PmAKKyAgICAgICAgICAgIGxldCBhdHRyaWJ1dGVEZXNjcmlw
dGlvbnMgPSBbXTsKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5hdHRyaWJ1
dGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgbGV0IGF0dHJpYnV0ZSA9IG5vZGUu
YXR0cmlidXRlcy5pdGVtKGkpOworICAgICAgICAgICAgICAgIGF0dHJpYnV0ZURlc2NyaXB0aW9u
cy5wdXNoKGAke2F0dHJpYnV0ZS5sb2NhbE5hbWV9PSR7YXR0cmlidXRlLnZhbHVlfWApOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgbm9kZUFzU3RyaW5nICs9IGA6ICR7YXR0cmlidXRlRGVz
Y3JpcHRpb25zLmpvaW4oIiwgIil9YDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChub2RlLm5v
ZGVUeXBlID09IE5vZGUuVEVYVF9OT0RFKQorICAgICAgICAgICAgbm9kZUFzU3RyaW5nICs9IGA6
ICcke25vZGUudGV4dENvbnRlbnQucmVwbGFjZSgvXHMvZywgIiAiKX0nYDsKKworICAgICAgICBy
ZXR1cm4gYCR7IiAgICAiLnJlcGVhdChjdXJyZW50RGVwdGgpfSR7bm9kZUFzU3RyaW5nfVxuJHtj
aGlsZE5vZGVzQXNTdHJpbmdzLmpvaW4oIlxuIil9YAorICAgIH0KKworICAgIHdpbmRvdy5ET01V
dGlsID0geworICAgICAgICBzdWJ0cmVlQXNTdHJpbmcKKyAgICB9OworfSkoKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Jlc291cmNlcy9QbGF5YmFj
a0hhcm5lc3MuaHRtbCBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Jlc291
cmNlcy9QbGF5YmFja0hhcm5lc3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZGJkZTlmM2I0YTRkZjdjYjIz
MGYwOTljMjg0OTRkMmJjMjU3YTUzCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRWRpdGluZ0hp
c3RvcnkvRWRpdGluZ0hpc3RvcnkvUmVzb3VyY2VzL1BsYXliYWNrSGFybmVzcy5odG1sCkBAIC0w
LDAgKzEsMzg4IEBACis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorYm9keSB7CisgICAgbWFyZ2lu
OiA4cHg7Cit9CisKKyNvdmVybGF5IHsKKyAgICB3aWR0aDogMzIwcHg7CisgICAgaGVpZ2h0OiBj
YWxjKDEwMCUgLSAzMnB4KTsKKyAgICBwb3NpdGlvbjogZml4ZWQ7CisgICAgcmlnaHQ6IDE2cHg7
CisgICAgdG9wOiAxNnB4OworICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1
NSwgMC43NSk7Cit9CisKKyN1cGRhdGVJbmZvUGFuZWwgeworICAgIGhlaWdodDogY2FsYyg5MCUg
LSAyMHB4KTsKKyAgICBvdmVyZmxvdzogc2Nyb2xsOworICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7
CisgICAgcGFkZGluZzogMTBweDsKK30KKworI2NvbnRyb2xzIHsKKyAgICBoZWlnaHQ6IDEwJTsK
KyAgICBkaXNwbGF5OiBmbGV4OworICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CisgICAgYWxp
Z24taXRlbXM6IGNlbnRlcjsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKKyNjb250cm9s
cy13cmFwcGVyIHsKKyAgICBtYXJnaW46IDAgYXV0bzsKK30KKworc3VtbWFyeTpmb2N1cyB7Cisg
ICAgb3V0bGluZTogbm9uZTsKK30KKworZGV0YWlscyB7CisgICAgcGFkZGluZzogNHB4IDA7Cit9
CisKKyN1cGRhdGVNYXJrZXIgeworICAgIHdpZHRoOiA1MCU7CisgICAgbWFyZ2luOiAyMHB4IDA7
CisgICAgYm9yZGVyLXRvcDogMXB4IHJlZCBkYXNoZWQ7Cit9CisKKy5laC1ub2RlIHsKKyAgICBt
YXJnaW46IDAgMnB4OworICAgIHBhZGRpbmc6IDAgNHB4OworICAgIGJhY2tncm91bmQtY29sb3I6
IHJnYmEoNTksIDEzMSwgMjM4LCAwLjI1KTsKKyAgICBib3JkZXItcmFkaXVzOiA0cHg7CisgICAg
Y3Vyc29yOiBkZWZhdWx0OworfQorCisuZWgtbm9kZTpob3ZlciB7CisgICAgYmFja2dyb3VuZC1j
b2xvcjogcmdiYSg1OSwgMTMxLCAyMzgsIDAuNSk7Cit9CisKKy5ub2RlLWhpZ2hsaWdodCB7Cisg
ICAgcG9zaXRpb246IGFic29sdXRlOworICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoNTksIDEz
MSwgMjM4LCAwLjA1KTsKKyAgICBib3JkZXI6IDFweCBzb2xpZCByZ2IoNTksIDEzMSwgMjM4KTsK
KyAgICBib3JkZXItcmFkaXVzOiAycHg7CisgICAgei1pbmRleDogLTE7Cit9CisKK2xpIHsKKyAg
ICBsaW5lLWhlaWdodDogMS41OworfQorCitzdW1tYXJ5IHsKKyAgICBtYXJnaW4tdG9wOiAwOwor
fQorCisjZHJvcHpvbmUgeworICAgIG1hcmdpbjogMTAwcHg7CisgICAgcGFkZGluZzogNTBweDsK
KyAgICB3aWR0aDogY2FsYygxMDAlIC0gMzAwcHgpOworICAgIGhlaWdodDogY2FsYygxMDAlIC0g
MzAwcHgpOworICAgIGJvcmRlcjogMTVweCAjRThFOEU4IGRhc2hlZDsKKyAgICBkaXNwbGF5OiBm
bGV4OworICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOwor
ICAgIGN1cnNvcjogcG9pbnRlcjsKK30KKworYTp2aXNpdGVkLCBhOmxpbmsgeworICAgIHRleHQt
ZGVjb3JhdGlvbjogbm9uZTsKKyAgICBjb2xvcjogcmVkOworfQorCisjdXBsb2FkIHsKKyAgICBv
cGFjaXR5OiAwOworfQorCisjZHJvcE1lc3NhZ2UgeworICAgIGZvbnQtc2l6ZTogNTBweDsKKyAg
ICBjb2xvcjogI0U4RThFODsKKyAgICBtYXJnaW46IDAgYXV0bzsKKyAgICBwb2ludGVyLWV2ZW50
czogbm9uZTsKKyAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbTsKK30KKzwvc3R5bGU+Cis8
c2NyaXB0IHNyYz0iRE9NVGVzdGluZ1V0aWwuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkVk
aXRpbmdIaXN0b3J5VXRpbC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY2xhc3MgRE9NVXBkYXRl
SGlzdG9yeUNvbnRleHQgeworICAgIGNvbnN0cnVjdG9yKG5vZGVNYXAsIHVwZGF0ZXMpIHsKKyAg
ICAgICAgdGhpcy5fbm9kZU1hcCA9IG5vZGVNYXA7CisgICAgICAgIHRoaXMuX3VwZGF0ZXMgPSB1
cGRhdGVzOworICAgICAgICB0aGlzLl9jdXJyZW50VXBkYXRlSW5kZXggPSB1cGRhdGVzLmxlbmd0
aDsKKyAgICB9CisKKyAgICBjdXJyZW50SW5kZXgoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9j
dXJyZW50VXBkYXRlSW5kZXg7CisgICAgfQorCisgICAgdXBkYXRlcygpIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX3VwZGF0ZXM7CisgICAgfQorCisgICAgdXBkYXRlQXQoaW5kZXgpIHsKKyAgICAg
ICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLl91cGRhdGVzLmxlbmd0aCkKKyAgICAg
ICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVzW2luZGV4
XTsKKyAgICB9CisKKyAgICBzZWxlY3Rpb25TdGF0ZUF0KGluZGV4KSB7CisgICAgICAgIGxldCBi
ZWZvcmVVcGRhdGUgPSB0aGlzLnVwZGF0ZUF0KGluZGV4IC0gMSk7CisgICAgICAgIGxldCBhZnRl
clVwZGF0ZSA9IHRoaXMudXBkYXRlQXQoaW5kZXgpOworICAgICAgICBpZiAoYmVmb3JlVXBkYXRl
IGluc3RhbmNlb2YgRWRpdGluZ0hpc3RvcnkuU2VsZWN0aW9uVXBkYXRlKQorICAgICAgICAgICAg
cmV0dXJuIGJlZm9yZVVwZGF0ZS5zdGF0ZTsKKyAgICAgICAgaWYgKGFmdGVyVXBkYXRlIGluc3Rh
bmNlb2YgRWRpdGluZ0hpc3RvcnkuU2VsZWN0aW9uVXBkYXRlKQorICAgICAgICAgICAgcmV0dXJu
IGFmdGVyVXBkYXRlLnN0YXRlOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBh
cHBseUN1cnJlbnRTZWxlY3Rpb25TdGF0ZShzZWxlY3Rpb24pIHsKKyAgICAgICAgbGV0IHNlbGVj
dGlvblN0YXRlID0gdGhpcy5zZWxlY3Rpb25TdGF0ZUF0KHRoaXMuX2N1cnJlbnRVcGRhdGVJbmRl
eCk7CisgICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZSAmJiBzZWxlY3Rpb24pCisgICAgICAgICAg
ICBzZWxlY3Rpb25TdGF0ZS5hcHBseVRvU2VsZWN0aW9uKHNlbGVjdGlvbik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTsKKyAgICB9CisKKyAg
ICBuZXh0KCkgeworICAgICAgICBpZiAodGhpcy5fY3VycmVudFVwZGF0ZUluZGV4ID49IHRoaXMu
X3VwZGF0ZXMubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX3Vw
ZGF0ZXNbdGhpcy5fY3VycmVudFVwZGF0ZUluZGV4XS5hcHBseSgpOworICAgICAgICB0aGlzLl9j
dXJyZW50VXBkYXRlSW5kZXgrKzsKKyAgICB9CisKKyAgICBwcmV2aW91cygpIHsKKyAgICAgICAg
aWYgKHRoaXMuX2N1cnJlbnRVcGRhdGVJbmRleCA8PSAwKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHRoaXMuX3VwZGF0ZXNbdGhpcy5fY3VycmVudFVwZGF0ZUluZGV4IC0gMV0udW5h
cHBseSgpOworICAgICAgICB0aGlzLl9jdXJyZW50VXBkYXRlSW5kZXgtLTsKKyAgICB9CisKKyAg
ICBqdW1wVG8oaW5kZXgpIHsKKyAgICAgICAgaW5kZXggPSBNYXRoLm1heChNYXRoLm1pbihpbmRl
eCwgdGhpcy5fdXBkYXRlcy5sZW5ndGgpLCAwKTsKKyAgICAgICAgd2hpbGUodGhpcy5fY3VycmVu
dFVwZGF0ZUluZGV4ICE9IGluZGV4KSB7CisgICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudFVw
ZGF0ZUluZGV4IDwgaW5kZXgpCisgICAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGhpcy5wcmV2aW91cygpOworICAgICAgICB9Cisg
ICAgfQorfQorCit3aW5kb3cub25sb2FkID0gKCkgPT4geworICAgIGZ1bmN0aW9uIHNldHVwRWRp
dGluZ0hpc3RvcnkoanNvbkRhdGEsIHdpdGhDb250cm9scz10cnVlKSB7CisgICAgICAgIGxldCBw
YXJzZWRSZXN1bHQgPSBKU09OLnBhcnNlKGpzb25EYXRhKTsKKyAgICAgICAgbGV0IGdsb2JhbE5v
ZGVNYXAgPSBFZGl0aW5nSGlzdG9yeS5HbG9iYWxOb2RlTWFwLmZyb21PYmplY3QocGFyc2VkUmVz
dWx0Lmdsb2JhbE5vZGVNYXApOworICAgICAgICBsZXQgdXBkYXRlcyA9IHBhcnNlZFJlc3VsdC51
cGRhdGVzLm1hcCh1cGRhdGVJbmZvID0+IEVkaXRpbmdIaXN0b3J5LkRPTVVwZGF0ZS5vZlR5cGUo
dXBkYXRlSW5mby50eXBlKS5mcm9tT2JqZWN0KHVwZGF0ZUluZm8sIGdsb2JhbE5vZGVNYXApKTsK
KyAgICAgICAgRWRpdGluZ0hpc3RvcnkuY29udGV4dCA9IG5ldyBET01VcGRhdGVIaXN0b3J5Q29u
dGV4dChnbG9iYWxOb2RlTWFwLCB1cGRhdGVzKTsKKworICAgICAgICBmdW5jdGlvbiBkZXRhaWxz
RWxlbWVudEF0SW5kZXgoaW5kZXgpIHsKKyAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5xdWVy
eVNlbGVjdG9yKGAjdXBkYXRlSW5mby0ke2luZGV4fWApOworICAgICAgICB9CisKKyAgICAgICAg
ZnVuY3Rpb24gdXBkYXRlT3ZlcmxheSgpIHsKKyAgICAgICAgICAgIGxldCBjdXJyZW50SW5kZXgg
PSBFZGl0aW5nSGlzdG9yeS5jb250ZXh0LmN1cnJlbnRJbmRleCgpOworICAgICAgICAgICAgbGV0
IG51bWJlck9mVXBkYXRlcyA9IEVkaXRpbmdIaXN0b3J5LmNvbnRleHQudXBkYXRlcygpLmxlbmd0
aDsKKyAgICAgICAgICAgIHByb2dyZXNzTGFiZWwudGV4dENvbnRlbnQgPSBgJHtjdXJyZW50SW5k
ZXh9LyR7bnVtYmVyT2ZVcGRhdGVzfWA7CisgICAgICAgICAgICBwcmV2aW91c0J1dHRvbi5kaXNh
YmxlZCA9IGN1cnJlbnRJbmRleCA8PSAwOworICAgICAgICAgICAgbmV4dEJ1dHRvbi5kaXNhYmxl
ZCA9IGN1cnJlbnRJbmRleCA+PSBudW1iZXJPZlVwZGF0ZXM7CisgICAgICAgICAgICB1cGRhdGVN
YXJrZXIucmVtb3ZlKCk7CisgICAgICAgICAgICBpZiAoMCA8PSBjdXJyZW50SW5kZXggJiYgY3Vy
cmVudEluZGV4IDw9IG51bWJlck9mVXBkYXRlcykgeworICAgICAgICAgICAgICAgIGxldCBjdXJy
ZW50VXBkYXRlRGV0YWlscyA9IGRldGFpbHNFbGVtZW50QXRJbmRleChjdXJyZW50SW5kZXgpOwor
ICAgICAgICAgICAgICAgIHVwZGF0ZUluZm9QYW5lbC5pbnNlcnRCZWZvcmUodXBkYXRlTWFya2Vy
LCBjdXJyZW50VXBkYXRlRGV0YWlscyk7CisgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZU1hcmtl
ci5vZmZzZXRUb3AgPCB1cGRhdGVJbmZvUGFuZWwuc2Nyb2xsVG9wCisgICAgICAgICAgICAgICAg
ICAgIHx8IHVwZGF0ZUluZm9QYW5lbC5zY3JvbGxUb3AgKyB1cGRhdGVJbmZvUGFuZWwuY2xpZW50
SGVpZ2h0IDwgdXBkYXRlTWFya2VyLm9mZnNldFRvcCkKKyAgICAgICAgICAgICAgICB1cGRhdGVN
YXJrZXIuc2Nyb2xsSW50b1ZpZXcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHVwbG9hZC5yZW1vdmUoKTsKKyAgICAgICAgZHJvcHpvbmUucmVtb3ZlKCk7CisgICAgICAg
IGZvciAobGV0IG5vZGUgb2YgZ2xvYmFsTm9kZU1hcC5ub2RlcygpKSB7CisgICAgICAgICAgICBp
ZiAobm9kZS50YWdOYW1lID09PSAiQk9EWSIpIHsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5i
b2R5ID0gbm9kZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGlmICghd2l0aENvbnRyb2xzKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGxldCBvdmVybGF5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Cisg
ICAgICAgIG92ZXJsYXkuaWQgPSAib3ZlcmxheSI7CisgICAgICAgIG92ZXJsYXkuaW5uZXJIVE1M
ID0KKyAgICAgICAgYDxjb2RlPgorICAgICAgICAgICAgPGRpdiBpZD0iaW5mb3JtYXRpb24iPgor
ICAgICAgICAgICAgICAgIDxkaXYgaWQ9InVwZGF0ZUluZm9QYW5lbCI+PC9kaXY+CisgICAgICAg
ICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxkaXYgaWQ9ImNvbnRyb2xzIj4KKyAgICAgICAgICAg
ICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJleHBhbmRCdXR0b24i
Pjxjb2RlPlNob3cgYWxsPC9jb2RlPjwvYnV0dG9uPjxidXR0b24gaWQ9ImNvbGxhcHNlQnV0dG9u
Ij48Y29kZT5IaWRlIGFsbDwvY29kZT48L2J1dHRvbj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4K
KyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRpc2Fi
bGVkIGlkPSJwcmV2aW91c0J1dHRvbiI+Jmx0OzwvYnV0dG9uPjxidXR0b24gZGlzYWJsZWQgaWQ9
Im5leHRCdXR0b24iPiZndDs8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAg
ICAgICAgICAgICA8ZGl2IGlkPSJwcm9ncmVzc0xhYmVsIj4tLy08L2Rpdj4KKyAgICAgICAgICAg
IDwvZGl2PgorICAgICAgICA8L2NvZGU+YDsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRD
aGlsZChvdmVybGF5KTsKKyAgICAgICAgdXBkYXRlcy5mb3JFYWNoKCh1cGRhdGUsIGluZGV4KSA9
PiB7CisgICAgICAgICAgICBsZXQgZGV0YWlsc0VsZW1lbnQgPSB1cGRhdGUuZGV0YWlsc0VsZW1l
bnQoKTsKKyAgICAgICAgICAgIGxldCBzdW1tYXJ5ID0gZGV0YWlsc0VsZW1lbnQuY2hpbGRyZW5b
MF07CisgICAgICAgICAgICBsZXQgaW5kZXhFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgic3BhbiIpOworICAgICAgICAgICAgaW5kZXhFbGVtZW50LmlubmVySFRNTCA9IGBbPGEgaHJl
Zj0jPiR7aW5kZXh9PC9hPl0gYDsKKyAgICAgICAgICAgIGluZGV4RWxlbWVudC5jaGlsZHJlblsw
XS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKKyAgICAgICAgICAgICAgICBFZGl0
aW5nSGlzdG9yeS5jb250ZXh0Lmp1bXBUbyhpbmRleCArIDEpOworICAgICAgICAgICAgICAgIEVk
aXRpbmdIaXN0b3J5LmNvbnRleHQuYXBwbHlDdXJyZW50U2VsZWN0aW9uU3RhdGUoZ2V0U2VsZWN0
aW9uKCkpOworICAgICAgICAgICAgICAgIGRldGFpbHNFbGVtZW50Lm9wZW4gPSB0cnVlOworICAg
ICAgICAgICAgICAgIHVwZGF0ZU92ZXJsYXkoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgc3VtbWFyeS5pbnNlcnRCZWZvcmUoaW5kZXhFbGVtZW50LCBzdW1tYXJ5LmNoaWxkTm9kZXNb
MF0pOworICAgICAgICAgICAgZGV0YWlsc0VsZW1lbnQuaWQgPSBgdXBkYXRlSW5mby0ke2luZGV4
fWA7CisgICAgICAgICAgICBkZXRhaWxzRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJ1cGRhdGVJbmZv
Iik7CisgICAgICAgICAgICB1cGRhdGVJbmZvUGFuZWwuYXBwZW5kKGRldGFpbHNFbGVtZW50KTsK
KyAgICAgICAgfSk7CisgICAgICAgIGxldCB1cGRhdGVNYXJrZXIgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKKyAgICAgICAgdXBkYXRlTWFya2VyLmlkID0gInVwZGF0ZU1hcmtlciI7
CisgICAgICAgIHVwZGF0ZUluZm9QYW5lbC5hcHBlbmQodXBkYXRlTWFya2VyKTsKKworICAgICAg
ICBuZXh0QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4geworICAgICAgICAg
ICAgRWRpdGluZ0hpc3RvcnkuY29udGV4dC5uZXh0KCk7CisgICAgICAgICAgICBFZGl0aW5nSGlz
dG9yeS5jb250ZXh0LmFwcGx5Q3VycmVudFNlbGVjdGlvblN0YXRlKGdldFNlbGVjdGlvbigpKTsK
KyAgICAgICAgICAgIHVwZGF0ZU92ZXJsYXkoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcHJl
dmlvdXNCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CisgICAgICAgICAg
ICBFZGl0aW5nSGlzdG9yeS5jb250ZXh0LnByZXZpb3VzKCk7CisgICAgICAgICAgICBFZGl0aW5n
SGlzdG9yeS5jb250ZXh0LmFwcGx5Q3VycmVudFNlbGVjdGlvblN0YXRlKGdldFNlbGVjdGlvbigp
KTsKKyAgICAgICAgICAgIHVwZGF0ZU92ZXJsYXkoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGV2ZW50ID0+IHsKKyAgICAgICAg
ICAgIGlmIChldmVudC5rZXkgPT09ICJBcnJvd1JpZ2h0IiB8fCBldmVudC5rZXkgPT09ICJBcnJv
d0Rvd24iKSB7CisgICAgICAgICAgICAgICAgcmVtb3ZlQWxsSGlnaGxpZ2h0cygpOworICAgICAg
ICAgICAgICAgIEVkaXRpbmdIaXN0b3J5LmNvbnRleHQubmV4dCgpOworICAgICAgICAgICAgICAg
IEVkaXRpbmdIaXN0b3J5LmNvbnRleHQuYXBwbHlDdXJyZW50U2VsZWN0aW9uU3RhdGUoZ2V0U2Vs
ZWN0aW9uKCkpOworICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAg
ICAgICAgICAgICAgdXBkYXRlT3ZlcmxheSgpOworICAgICAgICAgICAgfSBlbHNlIGlmIChldmVu
dC5rZXkgPT09ICJBcnJvd0xlZnQiIHx8IGV2ZW50LmtleSA9PT0gIkFycm93VXAiKSB7CisgICAg
ICAgICAgICAgICAgcmVtb3ZlQWxsSGlnaGxpZ2h0cygpOworICAgICAgICAgICAgICAgIEVkaXRp
bmdIaXN0b3J5LmNvbnRleHQucHJldmlvdXMoKTsKKyAgICAgICAgICAgICAgICBFZGl0aW5nSGlz
dG9yeS5jb250ZXh0LmFwcGx5Q3VycmVudFNlbGVjdGlvblN0YXRlKGdldFNlbGVjdGlvbigpKTsK
KyAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgICAg
IHVwZGF0ZU92ZXJsYXkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAg
ZXhwYW5kQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4geworICAgICAgICAg
ICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLnVwZGF0ZUluZm8iKS5mb3JFYWNoKGRldGFp
bHMgPT4gZGV0YWlscy5vcGVuID0gdHJ1ZSk7CisgICAgICAgICAgICB1cGRhdGVPdmVybGF5KCk7
CisgICAgICAgIH0pOworCisgICAgICAgIGNvbGxhcHNlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIo
ImNsaWNrIiwgKCkgPT4geworICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgi
LnVwZGF0ZUluZm8iKS5mb3JFYWNoKGRldGFpbHMgPT4gZGV0YWlscy5vcGVuID0gZmFsc2UpOwor
ICAgICAgICAgICAgdXBkYXRlT3ZlcmxheSgpOworICAgICAgICB9KTsKKworICAgICAgICBbInNl
bGVjdHN0YXJ0IiwgImRyYWdlbnRlciIsICJkcmFnb3ZlciIsICJkcm9wIiwgImJlZm9yZWlucHV0
Il0uZm9yRWFjaCgodHlwZSkgPT4geworICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcih0eXBlLCBldmVudCA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpKTsKKyAgICAgICAgfSk7
CisKKyAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmVoLW5vZGUiKS5mb3JFYWNo
KChub2RlKSA9PiB7CisgICAgICAgICAgICBsZXQgZ3VpZCA9IHBhcnNlSW50KG5vZGUuZ2V0QXR0
cmlidXRlKCJlaC1ndWlkIikpOworICAgICAgICAgICAgaWYgKGlzTmFOKGd1aWQpKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgbGV0IHRhcmdldE5vZGUgPSBnbG9iYWxO
b2RlTWFwLm5vZGVGb3JHVUlEKGd1aWQpOworICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3Rl
bmVyKCJjbGljayIsICgpID0+IGNvbnNvbGUubG9nKHRhcmdldE5vZGUpKTsKKyAgICAgICAgICAg
IG5vZGUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsICgpID0+IHNob3dIaWdobGlnaHRP
dmVyTm9kZSh0YXJnZXROb2RlKSk7CisgICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIo
Im1vdXNlbGVhdmUiLCByZW1vdmVBbGxIaWdobGlnaHRzKTsKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgdXBkYXRlT3ZlcmxheSgpOworICAgICAgICBFZGl0aW5nSGlzdG9yeS5jb250ZXh0LmFwcGx5
Q3VycmVudFNlbGVjdGlvblN0YXRlKGdldFNlbGVjdGlvbigpKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBzaG93SGlnaGxpZ2h0T3Zlck5vZGUobm9kZSkgeworICAgICAgICBpZiAoIWRvY3VtZW50
LmJvZHkuY29udGFpbnMobm9kZSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYg
KG5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7CisgICAgICAgICAgICBzaG93
SGlnaGxpZ2h0T3ZlckJvdW5kaW5nUmVjdChub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChub2RlLm5vZGVU
eXBlID09PSBOb2RlLlRFWFRfTk9ERSkgeworICAgICAgICAgICAgbGV0IHJhbmdlID0gZG9jdW1l
bnQuY3JlYXRlUmFuZ2UoKTsKKyAgICAgICAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhu
b2RlKTsKKyAgICAgICAgICAgIHNob3dIaWdobGlnaHRPdmVyQm91bmRpbmdSZWN0KHJhbmdlLmdl
dEJvdW5kaW5nQ2xpZW50UmVjdCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9u
IHNob3dIaWdobGlnaHRPdmVyQm91bmRpbmdSZWN0KGJvdW5kcykgeworICAgICAgICBsZXQgaGln
aGxpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIGhpZ2hsaWdo
dC5jbGFzc0xpc3QuYWRkKCJub2RlLWhpZ2hsaWdodCIpOworICAgICAgICBoaWdobGlnaHQuc3R5
bGUubGVmdCA9IGJvdW5kcy5sZWZ0IC0gMjsKKyAgICAgICAgaGlnaGxpZ2h0LnN0eWxlLnRvcCA9
IGJvdW5kcy50b3AgLSAyOworICAgICAgICBoaWdobGlnaHQuc3R5bGUud2lkdGggPSBib3VuZHMu
d2lkdGggKyAzOworICAgICAgICBoaWdobGlnaHQuc3R5bGUuaGVpZ2h0ID0gYm91bmRzLmhlaWdo
dCArIDM7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0KTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiByZW1vdmVBbGxIaWdobGlnaHRzKCkgeworICAgICAgICBkb2N1
bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIubm9kZS1oaWdobGlnaHQiKS5mb3JFYWNoKGhpZ2hsaWdo
dCA9PiBoaWdobGlnaHQucmVtb3ZlKCkpOworICAgIH0KKworICAgIGRyb3B6b25lLmFkZEV2ZW50
TGlzdGVuZXIoIm1vdXNlZW50ZXIiLCBlbXBoYXNpemVEcm9wKTsKKyAgICBkcm9wem9uZS5hZGRF
dmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIiwgdW5lbXBoYXNpemVEcm9wKTsKKyAgICBkcm9wem9u
ZS5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW50ZXIiLCBlbXBoYXNpemVEcm9wKTsKKyAgICBkcm9w
em9uZS5hZGRFdmVudExpc3RlbmVyKCJkcmFnbGVhdmUiLCB1bmVtcGhhc2l6ZURyb3ApOworICAg
IGRyb3B6b25lLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIiwgZXZlbnQgPT4gZXZlbnQucHJl
dmVudERlZmF1bHQoKSk7CisgICAgZHJvcHpvbmUuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAo
KSA9PiB1cGxvYWQuY2xpY2soKSk7CisgICAgZHJvcHpvbmUuYWRkRXZlbnRMaXN0ZW5lcigiZHJv
cCIsIGRyb3BFdmVudCA9PiB7CisgICAgICAgIGRyb3BFdmVudC5wcmV2ZW50RGVmYXVsdCgpOwor
ICAgICAgICBmaWxlU2VsZWN0ZWQoZHJvcEV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcyk7CisgICAg
fSk7CisKKyAgICB1cGxvYWQuZmlsZXMgPSBudWxsOworICAgIEVkaXRpbmdIaXN0b3J5LnNldHVw
RWRpdGluZ0hpc3RvcnkgPSBzZXR1cEVkaXRpbmdIaXN0b3J5OworfTsKKworZnVuY3Rpb24gZW1w
aGFzaXplRHJvcChldmVudCkgeworICAgIGRyb3B6b25lLnN0eWxlLmJvcmRlciA9ICIxNXB4ICNE
OEQ4RDggZGFzaGVkIjsKKyAgICBkcm9wTWVzc2FnZS5zdHlsZS5jb2xvciA9ICIjRDhEOEQ4IjsK
KyAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworfQorCitmdW5jdGlvbiB1bmVtcGhhc2l6ZURy
b3AoZXZlbnQpIHsKKyAgICBkcm9wem9uZS5zdHlsZS5ib3JkZXIgPSAiMTVweCAjRThFOEU4IGRh
c2hlZCI7CisgICAgZHJvcE1lc3NhZ2Uuc3R5bGUuY29sb3IgPSAiI0U4RThFOCI7CisgICAgZXZl
bnQucHJldmVudERlZmF1bHQoKTsKK30KKworZnVuY3Rpb24gZmlsZVNlbGVjdGVkKGZpbGVzKSB7
CisgICAgZHJvcHpvbmUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsIGVtcGhhc2l6
ZURyb3ApOworICAgIGRyb3B6b25lLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLCB1
bmVtcGhhc2l6ZURyb3ApOworICAgIGRyb3B6b25lLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdl
bnRlciIsIGVtcGhhc2l6ZURyb3ApOworICAgIGRyb3B6b25lLnJlbW92ZUV2ZW50TGlzdGVuZXIo
ImRyYWdsZWF2ZSIsIHVuZW1waGFzaXplRHJvcCk7CisKKyAgICBjb25zb2xlLmxvZyhgU2VsZWN0
ZWQgJHtmaWxlcy5sZW5ndGh9IGZpbGUocykuYCk7CisKKyAgICBsZXQgcmVhZGVyID0gbmV3IEZp
bGVSZWFkZXIoKTsKKyAgICByZWFkZXIub25sb2FkID0gZXZlbnQgPT4gRWRpdGluZ0hpc3Rvcnku
c2V0dXBFZGl0aW5nSGlzdG9yeShldmVudC50YXJnZXQucmVzdWx0KTsKKyAgICByZWFkZXIucmVh
ZEFzVGV4dChmaWxlc1swXSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxk
aXYgaWQ9ImRyb3B6b25lIj4KKyAgICAgICAgPGRpdiBpZD0iZHJvcE1lc3NhZ2UiPkRyb3AgYW4g
ZWRpdGluZyByZWNvcmQgaGVyZTwvZGl2PgorICAgIDwvZGl2PgorICAgIDxpbnB1dCBpZD0idXBs
b2FkIiBvbmNoYW5nZT1maWxlU2VsZWN0ZWQoZmlsZXMpIHR5cGU9ImZpbGUiPjwvaW5wdXQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5n
SGlzdG9yeS9UZXN0UnVubmVyLmggYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9y
eS9UZXN0UnVubmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDBkY2VkMWE3MjNmNzA3MjdmYTk1MTBlNjMzNjA4
YjBkM2FkYjViMQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRp
bmdIaXN0b3J5L1Rlc3RSdW5uZXIuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCA8QXBwS2l0L0FwcEtpdC5oPgorI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+
CisjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CisKK0BpbnRlcmZhY2UgVGVzdFJ1bm5lciA6IE5T
T2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNXaW5kb3cgKndpbmRv
dzsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgV0tXZWJWaWV3ICp3ZWJWaWV3Owor
CistICh2b2lkKWV4cGVjdEV2ZW50czooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIE5TTnVtYmVy
ICo+ICopZXhwZWN0ZWRFdmVudENvdW50cyBhZnRlclBlcmZvcm1pbmc6KGRpc3BhdGNoX2Jsb2Nr
X3QpYWN0aW9uOworLSAodm9pZClsb2FkQ2FwdHVyZVRlc3RIYXJuZXNzOworLSAodm9pZClsb2Fk
UGxheWJhY2tUZXN0SGFybmVzc1dpdGhKU09OOihOU1N0cmluZyAqKWpzb247CistICh2b2lkKXNl
dFRleHRPYmZ1c2NhdGlvbkVuYWJsZWQ6KEJPT0wpZW5hYmxlZDsKKy0gKHZvaWQpdHlwZVN0cmlu
ZzooTlNTdHJpbmcgKilzdHJpbmc7CistICh2b2lkKWp1bXBUb1VwZGF0ZUluZGV4OihOU0ludGVn
ZXIpaW5kZXg7CistICh2b2lkKWRlbGV0ZUJhY2t3YXJkczooTlNJbnRlZ2VyKXRpbWVzOworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU1N0cmluZyAqZWRpdGluZ0hpc3RvcnlKU09O
OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU1N0cmluZyAqYm9keUVsZW1lbnRT
dWJ0cmVlOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU1N0cmluZyAqYm9keVRl
eHRDb250ZW50OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0ludGVnZXIgbnVt
YmVyT2ZVcGRhdGVzOworCitAZW5kCmRpZmYgLS1naXQgYS9Ub29scy9FZGl0aW5nSGlzdG9yeS9F
ZGl0aW5nSGlzdG9yeS9UZXN0UnVubmVyLm0gYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5n
SGlzdG9yeS9UZXN0UnVubmVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjMxYmY0N2RlYjc3MzIzNjFhYWZhMDAx
NzE0ZTdlNDM5NDJlYTllYQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5
L0VkaXRpbmdIaXN0b3J5L1Rlc3RSdW5uZXIubQpAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFJ1bm5lci5oIgorCisjaW1wb3J0
ICJUZXN0VXRpbC5oIgorI2ltcG9ydCAiV0tXZWJWaWV3QWRkaXRpb25zLmgiCisjaW1wb3J0IDxD
YXJib24vQ2FyYm9uLmg+CisKK3N0YXRpYyBXS1VzZXJTY3JpcHQgKmluamVjdGVkTWVzc2FnZUV2
ZW50SGFuZGxlclNjcmlwdChOU1N0cmluZyAqbGlzdGVuZXIsIE5TU3RyaW5nICpldmVudCkKK3sK
KyAgICBOU1N0cmluZyAqc291cmNlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQC5h
ZGRFdmVudExpc3RlbmVyKCclQCcsICgpID0+IHsiCisgICAgICAgICJzZXRUaW1lb3V0KCgpID0+
IHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuZXZlbnRIYW5kbGVyLnBvc3RNZXNzYWdlKCclQCcpLCAw
KTsiCisgICAgICAgICJ9KTsiLCBsaXN0ZW5lciwgZXZlbnQsIGV2ZW50XTsKKyAgICByZXR1cm4g
W1tXS1VzZXJTY3JpcHQgYWxsb2NdIGluaXRXaXRoU291cmNlOnNvdXJjZSBpbmplY3Rpb25UaW1l
OldLVXNlclNjcmlwdEluamVjdGlvblRpbWVBdERvY3VtZW50RW5kIGZvck1haW5GcmFtZU9ubHk6
WUVTXTsKK30KKworQGludGVyZmFjZSBUZXN0UnVubmVyICgpIDxXS1NjcmlwdE1lc3NhZ2VIYW5k
bGVyPgorCitAcHJvcGVydHkgKG5vbmF0b21pYykgTlNNdXRhYmxlRGljdGlvbmFyeSAqcGVuZGlu
Z0V2ZW50Q291bnRzOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UnVubmVyCisKKy0g
KGluc3RhbmNldHlwZSlpbml0Cit7CisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtbTlNXaW5kb3cg
YWxsb2NdIGluaXRXaXRoQ29udGVudFJlY3Q6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgc3R5
bGVNYXNrOk5TV2luZG93U3R5bGVNYXNrQm9yZGVybGVzcyBiYWNraW5nOk5TQmFja2luZ1N0b3Jl
QnVmZmVyZWQgZGVmZXI6Tk9dOworICAgIFt3aW5kb3cgc2V0RnJhbWVPcmlnaW46TlNNYWtlUG9p
bnQoMCwgMCldOworICAgIFt3aW5kb3cgc2V0SXNWaXNpYmxlOllFU107CisKKyAgICBXS1dlYlZp
ZXcgKndlYlZpZXcgPSBbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0
KDAsIDAsIDgwMCwgNjAwKV07CisgICAgW1t3aW5kb3cgY29udGVudFZpZXddIGFkZFN1YnZpZXc6
d2ViVmlld107CisgICAgW3dpbmRvdyBtYWtlS2V5QW5kT3JkZXJGcm9udDp3ZWJWaWV3XTsKKyAg
ICBbd2ViVmlldyBiZWNvbWVGaXJzdFJlc3BvbmRlcl07CisKKyAgICBfd2luZG93ID0gd2luZG93
OworICAgIF93ZWJWaWV3ID0gd2ViVmlldzsKKyAgICBfcGVuZGluZ0V2ZW50Q291bnRzID0gbmls
OworCisgICAgV0tVc2VyQ29udGVudENvbnRyb2xsZXIgKmNvbnRlbnRDb250cm9sbGVyID0gd2Vi
Vmlldy5jb25maWd1cmF0aW9uLnVzZXJDb250ZW50Q29udHJvbGxlcjsKKyAgICBbY29udGVudENv
bnRyb2xsZXIgYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6c2VsZiBuYW1lOkAiZXZlbnRIYW5kbGVy
Il07CisgICAgW2NvbnRlbnRDb250cm9sbGVyIGFkZFVzZXJTY3JpcHQ6aW5qZWN0ZWRNZXNzYWdl
RXZlbnRIYW5kbGVyU2NyaXB0KEAiZG9jdW1lbnQuYm9keSIsIEAiZm9jdXMiKV07CisgICAgW2Nv
bnRlbnRDb250cm9sbGVyIGFkZFVzZXJTY3JpcHQ6aW5qZWN0ZWRNZXNzYWdlRXZlbnRIYW5kbGVy
U2NyaXB0KEAiZG9jdW1lbnQiLCBAImlucHV0IildOworICAgIFtjb250ZW50Q29udHJvbGxlciBh
ZGRVc2VyU2NyaXB0OmluamVjdGVkTWVzc2FnZUV2ZW50SGFuZGxlclNjcmlwdChAImRvY3VtZW50
IiwgQCJzZWxlY3Rpb25jaGFuZ2UiKV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9p
ZClkZWxldGVCYWNrd2FyZHM6KE5TSW50ZWdlcil0aW1lcworeworICAgIGZvciAoTlNJbnRlZ2Vy
IGkgPSAwOyBpIDwgdGltZXM7IGkrKykgeworICAgICAgICBbc2VsZiBleHBlY3RFdmVudHM6QHsg
QCJpbnB1dCI6IEAxLCBAInNlbGVjdGlvbmNoYW5nZSI6IEAxIH0gYWZ0ZXJQZXJmb3JtaW5nOl4o
KSB7CisgICAgICAgICAgICBbX3dlYlZpZXcga2V5UHJlc3NXaXRoQ2hhcmFjdGVyczpuaWwga2V5
Q29kZTpLZXlDb2RlVHlwZURlbGV0ZUJhY2t3YXJkXTsKKyAgICAgICAgfV07CisgICAgfQorfQor
CistICh2b2lkKXR5cGVTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCit7CisgICAgZm9yIChOU0lu
dGVnZXIgY2hhckluZGV4ID0gMDsgY2hhckluZGV4IDwgc3RyaW5nLmxlbmd0aDsgY2hhckluZGV4
KyspIHsKKyAgICAgICAgW3NlbGYgZXhwZWN0RXZlbnRzOkB7IEAiaW5wdXQiOiBAMSwgQCJzZWxl
Y3Rpb25jaGFuZ2UiOiBAMSB9IGFmdGVyUGVyZm9ybWluZzpeKCkgeworICAgICAgICAgICAgW193
ZWJWaWV3IHR5cGVDaGFyYWN0ZXI6W3N0cmluZyBjaGFyYWN0ZXJBdEluZGV4OmNoYXJJbmRleF1d
OworICAgICAgICB9XTsKKyAgICB9Cit9CisKKy0gKE5TU3RyaW5nICopYm9keUVsZW1lbnRTdWJ0
cmVlCit7CisgICAgcmV0dXJuIFtfd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
RnJvbVN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkRPTVV0aWwuc3VidHJlZUFz
U3RyaW5nKGRvY3VtZW50LmJvZHkpIl1dOworfQorCistIChOU1N0cmluZyAqKWJvZHlUZXh0Q29u
dGVudAoreworICAgIHJldHVybiBbX3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dEZyb21TdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJkb2N1bWVudC5ib2R5LnRl
eHRDb250ZW50Il1dOworfQorCistIChOU1N0cmluZyAqKWVkaXRpbmdIaXN0b3J5SlNPTgorewor
ICAgIHJldHVybiBbX3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJp
bmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFZGl0aW5nSGlzdG9yeS5nZXRFZGl0aW5n
SGlzdG9yeUFzSlNPTlN0cmluZyhmYWxzZSkiXV07Cit9CisKKy0gKHZvaWQpbG9hZFBsYXliYWNr
VGVzdEhhcm5lc3NXaXRoSlNPTjooTlNTdHJpbmcgKilqc29uCit7CisgICAgW193ZWJWaWV3IGxv
YWRQYWdlRnJvbUJ1bmRsZU5hbWVkOkAiUGxheWJhY2tIYXJuZXNzIl07CisgICAgd2FpdFVudGls
KENPTkRJVElPTl9CTE9DSyhbW193ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRG
cm9tU3RyaW5nOkAiISF3aW5kb3cuRWRpdGluZ0hpc3RvcnkgJiYgISFFZGl0aW5nSGlzdG9yeS5z
ZXR1cEVkaXRpbmdIaXN0b3J5Il0gYm9vbFZhbHVlXSkpOworCisgICAganNvbiA9IFtbanNvbiBz
dHJpbmdCeVJlcGxhY2luZ09jY3VycmVuY2VzT2ZTdHJpbmc6QCJcXCIgd2l0aFN0cmluZzpAIlxc
XFwiXSBzdHJpbmdCeVJlcGxhY2luZ09jY3VycmVuY2VzT2ZTdHJpbmc6QCJgIiB3aXRoU3RyaW5n
OkAiXFxgIl07CisgICAgW193ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9t
U3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRWRpdGluZ0hpc3Rvcnkuc2V0dXBF
ZGl0aW5nSGlzdG9yeShgJUBgLCBmYWxzZSkiLCBqc29uXV07Cit9CisKKy0gKE5TSW50ZWdlcilu
dW1iZXJPZlVwZGF0ZXMgeworICAgIHJldHVybiBbW193ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHRGcm9tU3RyaW5nOkAiRWRpdGluZ0hpc3RvcnkuY29udGV4dC51cGRhdGVzKCku
bGVuZ3RoIl0gaW50ZWdlclZhbHVlXTsKK30KKworLSAodm9pZClqdW1wVG9VcGRhdGVJbmRleDoo
TlNJbnRlZ2VyKWluZGV4Cit7CisgICAgW193ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHRGcm9tU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRWRpdGluZ0hpc3Rv
cnkuY29udGV4dC5qdW1wVG8oJXR1KSIsIGluZGV4XV07Cit9CisKKy0gKHZvaWQpZXhwZWN0RXZl
bnRzOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgTlNOdW1iZXIgKj4gKilleHBlY3RlZEV2ZW50
Q291bnRzIGFmdGVyUGVyZm9ybWluZzooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb24KK3sKKyAgICBf
cGVuZGluZ0V2ZW50Q291bnRzID0gW2V4cGVjdGVkRXZlbnRDb3VudHMgbXV0YWJsZUNvcHldOwor
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIGFjdGlvbik7Cisg
ICAgd2FpdFVudGlsKENPTkRJVElPTl9CTE9DSyhzZWxmLmlzRG9uZVdhaXRpbmdGb3JQZW5kaW5n
RXZlbnRzKSk7CisgICAgX3BlbmRpbmdFdmVudENvdW50cyA9IG5pbDsKK30KKworLSAodm9pZCls
b2FkQ2FwdHVyZVRlc3RIYXJuZXNzCit7CisgICAgW3NlbGYgZXhwZWN0RXZlbnRzOkB7IEAiZm9j
dXMiIDogQDEgfSBhZnRlclBlcmZvcm1pbmc6XigpIHsKKyAgICAgICAgW193ZWJWaWV3IGxvYWRQ
YWdlRnJvbUJ1bmRsZU5hbWVkOkAiQ2FwdHVyZUhhcm5lc3MiXTsKKyAgICB9XTsKK30KKworLSAo
dm9pZClzZXRUZXh0T2JmdXNjYXRpb25FbmFibGVkOihCT09MKWVuYWJsZWQKK3sKKyAgICBbX3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6W05TU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6QCJFZGl0aW5nSGlzdG9yeS5PYmZ1c2NhdG9yLnNoYXJlZCgpLmVuYWJs
ZWQgPSAlcyIsIGVuYWJsZWQgPyAidHJ1ZSIgOiAiZmFsc2UiXV07Cit9CisKKy0gKEJPT0wpaXNE
b25lV2FpdGluZ0ZvclBlbmRpbmdFdmVudHMKK3sKKyAgICBOU0ludGVnZXIgbnVtYmVyT2ZQZW5k
aW5nRXZlbnRzID0gMDsKKyAgICBmb3IgKE5TTnVtYmVyICpjb3VudCBpbiBfcGVuZGluZ0V2ZW50
Q291bnRzLmFsbFZhbHVlcykKKyAgICAgICAgbnVtYmVyT2ZQZW5kaW5nRXZlbnRzICs9IFtjb3Vu
dCBpbnRlZ2VyVmFsdWVdOworICAgIHJldHVybiBfcGVuZGluZ0V2ZW50Q291bnRzICYmICFudW1i
ZXJPZlBlbmRpbmdFdmVudHM7Cit9CisKKy0gKHZvaWQpdXNlckNvbnRlbnRDb250cm9sbGVyOihX
S1VzZXJDb250ZW50Q29udHJvbGxlciAqKXVzZXJDb250ZW50Q29udHJvbGxlciBkaWRSZWNlaXZl
U2NyaXB0TWVzc2FnZTooV0tTY3JpcHRNZXNzYWdlICopbWVzc2FnZQoreworICAgIGlmIChbbWVz
c2FnZS5uYW1lIGlzRXF1YWxUb1N0cmluZzpAImV2ZW50SGFuZGxlciJdICYmIF9wZW5kaW5nRXZl
bnRDb3VudHMpIHsKKyAgICAgICAgTlNTdHJpbmcgKmV2ZW50VHlwZSA9IG1lc3NhZ2UuYm9keTsK
KyAgICAgICAgX3BlbmRpbmdFdmVudENvdW50c1tldmVudFR5cGVdID0gQChNQVgoMCwgW19wZW5k
aW5nRXZlbnRDb3VudHNbZXZlbnRUeXBlXSBpbnRlZ2VyVmFsdWVdIC0gMSkpOworICAgIH0KK30K
KworQGVuZApkaWZmIC0tZ2l0IGEvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3Rvcnkv
VGVzdFV0aWwuaCBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Rlc3RVdGls
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uM2Q0YzMxM2ZkMWY3ZDExYjMyYmU2NzgxZGE0YmJhNDZiODVkZWZhNAot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Rl
c3RVdGlsLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworLy8gU29tZSBuYW1lZCBrZXkgY29k
ZXMsIG1haW5seSBmb3IgY29udmVuaWVuY2UuCitlbnVtIEtleUNvZGVUeXBlIHsKKyAgICBLZXlD
b2RlVHlwZURlbGV0ZUJhY2t3YXJkID0gMHgzMywKKyAgICBLZXlDb2RlVHlwZUxlZnRBcnJvdyA9
IDB4N0IsCisgICAgS2V5Q29kZVR5cGVSaWdodEFycm93ID0gMHg3QworfTsKKworLyoqCisgKiBS
ZXR1cm4gWUVTIHdoZW4gdGhlIGNvbmRpdGlvbiBpcyBkb25lIGFuZCB0aGUgcHJvZ3JhbSBzaG91
bGQgc3RvcCBzcGlubmluZy4KKyAqLwordHlwZWRlZiBCT09MICheQ29uZGl0aW9uQmxvY2spKCk7
CisjZGVmaW5lIENPTkRJVElPTl9CTE9DSyhleHByKSBeQk9PTCgpIHsgcmV0dXJuIGV4cHI7IH0K
KworLyoqCisgKiBTcGlucyBhIHJ1bmxvb3AgdW50aWwgdGhlIGdpdmVuIGNvbmRpdGlvbiBibG9j
ayBldmFsdWF0ZXMgdG8gWUVTLiBJZiB0aGUgZ2l2ZW4gdGltZW91dCBpbnRlcnZhbCBoYXMgZWxh
cHNlZCwgYW5kIHRoZSBjb25kaXRpb24gaXMgc3RpbGwgdW5zYXRpc2ZpZWQsCisgKiBzdG9wIHNw
aW5uaW5nIGFuZCByZXR1cm4gTk8uIE90aGVyd2lzZSwgcmV0dXJuIFlFUy4KKyAqLworQk9PTCB3
YWl0VW50aWxXaXRoVGltZW91dChDb25kaXRpb25CbG9jaywgTlNUaW1lSW50ZXJ2YWwpOworQk9P
TCB3YWl0VW50aWwoQ29uZGl0aW9uQmxvY2spOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRWRpdGluZ0hp
c3RvcnkvRWRpdGluZ0hpc3RvcnkvVGVzdFV0aWwubSBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0Vk
aXRpbmdIaXN0b3J5L1Rlc3RVdGlsLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGQ5M2U2ZDY4YTNhNWIwMDg0YzY3
YzcwMjNkNTBmOGNiNjRhMjU0NAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0VkaXRpbmdIaXN0
b3J5L0VkaXRpbmdIaXN0b3J5L1Rlc3RVdGlsLm0KQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFV0aWwuaCIKKworY29uc3QgTlNU
aW1lSW50ZXJ2YWwgRGVmYXVsdFRpbWVvdXRJbnRlcnZhbCA9IDEwOworCitCT09MIHdhaXRVbnRp
bFdpdGhUaW1lb3V0KENvbmRpdGlvbkJsb2NrIGNvbmRpdGlvbiwgTlNUaW1lSW50ZXJ2YWwgdGlt
ZW91dCkKK3sKKyAgICBOU1RpbWVJbnRlcnZhbCBzdGFydFRpbWUgPSBbTlNEYXRlIHRpbWVJbnRl
cnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV07CisgICAgd2hpbGUgKFtbTlNSdW5Mb29wIGN1cnJlbnRS
dW5Mb29wXSBydW5Nb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlIGJlZm9yZURhdGU6W05TRGF0ZSBk
aXN0YW50UGFzdF1dICYmIFtOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXSAt
IHN0YXJ0VGltZSA8IHRpbWVvdXQpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbigpKQorICAgICAg
ICAgICAgcmV0dXJuIFlFUzsKKyAgICB9CisgICAgcmV0dXJuIE5POworfQorCitCT09MIHdhaXRV
bnRpbChDb25kaXRpb25CbG9jayBjb25kaXRpb24pCit7CisgICAgcmV0dXJuIHdhaXRVbnRpbFdp
dGhUaW1lb3V0KGNvbmRpdGlvbiwgRGVmYXVsdFRpbWVvdXRJbnRlcnZhbCk7Cit9CmRpZmYgLS1n
aXQgYS9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9XS1dlYlZpZXdBZGRpdGlv
bnMuaCBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1dLV2ViVmlld0FkZGl0
aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmRmZDM4MzMwZGIzZmFlMmI0NWE3MmI0ZjYzY2E2OGU3N2FmZjc3
YzUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9y
eS9XS1dlYlZpZXdBZGRpdGlvbnMuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCA8V2ViS2l0L1dlYktpdC5oPgorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCitAaW50
ZXJmYWNlIFdLV2ViVmlldyAoRWRpdGluZ0hpc3RvcnlUZXN0KQorCistICh2b2lkKWxvYWRQYWdl
RnJvbUJ1bmRsZU5hbWVkOihOU1N0cmluZyAqKW5hbWU7CistICh2b2lkKXR5cGVDaGFyYWN0ZXI6
KGNoYXIpY2hhcmFjdGVyOworLSAodm9pZClrZXlQcmVzc1dpdGhDaGFyYWN0ZXJzOihudWxsYWJs
ZSBOU1N0cmluZyAqKWNoYXJhY3RlcnMga2V5Q29kZTooY2hhcilrZXlDb2RlOworLSAobnVsbGFi
bGUgTlNTdHJpbmcgKilzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzooTlNT
dHJpbmcgKilzY3JpcHQ7CisKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECmRpZmYgLS1n
aXQgYS9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9XS1dlYlZpZXdBZGRpdGlv
bnMubSBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1dLV2ViVmlld0FkZGl0
aW9ucy5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjQ5NzkzMGRjZGQ2YzEyZDk3ZDA5NzFhYTNmOTEyNWQwNTYwODE4
NWMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9y
eS9XS1dlYlZpZXdBZGRpdGlvbnMubQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdBZGRpdGlvbnMuaCIKKworI2ltcG9y
dCAiVGVzdFV0aWwuaCIKKworI2ltcG9ydCA8Q2FyYm9uL0NhcmJvbi5oPgorCitAaW1wbGVtZW50
YXRpb24gV0tXZWJWaWV3IChFZGl0aW5nSGlzdG9yeVRlc3QpCisKKy0gKHZvaWQpbG9hZFBhZ2VG
cm9tQnVuZGxlTmFtZWQ6KE5TU3RyaW5nICopbmFtZQoreworICAgIE5TVVJMICpwYXRoVG9QYWdl
ID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpuYW1lIHdpdGhFeHRlbnNp
b246QCJodG1sIiBzdWJkaXJlY3Rvcnk6bmlsXTsKKyAgICBbc2VsZiBsb2FkUmVxdWVzdDpbTlNV
UkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnBhdGhUb1BhZ2VdXTsKK30KKworLSAodm9pZCl0eXBl
Q2hhcmFjdGVyOihjaGFyKWNoYXJhY3RlcgoreworICAgIFtzZWxmIGtleVByZXNzV2l0aENoYXJh
Y3RlcnM6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlYyIsIGNoYXJhY3Rlcl0ga2V5Q29k
ZTpjaGFyYWN0ZXJdOworfQorCistICh2b2lkKWtleVByZXNzV2l0aENoYXJhY3RlcnM6KG51bGxh
YmxlIE5TU3RyaW5nICopY2hhcmFjdGVycyBrZXlDb2RlOihjaGFyKWtleUNvZGUKK3sKKyAgICBO
U0V2ZW50VHlwZSBrZXlEb3duRXZlbnRUeXBlID0gTlNFdmVudFR5cGVLZXlEb3duOworICAgIE5T
RXZlbnRUeXBlIGtleVVwRXZlbnRUeXBlID0gTlNFdmVudFR5cGVLZXlVcDsKKyAgICBbc2VsZiBr
ZXlEb3duOltOU0V2ZW50IGtleUV2ZW50V2l0aFR5cGU6a2V5RG93bkV2ZW50VHlwZSBsb2NhdGlv
bjpOU1plcm9Qb2ludCBtb2RpZmllckZsYWdzOjAgdGltZXN0YW1wOkdldEN1cnJlbnRFdmVudFRp
bWUoKSB3aW5kb3dOdW1iZXI6c2VsZi53aW5kb3cud2luZG93TnVtYmVyIGNvbnRleHQ6bmlsIGNo
YXJhY3RlcnM6Y2hhcmFjdGVycyBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnM6Y2hhcmFjdGVy
cyBpc0FSZXBlYXQ6Tk8ga2V5Q29kZTprZXlDb2RlXV07CisgICAgW3NlbGYga2V5VXA6W05TRXZl
bnQga2V5RXZlbnRXaXRoVHlwZTprZXlVcEV2ZW50VHlwZSBsb2NhdGlvbjpOU1plcm9Qb2ludCBt
b2RpZmllckZsYWdzOjAgdGltZXN0YW1wOkdldEN1cnJlbnRFdmVudFRpbWUoKSB3aW5kb3dOdW1i
ZXI6c2VsZi53aW5kb3cud2luZG93TnVtYmVyIGNvbnRleHQ6bmlsIGNoYXJhY3RlcnM6Y2hhcmFj
dGVycyBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnM6Y2hhcmFjdGVycyBpc0FSZXBlYXQ6Tk8g
a2V5Q29kZTprZXlDb2RlXV07Cit9CisKKy0gKG51bGxhYmxlIE5TU3RyaW5nICopc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6KE5TU3RyaW5nICopc2NyaXB0Cit7CisgICAg
X19ibG9jayBib29sIGRvbmVFdmFsdWF0aW5nSmF2YVNjcmlwdCA9IGZhbHNlOworICAgIF9fYmxv
Y2sgTlNTdHJpbmcgKnJldHVyblJlc3VsdCA9IG5pbDsKKyAgICBbc2VsZiBldmFsdWF0ZUphdmFT
Y3JpcHQ6c2NyaXB0IGNvbXBsZXRpb25IYW5kbGVyOl4oaWQgcmV0dXJuVmFsdWUsIE5TRXJyb3Ig
KmVycm9yKSB7CisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIE5TTG9nKEAiRXJyb3Ig
ZXZhbHVhdGluZyBKYXZhU2NyaXB0OiAlQCIsIGVycm9yKTsKKworICAgICAgICByZXR1cm5SZXN1
bHQgPSBlcnJvciB8fCAhcmV0dXJuVmFsdWUgPyBuaWwgOiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpAIiVAIiwgcmV0dXJuVmFsdWVdOworICAgICAgICBkb25lRXZhbHVhdGluZ0phdmFTY3Jp
cHQgPSB0cnVlOworICAgIH1dOworICAgIHdhaXRVbnRpbChDT05ESVRJT05fQkxPQ0soZG9uZUV2
YWx1YXRpbmdKYXZhU2NyaXB0KSk7CisgICAgcmV0dXJuIHJldHVyblJlc3VsdDsKK30KKworQGVu
ZApkaWZmIC0tZ2l0IGEvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvbWFpbi5t
IGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvbWFpbi5tCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjU3ZTg0ODUwYTljNDA4ZWRiZTBjNTQwMWZjYjZkNzNhZjNkNjhlODMKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9tYWluLm0KQEAgLTAsMCAr
MSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KKyNpbXBvcnQg
PENvY29hL0NvY29hLmg+CisKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJndltd
KQoreworICAgIFtbTlNXb3Jrc3BhY2Ugc2hhcmVkV29ya3NwYWNlXSBvcGVuRmlsZTpbW05TQnVu
ZGxlIG1haW5CdW5kbGVdIHBhdGhGb3JSZXNvdXJjZTpAIlBsYXliYWNrSGFybmVzcyIgb2ZUeXBl
OkAiaHRtbCJdIHdpdGhBcHBsaWNhdGlvbjpAIlNhZmFyaSJdOworCisgICAgcmV0dXJuIE5TQXBw
bGljYXRpb25NYWluKGFyZ2MsIGFyZ3YpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRWRpdGluZ0hp
c3RvcnkvRWRpdGluZ0hpc3RvcnlUZXN0cy9JbmZvLnBsaXN0IGIvVG9vbHMvRWRpdGluZ0hpc3Rv
cnkvRWRpdGluZ0hpc3RvcnlUZXN0cy9JbmZvLnBsaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjNmMyM2M0M2Fk
Yzg4NjIxY2UzYWJmYmQxNTg1Yzg3OTJiZDE2NWMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9F
ZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeVRlc3RzL0luZm8ucGxpc3QKQEAgLTAsMCArMSwy
MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBw
bGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBw
bGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgorPHBsaXN0IHZlcnNpb249IjEuMCI+
Cis8ZGljdD4KKwk8a2V5PkNGQnVuZGxlRGV2ZWxvcG1lbnRSZWdpb248L2tleT4KKwk8c3RyaW5n
PmVuPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZUV4ZWN1dGFibGU8L2tleT4KKwk8c3RyaW5nPiQo
RVhFQ1VUQUJMRV9OQU1FKTwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVJZGVudGlmaWVyPC9rZXk+
CisJPHN0cmluZz4kKFBST0RVQ1RfQlVORExFX0lERU5USUZJRVIpPC9zdHJpbmc+CisJPGtleT5D
RkJ1bmRsZUluZm9EaWN0aW9uYXJ5VmVyc2lvbjwva2V5PgorCTxzdHJpbmc+Ni4wPC9zdHJpbmc+
CisJPGtleT5DRkJ1bmRsZU5hbWU8L2tleT4KKwk8c3RyaW5nPiQoUFJPRFVDVF9OQU1FKTwvc3Ry
aW5nPgorCTxrZXk+Q0ZCdW5kbGVQYWNrYWdlVHlwZTwva2V5PgorCTxzdHJpbmc+Qk5ETDwvc3Ry
aW5nPgorCTxrZXk+Q0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmc8L2tleT4KKwk8c3RyaW5nPjEu
MDwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVWZXJzaW9uPC9rZXk+CisJPHN0cmluZz4xPC9zdHJp
bmc+Cis8L2RpY3Q+Cis8L3BsaXN0PgpkaWZmIC0tZ2l0IGEvVG9vbHMvRWRpdGluZ0hpc3Rvcnkv
RWRpdGluZ0hpc3RvcnlUZXN0cy9SZXdpbmRBbmRQbGF5YmFja1Rlc3RzLm0gYi9Ub29scy9FZGl0
aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeVRlc3RzL1Jld2luZEFuZFBsYXliYWNrVGVzdHMubQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yY2JmNDhhN2Y2YzFiZTI5OWZmMmJjNjE5MzI5YTFlMWE0MmQwZGRiCi0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnlUZXN0cy9S
ZXdpbmRBbmRQbGF5YmFja1Rlc3RzLm0KQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW1wb3J0ICJUZXN0UnVubmVyLmgiCisjaW1wb3J0ICJUZXN0VXRpbC5oIgorI2ltcG9ydCAiV0tX
ZWJWaWV3QWRkaXRpb25zLmgiCisjaW1wb3J0IDxYQ1Rlc3QvWENUZXN0Lmg+CisKK0BpbnRlcmZh
Y2UgUmV3aW5kQW5kUGxheWJhY2tUZXN0cyA6IFhDVGVzdENhc2UKKworQGVuZAorCitAaW1wbGVt
ZW50YXRpb24gUmV3aW5kQW5kUGxheWJhY2tUZXN0cyB7CisgICAgVGVzdFJ1bm5lciAqdGVzdFJ1
bm5lcjsKK30KKworLSAodm9pZClzZXRVcAoreworICAgIHRlc3RSdW5uZXIgPSBbW1Rlc3RSdW5u
ZXIgYWxsb2NdIGluaXRdOworICAgIFt0ZXN0UnVubmVyIGxvYWRDYXB0dXJlVGVzdEhhcm5lc3Nd
OworICAgIFt0ZXN0UnVubmVyIHNldFRleHRPYmZ1c2NhdGlvbkVuYWJsZWQ6Tk9dOworfQorCist
ICh2b2lkKXRlYXJEb3duCit7CisgICAgdGVzdFJ1bm5lciA9IG5pbDsKK30KKworLSAodm9pZCl0
ZXN0VHlwaW5nU2luZ2xlTGluZU9mVGV4dAoreworICAgIFt0ZXN0UnVubmVyIHR5cGVTdHJpbmc6
QCJoZWxsbyB3b3JsZCJdOworICAgIE5TU3RyaW5nICpvcmlnaW5hbFN1YnRyZWUgPSB0ZXN0UnVu
bmVyLmJvZHlFbGVtZW50U3VidHJlZTsKKworICAgIFtzZWxmIHJld2luZEFuZFBsYXliYWNrRWRp
dGluZ0luUGxheWJhY2tUZXN0SGFybmVzc107CisgICAgWENUQXNzZXJ0VHJ1ZShbc2VsZiBvcmln
aW5hbEJvZHlTdWJ0cmVlOm9yaWdpbmFsU3VidHJlZSBpc0VxdWFsVG9GaW5hbFN1YnRyZWU6dGVz
dFJ1bm5lci5ib2R5RWxlbWVudFN1YnRyZWVdKTsKKyAgICBYQ1RBc3NlcnRFcXVhbE9iamVjdHMo
dGVzdFJ1bm5lci5ib2R5VGV4dENvbnRlbnQsIEAiaGVsbG8gd29ybGQiKTsKK30KKworLSAodm9p
ZCl0ZXN0VHlwaW5nTXVsdGlwbGVMaW5lc09mVGV4dAoreworICAgIFt0ZXN0UnVubmVyIHR5cGVT
dHJpbmc6QCJmb28iXTsKKyAgICBbdGVzdFJ1bm5lciB0eXBlU3RyaW5nOkAiXG4iXTsKKyAgICBb
dGVzdFJ1bm5lciB0eXBlU3RyaW5nOkAiYmFyIl07CisgICAgTlNTdHJpbmcgKm9yaWdpbmFsU3Vi
dHJlZSA9IHRlc3RSdW5uZXIuYm9keUVsZW1lbnRTdWJ0cmVlOworCisgICAgW3NlbGYgcmV3aW5k
QW5kUGxheWJhY2tFZGl0aW5nSW5QbGF5YmFja1Rlc3RIYXJuZXNzXTsKKyAgICBYQ1RBc3NlcnRU
cnVlKFtzZWxmIG9yaWdpbmFsQm9keVN1YnRyZWU6b3JpZ2luYWxTdWJ0cmVlIGlzRXF1YWxUb0Zp
bmFsU3VidHJlZTp0ZXN0UnVubmVyLmJvZHlFbGVtZW50U3VidHJlZV0pOworICAgIFhDVEFzc2Vy
dEVxdWFsT2JqZWN0cyh0ZXN0UnVubmVyLmJvZHlUZXh0Q29udGVudCwgQCJmb29iYXIiKTsKK30K
KworLSAodm9pZCl0ZXN0VHlwaW5nQW5kRGVsZXRpbmdUZXh0Cit7CisgICAgW3Rlc3RSdW5uZXIg
dHlwZVN0cmluZzpAImFwcGxlIl07CisgICAgW3Rlc3RSdW5uZXIgZGVsZXRlQmFja3dhcmRzOjNd
OworCisgICAgTlNTdHJpbmcgKm9yaWdpbmFsU3VidHJlZSA9IHRlc3RSdW5uZXIuYm9keUVsZW1l
bnRTdWJ0cmVlOworCisgICAgW3NlbGYgcmV3aW5kQW5kUGxheWJhY2tFZGl0aW5nSW5QbGF5YmFj
a1Rlc3RIYXJuZXNzXTsKKyAgICBYQ1RBc3NlcnRUcnVlKFtzZWxmIG9yaWdpbmFsQm9keVN1YnRy
ZWU6b3JpZ2luYWxTdWJ0cmVlIGlzRXF1YWxUb0ZpbmFsU3VidHJlZTp0ZXN0UnVubmVyLmJvZHlF
bGVtZW50U3VidHJlZV0pOworICAgIFhDVEFzc2VydEVxdWFsT2JqZWN0cyh0ZXN0UnVubmVyLmJv
ZHlUZXh0Q29udGVudCwgQCJhcCIpOworfQorCistICh2b2lkKXJld2luZEFuZFBsYXliYWNrRWRp
dGluZ0luUGxheWJhY2tUZXN0SGFybmVzcworeworICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRo
ZSB0ZXN0IHJ1bm5lciBoYXMgbG9hZGVkIHRoZSBjYXB0dXJlIHRlc3QgaGFybmVzcy4KKyAgICBb
dGVzdFJ1bm5lciBsb2FkUGxheWJhY2tUZXN0SGFybmVzc1dpdGhKU09OOnRlc3RSdW5uZXIuZWRp
dGluZ0hpc3RvcnlKU09OXTsKKworICAgIC8vIFJld2luZCB0byB0aGUgdmVyeSBiZWdpbm5pbmcs
IHRoZW4gcGxheSBiYWNrIGFsbCBlZGl0aW5nIGFnYWluLgorICAgIFt0ZXN0UnVubmVyIGp1bXBU
b1VwZGF0ZUluZGV4OjBdOworICAgIFt0ZXN0UnVubmVyIGp1bXBUb1VwZGF0ZUluZGV4OnRlc3RS
dW5uZXIubnVtYmVyT2ZVcGRhdGVzXTsKK30KKworLSAoQk9PTClvcmlnaW5hbEJvZHlTdWJ0cmVl
OihOU1N0cmluZyAqKW9yaWdpbmFsU3VidHJlZSBpc0VxdWFsVG9GaW5hbFN1YnRyZWU6KE5TU3Ry
aW5nICopZmluYWxTdWJ0cmVlCit7CisgICAgaWYgKFtvcmlnaW5hbFN1YnRyZWUgaXNFcXVhbFRv
U3RyaW5nOmZpbmFsU3VidHJlZV0pCisgICAgICAgIHJldHVybiBZRVM7CisKKyAgICBOU0xvZyhA
Ij4+Pj4+Pj4iKTsKKyAgICBOU0xvZyhAIlRoZSBvcmlnaW5hbCBzdWJ0cmVlIGlzOlxuJUAiLCBv
cmlnaW5hbFN1YnRyZWUpOworICAgIE5TTG9nKEAiPT09PT09PSIpOworICAgIE5TTG9nKEAiVGhl
IGZpbmFsIHN1YnRyZWUgaXM6XG4lQCIsIGZpbmFsU3VidHJlZSk7CisgICAgTlNMb2coQCI8PDw8
PDw8Iik7CisKKyAgICByZXR1cm4gTk87Cit9CisKK0BlbmQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296404</attachid>
            <date>2016-12-07 11:41:38 -0800</date>
            <delta_ts>2016-12-07 12:41:11 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-165114-20161207114059.patch</filename>
            <type>text/plain</type>
            <size>110771</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA5NDQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWVlNGZjYTZiNDJmZTAw
ZWUzODE5NjgxZmQ0NjM2ZWJlMzA2MTQ5My4uZTRlNmVjNTMxZjA0ZWVmNzA5Y2IzZWZmMDQyNWNj
ZjY2ZmEzZjg1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNyBAQAorMjAxNi0xMi0wNiAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBuZXcg
cHJvamVjdCBmb3IgcmVjb3JkaW5nIGFuZCBwbGF5aW5nIGJhY2sgZWRpdGluZyBjb21tYW5kcyBp
biBlZGl0YWJsZSB3ZWIgY29udGVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY1MTE0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yOTQwODEzNT4K
KworICAgICAgICBSZXZpZXdlZCBieSBCZXRoIERha2luLgorCisgICAgICAgIEFkZHMgbmV3IHNj
cmlwdHMgdXNlZCB0byByZWNvcmQgYW5kIHBsYXkgYmFjayBlZGl0aW5nLCBhcyB3ZWxsIGFzIGEg
bmV3IFhjb2RlIENvcHkgZmlsZXMgcGhhc2UgdGhhdCBwdXNoZXMgdGhlc2UKKyAgICAgICAgc2Ny
aXB0cyB0byB0aGUgaW50ZXJuYWwgc3lzdGVtIGRpcmVjdG9yeSB3aGVuIGluc3RhbGxpbmcuIFNl
ZSB0aGUgVG9vbHMgQ2hhbmdlTG9nIGFuZCBpbmRpdmlkdWFsIGNvbW1lbnRzIGJlbG93CisgICAg
ICAgIGZvciBtb3JlIGRldGFpbHMuIENvdmVyZWQgYnkgMyBuZXcgdW5pdCB0ZXN0cyBpbiB0aGUg
RWRpdGluZ0hpc3RvcnkgcHJvamVjdC4KKworICAgICAgICAqIEludGVybmFsU2NyaXB0cy9EdW1w
RWRpdGluZ0hpc3RvcnkuanM6IEFkZGVkLgorICAgICAgICAoYmVnaW5Qcm9jZXNzaW5nVG9wTGV2
ZWxVcGRhdGUpOgorICAgICAgICAoZW5kUHJvY2Vzc2luZ1RvcExldmVsVXBkYXRlKToKKyAgICAg
ICAgKGFwcGVuZERPTVVwZGF0ZXNGcm9tUmVjb3Jkcyk6CisgICAgICAgIChhcHBlbmRTZWxlY3Rp
b25VcGRhdGVJZk5lY2Vzc2FyeSk6CisKKyAgICAgICAgQWRkcyBuZXcgZW50cmllcyBpbnRvIHRo
ZSB0b3AtbGV2ZWwgbGlzdCBvZiBET00gdXBkYXRlcyBjYXB0dXJlZCB3aGVuIGVkaXRpbmcuIFJl
c3BlY3RpdmVseSwgdGhlc2UgYXJlIGlucHV0CisgICAgICAgIGV2ZW50cyBhbmQgc2VsZWN0aW9u
IGNoYW5nZXMuCisKKyAgICAgICAgKEVkaXRpbmdIaXN0b3J5LmdldEVkaXRpbmdIaXN0b3J5QXNK
U09OU3RyaW5nKToKKyAgICAgICAgKiBJbnRlcm5hbFNjcmlwdHMvRWRpdGluZ0hpc3RvcnlVdGls
LmpzOiBBZGRlZC4KKyAgICAgICAgKHByb3RvdHlwZS5fc2NyYW1ibGUpOgorICAgICAgICAocHJv
dG90eXBlLmFwcGx5VG9UZXh0KToKKyAgICAgICAgKHByb3RvdHlwZS5hcHBseVRvRmlsZW5hbWUp
OgorICAgICAgICAocHJvdG90eXBlLl9zY3JhbWJlZE51bWJlckluZGV4Rm9yQ29kZSk6CisgICAg
ICAgIChwcm90b3R5cGUuX3NjcmFtYmVkTG93ZXJjYXNlSW5kZXhGb3JDb2RlKToKKyAgICAgICAg
KHByb3RvdHlwZS5fc2NyYW1iZWRVcHBlcmNhc2VJbmRleEZvckNvZGUpOgorCisgICAgICAgIE5h
aXZlIGltcGxlbWVudGF0aW9uIG9mIGFuIG9iZnVzY2F0b3IuIEN1cnJlbnRseSwgdGhpcyBvbmx5
IGFmZmVjdHMgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuIE9iZnVzY2F0aW9uIGlzIG9mZgorICAg
ICAgICBieSBkZWZhdWx0LCBidXQgY2FuIGJlIHRvZ2dsZWQgb24gaW4gSmF2YVNjcmlwdC4KKwor
ICAgICAgICAoZWxlbWVudEZyb21NYXJrZG93bik6CisgICAgICAgIChHbG9iYWxOb2RlTWFwKToK
KyAgICAgICAgKEdsb2JhbE5vZGVNYXAucHJvdG90eXBlLm5vZGVzRm9yR1VJRHMpOgorICAgICAg
ICAoR2xvYmFsTm9kZU1hcC5wcm90b3R5cGUuZ3VpZHNGb3JUTm9kZXMpOgorICAgICAgICAoR2xv
YmFsTm9kZU1hcC5wcm90b3R5cGUubm9kZUZvckdVSUQpOgorICAgICAgICAoR2xvYmFsTm9kZU1h
cC5wcm90b3R5cGUuZ3VpZEZvck5vZGUpOgorICAgICAgICAoR2xvYmFsTm9kZU1hcC5wcm90b3R5
cGUuaGFzR1VJREZvck5vZGUpOgorICAgICAgICAoR2xvYmFsTm9kZU1hcC5wcm90b3R5cGUubm9k
ZXMpOgorICAgICAgICAoR2xvYmFsTm9kZU1hcC5wcm90b3R5cGUudG9PYmplY3QpOgorICAgICAg
ICAoR2xvYmFsTm9kZU1hcC5mcm9tT2JqZWN0KToKKyAgICAgICAgKEdsb2JhbE5vZGVNYXAuZGF0
YUZvck5vZGUpOgorICAgICAgICAoR2xvYmFsTm9kZU1hcC5lbGVtZW50RnJvbVRhZ05hbWUpOgor
ICAgICAgICAoR2xvYmFsTm9kZU1hcC5ub2RlQXR0cmlidXRlc1RvT2JqZWN0KToKKyAgICAgICAg
KEdsb2JhbE5vZGVNYXAucHJvdG90eXBlLmRlc2NyaXB0aW9uSFRNTEZvckdVSUQpOgorICAgICAg
ICAoR2xvYmFsTm9kZU1hcC5wcm90b3R5cGUuZGVzY3JpcHRpb25IVE1MRm9yTm9kZSk6CisKKyAg
ICAgICAgVGhlIEdsb2JhbE5vZGVNYXAga2VlcHMgdHJhY2sgb2YgZXZlcnkgbm9kZSB0aGF0IGhh
cyBhcHBlYXJlZCBpbiB0aGUgRE9NLCBhc3NpZ25pbmcgZWFjaCBub2RlIGEgZ2xvYmFsbHkgdW5p
cXVlCisgICAgICAgIGlkZW50aWZpZXIgKEdVSUQpLiBUaGlzIEdVSUQgaXMgdXNlZCB3aGVuIHJl
Y29uc3RydWN0aW5nIHRoZSBET00sIGFzIHdlbGwgYXMgdW5hcHBseWluZyBvciBhcHBseWluZyBl
ZGl0aW5nLgorCisgICAgICAgIChTZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgIChTZWxlY3Rpb25T
dGF0ZS5wcm90b3R5cGUuaXNFcXVhbCk6CisgICAgICAgIChTZWxlY3Rpb25TdGF0ZS5wcm90b3R5
cGUuYXBwbHlUb1NlbGVjdGlvbik6CisgICAgICAgIChTZWxlY3Rpb25TdGF0ZS5mcm9tU2VsZWN0
aW9uKToKKyAgICAgICAgKFNlbGVjdGlvblN0YXRlLnByb3RvdHlwZS50b09iamVjdCk6CisgICAg
ICAgIChTZWxlY3Rpb25TdGF0ZS5mcm9tT2JqZWN0KToKKworICAgICAgICBSZXByZXNlbnRzIGEg
c25hcHNob3Qgb2YgdGhlIFNlbGVjdGlvbiBzdGF0ZSAoZGV0ZXJtaW5lZCBieSBnZXRTZWxlY3Rp
b24oKSkuCisKKyAgICAgICAgKERPTVVwZGF0ZSk6CisgICAgICAgIChET01VcGRhdGUucHJvdG90
eXBlLmFwcGx5KToKKyAgICAgICAgKERPTVVwZGF0ZS5wcm90b3R5cGUudW5hcHBseSk6CisgICAg
ICAgIChET01VcGRhdGUucHJvdG90eXBlLnRhcmdldE5vZGUpOgorICAgICAgICAoRE9NVXBkYXRl
LnByb3RvdHlwZS5kZXRhaWxzRWxlbWVudCk6CisgICAgICAgIChET01VcGRhdGUub2ZUeXBlKToK
KyAgICAgICAgKERPTVVwZGF0ZS5mcm9tUmVjb3Jkcyk6CisKKyAgICAgICAgQSBET01VcGRhdGUg
aXMgYW4gYWJzdHJhY3Qgb2JqZWN0IHJlcHJlc2VudGluZyBhIGNoYW5nZSBpbiB0aGUgRE9NIHRo
YXQgbWF5IGJlIGFwcGxpZWQgYW5kIHVuYXBwbGllZC4gVGhlc2UgYXJlCisgICAgICAgIGFsc28g
c2VyaWFsaXphYmxlIGFzIGhhc2hlcywgd2hpY2ggbWF5IHRoZW4gYmUgY29udmVydGVkIHRvIEpT
T04gd2hlbiBnZW5lcmF0aW5nIGVkaXRpbmcgaGlzdG9yeSBkYXRhLgorCisgICAgICAgIChDaGls
ZExpc3RVcGRhdGUpOgorICAgICAgICAoQ2hpbGRMaXN0VXBkYXRlLnByb3RvdHlwZS5hcHBseSk6
CisgICAgICAgIChDaGlsZExpc3RVcGRhdGUucHJvdG90eXBlLnVuYXBwbHkpOgorICAgICAgICAo
Q2hpbGRMaXN0VXBkYXRlLnByb3RvdHlwZS5fbmV4dFNpYmxpbmcpOgorICAgICAgICAoQ2hpbGRM
aXN0VXBkYXRlLnByb3RvdHlwZS5fcmVtb3ZlZE5vZGVzKToKKyAgICAgICAgKENoaWxkTGlzdFVw
ZGF0ZS5wcm90b3R5cGUuX2FkZGVkTm9kZXMpOgorICAgICAgICAoQ2hpbGRMaXN0VXBkYXRlLnBy
b3RvdHlwZS50b09iamVjdCk6CisgICAgICAgIChDaGlsZExpc3RVcGRhdGUucHJvdG90eXBlLmRl
dGFpbHNFbGVtZW50KToKKyAgICAgICAgKENoaWxkTGlzdFVwZGF0ZS5mcm9tT2JqZWN0KToKKwor
ICAgICAgICBUaGVzZSB0aHJlZSB1cGRhdGUgdHlwZXMgY29ycmVzcG9uZCB0byB0aGUgdGhyZWUg
dHlwZXMgb2YgRE9NIG11dGF0aW9ucy4gVGhlc2UgbWF5IGFwcGVhciBhcyB0b3AtbGV2ZWwgdXBk
YXRlcworICAgICAgICBpZiB0aGV5IGFyZSBub3QgY2FwdHVyZWQgZHVyaW5nIGFuIGlucHV0IGV2
ZW50LCBidXQgZm9yIHRoZSBtYWpvcml0eSBvZiB1c2VyLWlucHV0LWRyaXZlbiBjaGFuZ2VzLCB0
aGV5IHdpbGwgYmUKKyAgICAgICAgY2hpbGRyZW4gb2YgYW4gaW5wdXQgZXZlbnQuCisKKyAgICAg
ICAgKENoYXJhY3RlckRhdGFVcGRhdGUpOgorICAgICAgICAoQ2hhcmFjdGVyRGF0YVVwZGF0ZS5w
cm90b3R5cGUuYXBwbHkpOgorICAgICAgICAoQ2hhcmFjdGVyRGF0YVVwZGF0ZS5wcm90b3R5cGUu
dW5hcHBseSk6CisgICAgICAgIChDaGFyYWN0ZXJEYXRhVXBkYXRlLnByb3RvdHlwZS5kZXRhaWxz
RWxlbWVudCk6CisgICAgICAgIChDaGFyYWN0ZXJEYXRhVXBkYXRlLnByb3RvdHlwZS50b09iamVj
dCk6CisgICAgICAgIChDaGFyYWN0ZXJEYXRhVXBkYXRlLmZyb21PYmplY3QpOgorICAgICAgICAo
QXR0cmlidXRlVXBkYXRlKToKKyAgICAgICAgKEF0dHJpYnV0ZVVwZGF0ZS5wcm90b3R5cGUuYXBw
bHkpOgorICAgICAgICAoQXR0cmlidXRlVXBkYXRlLnByb3RvdHlwZS51bmFwcGx5KToKKyAgICAg
ICAgKEF0dHJpYnV0ZVVwZGF0ZS5wcm90b3R5cGUuZGV0YWlsc0VsZW1lbnQpOgorICAgICAgICAo
QXR0cmlidXRlVXBkYXRlLnByb3RvdHlwZS50b09iamVjdCk6CisgICAgICAgIChBdHRyaWJ1dGVV
cGRhdGUuZnJvbU9iamVjdCk6CisgICAgICAgIChTZWxlY3Rpb25VcGRhdGUpOgorICAgICAgICAo
U2VsZWN0aW9uVXBkYXRlLnByb3RvdHlwZS5hcHBseSk6CisgICAgICAgIChTZWxlY3Rpb25VcGRh
dGUucHJvdG90eXBlLnVuYXBwbHkpOgorICAgICAgICAoU2VsZWN0aW9uVXBkYXRlLnByb3RvdHlw
ZS50b09iamVjdCk6CisgICAgICAgIChTZWxlY3Rpb25VcGRhdGUuZnJvbU9iamVjdCk6CisgICAg
ICAgIChTZWxlY3Rpb25VcGRhdGUucHJvdG90eXBlLl9yYW5nZURlc2NyaXB0aW9uSFRNTCk6Cisg
ICAgICAgIChTZWxlY3Rpb25VcGRhdGUucHJvdG90eXBlLl9hbmNob3JEZXNjcmlwdGlvbkhUTUwp
OgorICAgICAgICAoU2VsZWN0aW9uVXBkYXRlLnByb3RvdHlwZS5fZm9jdXNEZXNjcmlwdGlvbkhU
TUwpOgorICAgICAgICAoU2VsZWN0aW9uVXBkYXRlLnByb3RvdHlwZS5kZXRhaWxzRWxlbWVudCk6
CisKKyAgICAgICAgUmVwcmVzZW50cyBhIGNoYW5nZSBpbiB0aGUgU2VsZWN0aW9uLiBXaGlsZSBu
byBjaGFuZ2VzIHRvIHRoZSBET00gc3RydWN0dXJlIG9jY3VyIGFzIGEgcmVzdWx0IG9mIGEKKyAg
ICAgICAgU2VsZWN0aW9uVXBkYXRlLCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoZXNl
IHVwZGF0ZXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hlcmUgdGhlIHNlbGVjdGlvbiBzaG91bGQg
YmUKKyAgICAgICAgd2hlbiByZXdpbmRpbmcgb3IgcGxheWluZyBiYWNrIHRoZSBlZGl0aW5nIGhp
c3RvcnkuCisKKyAgICAgICAgKElucHV0RXZlbnRVcGRhdGUpOgorICAgICAgICAoSW5wdXRFdmVu
dFVwZGF0ZS5wcm90b3R5cGUuX29iZnVzY2F0ZWREYXRhKToKKyAgICAgICAgKElucHV0RXZlbnRV
cGRhdGUucHJvdG90eXBlLmFwcGx5KToKKyAgICAgICAgKElucHV0RXZlbnRVcGRhdGUucHJvdG90
eXBlLnVuYXBwbHkpOgorICAgICAgICAoSW5wdXRFdmVudFVwZGF0ZS5wcm90b3R5cGUudG9PYmpl
Y3QpOgorICAgICAgICAoSW5wdXRFdmVudFVwZGF0ZS5mcm9tT2JqZWN0KToKKyAgICAgICAgKElu
cHV0RXZlbnRVcGRhdGUucHJvdG90eXBlLmRldGFpbHNFbGVtZW50KToKKworICAgICAgICBSZXBy
ZXNlbnRzIGFuIHVwZGF0ZSBkdWUgdG8gdXNlciBpbnB1dCwgd2hpY2ggY29uc2lzdHMgb2Ygc29t
ZSBudW1iZXIgb2YgY2hpbGQgRE9NIG11dGF0aW9uIHVwZGF0ZXMuCisKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTYtMTItMDYgIEFudG9pbmUgUXVp
bnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KIAogICAgICAgICBbTW9kZXJuIE1lZGlhIENvbnRyb2xz
XSBJbnN0YW50aWF0ZSBpT1MgbWVkaWEgY29udHJvbHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0ludGVybmFsU2NyaXB0cy9EdW1wRWRpdGluZ0hpc3RvcnkuanMgYi9Tb3VyY2UvV2ViQ29y
ZS9JbnRlcm5hbFNjcmlwdHMvRHVtcEVkaXRpbmdIaXN0b3J5LmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlZGM1
ZWMxMzY0OGNiNGUyZTcyZTliOWI1Mzk1OWI1NWQwMWRlODAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9JbnRlcm5hbFNjcmlwdHMvRHVtcEVkaXRpbmdIaXN0b3J5LmpzCkBAIC0w
LDAgKzEsOTMgQEAKKygoKSA9PiB7CisgICAgbGV0IGluaXRpYWxpemVkID0gZmFsc2U7CisgICAg
bGV0IGdsb2JhbE5vZGVNYXAgPSBuZXcgRWRpdGluZ0hpc3RvcnkuR2xvYmFsTm9kZU1hcCgpOwor
ICAgIGxldCB0b3BMZXZlbFVwZGF0ZXMgPSBbXTsKKyAgICBsZXQgY3VycmVudENoaWxkVXBkYXRl
cyA9IFtdOworICAgIGxldCBpc1Byb2Nlc3NpbmdUb3BMZXZlbFVwZGF0ZSA9IGZhbHNlOworICAg
IGxldCBsYXN0S25vd25TZWxlY3Rpb25TdGF0ZSA9IG51bGw7CisgICAgbGV0IG11dGF0aW9uT2Jz
ZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihyZWNvcmRzID0+IGFwcGVuZERPTVVwZGF0ZXNG
cm9tUmVjb3JkcyhyZWNvcmRzKSk7CisKKyAgICBmdW5jdGlvbiBiZWdpblByb2Nlc3NpbmdUb3BM
ZXZlbFVwZGF0ZSgpIHsKKyAgICAgICAgaXNQcm9jZXNzaW5nVG9wTGV2ZWxVcGRhdGUgPSB0cnVl
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGVuZFByb2Nlc3NpbmdUb3BMZXZlbFVwZGF0ZSh0b3BM
ZXZlbFVwZGF0ZSkgeworICAgICAgICB0b3BMZXZlbFVwZGF0ZXMucHVzaCh0b3BMZXZlbFVwZGF0
ZSk7CisgICAgICAgIGN1cnJlbnRDaGlsZFVwZGF0ZXMgPSBbXTsKKyAgICAgICAgaXNQcm9jZXNz
aW5nVG9wTGV2ZWxVcGRhdGUgPSBmYWxzZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBhcHBlbmRE
T01VcGRhdGVzRnJvbVJlY29yZHMocmVjb3JkcykgeworICAgICAgICBpZiAoIXJlY29yZHMubGVu
Z3RoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGxldCBuZXdVcGRhdGVzID0gRWRp
dGluZ0hpc3RvcnkuRE9NVXBkYXRlLmZyb21SZWNvcmRzKHJlY29yZHMsIGdsb2JhbE5vZGVNYXAp
OworICAgICAgICBpZiAoaXNQcm9jZXNzaW5nVG9wTGV2ZWxVcGRhdGUpCisgICAgICAgICAgICBj
dXJyZW50Q2hpbGRVcGRhdGVzID0gY3VycmVudENoaWxkVXBkYXRlcy5jb25jYXQobmV3VXBkYXRl
cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRvcExldmVsVXBkYXRlcyA9IHRvcExldmVs
VXBkYXRlcy5jb25jYXQobmV3VXBkYXRlcyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gYXBwZW5k
U2VsZWN0aW9uVXBkYXRlSWZOZWNlc3NhcnkoKSB7CisgICAgICAgIGxldCBuZXdTZWxlY3Rpb25T
dGF0ZSA9IEVkaXRpbmdIaXN0b3J5LlNlbGVjdGlvblN0YXRlLmZyb21TZWxlY3Rpb24oZ2V0U2Vs
ZWN0aW9uKCksIGdsb2JhbE5vZGVNYXApOworICAgICAgICBpZiAobmV3U2VsZWN0aW9uU3RhdGUu
aXNFcXVhbChsYXN0S25vd25TZWxlY3Rpb25TdGF0ZSkpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgbGV0IHVwZGF0ZSA9IG5ldyBFZGl0aW5nSGlzdG9yeS5TZWxlY3Rpb25VcGRhdGUo
Z2xvYmFsTm9kZU1hcCwgbmV3U2VsZWN0aW9uU3RhdGUpOworICAgICAgICBpZiAoaXNQcm9jZXNz
aW5nVG9wTGV2ZWxVcGRhdGUpCisgICAgICAgICAgICBjdXJyZW50Q2hpbGRVcGRhdGVzLnB1c2go
dXBkYXRlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdG9wTGV2ZWxVcGRhdGVzLnB1c2go
dXBkYXRlKTsKKyAgICAgICAgbGFzdEtub3duU2VsZWN0aW9uU3RhdGUgPSBuZXdTZWxlY3Rpb25T
dGF0ZTsKKyAgICB9CisKKyAgICBkb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZSgiY29udGVudGVk
aXRhYmxlIiwgdHJ1ZSk7CisgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJmb2N1
cyIsICgpID0+IHsKKyAgICAgICAgaWYgKGluaXRpYWxpemVkKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgICAgICBFZGl0aW5nSGlzdG9y
eS5nZXRFZGl0aW5nSGlzdG9yeUFzSlNPTlN0cmluZyA9IChmb3JtYXR0ZWQpID0+IHsKKyAgICAg
ICAgICAgIGxldCByZWNvcmQgPSB7fTsKKyAgICAgICAgICAgIHJlY29yZC51cGRhdGVzID0gdG9w
TGV2ZWxVcGRhdGVzLm1hcCh1cGRhdGUgPT4gdXBkYXRlLnRvT2JqZWN0KCkpOworICAgICAgICAg
ICAgcmVjb3JkLmdsb2JhbE5vZGVNYXAgPSBnbG9iYWxOb2RlTWFwLnRvT2JqZWN0KCk7CisgICAg
ICAgICAgICByZXR1cm4gZm9ybWF0dGVkID8gSlNPTi5zdHJpbmdpZnkocmVjb3JkLCBudWxsLCA0
KSA6IEpTT04uc3RyaW5naWZ5KHJlY29yZCk7CisgICAgICAgIH07CisKKyAgICAgICAgZG9jdW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIiwgKCkgPT4geworICAgICAgICAg
ICAgYXBwZW5kU2VsZWN0aW9uVXBkYXRlSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgfSk7CisgICAg
ICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZWlucHV0IiwgZXZlbnQgPT4gewor
ICAgICAgICAgICAgYXBwZW5kRE9NVXBkYXRlc0Zyb21SZWNvcmRzKG11dGF0aW9uT2JzZXJ2ZXIu
dGFrZVJlY29yZHMoKSk7CisgICAgICAgICAgICBiZWdpblByb2Nlc3NpbmdUb3BMZXZlbFVwZGF0
ZSgpOworICAgICAgICB9KTsKKworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJp
bnB1dCIsIGV2ZW50ID0+IHsKKyAgICAgICAgICAgIGFwcGVuZERPTVVwZGF0ZXNGcm9tUmVjb3Jk
cyhtdXRhdGlvbk9ic2VydmVyLnRha2VSZWNvcmRzKCkpOworICAgICAgICAgICAgbGV0IGV2ZW50
RGF0YSA9IGV2ZW50LmRhdGFUcmFuc2ZlciA/IGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKCJ0
ZXh0L2h0bWwiKSA6IGV2ZW50LmRhdGE7CisgICAgICAgICAgICBsYXN0S25vd25TZWxlY3Rpb25T
dGF0ZSA9IG51bGw7CisgICAgICAgICAgICBlbmRQcm9jZXNzaW5nVG9wTGV2ZWxVcGRhdGUobmV3
IEVkaXRpbmdIaXN0b3J5LklucHV0RXZlbnRVcGRhdGUoZ2xvYmFsTm9kZU1hcCwgY3VycmVudENo
aWxkVXBkYXRlcywgZXZlbnQuaW5wdXRUeXBlLCBldmVudERhdGEsIGV2ZW50LnRpbWVTdGFtcCkp
OworICAgICAgICB9KTsKKworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlk
b3duIiwgZXZlbnQgPT4geworICAgICAgICAgICAgaWYgKGV2ZW50LmtleSAhPT0gInMiIHx8ICFl
dmVudC5tZXRhS2V5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgbGV0
IGZha2VMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOworICAgICAgICAgICAgZmFr
ZUxpbmsuc2V0QXR0cmlidXRlKCJocmVmIiwgImRhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04
LCIgKyBlbmNvZGVVUklDb21wb25lbnQoRWRpdGluZ0hpc3RvcnkuZ2V0RWRpdGluZ0hpc3RvcnlB
c0pTT05TdHJpbmcoKSkpOworICAgICAgICAgICAgZmFrZUxpbmsuc2V0QXR0cmlidXRlKCJkb3du
bG9hZCIsICJyZWNvcmQuanNvbiIpOworICAgICAgICAgICAgZmFrZUxpbmsuY2xpY2soKTsKKyAg
ICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgIH0pOworCisgICAgICAg
IG11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwgeworICAgICAgICAgICAgY2hpbGRM
aXN0OiB0cnVlLAorICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSwKKyAgICAgICAgICAgIGNo
YXJhY3RlckRhdGE6IHRydWUsCisgICAgICAgICAgICBzdWJ0cmVlOiB0cnVlLAorICAgICAgICAg
ICAgYXR0cmlidXRlT2xkVmFsdWU6IHRydWUsCisgICAgICAgICAgICBjaGFyYWN0ZXJEYXRhT2xk
VmFsdWU6IHRydWUsCisgICAgICAgIH0pOworICAgIH0pOworfSkoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0ludGVybmFsU2NyaXB0cy9FZGl0aW5nSGlzdG9yeVV0aWwuanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9JbnRlcm5hbFNjcmlwdHMvRWRpdGluZ0hpc3RvcnlVdGlsLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjY0NTg3MGIzZDBhOWIyMDY1YmRhZWRhOWFjOTJjOTQ2ZjczZjU5NjAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9JbnRlcm5hbFNjcmlwdHMvRWRpdGluZ0hpc3RvcnlVdGls
LmpzCkBAIC0wLDAgKzEsNjkzIEBACisoKCkgPT4geworICAgIGNsYXNzIE9iZnVzY2F0b3Igewor
ICAgICAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgICAgICAgIHRoaXMuX3NjcmFtYmxlZExvd2Vy
Y2FzZUxldHRlcnMgPSB0aGlzLl9zY3JhbWJsZShBcnJheSgyNikuZmlsbCgpLm1hcCgoXywgaSkg
PT4gOTcgKyBpKSk7CisgICAgICAgICAgICB0aGlzLl9zY3JhbWJsZWRVcHBlcmNhc2VMZXR0ZXJz
ID0gdGhpcy5fc2NyYW1ibGUoQXJyYXkoMjYpLmZpbGwoKS5tYXAoKF8sIGkpID0+IDY1ICsgaSkp
OworICAgICAgICAgICAgdGhpcy5fc2NyYW1ibGVkTnVtYmVycyA9IHRoaXMuX3NjcmFtYmxlKEFy
cmF5KDEwKS5maWxsKCkubWFwKChfLCBpKSA9PiA0OCArIGkpKTsKKyAgICAgICAgICAgIHRoaXMu
ZW5hYmxlZCA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgX3NjcmFtYmxlKGFycmF5KSB7
CisgICAgICAgICAgICBmb3IgKHZhciBpID0gYXJyYXkubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkg
eworICAgICAgICAgICAgICAgIGxldCBqID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKGkg
KyAxKSk7CisgICAgICAgICAgICAgICAgbGV0IHRlbXAgPSBhcnJheVtpXTsKKyAgICAgICAgICAg
ICAgICBhcnJheVtpXSA9IGFycmF5W2pdOworICAgICAgICAgICAgICAgIGFycmF5W2pdID0gdGVt
cDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBhcnJheTsKKyAgICAgICAgfQor
CisgICAgICAgIGFwcGx5VG9UZXh0KHRleHQpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5lbmFi
bGVkIHx8ICF0ZXh0KQorICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0OworCisgICAgICAgICAg
ICBsZXQgcmVzdWx0ID0gIiI7CisgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4
IDwgdGV4dC5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICBsZXQgY29kZSA9IHRl
eHQuY2hhckNvZGVBdChpbmRleCk7CisgICAgICAgICAgICAgICAgbGV0IG51bWJlckluZGV4ID0g
dGhpcy5fc2NyYW1iZWROdW1iZXJJbmRleEZvckNvZGUoY29kZSk7CisgICAgICAgICAgICAgICAg
bGV0IGxvd2VyY2FzZUluZGV4ID0gdGhpcy5fc2NyYW1iZWRMb3dlcmNhc2VJbmRleEZvckNvZGUo
Y29kZSk7CisgICAgICAgICAgICAgICAgbGV0IHVwcGVyY2FzZUluZGV4ID0gdGhpcy5fc2NyYW1i
ZWRVcHBlcmNhc2VJbmRleEZvckNvZGUoY29kZSk7CisKKyAgICAgICAgICAgICAgICBpZiAobnVt
YmVySW5kZXggIT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5m
cm9tQ2hhckNvZGUodGhpcy5fc2NyYW1ibGVkTnVtYmVyc1tudW1iZXJJbmRleF0pOworICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGxvd2VyY2FzZUluZGV4ICE9IG51bGwpCisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX3NjcmFtYmxlZExvd2Vy
Y2FzZUxldHRlcnNbbG93ZXJjYXNlSW5kZXhdKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh1
cHBlcmNhc2VJbmRleCAhPSBudWxsKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gU3Ry
aW5nLmZyb21DaGFyQ29kZSh0aGlzLl9zY3JhbWJsZWRVcHBlcmNhc2VMZXR0ZXJzW3VwcGVyY2Fz
ZUluZGV4XSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXN1
bHQgKz0gdGV4dC5jaGFyQXQoaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIGFwcGx5VG9GaWxlbmFtZShmaWxlbmFt
ZSkgeworICAgICAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgIWZpbGVuYW1lKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmaWxlbmFtZTsKKworICAgICAgICAgICAgbGV0IGNvbXBvbmVudHMg
PSBmaWxlbmFtZS5zcGxpdCgiLiIpOworICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHMubWFw
KChjb21wb25lbnQsIGluZGV4KSA9PiB7CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IGNv
bXBvbmVudHMubGVuZ3RoIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVu
dDsKKworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGx5VG9UZXh0KGNvbXBvbmVudCk7
CisgICAgICAgICAgICB9KS5qb2luKCIuIik7CisgICAgICAgIH0KKworICAgICAgICBfc2NyYW1i
ZWROdW1iZXJJbmRleEZvckNvZGUoY29kZSkgeworICAgICAgICAgICAgcmV0dXJuIDQ4IDw9IGNv
ZGUgJiYgY29kZSA8PSA1NyA/IGNvZGUgLSA0OCA6IG51bGw7CisgICAgICAgIH0KKworICAgICAg
ICBfc2NyYW1iZWRMb3dlcmNhc2VJbmRleEZvckNvZGUoY29kZSkgeworICAgICAgICAgICAgcmV0
dXJuIDk3IDw9IGNvZGUgJiYgY29kZSA8PSAxMjIgPyBjb2RlIC0gOTcgOiBudWxsOworICAgICAg
ICB9CisKKyAgICAgICAgX3NjcmFtYmVkVXBwZXJjYXNlSW5kZXhGb3JDb2RlKGNvZGUpIHsKKyAg
ICAgICAgICAgIHJldHVybiA2NSA8PSBjb2RlICYmIGNvZGUgPD0gOTAgPyBjb2RlIC0gNjUgOiBu
dWxsOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHNoYXJlZCgpIHsKKyAgICAgICAgICAg
IGlmICghT2JmdXNjYXRvci5fc2hhcmVkSW5zdGFuY2UpCisgICAgICAgICAgICAgICAgT2JmdXNj
YXRvci5fc2hhcmVkSW5zdGFuY2UgPSBuZXcgT2JmdXNjYXRvcigpOworICAgICAgICAgICAgcmV0
dXJuIE9iZnVzY2F0b3IuX3NoYXJlZEluc3RhbmNlOworICAgICAgICB9CisgICAgfQorCisgICAg
ZnVuY3Rpb24gZWxlbWVudEZyb21NYXJrZG93bihodG1sKSB7CisgICAgICAgIGxldCB0ZW1wb3Jh
cnlEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgdGVtcG9yYXJ5
RGl2LmlubmVySFRNTCA9IGh0bWw7CisgICAgICAgIHJldHVybiB0ZW1wb3JhcnlEaXYuY2hpbGRy
ZW5bMF07CisgICAgfQorCisgICAgY2xhc3MgR2xvYmFsTm9kZU1hcCB7CisgICAgICAgIGNvbnN0
cnVjdG9yKG5vZGVzQnlHVUlEKSB7CisgICAgICAgICAgICB0aGlzLl9ub2Rlc0J5R1VJRCA9IG5v
ZGVzQnlHVUlEID8gbm9kZXNCeUdVSUQgOiBuZXcgTWFwKCk7CisgICAgICAgICAgICB0aGlzLl9n
dWlkc0J5Tm9kZSA9IG5ldyBNYXAoKTsKKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRHVUlEID0g
MDsKKyAgICAgICAgICAgIGZvciAobGV0IFtndWlkLCBub2RlXSBvZiB0aGlzLl9ub2Rlc0J5R1VJ
RCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2d1aWRzQnlOb2RlLnNldChub2RlLCBndWlkKTsK
KyAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50R1VJRCA9IE1hdGgubWF4KHRoaXMuX2N1cnJl
bnRHVUlELCBndWlkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRH
VUlEKys7CisgICAgICAgIH0KKworICAgICAgICBub2Rlc0ZvckdVSURzKGd1aWRzKSB7CisgICAg
ICAgICAgICBpZiAoIWd1aWRzLm1hcCkKKyAgICAgICAgICAgICAgICBndWlkcyA9IEFycmF5LmZy
b20oZ3VpZHMpOworICAgICAgICAgICAgcmV0dXJuIGd1aWRzLm1hcChndWlkID0+IHRoaXMubm9k
ZUZvckdVSUQoZ3VpZCkpOworICAgICAgICB9CisKKyAgICAgICAgZ3VpZHNGb3JOb2Rlcyhub2Rl
cykgeworICAgICAgICAgICAgaWYgKCFub2Rlcy5tYXApCisgICAgICAgICAgICAgICAgbm9kZXMg
PSBBcnJheS5mcm9tKG5vZGVzKTsKKyAgICAgICAgICAgIHJldHVybiBub2Rlcy5tYXAobm9kZSA9
PiB0aGlzLmd1aWRGb3JOb2RlKG5vZGUpKTsKKyAgICAgICAgfQorCisgICAgICAgIG5vZGVGb3JH
VUlEKGd1aWQpIHsKKyAgICAgICAgICAgIGlmICghZ3VpZCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbDsKKworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVzQnlHVUlELmdldChndWlk
KTsKKyAgICAgICAgfQorCisgICAgICAgIGd1aWRGb3JOb2RlKG5vZGUpIHsKKyAgICAgICAgICAg
IGlmICghbm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAgICAgaWYg
KHRoaXMuaGFzR1VJREZvck5vZGUobm9kZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2d1aWRzQnlOb2RlLmdldChub2RlKTsKKworICAgICAgICAgICAgY29uc3QgZ3VpZCA9IHRoaXMu
X2N1cnJlbnRHVUlEOworICAgICAgICAgICAgdGhpcy5fZ3VpZHNCeU5vZGUuc2V0KG5vZGUsIGd1
aWQpOworICAgICAgICAgICAgdGhpcy5fbm9kZXNCeUdVSUQuc2V0KGd1aWQsIG5vZGUpOworICAg
ICAgICAgICAgdGhpcy5fY3VycmVudEdVSUQrKzsKKyAgICAgICAgICAgIHJldHVybiBndWlkOwor
ICAgICAgICB9CisKKyAgICAgICAgaGFzR1VJREZvck5vZGUobm9kZSkgeworICAgICAgICAgICAg
cmV0dXJuICEhdGhpcy5fZ3VpZHNCeU5vZGUuZ2V0KG5vZGUpOworICAgICAgICB9CisKKyAgICAg
ICAgbm9kZXMoKSB7CisgICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9ub2Rlc0J5
R1VJRC52YWx1ZXMoKSk7CisgICAgICAgIH0KKworICAgICAgICB0b09iamVjdCgpIHsKKyAgICAg
ICAgICAgIGxldCBub2Rlc0FuZEdVSURzVG9Qcm9jZXNzID0gW10sIGd1aWRzVG9Qcm9jZXNzID0g
bmV3IFNldCgpOworICAgICAgICAgICAgbGV0IGd1aWRzQnlOb2RlSXRlcmF0b3IgPSB0aGlzLl9n
dWlkc0J5Tm9kZS5lbnRyaWVzKCk7CisgICAgICAgICAgICBmb3IgKGxldCBlbnRyeSA9IGd1aWRz
QnlOb2RlSXRlcmF0b3IubmV4dCgpOyAhZW50cnkuZG9uZTsgZW50cnkgPSBndWlkc0J5Tm9kZUl0
ZXJhdG9yLm5leHQoKSkgeworICAgICAgICAgICAgICAgIG5vZGVzQW5kR1VJRHNUb1Byb2Nlc3Mu
cHVzaChlbnRyeS52YWx1ZSk7CisgICAgICAgICAgICAgICAgZ3VpZHNUb1Byb2Nlc3MuYWRkKGVu
dHJ5LnZhbHVlWzFdKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGV0IGl0ZXJhdG9y
ID0gZG9jdW1lbnQuY3JlYXRlTm9kZUl0ZXJhdG9yKGRvY3VtZW50LmJvZHksIE5vZGVGaWx0ZXIu
U0hPV19BTEwpOworICAgICAgICAgICAgZm9yIChsZXQgbm9kZSA9IGl0ZXJhdG9yLm5leHROb2Rl
KCk7IG5vZGU7IG5vZGUgPSBpdGVyYXRvci5uZXh0Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAg
aWYgKHRoaXMuaGFzR1VJREZvck5vZGUobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgICAgICAgICAgbGV0IG5ld0dVSUQgPSB0aGlzLmd1aWRGb3JOb2RlKG5v
ZGUpOworICAgICAgICAgICAgICAgIG5vZGVzQW5kR1VJRHNUb1Byb2Nlc3MucHVzaChbbm9kZSwg
bmV3R1VJRF0pOworICAgICAgICAgICAgICAgIGd1aWRzVG9Qcm9jZXNzLmFkZChuZXdHVUlEKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGV0IG5vZGVJbmZvQXJyYXkgPSBbXTsKKyAg
ICAgICAgICAgIHdoaWxlIChub2Rlc0FuZEdVSURzVG9Qcm9jZXNzLmxlbmd0aCkgeworICAgICAg
ICAgICAgICAgIGxldCBbbm9kZSwgZ3VpZF0gPSBub2Rlc0FuZEdVSURzVG9Qcm9jZXNzLnBvcCgp
OworICAgICAgICAgICAgICAgIGxldCBpbmZvID0ge307CisgICAgICAgICAgICAgICAgaW5mby5n
dWlkID0gZ3VpZDsKKyAgICAgICAgICAgICAgICBpbmZvLnRhZ05hbWUgPSBub2RlLnRhZ05hbWU7
CisgICAgICAgICAgICAgICAgaW5mby5hdHRyaWJ1dGVzID0gR2xvYmFsTm9kZU1hcC5ub2RlQXR0
cmlidXRlc1RvT2JqZWN0KG5vZGUpOworICAgICAgICAgICAgICAgIGluZm8udHlwZSA9IG5vZGUu
bm9kZVR5cGU7CisgICAgICAgICAgICAgICAgaW5mby5kYXRhID0gR2xvYmFsTm9kZU1hcC5kYXRh
Rm9yTm9kZShub2RlKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5oYXNDaGlsZE5vZGVzKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgaW5mby5jaGlsZEdVSURzID0gdGhpcy5ndWlkc0Zvck5v
ZGVzKG5vZGUuY2hpbGROb2Rlcyk7CisgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGNoaWxk
R1VJRCBvZiBpbmZvLmNoaWxkR1VJRHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
Z3VpZHNUb1Byb2Nlc3MuaGFzKGNoaWxkR1VJRCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZXNBbmRHVUlEc1RvUHJvY2Vzcy5wdXNoKFt0aGlzLm5vZGVGb3JHVUlEKGNoaWxkR1VJ
RCksIGNoaWxkR1VJRF0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIG5vZGVJbmZvQXJyYXkucHVzaChpbmZvKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmZvQXJyYXk7CisgICAgICAgIH0KKworICAg
ICAgICBzdGF0aWMgZnJvbU9iamVjdChub2RlSW5mb0FycmF5KSB7CisgICAgICAgICAgICBsZXQg
bm9kZXNCeUdVSUQgPSBuZXcgTWFwKCk7CisgICAgICAgICAgICBmb3IgKGxldCBpbmZvIG9mIG5v
ZGVJbmZvQXJyYXkpIHsKKyAgICAgICAgICAgICAgICBsZXQgbm9kZSA9IG51bGw7CisgICAgICAg
ICAgICAgICAgaWYgKGluZm8udHlwZSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZSA9IEdsb2JhbE5vZGVNYXAuZWxlbWVudEZyb21UYWdOYW1lKGluZm8udGFn
TmFtZSwgaW5mby5hdHRyaWJ1dGVzLCBpbmZvLmRhdGEpOworCisgICAgICAgICAgICAgICAgaWYg
KGluZm8udHlwZSA9PSBOb2RlLlRFWFRfTk9ERSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9
IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGluZm8uZGF0YSk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoaW5mby50eXBlID09IE5vZGUuRE9DVU1FTlRfTk9ERSkKKyAgICAgICAgICAgICAgICAgICAg
bm9kZSA9IGRvY3VtZW50OworCisgICAgICAgICAgICAgICAgY29uc29sZS5hc3NlcnQobm9kZSk7
CisgICAgICAgICAgICAgICAgbm9kZXNCeUdVSUQuc2V0KGluZm8uZ3VpZCwgbm9kZSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRoZW4sIHNldCBjaGlsZCBub2RlcyBmb3IgYWxs
IG5vZGVzIHRoYXQgZG8gbm90IGFwcGVhciBpbiB0aGUgRE9NLgorICAgICAgICAgICAgZm9yIChs
ZXQgaW5mbyBvZiBub2RlSW5mb0FycmF5LmZpbHRlcihpbmZvID0+ICEhaW5mby5jaGlsZEdVSURz
KSkgeworICAgICAgICAgICAgICAgIGxldCBub2RlID0gbm9kZXNCeUdVSUQuZ2V0KGluZm8uZ3Vp
ZCk7CisgICAgICAgICAgICAgICAgZm9yIChsZXQgY2hpbGRHVUlEIG9mIGluZm8uY2hpbGRHVUlE
cykKKyAgICAgICAgICAgICAgICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQobm9kZXNCeUdVSUQuZ2V0
KGNoaWxkR1VJRCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbmV3IEds
b2JhbE5vZGVNYXAobm9kZXNCeUdVSUQpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGRh
dGFGb3JOb2RlKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2Rl
LlRFWFRfTk9ERSkKKyAgICAgICAgICAgICAgICByZXR1cm4gT2JmdXNjYXRvci5zaGFyZWQoKS5h
cHBseVRvVGV4dChub2RlLmRhdGEpOworCisgICAgICAgICAgICBpZiAobm9kZS50YWdOYW1lICYm
IG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAiYXR0YWNobWVudCIpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0eXBlOiBub2RlLmZpbGUudHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgbmFtZTogT2JmdXNjYXRvci5zaGFyZWQoKS5hcHBseVRv
RmlsZW5hbWUobm9kZS5maWxlLm5hbWUpLAorICAgICAgICAgICAgICAgICAgICBsYXN0TW9kaWZp
ZWQ6IG5ldyBEYXRlKCkuZ2V0VGltZSgpCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBzdGF0
aWMgZWxlbWVudEZyb21UYWdOYW1lKHRhZ05hbWUsIGF0dHJpYnV0ZXMsIGRhdGEpIHsKKyAgICAg
ICAgICAgIGxldCBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKKyAgICAg
ICAgICAgIGZvciAobGV0IGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlcykKKyAgICAgICAgICAg
ICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVzW2F0dHJpYnV0
ZU5hbWVdKTsKKworICAgICAgICAgICAgaWYgKHRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAiYXR0
YWNobWVudCIpIHsKKyAgICAgICAgICAgICAgICBub2RlLmZpbGUgPSBuZXcgRmlsZShbYEZpbGUg
bmFtZWQgJyR7ZGF0YS5uYW1lfSdgXSwgZGF0YS5uYW1lLCB7CisgICAgICAgICAgICAgICAgICAg
IHR5cGU6IGRhdGEudHlwZSwKKyAgICAgICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiBkYXRh
Lmxhc3RNb2RpZmllZAorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJldHVybnMgYW4g
T2JqZWN0IGNvbnRhaW5pbmcgYXR0cmlidXRlIG5hbWUgPT4gYXR0cmlidXRlIHZhbHVlCisgICAg
ICAgIHN0YXRpYyBub2RlQXR0cmlidXRlc1RvT2JqZWN0KG5vZGUsIGF0dHJpYnV0ZXNUb0V4Y2x1
ZGU9W10pIHsKKyAgICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVBdHRyaWJ1dGVzU2V0ID0gbmV3IFNl
dChhdHRyaWJ1dGVzVG9FeGNsdWRlKTsKKyAgICAgICAgICAgIGlmICghbm9kZS5hdHRyaWJ1dGVz
KQorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgICAgICBsZXQgYXR0cmli
dXRlTWFwID0ge307CisgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbm9k
ZS5hdHRyaWJ1dGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIGNvbnN0IGF0
dHJpYnV0ZSA9IG5vZGUuYXR0cmlidXRlcy5pdGVtKGluZGV4KTsKKyAgICAgICAgICAgICAgICBj
b25zdCBbbG9jYWxOYW1lLCB2YWx1ZV0gPSBbYXR0cmlidXRlLmxvY2FsTmFtZSwgYXR0cmlidXRl
LnZhbHVlXTsKKyAgICAgICAgICAgICAgICBpZiAoZXhjbHVkZUF0dHJpYnV0ZXNTZXQuaGFzKGxv
Y2FsTmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAg
ICAgYXR0cmlidXRlTWFwW2xvY2FsTmFtZV0gPSB2YWx1ZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZU1hcDsKKyAgICAgICAgfQorCisgICAgICAgIGRlc2Ny
aXB0aW9uSFRNTEZvckdVSUQoZ3VpZCkgeworICAgICAgICAgICAgcmV0dXJuIGA8c3BhbiBlaC1n
dWlkPSR7Z3VpZH0gY2xhc3M9ImVoLW5vZGUiPiR7dGhpcy5ub2RlRm9yR1VJRChndWlkKS5ub2Rl
TmFtZX08L3NwYW4+YDsKKyAgICAgICAgfQorCisgICAgICAgIGRlc2NyaXB0aW9uSFRNTEZvck5v
ZGUobm9kZSkgeworICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgICAgIHJldHVy
biAiKG51bGwpIjsKKyAgICAgICAgICAgIHJldHVybiBgPHNwYW4gZWgtZ3VpZD0ke3RoaXMuZ3Vp
ZEZvck5vZGUobm9kZSl9IGNsYXNzPSJlaC1ub2RlIj4ke25vZGUubm9kZU5hbWV9PC9zcGFuPmA7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBTZWxlY3Rpb25TdGF0ZSB7CisgICAgICAg
IGNvbnN0cnVjdG9yKG5vZGVNYXAsIHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE5vZGUsIGVu
ZE9mZnNldCwgYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0LCBmb2N1c05vZGUsIGZvY3VzT2Zmc2V0
KSB7CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydChub2RlTWFwKTsKKyAgICAgICAgICAgIHRo
aXMubm9kZU1hcCA9IG5vZGVNYXA7CisgICAgICAgICAgICB0aGlzLnN0YXJ0R1VJRCA9IG5vZGVN
YXAuZ3VpZEZvck5vZGUoc3RhcnROb2RlKTsKKyAgICAgICAgICAgIHRoaXMuc3RhcnRPZmZzZXQg
PSBzdGFydE9mZnNldDsKKyAgICAgICAgICAgIHRoaXMuZW5kR1VJRCA9IG5vZGVNYXAuZ3VpZEZv
ck5vZGUoZW5kTm9kZSk7CisgICAgICAgICAgICB0aGlzLmVuZE9mZnNldCA9IGVuZE9mZnNldDsK
KyAgICAgICAgICAgIHRoaXMuYW5jaG9yR1VJRCA9IG5vZGVNYXAuZ3VpZEZvck5vZGUoYW5jaG9y
Tm9kZSk7CisgICAgICAgICAgICB0aGlzLmFuY2hvck9mZnNldCA9IGFuY2hvck9mZnNldDsKKyAg
ICAgICAgICAgIHRoaXMuZm9jdXNHVUlEID0gbm9kZU1hcC5ndWlkRm9yTm9kZShmb2N1c05vZGUp
OworICAgICAgICAgICAgdGhpcy5mb2N1c09mZnNldCA9IGZvY3VzT2Zmc2V0OworICAgICAgICB9
CisKKyAgICAgICAgaXNFcXVhbChvdGhlclNlbGVjdGlvblN0YXRlKSB7CisgICAgICAgICAgICBy
ZXR1cm4gb3RoZXJTZWxlY3Rpb25TdGF0ZQorICAgICAgICAgICAgICAgICYmIHRoaXMuc3RhcnRH
VUlEID09PSBvdGhlclNlbGVjdGlvblN0YXRlLnN0YXJ0R1VJRCAmJiB0aGlzLnN0YXJ0T2Zmc2V0
ID09PSBvdGhlclNlbGVjdGlvblN0YXRlLnN0YXJ0T2Zmc2V0CisgICAgICAgICAgICAgICAgJiYg
dGhpcy5lbmRHVUlEID09PSBvdGhlclNlbGVjdGlvblN0YXRlLmVuZEdVSUQgJiYgdGhpcy5lbmRP
ZmZzZXQgPT09IG90aGVyU2VsZWN0aW9uU3RhdGUuZW5kT2Zmc2V0CisgICAgICAgICAgICAgICAg
JiYgdGhpcy5hbmNob3JHVUlEID09PSBvdGhlclNlbGVjdGlvblN0YXRlLmFuY2hvckdVSUQgJiYg
dGhpcy5hbmNob3JPZmZzZXQgPT09IG90aGVyU2VsZWN0aW9uU3RhdGUuYW5jaG9yT2Zmc2V0Cisg
ICAgICAgICAgICAgICAgJiYgdGhpcy5mb2N1c0dVSUQgPT09IG90aGVyU2VsZWN0aW9uU3RhdGUu
Zm9jdXNHVUlEICYmIHRoaXMuZm9jdXNPZmZzZXQgPT09IG90aGVyU2VsZWN0aW9uU3RhdGUuZm9j
dXNPZmZzZXQ7CisgICAgICAgIH0KKworICAgICAgICBhcHBseVRvU2VsZWN0aW9uKHNlbGVjdGlv
bikgeworICAgICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOworICAgICAgICAg
ICAgbGV0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKKyAgICAgICAgICAgIHJhbmdl
LnNldFN0YXJ0KHRoaXMubm9kZU1hcC5ub2RlRm9yR1VJRCh0aGlzLnN0YXJ0R1VJRCksIHRoaXMu
c3RhcnRPZmZzZXQpOworICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kKHRoaXMubm9kZU1hcC5ub2Rl
Rm9yR1VJRCh0aGlzLmVuZEdVSUQpLCB0aGlzLmVuZE9mZnNldCk7CisgICAgICAgICAgICBzZWxl
Y3Rpb24uYWRkUmFuZ2UocmFuZ2UpOworICAgICAgICAgICAgc2VsZWN0aW9uLnNldEJhc2VBbmRF
eHRlbnQodGhpcy5ub2RlTWFwLm5vZGVGb3JHVUlEKHRoaXMuYW5jaG9yR1VJRCksIHRoaXMuYW5j
aG9yT2Zmc2V0LCB0aGlzLm5vZGVNYXAubm9kZUZvckdVSUQodGhpcy5mb2N1c0dVSUQpLCB0aGlz
LmZvY3VzT2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBmcm9tU2VsZWN0aW9u
KHNlbGVjdGlvbiwgbm9kZU1hcCkgeworICAgICAgICAgICAgbGV0IFtzdGFydE5vZGUsIHN0YXJ0
T2Zmc2V0LCBlbmROb2RlLCBlbmRPZmZzZXRdID0gW251bGwsIDAsIG51bGwsIDBdOworICAgICAg
ICAgICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50KSB7CisgICAgICAgICAgICAgICAgbGV0IHNl
bGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKKyAgICAgICAgICAgICAgICBz
dGFydE5vZGUgPSBzZWxlY3RlZFJhbmdlLnN0YXJ0Q29udGFpbmVyOworICAgICAgICAgICAgICAg
IHN0YXJ0T2Zmc2V0ID0gc2VsZWN0ZWRSYW5nZS5zdGFydE9mZnNldDsKKyAgICAgICAgICAgICAg
ICBlbmROb2RlID0gc2VsZWN0ZWRSYW5nZS5lbmRDb250YWluZXI7CisgICAgICAgICAgICAgICAg
ZW5kT2Zmc2V0ID0gc2VsZWN0ZWRSYW5nZS5lbmRPZmZzZXQ7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gbmV3IFNlbGVjdGlvblN0YXRlKAorICAgICAgICAgICAgICAgIG5vZGVN
YXAsIHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE5vZGUsIGVuZE9mZnNldCwKKyAgICAgICAg
ICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSwgc2VsZWN0aW9uLmFuY2hvck9mZnNldCwgc2Vs
ZWN0aW9uLmZvY3VzTm9kZSwgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0CisgICAgICAgICAgICApOwor
ICAgICAgICB9CisKKyAgICAgICAgdG9PYmplY3QoKSB7CisgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgIHN0YXJ0R1VJRDogdGhpcy5zdGFydEdVSUQsIHN0YXJ0T2Zmc2V0OiB0
aGlzLnN0YXJ0T2Zmc2V0LCBlbmRHVUlEOiB0aGlzLmVuZEdVSUQsIGVuZE9mZnNldDogdGhpcy5l
bmRPZmZzZXQsCisgICAgICAgICAgICAgICAgYW5jaG9yR1VJRDogdGhpcy5hbmNob3JHVUlELCBh
bmNob3JPZmZzZXQ6IHRoaXMuYW5jaG9yT2Zmc2V0LCBmb2N1c0dVSUQ6IHRoaXMuZm9jdXNHVUlE
LCBmb2N1c09mZnNldDogdGhpcy5mb2N1c09mZnNldAorICAgICAgICAgICAgfTsKKyAgICAgICAg
fQorCisgICAgICAgIHN0YXRpYyBmcm9tT2JqZWN0KGpzb24sIG5vZGVNYXApIHsKKyAgICAgICAg
ICAgIGlmICghanNvbikKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICAg
ICAgcmV0dXJuIG5ldyBTZWxlY3Rpb25TdGF0ZSgKKyAgICAgICAgICAgICAgICBub2RlTWFwLCBu
b2RlTWFwLm5vZGVGb3JHVUlEKGpzb24uc3RhcnRHVUlEKSwganNvbi5zdGFydE9mZnNldCwgbm9k
ZU1hcC5ub2RlRm9yR1VJRChqc29uLmVuZEdVSUQpLCBqc29uLmVuZE9mZnNldCwKKyAgICAgICAg
ICAgICAgICBub2RlTWFwLm5vZGVGb3JHVUlEKGpzb24uYW5jaG9yR1VJRCksIGpzb24uYW5jaG9y
T2Zmc2V0LCBub2RlTWFwLm5vZGVGb3JHVUlEKGpzb24uZm9jdXNHVUlEKSwganNvbi5mb2N1c09m
ZnNldAorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIERPTVVw
ZGF0ZSB7CisgICAgICAgIGNvbnN0cnVjdG9yKG5vZGVNYXApIHsKKyAgICAgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KG5vZGVNYXApOworICAgICAgICAgICAgdGhpcy5ub2RlTWFwID0gbm9kZU1hcDsK
KyAgICAgICAgfQorCisgICAgICAgIGFwcGx5KCkgeworICAgICAgICAgICAgdGhyb3cgIkV4cGVj
dGVkIHN1YmNsYXNzIGltcGxlbWVudGF0aW9uLiI7CisgICAgICAgIH0KKworICAgICAgICB1bmFw
cGx5KCkgeworICAgICAgICAgICAgdGhyb3cgIkV4cGVjdGVkIHN1YmNsYXNzIGltcGxlbWVudGF0
aW9uLiI7CisgICAgICAgIH0KKworICAgICAgICB0YXJnZXROb2RlKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMubm9kZU1hcC5ub2RlRm9yR1VJRCh0aGlzLnRhcmdldEdVSUQpOworICAgICAg
ICB9CisKKyAgICAgICAgZGV0YWlsc0VsZW1lbnQoKSB7CisgICAgICAgICAgICB0aHJvdyAiRXhw
ZWN0ZWQgc3ViY2xhc3MgaW1wbGVtZW50YXRpb24uIjsKKyAgICAgICAgfQorCisgICAgICAgIHN0
YXRpYyBvZlR5cGUodHlwZSkgeworICAgICAgICAgICAgaWYgKCFET01VcGRhdGUuX2FsbFR5cGVz
KQorICAgICAgICAgICAgICAgIERPTVVwZGF0ZS5fYWxsVHlwZXMgPSB7IENoaWxkTGlzdFVwZGF0
ZSwgQ2hhcmFjdGVyRGF0YVVwZGF0ZSwgQXR0cmlidXRlVXBkYXRlLCBJbnB1dEV2ZW50VXBkYXRl
LCBTZWxlY3Rpb25VcGRhdGUgfTsKKyAgICAgICAgICAgIHJldHVybiBET01VcGRhdGUuX2FsbFR5
cGVzW3R5cGVdOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGZyb21SZWNvcmRzKHJlY29y
ZHMsIG5vZGVNYXApIHsKKyAgICAgICAgICAgIGxldCB1cGRhdGVzID0gW10KKyAgICAgICAgICAg
ICAgICAsIGNoYXJhY3RlckRhdGFVcGRhdGVzID0gW10KKyAgICAgICAgICAgICAgICAsIGF0dHJp
YnV0ZVVwZGF0ZXMgPSBbXTsKKworICAgICAgICAgICAgZm9yIChsZXQgcmVjb3JkIG9mIHJlY29y
ZHMpIHsKKyAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gcmVjb3JkLnRhcmdldDsKKyAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHJlY29yZC50eXBlKSB7CisgICAgICAgICAgICAgICAgY2FzZSAi
Y2hhcmFjdGVyRGF0YSI6CisgICAgICAgICAgICAgICAgICAgIHZhciB1cGRhdGUgPSBuZXcgQ2hh
cmFjdGVyRGF0YVVwZGF0ZShub2RlTWFwLCBub2RlTWFwLmd1aWRGb3JOb2RlKHRhcmdldCksIHJl
Y29yZC5vbGRWYWx1ZSwgdGFyZ2V0LmRhdGEpCisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZXMu
cHVzaCh1cGRhdGUpOworICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJEYXRhVXBkYXRlcy5w
dXNoKHVwZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgImNoaWxkTGlzdCI6CisgICAgICAgICAgICAgICAgICAgIHZhciB1cGRhdGUgPSBuZXcg
Q2hpbGRMaXN0VXBkYXRlKG5vZGVNYXAsIG5vZGVNYXAuZ3VpZEZvck5vZGUodGFyZ2V0KSwgbm9k
ZU1hcC5ndWlkc0Zvck5vZGVzKHJlY29yZC5hZGRlZE5vZGVzKSwgbm9kZU1hcC5ndWlkc0Zvck5v
ZGVzKHJlY29yZC5yZW1vdmVkTm9kZXMpLCBub2RlTWFwLmd1aWRGb3JOb2RlKHJlY29yZC5uZXh0
U2libGluZykpCisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZXMucHVzaCh1cGRhdGUpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICJhdHRyaWJ1dGVz
IjoKKyAgICAgICAgICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IG5ldyBBdHRyaWJ1dGVVcGRhdGUo
bm9kZU1hcCwgbm9kZU1hcC5ndWlkRm9yTm9kZSh0YXJnZXQpLCByZWNvcmQuYXR0cmlidXRlTmFt
ZSwgcmVjb3JkLm9sZFZhbHVlLCB0YXJnZXQuZ2V0QXR0cmlidXRlKHJlY29yZC5hdHRyaWJ1dGVO
YW1lKSkKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlcy5wdXNoKHVwZGF0ZSk7CisgICAgICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZVVwZGF0ZXMucHVzaCh1cGRhdGUpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIEFkanVzdCBhbGwgY2hhcmFjdGVyIGRhdGEgdXBkYXRlcyBmb3IgdGhlIHNhbWUg
dGFyZ2V0LgorICAgICAgICAgICAgY2hhcmFjdGVyRGF0YVVwZGF0ZXMuZm9yRWFjaCgoY3VycmVu
dFVwZGF0ZSwgaW5kZXgpID0+IHsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hhcmFj
dGVyRGF0YVVwZGF0ZXMubGVuZ3RoIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgICAgICAgICAgZm9yIChsZXQgbmV4dFVwZGF0ZUluZGV4ID0gaW5kZXggKyAxOyBu
ZXh0VXBkYXRlSW5kZXggPCBjaGFyYWN0ZXJEYXRhVXBkYXRlcy5sZW5ndGg7IG5leHRVcGRhdGVJ
bmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0VXBkYXRlID0gY2hhcmFjdGVy
RGF0YVVwZGF0ZXNbbmV4dFVwZGF0ZUluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1
cnJlbnRVcGRhdGUudGFyZ2V0R1VJRCA9PT0gbmV4dFVwZGF0ZS50YXJnZXRHVUlEKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50VXBkYXRlLm5ld0RhdGEgPSBuZXh0VXBkYXRlLm9s
ZERhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAv
LyBBZGp1c3QgYWxsIGF0dHJpYnV0ZSB1cGRhdGVzIGZvciB0aGUgc2FtZSB0YXJnZXQgYW5kIGF0
dHJpYnV0ZSBuYW1lLgorICAgICAgICAgICAgYXR0cmlidXRlVXBkYXRlcy5mb3JFYWNoKChjdXJy
ZW50VXBkYXRlLCBpbmRleCkgPT4geworICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSBhdHRy
aWJ1dGVVcGRhdGVzLmxlbmd0aCAtIDEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICAgICAgICAgIGZvciAobGV0IG5leHRVcGRhdGVJbmRleCA9IGluZGV4ICsgMTsgbmV4
dFVwZGF0ZUluZGV4IDwgYXR0cmlidXRlVXBkYXRlcy5sZW5ndGg7IG5leHRVcGRhdGVJbmRleCsr
KSB7CisgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0VXBkYXRlID0gYXR0cmlidXRlVXBkYXRl
c1tuZXh0VXBkYXRlSW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFVwZGF0
ZS50YXJnZXRHVUlEID09PSBuZXh0VXBkYXRlLnRhcmdldEdVSUQgJiYgY3VycmVudFVwZGF0ZS5h
dHRyaWJ1dGUgPT09IG5leHRVcGRhdGUuYXR0cmlidXRlKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50VXBkYXRlLm5ld0RhdGEgPSBuZXh0VXBkYXRlLm9sZERhdGE7CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICByZXR1cm4gdXBkYXRlczsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIENoaWxkTGlzdFVwZGF0ZSBleHRlbmRzIERP
TVVwZGF0ZSB7CisgICAgICAgIGNvbnN0cnVjdG9yKG5vZGVNYXAsIHRhcmdldEdVSUQsIGFkZGVk
R1VJRHMsIHJlbW92ZWRHVUlEcywgbmV4dFNpYmxpbmdHVUlEKSB7CisgICAgICAgICAgICBzdXBl
cihub2RlTWFwKTsKKyAgICAgICAgICAgIHRoaXMudGFyZ2V0R1VJRCA9IHRhcmdldEdVSUQ7Cisg
ICAgICAgICAgICB0aGlzLmFkZGVkID0gYWRkZWRHVUlEczsKKyAgICAgICAgICAgIHRoaXMucmVt
b3ZlZCA9IHJlbW92ZWRHVUlEczsKKyAgICAgICAgICAgIHRoaXMubmV4dFNpYmxpbmdHVUlEID0g
bmV4dFNpYmxpbmdHVUlEID09IHVuZGVmaW5lZCA/IG51bGwgOiBuZXh0U2libGluZ0dVSUQ7Cisg
ICAgICAgICAgICBjb25zb2xlLmFzc2VydChub2RlTWFwLm5vZGVGb3JHVUlEKHRhcmdldEdVSUQp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGFwcGx5KCkgeworICAgICAgICAgICAgZm9yIChsZXQg
cmVtb3ZlZE5vZGUgb2YgdGhpcy5fcmVtb3ZlZE5vZGVzKCkpCisgICAgICAgICAgICAgICAgcmVt
b3ZlZE5vZGUucmVtb3ZlKCk7CisKKyAgICAgICAgICAgIGxldCB0YXJnZXQgPSB0aGlzLnRhcmdl
dE5vZGUoKTsKKyAgICAgICAgICAgIGZvciAobGV0IGFkZGVkTm9kZSBvZiB0aGlzLl9hZGRlZE5v
ZGVzKCkpCisgICAgICAgICAgICAgICAgdGFyZ2V0Lmluc2VydEJlZm9yZShhZGRlZE5vZGUsIHRo
aXMuX25leHRTaWJsaW5nKCkpOworICAgICAgICB9CisKKyAgICAgICAgdW5hcHBseSgpIHsKKyAg
ICAgICAgICAgIGZvciAobGV0IGFkZGVkTm9kZSBvZiB0aGlzLl9hZGRlZE5vZGVzKCkpCisgICAg
ICAgICAgICAgICAgYWRkZWROb2RlLnJlbW92ZSgpOworCisgICAgICAgICAgICBsZXQgdGFyZ2V0
ID0gdGhpcy50YXJnZXROb2RlKCk7CisgICAgICAgICAgICBmb3IgKGxldCByZW1vdmVkTm9kZSBv
ZiB0aGlzLl9yZW1vdmVkTm9kZXMoKSkKKyAgICAgICAgICAgICAgICB0YXJnZXQuaW5zZXJ0QmVm
b3JlKHJlbW92ZWROb2RlLCB0aGlzLl9uZXh0U2libGluZygpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIF9uZXh0U2libGluZygpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLm5leHRTaWJsaW5nR1VJ
RCA9PSBudWxsKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgcmV0
dXJuIHRoaXMubm9kZU1hcC5ub2RlRm9yR1VJRCh0aGlzLm5leHRTaWJsaW5nR1VJRCk7CisgICAg
ICAgIH0KKworICAgICAgICBfcmVtb3ZlZE5vZGVzKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMubm9kZU1hcC5ub2Rlc0ZvckdVSURzKHRoaXMucmVtb3ZlZCk7CisgICAgICAgIH0KKworICAg
ICAgICBfYWRkZWROb2RlcygpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm5vZGVNYXAubm9k
ZXNGb3JHVUlEcyh0aGlzLmFkZGVkKTsKKyAgICAgICAgfQorCisgICAgICAgIHRvT2JqZWN0KCkg
eworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiAiQ2hpbGRMaXN0
VXBkYXRlIiwKKyAgICAgICAgICAgICAgICB0YXJnZXRHVUlEOiB0aGlzLnRhcmdldEdVSUQsCisg
ICAgICAgICAgICAgICAgYWRkZWRHVUlEczogdGhpcy5hZGRlZCwKKyAgICAgICAgICAgICAgICBy
ZW1vdmVkR1VJRHM6IHRoaXMucmVtb3ZlZCwKKyAgICAgICAgICAgICAgICBuZXh0U2libGluZ0dV
SUQ6IHRoaXMubmV4dFNpYmxpbmdHVUlECisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAg
ICAgICAgZGV0YWlsc0VsZW1lbnQoKSB7CisgICAgICAgICAgICBsZXQgbmV4dFNpYmxpbmcgPSB0
aGlzLl9uZXh0U2libGluZygpOworICAgICAgICAgICAgbGV0IGh0bWwgPQorICAgICAgICAgICAg
YDxkZXRhaWxzPgorICAgICAgICAgICAgICAgIDxzdW1tYXJ5PmNoaWxkIGxpc3QgY2hhbmdlZDwv
c3VtbWFyeT4KKyAgICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgICAgIDxsaT5w
YXJlbnQ6ICR7dGhpcy5ub2RlTWFwLmRlc2NyaXB0aW9uSFRNTEZvckdVSUQodGhpcy50YXJnZXRH
VUlEKX08L2xpPgorICAgICAgICAgICAgICAgICAgICA8bGk+YWRkZWQ6IFsgJHtbdGhpcy5fYWRk
ZWROb2RlcygpLm1hcChub2RlID0+IHRoaXMubm9kZU1hcC5kZXNjcmlwdGlvbkhUTUxGb3JOb2Rl
KG5vZGUpKV19IF08L2xpPgorICAgICAgICAgICAgICAgICAgICA8bGk+cmVtb3ZlZDogWyAke1t0
aGlzLl9yZW1vdmVkTm9kZXMoKS5tYXAobm9kZSA9PiB0aGlzLm5vZGVNYXAuZGVzY3JpcHRpb25I
VE1MRm9yTm9kZShub2RlKSldfSBdPC9saT4KKyAgICAgICAgICAgICAgICAgICAgPGxpPmJlZm9y
ZSBzaWJsaW5nOiAke25leHRTaWJsaW5nID8gdGhpcy5ub2RlTWFwLmRlc2NyaXB0aW9uSFRNTEZv
ck5vZGUobmV4dFNpYmxpbmcpIDogIihudWxsKSJ9PC9saT4KKyAgICAgICAgICAgICAgICA8L3Vs
PgorICAgICAgICAgICAgPC9kZXRhaWxzPmA7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudEZy
b21NYXJrZG93bihodG1sKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBmcm9tT2JqZWN0
KGpzb24sIG5vZGVNYXApIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2hpbGRMaXN0VXBkYXRl
KG5vZGVNYXAsIGpzb24udGFyZ2V0R1VJRCwganNvbi5hZGRlZEdVSURzLCBqc29uLnJlbW92ZWRH
VUlEcywganNvbi5uZXh0U2libGluZ0dVSUQpOworICAgICAgICB9CisgICAgfQorCisgICAgY2xh
c3MgQ2hhcmFjdGVyRGF0YVVwZGF0ZSBleHRlbmRzIERPTVVwZGF0ZSB7CisgICAgICAgIGNvbnN0
cnVjdG9yKG5vZGVNYXAsIHRhcmdldEdVSUQsIG9sZERhdGEsIG5ld0RhdGEpIHsKKyAgICAgICAg
ICAgIHN1cGVyKG5vZGVNYXApOworICAgICAgICAgICAgdGhpcy50YXJnZXRHVUlEID0gdGFyZ2V0
R1VJRDsKKyAgICAgICAgICAgIHRoaXMub2xkRGF0YSA9IG9sZERhdGE7CisgICAgICAgICAgICB0
aGlzLm5ld0RhdGEgPSBuZXdEYXRhOworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQobm9kZU1h
cC5ub2RlRm9yR1VJRCh0YXJnZXRHVUlEKSk7CisgICAgICAgIH0KKworICAgICAgICBhcHBseSgp
IHsKKyAgICAgICAgICAgIHRoaXMudGFyZ2V0Tm9kZSgpLmRhdGEgPSB0aGlzLm5ld0RhdGE7Cisg
ICAgICAgIH0KKworICAgICAgICB1bmFwcGx5KCkgeworICAgICAgICAgICAgdGhpcy50YXJnZXRO
b2RlKCkuZGF0YSA9IHRoaXMub2xkRGF0YTsKKyAgICAgICAgfQorCisgICAgICAgIGRldGFpbHNF
bGVtZW50KCkgeworICAgICAgICAgICAgbGV0IGh0bWwgPQorICAgICAgICAgICAgYDxkZXRhaWxz
PgorICAgICAgICAgICAgICAgIDxzdW1tYXJ5PmNoYXJhY3RlciBkYXRhIGNoYW5nZWQ8L3N1bW1h
cnk+CisgICAgICAgICAgICAgICAgPHVsPgorICAgICAgICAgICAgICAgICAgICA8bGk+b2xkOiAk
e3RoaXMub2xkRGF0YSAhPSBudWxsID8gIiciICsgdGhpcy5vbGREYXRhICsgIiciIDogIihudWxs
KSJ9PC9saT4KKyAgICAgICAgICAgICAgICAgICAgPGxpPm5ldzogJHt0aGlzLm5ld0RhdGEgIT0g
bnVsbCA/ICInIiArIHRoaXMubmV3RGF0YSArICInIiA6ICIobnVsbCkifTwvbGk+CisgICAgICAg
ICAgICAgICAgPC91bD4KKyAgICAgICAgICAgIDwvZGV0YWlscz5gOworICAgICAgICAgICAgcmV0
dXJuIGVsZW1lbnRGcm9tTWFya2Rvd24oaHRtbCk7CisgICAgICAgIH0KKworICAgICAgICB0b09i
amVjdCgpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogIkNo
YXJhY3RlckRhdGFVcGRhdGUiLAorICAgICAgICAgICAgICAgIHRhcmdldEdVSUQ6IHRoaXMudGFy
Z2V0R1VJRCwKKyAgICAgICAgICAgICAgICBvbGREYXRhOiBPYmZ1c2NhdG9yLnNoYXJlZCgpLmFw
cGx5VG9UZXh0KHRoaXMub2xkRGF0YSksCisgICAgICAgICAgICAgICAgbmV3RGF0YTogT2JmdXNj
YXRvci5zaGFyZWQoKS5hcHBseVRvVGV4dCh0aGlzLm5ld0RhdGEpCisgICAgICAgICAgICB9Owor
ICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGZyb21PYmplY3QoanNvbiwgbm9kZU1hcCkgewor
ICAgICAgICAgICAgcmV0dXJuIG5ldyBDaGFyYWN0ZXJEYXRhVXBkYXRlKG5vZGVNYXAsIGpzb24u
dGFyZ2V0R1VJRCwganNvbi5vbGREYXRhLCBqc29uLm5ld0RhdGEpOworICAgICAgICB9CisgICAg
fQorCisgICAgY2xhc3MgQXR0cmlidXRlVXBkYXRlIGV4dGVuZHMgRE9NVXBkYXRlIHsKKyAgICAg
ICAgY29uc3RydWN0b3Iobm9kZU1hcCwgdGFyZ2V0R1VJRCwgYXR0cmlidXRlLCBvbGRWYWx1ZSwg
bmV3VmFsdWUpIHsKKyAgICAgICAgICAgIHN1cGVyKG5vZGVNYXApOworICAgICAgICAgICAgdGhp
cy50YXJnZXRHVUlEID0gdGFyZ2V0R1VJRDsKKyAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlID0g
YXR0cmlidXRlOworICAgICAgICAgICAgdGhpcy5vbGRWYWx1ZSA9IG9sZFZhbHVlOworICAgICAg
ICAgICAgdGhpcy5uZXdWYWx1ZSA9IG5ld1ZhbHVlOworICAgICAgICAgICAgY29uc29sZS5hc3Nl
cnQobm9kZU1hcC5ub2RlRm9yR1VJRCh0YXJnZXRHVUlEKSk7CisgICAgICAgIH0KKworICAgICAg
ICBhcHBseSgpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLm5ld1ZhbHVlID09IG51bGwpCisgICAg
ICAgICAgICAgICAgdGhpcy50YXJnZXROb2RlKCkucmVtb3ZlQXR0cmlidXRlKHRoaXMuYXR0cmli
dXRlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aGlzLnRhcmdldE5vZGUo
KS5zZXRBdHRyaWJ1dGUodGhpcy5hdHRyaWJ1dGUsIHRoaXMubmV3VmFsdWUpOworICAgICAgICB9
CisKKyAgICAgICAgdW5hcHBseSgpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLm9sZFZhbHVlID09
IG51bGwpCisgICAgICAgICAgICAgICAgdGhpcy50YXJnZXROb2RlKCkucmVtb3ZlQXR0cmlidXRl
KHRoaXMuYXR0cmlidXRlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aGlz
LnRhcmdldE5vZGUoKS5zZXRBdHRyaWJ1dGUodGhpcy5hdHRyaWJ1dGUsIHRoaXMub2xkVmFsdWUp
OworICAgICAgICB9CisKKyAgICAgICAgZGV0YWlsc0VsZW1lbnQoKSB7CisgICAgICAgICAgICBs
ZXQgaHRtbCA9CisgICAgICAgICAgICBgPGRldGFpbHM+CisgICAgICAgICAgICAgICAgPHN1bW1h
cnk+YXR0cmlidXRlIGNoYW5nZWQ8L3N1bW1hcnk+CisgICAgICAgICAgICAgICAgPHVsPgorICAg
ICAgICAgICAgICAgICAgICA8bGk+dGFyZ2V0OiAke3RoaXMubm9kZU1hcC5kZXNjcmlwdGlvbkhU
TUxGb3JHVUlEKHRoaXMudGFyZ2V0R1VJRCl9PC9saT4KKyAgICAgICAgICAgICAgICAgICAgPGxp
PmF0dHJpYnV0ZTogJHt0aGlzLmF0dHJpYnV0ZX08L2xpPgorICAgICAgICAgICAgICAgICAgICA8
bGk+b2xkOiAke3RoaXMub2xkVmFsdWUgIT0gbnVsbCA/ICInIiArIHRoaXMub2xkVmFsdWUgKyAi
JyIgOiAiKG51bGwpIn08L2xpPgorICAgICAgICAgICAgICAgICAgICA8bGk+bmV3OiAke3RoaXMu
bmV3VmFsdWUgIT0gbnVsbCA/ICInIiArIHRoaXMubmV3VmFsdWUgKyAiJyIgOiAiKG51bGwpIn08
L2xpPgorICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8L2RldGFpbHM+YDsKKyAg
ICAgICAgICAgIHJldHVybiBlbGVtZW50RnJvbU1hcmtkb3duKGh0bWwpOworICAgICAgICB9CisK
KyAgICAgICAgdG9PYmplY3QoKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgIHR5cGU6ICJBdHRyaWJ1dGVVcGRhdGUiLAorICAgICAgICAgICAgICAgIHRhcmdldEdVSUQ6
IHRoaXMudGFyZ2V0R1VJRCwKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGU6IHRoaXMuYXR0cmli
dXRlLAorICAgICAgICAgICAgICAgIG9sZFZhbHVlOiB0aGlzLm9sZFZhbHVlLAorICAgICAgICAg
ICAgICAgIG5ld1ZhbHVlOiB0aGlzLm5ld1ZhbHVlCisgICAgICAgICAgICB9OworICAgICAgICB9
CisKKyAgICAgICAgc3RhdGljIGZyb21PYmplY3QoanNvbiwgbm9kZU1hcCkgeworICAgICAgICAg
ICAgcmV0dXJuIG5ldyBBdHRyaWJ1dGVVcGRhdGUobm9kZU1hcCwganNvbi50YXJnZXRHVUlELCBq
c29uLmF0dHJpYnV0ZSwganNvbi5vbGRWYWx1ZSwganNvbi5uZXdWYWx1ZSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBjbGFzcyBTZWxlY3Rpb25VcGRhdGUgZXh0ZW5kcyBET01VcGRhdGUgewor
ICAgICAgICBjb25zdHJ1Y3Rvcihub2RlTWFwLCBzdGF0ZSkgeworICAgICAgICAgICAgc3VwZXIo
bm9kZU1hcCk7CisgICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBTZWxlY3Rpb25VcGRhdGVzIGFyZSBub3QgYXBwbGllZC91bmFwcGxpZWQgYnkg
dGhlIG5vcm1hbCBtZWFucy4gVGhlIHNlbGVjdGlvbiBpcyBhcHBsaWVkIHZpYQorICAgICAgICAv
LyBET01VcGRhdGVIaXN0b3J5Q29udGV4dC5hcHBseUN1cnJlbnRTZWxlY3Rpb25TdGF0ZSBpbnN0
ZWFkLCB3aGljaCBjb25zaWRlcnMgdGhlIHVwZGF0ZXMgYmVmb3JlIGFuZCBhZnRlciB0aGUKKyAg
ICAgICAgLy8gY3VycmVudCB1cGRhdGUgaW5kZXguCisgICAgICAgIGFwcGx5KCkgeyB9CisgICAg
ICAgIHVuYXBwbHkoKSB7IH0KKworICAgICAgICB0b09iamVjdCgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogIlNlbGVjdGlvblVwZGF0ZSIsCisgICAgICAg
ICAgICAgICAgc3RhdGU6IHRoaXMuc3RhdGUgPyB0aGlzLnN0YXRlLnRvT2JqZWN0KCkgOiBudWxs
CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGZyb21PYmplY3Qo
anNvbiwgbm9kZU1hcCkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3Rpb25VcGRhdGUo
bm9kZU1hcCwgU2VsZWN0aW9uU3RhdGUuZnJvbU9iamVjdChqc29uLnN0YXRlLCBub2RlTWFwKSk7
CisgICAgICAgIH0KKworICAgICAgICBfcmFuZ2VEZXNjcmlwdGlvbkhUTUwoKSB7CisgICAgICAg
ICAgICByZXR1cm4gYCgke3RoaXMubm9kZU1hcC5kZXNjcmlwdGlvbkhUTUxGb3JHVUlEKHRoaXMu
c3RhdGUuc3RhcnRHVUlEKX06JHt0aGlzLnN0YXRlLnN0YXJ0T2Zmc2V0fSwKKyAgICAgICAgICAg
ICAgICAke3RoaXMubm9kZU1hcC5kZXNjcmlwdGlvbkhUTUxGb3JHVUlEKHRoaXMuc3RhdGUuZW5k
R1VJRCl9OiR7dGhpcy5zdGF0ZS5lbmRPZmZzZXR9KWA7CisgICAgICAgIH0KKworICAgICAgICBf
YW5jaG9yRGVzY3JpcHRpb25IVE1MKCkgeworICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMubm9k
ZU1hcC5kZXNjcmlwdGlvbkhUTUxGb3JHVUlEKHRoaXMuc3RhdGUuYW5jaG9yR1VJRCl9OiR7dGhp
cy5zdGF0ZS5hbmNob3JPZmZzZXR9YDsKKyAgICAgICAgfQorCisgICAgICAgIF9mb2N1c0Rlc2Ny
aXB0aW9uSFRNTCgpIHsKKyAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLm5vZGVNYXAuZGVzY3Jp
cHRpb25IVE1MRm9yR1VJRCh0aGlzLnN0YXRlLmZvY3VzR1VJRCl9OiR7dGhpcy5zdGF0ZS5mb2N1
c09mZnNldH1gOworICAgICAgICB9CisKKyAgICAgICAgZGV0YWlsc0VsZW1lbnQoKSB7CisgICAg
ICAgICAgICBsZXQgaHRtbCA9CisgICAgICAgICAgICBgPGRldGFpbHM+CisgICAgICAgICAgICAg
ICAgPHN1bW1hcnk+U2VsZWN0aW9uIGNoYW5nZWQ8L3N1bW1hcnk+CisgICAgICAgICAgICAgICAg
PHVsPgorICAgICAgICAgICAgICAgICAgICA8bGk+cmFuZ2U6ICR7dGhpcy5fcmFuZ2VEZXNjcmlw
dGlvbkhUTUwoKX08L2xpPgorICAgICAgICAgICAgICAgICAgICA8bGk+YW5jaG9yOiAke3RoaXMu
X2FuY2hvckRlc2NyaXB0aW9uSFRNTCgpfTwvbGk+CisgICAgICAgICAgICAgICAgICAgIDxsaT5m
b2N1czogJHt0aGlzLl9mb2N1c0Rlc2NyaXB0aW9uSFRNTCgpfTwvbGk+CisgICAgICAgICAgICAg
ICAgPC91bD4KKyAgICAgICAgICAgIDwvZGV0YWlscz5gOworICAgICAgICAgICAgcmV0dXJuIGVs
ZW1lbnRGcm9tTWFya2Rvd24oaHRtbCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBJ
bnB1dEV2ZW50VXBkYXRlIGV4dGVuZHMgRE9NVXBkYXRlIHsKKyAgICAgICAgY29uc3RydWN0b3Io
bm9kZU1hcCwgdXBkYXRlcywgaW5wdXRUeXBlLCBkYXRhLCB0aW1lU3RhbXApIHsKKyAgICAgICAg
ICAgIHN1cGVyKG5vZGVNYXApOworICAgICAgICAgICAgdGhpcy51cGRhdGVzID0gdXBkYXRlczsK
KyAgICAgICAgICAgIHRoaXMuaW5wdXRUeXBlID0gaW5wdXRUeXBlOworICAgICAgICAgICAgdGhp
cy5kYXRhID0gZGF0YTsKKyAgICAgICAgICAgIHRoaXMudGltZVN0YW1wID0gdGltZVN0YW1wOwor
ICAgICAgICB9CisKKyAgICAgICAgX29iZnVzY2F0ZWREYXRhKCkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuaW5wdXRUeXBlLmluZGV4T2YoImluc2VydCIpID09IDAgPyBPYmZ1c2NhdG9yLnNo
YXJlZCgpLmFwcGx5VG9UZXh0KHRoaXMuZGF0YSkgOiB0aGlzLmRhdGE7CisgICAgICAgIH0KKwor
ICAgICAgICBhcHBseSgpIHsKKyAgICAgICAgICAgIGZvciAobGV0IHVwZGF0ZSBvZiB0aGlzLnVw
ZGF0ZXMpCisgICAgICAgICAgICAgICAgdXBkYXRlLmFwcGx5KCk7CisgICAgICAgIH0KKworICAg
ICAgICB1bmFwcGx5KCkgeworICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSB0aGlzLnVwZGF0
ZXMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkKKyAgICAgICAgICAgICAgICB0aGlz
LnVwZGF0ZXNbaW5kZXhdLnVuYXBwbHkoKTsKKyAgICAgICAgfQorCisgICAgICAgIHRvT2JqZWN0
KCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiAiSW5wdXRF
dmVudFVwZGF0ZSIsCisgICAgICAgICAgICAgICAgaW5wdXRUeXBlOiB0aGlzLmlucHV0VHlwZSwK
KyAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLl9vYmZ1c2NhdGVkRGF0YSgpLAorICAgICAgICAg
ICAgICAgIHRpbWVTdGFtcDogdGhpcy50aW1lU3RhbXAsCisgICAgICAgICAgICAgICAgdXBkYXRl
czogdGhpcy51cGRhdGVzLm1hcCh1cGRhdGUgPT4gdXBkYXRlLnRvT2JqZWN0KCkpCisgICAgICAg
ICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGZyb21PYmplY3QoanNvbiwgbm9k
ZU1hcCkgeworICAgICAgICAgICAgbGV0IHVwZGF0ZXMgPSBqc29uLnVwZGF0ZXMubWFwKHVwZGF0
ZSA9PiBET01VcGRhdGUub2ZUeXBlKHVwZGF0ZS50eXBlKS5mcm9tT2JqZWN0KHVwZGF0ZSwgbm9k
ZU1hcCkpOworICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnB1dEV2ZW50VXBkYXRlKG5vZGVNYXAs
IHVwZGF0ZXMsIGpzb24uaW5wdXRUeXBlLCBqc29uLmRhdGEsIGpzb24udGltZVN0YW1wKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGRldGFpbHNFbGVtZW50KCkgeworICAgICAgICAgICAgbGV0IGh0
bWwgPQorICAgICAgICAgICAgYDxkZXRhaWxzPgorICAgICAgICAgICAgICAgIDxzdW1tYXJ5Pklu
cHV0ICgke3RoaXMuaW5wdXRUeXBlfSk8L3N1bW1hcnk+CisgICAgICAgICAgICAgICAgPHVsPgor
ICAgICAgICAgICAgICAgICAgICA8bGk+dGltZTogJHt0aGlzLnRpbWVTdGFtcH08L2xpPgorICAg
ICAgICAgICAgICAgICAgICA8bGk+ZGF0YTogJHshdGhpcy5kYXRhID8gIihudWxsKSIgOiAiJyIg
KyB0aGlzLmRhdGEgKyAiJyJ9PC9saT4KKyAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAg
ICAgPC9kZXRhaWxzPmA7CisgICAgICAgICAgICBsZXQgdG9wTGV2ZWxEZXRhaWxzID0gZWxlbWVu
dEZyb21NYXJrZG93bihodG1sKTsKKyAgICAgICAgICAgIGZvciAobGV0IHVwZGF0ZSBvZiB0aGlz
LnVwZGF0ZXMpCisgICAgICAgICAgICAgICAgdG9wTGV2ZWxEZXRhaWxzLmNoaWxkcmVuW3RvcExl
dmVsRGV0YWlscy5jaGlsZEVsZW1lbnRDb3VudCAtIDFdLmFwcGVuZENoaWxkKHVwZGF0ZS5kZXRh
aWxzRWxlbWVudCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0b3BMZXZlbERldGFpbHM7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB3aW5kb3cuRWRpdGluZ0hpc3RvcnkgPSB7CisgICAgICAgIEds
b2JhbE5vZGVNYXAsCisgICAgICAgIFNlbGVjdGlvblN0YXRlLAorICAgICAgICBET01VcGRhdGUs
CisgICAgICAgIENoaWxkTGlzdFVwZGF0ZSwKKyAgICAgICAgQ2hhcmFjdGVyRGF0YVVwZGF0ZSwK
KyAgICAgICAgQXR0cmlidXRlVXBkYXRlLAorICAgICAgICBTZWxlY3Rpb25VcGRhdGUsCisgICAg
ICAgIElucHV0RXZlbnRVcGRhdGUsCisgICAgICAgIE9iZnVzY2F0b3IKKyAgICB9OworfSkoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCA0YmJjZTczNjU5Njk1MjY1MTI4ZDFjYWExYTE5YjAwNGQ1MWZjMzVjLi5iYWE1ZjJhZDgz
OTRiMDZjZmIwYTQwNGRjMjYxNGQzMmVmYmRhYTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMjYxLDYgKzIyNjEsOCBAQAog
CQk1MUM4MUI4QTBDNDQyMkY3MDAxOUVDRTMgLyogRlRQRGlyZWN0b3J5UGFyc2VyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUM4MUI4ODBDNDQyMkY3
MDAxOUVDRTMgLyogRlRQRGlyZWN0b3J5UGFyc2VyLmggKi87IH07CiAJCTUxQ0JGQzk5MEQxMEU0
ODMwMDJEQkY1MSAvKiBDYWNoZWRGcmFtZVBsYXRmb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFDQkZDOTgwRDEwRTQ4MzAwMkRCRjUxIC8q
IENhY2hlZEZyYW1lUGxhdGZvcm1EYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFEMEM1MTYwREFBOTBCNzAwM0IzODMxIC8qIEpTU3RvcmFn
ZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MUQwQzUxNTBEQUE5MEI3MDAzQjM4MzEgLyogSlNTdG9yYWdlQ3VzdG9tLmNwcCAqLzsgfTsK
KwkJNTFEMzk0NzgxREYyNDkyMjAwQUJFODc1IC8qIER1bXBFZGl0aW5nSGlzdG9yeS5qcyBpbiBD
b3B5IEludGVybmFsIFNjcmlwdHMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTFEMzk0NzQxREYyNDU0MDAwQUJFODc1IC8qIER1bXBFZGl0aW5nSGlzdG9yeS5qcyAqLzsgfTsK
KwkJNTFEMzk0NzkxREYyNDkyMjAwQUJFODc1IC8qIEVkaXRpbmdIaXN0b3J5VXRpbC5qcyBpbiBD
b3B5IEludGVybmFsIFNjcmlwdHMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTFEMzk0NzUxREYyNDU0MDAwQUJFODc1IC8qIEVkaXRpbmdIaXN0b3J5VXRpbC5qcyAqLzsgfTsK
IAkJNTFENzIzNkMxQkI2MTc0OTAwNDc4Q0EzIC8qIElEQlJlc3VsdERhdGEuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzIzNkExQkI2MEJGRTAw
NDc4Q0EzIC8qIElEQlJlc3VsdERhdGEuY3BwICovOyB9OwogCQk1MUQ3MjM2RDFCQjYxNzQ5MDA0
NzhDQTMgLyogSURCUmVzdWx0RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFENzIzNkIxQkI2MEJGRTAwNDc4Q0EzIC8qIElEQlJlc3VsdERhdGEu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MUQ3
RUZFQTFCREU4RjhDMDBFOTNFMTAgLyogVGhyZWFkU2FmZURhdGFCdWZmZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUZBRUE5MUJEQzk4OUEwMEI0
QUZFNCAvKiBUaHJlYWRTYWZlRGF0YUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02OTYxLDYgKzY5NjMsMTggQEAKIAkJCW5hbWUgPSAi
Q29weSBTY3JpcHRzIjsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OworCQk1MUQzOTQ3NzFERjI0ODY3MDBBQkU4NzUgLyogQ29weSBJbnRlcm5hbCBTY3Jp
cHRzICovID0geworCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0
aW9uTWFzayA9IDg7CisJCQlkc3RQYXRoID0gIiQoQVBQTEVfSU5URVJOQUxfTElCUkFSWV9ESVIp
L1dlYktpdC9JbnRlcm5hbFNjcmlwdHMiOworCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDA7CisJCQlm
aWxlcyA9ICgKKwkJCQk1MUQzOTQ3ODFERjI0OTIyMDBBQkU4NzUgLyogRHVtcEVkaXRpbmdIaXN0
b3J5LmpzIGluIENvcHkgSW50ZXJuYWwgU2NyaXB0cyAqLywKKwkJCQk1MUQzOTQ3OTFERjI0OTIy
MDBBQkU4NzUgLyogRWRpdGluZ0hpc3RvcnlVdGlsLmpzIGluIENvcHkgSW50ZXJuYWwgU2NyaXB0
cyAqLywKKwkJCSk7CisJCQluYW1lID0gIkNvcHkgSW50ZXJuYWwgU2NyaXB0cyI7CisJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMTsKKwkJfTsKIAkJQ0QwREJGMDAxNDIy
NzY1NzAwMjgwMjYzIC8qIENvcHkgQXVkaW8gUmVzb3VyY2VzICovID0gewogCQkJaXNhID0gUEJY
Q29weUZpbGVzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBA
IC05NDcxLDYgKzk0ODUsOCBAQAogCQk1MUM4MUI4ODBDNDQyMkY3MDAxOUVDRTMgLyogRlRQRGly
ZWN0b3J5UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGVFBEaXJl
Y3RvcnlQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFDQkZDOTgwRDEw
RTQ4MzAwMkRCRjUxIC8qIENhY2hlZEZyYW1lUGxhdGZvcm1EYXRhLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZEZyYW1lUGxhdGZvcm1EYXRhLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxRDBDNTE1MERBQTkwQjcwMDNCMzgzMSAvKiBKU1N0b3JhZ2VD
dXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTdG9yYWdl
Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFEMzk0NzQxREYyNDU0
MDAwQUJFODc1IC8qIER1bXBFZGl0aW5nSGlzdG9yeS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
amF2YXNjcmlwdDsgbmFtZSA9IER1bXBFZGl0aW5nSGlzdG9yeS5qczsgcGF0aCA9IEludGVybmFs
U2NyaXB0cy9EdW1wRWRpdGluZ0hpc3RvcnkuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUxRDM5NDc1MURGMjQ1NDAwMEFCRTg3NSAvKiBFZGl0aW5nSGlzdG9yeVV0aWwuanMgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IG5hbWUgPSBFZGl0aW5nSGlzdG9yeVV0aWwu
anM7IHBhdGggPSBJbnRlcm5hbFNjcmlwdHMvRWRpdGluZ0hpc3RvcnlVdGlsLmpzOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MUQ3MTk2QzE4MTEwNkRGMDAxNkRDNTEgLyogRE9NV2lu
ZG93SW5kZXhlZERhdGFiYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxRDcxOTZEMTgxMTA2REYwMDE2REM1MSAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJh
c2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NV2luZG93SW5kZXhlZERh
dGFiYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRDcxOTZFMTgxMTA2REYw
MDE2REM1MSAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xNTQyOCw2ICsxNTQ0NCw3IEBACiAJCQkJMkU0MzQ2MzEwRjU0NkE2ODAwQjBG
MUJBIC8qIHdvcmtlcnMgKi8sCiAJCQkJRTFGMDQyNDMwOTgzOTM4OTAwNjY5NEVBIC8qIHhtbCAq
LywKIAkJCQk2NTY1ODBFQzA5RDEyQjIwMDAwRTYxRDcgLyogRGVyaXZlZCBTb3VyY2VzICovLAor
CQkJCTUxRDM5NDczMURGMjQ0QkEwMEFCRTg3NSAvKiBJbnRlcm5hbFNjcmlwdHMgKi8sCiAJCQkJ
MDg5QzE2NjVGRTg0MTE1OEMwMkFBQzA3IC8qIFJlc291cmNlcyAqLywKIAkJCQkzNzE3RDdFNDE3
RUNDMzZDMDAzQzI3NkQgLyogU2NyaXB0cyAqLywKIAkJCQkwODY3RDY5QUZFODQwMjhGQzAyQUFD
MDcgLyogRnJhbWV3b3JrcyAqLywKQEAgLTE3MzIxLDYgKzE3MzM4LDE1IEBACiAJCQlwYXRoID0g
bWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNTFEMzk0NzMxREYyNDRC
QTAwQUJFODc1IC8qIEludGVybmFsU2NyaXB0cyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOwor
CQkJY2hpbGRyZW4gPSAoCisJCQkJNTFEMzk0NzQxREYyNDU0MDAwQUJFODc1IC8qIER1bXBFZGl0
aW5nSGlzdG9yeS5qcyAqLywKKwkJCQk1MUQzOTQ3NTFERjI0NTQwMDBBQkU4NzUgLyogRWRpdGlu
Z0hpc3RvcnlVdGlsLmpzICovLAorCQkJKTsKKwkJCW5hbWUgPSBJbnRlcm5hbFNjcmlwdHM7CisJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1OUI1OTc3MTExMDg2NTU2MDA3MTU5
RTggLyoganNjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAg
LTI4NDMxLDYgKzI4NDU3LDcgQEAKIAkJCQkzN0ExRUFBMzE0MjY5OUJDMDA4N0Y0MjUgLyogQ2hl
Y2sgRm9yIEluYXBwcm9wcmlhdGUgT2JqZWN0aXZlLUMgQ2xhc3MgTmFtZXMgKi8sCiAJCQkJNURG
NTA4ODcxMTZGMzA3NzAwNTIwMkFCIC8qIENoZWNrIEZvciBJbmFwcHJvcHJpYXRlIEZpbGVzIElu
IEZyYW1ld29yayAqLywKIAkJCQk3MUQ2QUEzODFEQTRFNjk0MDBCMjM5NjkgLyogQ29weSBtb2Rl
cm4gbWVkaWEgY29udHJvbHMgY29kZSBhbmQgYXNzZXRzICovLAorCQkJCTUxRDM5NDc3MURGMjQ4
NjcwMEFCRTg3NSAvKiBDb3B5IGludGVybmFsIHNjcmlwdHMgKi8sCiAJCQkpOwogCQkJYnVpbGRS
dWxlcyA9ICgKIAkJCSk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFu
Z2VMb2cKaW5kZXggZWU5Mzc0MGYwNjY4NjYzZjg0OTc5YWIzNDcwZmNiYmJkNWU5Mjg5NS4uMDk5
NDRhMjY3NjQzMmE1ODdmMDkwZWU2NWMxYzVkZDkxMWM5Zjc1MiAxMDA2NDQKLS0tIGEvVG9vbHMv
Q2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDE2LTEy
LTA2ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIEFk
ZCBhIG5ldyBwcm9qZWN0IGZvciByZWNvcmRpbmcgYW5kIHBsYXlpbmcgYmFjayBlZGl0aW5nIGNv
bW1hbmRzIGluIGVkaXRhYmxlIHdlYiBjb250ZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUxMTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI5
NDA4MTM1PgorCisgICAgICAgIFJldmlld2VkIGJ5IEJldGggRGFraW4uCisKKyAgICAgICAgQWRk
cyBhIG5ldyBYY29kZSBwcm9qZWN0IGNvbnRhaW5pbmcgd29yayB0b3dhcmRzIHJld2luZGluZyBh
bmQgcGxheWluZyBiYWNrIGVkaXRpbmcgY29tbWFuZHMuIFRoaXMgd29yayBpcworICAgICAgICB3
cmFwcGVkIGluIGFuIFhjb2RlIHByb2plY3QgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIFhDVGVz
dCBmcmFtZXdvcmsuIFRvIG1hbnVhbGx5IHRlc3QgcmVjb3JkaW5nLCBvcGVuIHRoZQorICAgICAg
ICBjYXB0dXJlIHRlc3QgaGFybmVzcywgZWRpdCB0aGUgY29udGVudGVkaXRhYmxlIGJvZHksIGFu
ZCB0aGVuIGhpdCBjbWQtUy4gVGhpcyBkb3dubG9hZHMgYSAuanNvbiBmaWxlIHdoaWNoIG1heQor
ICAgICAgICB0aGVuIGJlIGRyYWdnZWQgaW50byB0aGUgcGxheWJhY2sgdGVzdCBoYXJuZXNzLgor
CisgICAgICAgIEFsc28gYWRkcyAzIG5ldyB1bml0IHRlc3RzIGluIEVkaXRpbmdIaXN0b3J5VGVz
dHMvUmV3aW5kQW5kUGxheWJhY2tUZXN0cy5tLiBUaGVzZSB0ZXN0cyBjYXJyeSBvdXQgdGhlIGZv
bGxvd2luZworICAgICAgICBzdGVwczoKKworICAgICAgICAxLiBMb2FkIHRoZSBjYXB0dXJlIGhh
cm5lc3MgYW5kIHBlcmZvcm0gdGVzdC1zcGVjaWZpYyBlZGl0aW5nIG9uIHRoZSB3ZWIgdmlldy4K
KyAgICAgICAgMi4gTGV0IG9yaWdpbmFsU3RhdGUgYmUgYSBkdW1wIG9mIHRoZSBET00gYXQgdGhp
cyBwb2ludCBpbiB0aW1lLgorICAgICAgICAzLiBFeHRyYWN0IHRoZSBKU09OLXNlcmlhbGl6ZWQg
ZWRpdGluZyBoaXN0b3J5IGRhdGEgYW5kIGxvYWQgdGhlIHBsYXliYWNrIGhhcm5lc3Mgd2l0aCB0
aGlzIGRhdGEuCisgICAgICAgIDQuIFJld2luZCBhbGwgZWRpdGluZyB0byB0aGUgYmVnaW5uaW5n
LgorICAgICAgICA1LiBQbGF5YmFjayBhbGwgZWRpdGluZyB0byB0aGUgZW5kLgorICAgICAgICA2
LiBEdW1wIHRoZSBzdGF0ZSBvZiB0aGUgRE9NLiBUaGlzIHNob3VsZCBiZSBpZGVudGljYWwgdG8g
b3JpZ2luYWxTdGF0ZS4KKworICAgICAgICAqIEVkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkLgorICAgICAgICAqIEVkaXRpbmdIaXN0
b3J5L0VkaXRpbmdIaXN0b3J5L0luZm8ucGxpc3Q6IEFkZGVkLgorICAgICAgICAqIEVkaXRpbmdI
aXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Jlc291cmNlcy9DYXB0dXJlSGFybmVzcy5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBFZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9SZXNvdXJjZXMvRE9N
VGVzdGluZ1V0aWwuanM6IEFkZGVkLgorICAgICAgICAqIEVkaXRpbmdIaXN0b3J5L0VkaXRpbmdI
aXN0b3J5L1Jlc291cmNlcy9QbGF5YmFja0hhcm5lc3MuaHRtbDogQWRkZWQuCisgICAgICAgICog
RWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvVGVzdFJ1bm5lci5oOiBBZGRlZC4KKyAgICAg
ICAgKiBFZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9UZXN0UnVubmVyLm06IEFkZGVkLgor
ICAgICAgICAoaW5qZWN0ZWRNZXNzYWdlRXZlbnRIYW5kbGVyU2NyaXB0KToKKyAgICAgICAgKC1b
VGVzdFJ1bm5lciBpbml0XSk6CisgICAgICAgICgtW1Rlc3RSdW5uZXIgZGVsZXRlQmFja3dhcmRz
Ol0pOgorICAgICAgICAoLVtUZXN0UnVubmVyIHR5cGVTdHJpbmc6XSk6CisgICAgICAgICgtW1Rl
c3RSdW5uZXIgYm9keUVsZW1lbnRTdWJ0cmVlXSk6CisgICAgICAgICgtW1Rlc3RSdW5uZXIgYm9k
eVRleHRDb250ZW50XSk6CisgICAgICAgICgtW1Rlc3RSdW5uZXIgZWRpdGluZ0hpc3RvcnlKU09O
XSk6CisgICAgICAgICgtW1Rlc3RSdW5uZXIgbG9hZFBsYXliYWNrVGVzdEhhcm5lc3NXaXRoSlNP
TjpdKToKKyAgICAgICAgKC1bVGVzdFJ1bm5lciBudW1iZXJPZlVwZGF0ZXNdKToKKyAgICAgICAg
KC1bVGVzdFJ1bm5lciBqdW1wVG9VcGRhdGVJbmRleDpdKToKKyAgICAgICAgKC1bVGVzdFJ1bm5l
ciBleHBlY3RFdmVudHM6YWZ0ZXJQZXJmb3JtaW5nOl0pOgorICAgICAgICAoLVtUZXN0UnVubmVy
IGxvYWRDYXB0dXJlVGVzdEhhcm5lc3NdKToKKyAgICAgICAgKC1bVGVzdFJ1bm5lciBzZXRUZXh0
T2JmdXNjYXRpb25FbmFibGVkOl0pOgorICAgICAgICAoLVtUZXN0UnVubmVyIGlzRG9uZVdhaXRp
bmdGb3JQZW5kaW5nRXZlbnRzXSk6CisgICAgICAgICgtW1Rlc3RSdW5uZXIgdXNlckNvbnRlbnRD
b250cm9sbGVyOmRpZFJlY2VpdmVTY3JpcHRNZXNzYWdlOl0pOgorCisgICAgICAgIFRoZSBUZXN0
UnVubmVyIHByb3ZpZGVzIHV0aWxpdGllcyB0aGF0IGEgdW5pdCB0ZXN0IHNob3VsZCB1c2UgdG8g
ZHJpdmUgdGhlIHRlc3QgZm9yd2FyZCAoZS5nLiBsb2FkaW5nIGhhcm5lc3NlcykKKyAgICAgICAg
b3IgaW5zcGVjdCB0aGUgc3RhdGUgb2YgdGhlIGxvYWRlZCBwYWdlIChlLmcuIGV4dHJhY3Rpbmcg
SlNPTiBlZGl0aW5nIGhpc3RvcnkgZGF0YSBmcm9tIHRoZSBjYXB0dXJlIGhhcm5lc3MpLgorCisg
ICAgICAgICogRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvVGVzdFV0aWwuaDogQWRkZWQu
CisgICAgICAgICogRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvVGVzdFV0aWwubTogQWRk
ZWQuCisgICAgICAgICh3YWl0VW50aWxXaXRoVGltZW91dCk6CisgICAgICAgICh3YWl0VW50aWwp
OgorCisgICAgICAgIFByb3ZpZGVzIHV0aWxpdGllcyBmb3IgcnVubmluZyB0ZXN0cy4gRm9yIG5v
dywgdGhpcyBpcyBqdXN0IHNwaW5uaW5nIHRoZSBydW5sb29wIG9uIGEgZ2l2ZW4gY29uZGl0aW9u
LgorCisgICAgICAgICogRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvV0tXZWJWaWV3QWRk
aXRpb25zLmg6IEFkZGVkLgorICAgICAgICAqIEVkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5
L1dLV2ViVmlld0FkZGl0aW9ucy5tOiBBZGRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IGxvYWRQ
YWdlRnJvbUJ1bmRsZU5hbWVkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgdHlwZUNoYXJhY3Rl
cjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGtleVByZXNzV2l0aENoYXJhY3RlcnM6a2V5Q29k
ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRG
cm9tU3RyaW5nOl0pOgorCisgICAgICAgIFByb3ZpZGVzIHV0aWxpdGllcyBmb3Igc2ltdWxhdGlu
ZyBpbnRlcmFjdGlvbiBpbiBhIHdlYiB2aWV3LgorCisgICAgICAgICogRWRpdGluZ0hpc3Rvcnkv
RWRpdGluZ0hpc3RvcnkvbWFpbi5tOiBBZGRlZC4KKyAgICAgICAgKG1haW4pOgorICAgICAgICAq
IEVkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5VGVzdHMvSW5mby5wbGlzdDogQWRkZWQuCisg
ICAgICAgICogRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnlUZXN0cy9SZXdpbmRBbmRQbGF5
YmFja1Rlc3RzLm06IEFkZGVkLgorICAgICAgICAoLVtSZXdpbmRBbmRQbGF5YmFja1Rlc3RzIHNl
dFVwXSk6CisgICAgICAgICgtW1Jld2luZEFuZFBsYXliYWNrVGVzdHMgdGVhckRvd25dKToKKyAg
ICAgICAgKC1bUmV3aW5kQW5kUGxheWJhY2tUZXN0cyB0ZXN0VHlwaW5nU2luZ2xlTGluZU9mVGV4
dF0pOgorICAgICAgICAoLVtSZXdpbmRBbmRQbGF5YmFja1Rlc3RzIHRlc3RUeXBpbmdNdWx0aXBs
ZUxpbmVzT2ZUZXh0XSk6CisgICAgICAgICgtW1Jld2luZEFuZFBsYXliYWNrVGVzdHMgdGVzdFR5
cGluZ0FuZERlbGV0aW5nVGV4dF0pOgorICAgICAgICAoLVtSZXdpbmRBbmRQbGF5YmFja1Rlc3Rz
IHJld2luZEFuZFBsYXliYWNrRWRpdGluZ0luUGxheWJhY2tUZXN0SGFybmVzc10pOgorICAgICAg
ICAoLVtSZXdpbmRBbmRQbGF5YmFja1Rlc3RzIG9yaWdpbmFsQm9keVN1YnRyZWU6aXNFcXVhbFRv
RmluYWxTdWJ0cmVlOl0pOgorCiAyMDE2LTEyLTA2ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBA
YXBwbGUuY29tPgogCiAgICAgICAgIENvcnJlY3QgU0RLUk9PVCB2YWx1ZXMgaW4geGNjb25maWcg
ZmlsZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlz
dG9yeS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQyMzRiYjgzMTlhOGZh
M2IxY2MwOWViZTQxOGEyODNkMmFiZTdlNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9FZGl0
aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0w
LDAgKzEsNDMzIEBACisvLyAhJCpVVEY4KiQhCit7CisJYXJjaGl2ZVZlcnNpb24gPSAxOworCWNs
YXNzZXMgPSB7CisJfTsKKwlvYmplY3RWZXJzaW9uID0gNDY7CisJb2JqZWN0cyA9IHsKKworLyog
QmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KKwkJNTE2QURCRTIxREUxNTZBOTAwRTJCOThE
IC8qIENhcHR1cmVIYXJuZXNzLmh0bWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNkFEQkE4MURFMTU1QUIwMEUyQjk4RCAvKiBDYXB0dXJlSGFybmVz
cy5odG1sICovOyB9OworCQk1MTZBREJFNTFERTE1NkE5MDBFMkI5OEQgLyogUGxheWJhY2tIYXJu
ZXNzLmh0bWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxNkFEQkFCMURFMTU1QUIwMEUyQjk4RCAvKiBQbGF5YmFja0hhcm5lc3MuaHRtbCAqLzsgfTsK
KwkJNTE2QURCRTYxREUxNTZCQjAwRTJCOThEIC8qIG1haW4ubSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNkFEQkIxMURFMTU1QkQwMEUyQjk4RCAvKiBt
YWluLm0gKi87IH07CisJCTUxNkFEQkYzMURFMTU3QUQwMEUyQjk4RCAvKiBSZXdpbmRBbmRQbGF5
YmFja1Rlc3RzLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTZBREJGMjFERTE1N0FEMDBFMkI5OEQgLyogUmV3aW5kQW5kUGxheWJhY2tUZXN0cy5tICov
OyB9OworCQk1MTdGRDkzQzFERTE4REM5MDBBNzM2NzMgLyogRE9NVGVzdGluZ1V0aWwuanMgaW4g
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0ZEOTNCMURF
MThEQzkwMEE3MzY3MyAvKiBET01UZXN0aW5nVXRpbC5qcyAqLzsgfTsKKwkJNTFEMzk0ODAxREYy
NTQxRDAwQUJFODc1IC8qIER1bXBFZGl0aW5nSGlzdG9yeS5qcyBpbiBSZXNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFEMzk0N0UxREYyNTQxRDAwQUJFODc1IC8q
IER1bXBFZGl0aW5nSGlzdG9yeS5qcyAqLzsgfTsKKwkJNTFEMzk0ODExREYyNTQxRDAwQUJFODc1
IC8qIEVkaXRpbmdIaXN0b3J5VXRpbC5qcyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTFEMzk0N0YxREYyNTQxRDAwQUJFODc1IC8qIEVkaXRpbmdIaXN0
b3J5VXRpbC5qcyAqLzsgfTsKKwkJNTFFQ0MzRTcxREVFMzNDRTAwQ0IyNjdFIC8qIFRlc3RVdGls
Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTZBREJC
NTFERTE1NUJEMDBFMkI5OEQgLyogVGVzdFV0aWwubSAqLzsgfTsKKwkJNTFFQ0MzRTkxREVFMzNE
MjAwQ0IyNjdFIC8qIFdLV2ViVmlld0FkZGl0aW9ucy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2QURCQjcxREUxNTVCRDAwRTJCOThEIC8qIFdLV2Vi
Vmlld0FkZGl0aW9ucy5tICovOyB9OworCQk1MUVDQzNFQTFERUUzM0REMDBDQjI2N0UgLyogVGVz
dFJ1bm5lci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE2QURCQjMxREUxNTVCRDAwRTJCOThEIC8qIFRlc3RSdW5uZXIubSAqLzsgfTsKKy8qIEVuZCBQ
QlhCdWlsZEZpbGUgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkg
c2VjdGlvbiAqLworCQk1MTZBREJGNTFERTE1N0FEMDBFMkI5OEQgLyogUEJYQ29udGFpbmVySXRl
bVByb3h5ICovID0geworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFp
bmVyUG9ydGFsID0gNTEyRDdBOEIxREUwRkJFRjAwMjhGMEU2IC8qIFByb2plY3Qgb2JqZWN0ICov
OworCQkJcHJveHlUeXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gNTE2QURCQzAx
REUxNTVGQzAwRTJCOThEOworCQkJcmVtb3RlSW5mbyA9IEVkaXRpbmdIaXN0b3J5OworCQl9Owor
LyogRW5kIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEZp
bGVSZWZlcmVuY2Ugc2VjdGlvbiAqLworCQk1MTZBREJBODFERTE1NUFCMDBFMkI5OEQgLyogQ2Fw
dHVyZUhhcm5lc3MuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgbmFtZSA9IENhcHR1cmVIYXJu
ZXNzLmh0bWw7IHBhdGggPSBFZGl0aW5nSGlzdG9yeS9SZXNvdXJjZXMvQ2FwdHVyZUhhcm5lc3Mu
aHRtbDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk1MTZBREJBQjFERTE1NUFCMDBF
MkI5OEQgLyogUGxheWJhY2tIYXJuZXNzLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IG5hbWUg
PSBQbGF5YmFja0hhcm5lc3MuaHRtbDsgcGF0aCA9IEVkaXRpbmdIaXN0b3J5L1Jlc291cmNlcy9Q
bGF5YmFja0hhcm5lc3MuaHRtbDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk1MTZB
REJCMDFERTE1NUJEMDBFMkI5OEQgLyogSW5mby5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3Qu
eG1sOyBuYW1lID0gSW5mby5wbGlzdDsgcGF0aCA9IEVkaXRpbmdIaXN0b3J5L0luZm8ucGxpc3Q7
IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNTE2QURCQjExREUxNTVCRDAwRTJCOThE
IC8qIG1haW4ubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBuYW1lID0gbWFpbi5tOyBw
YXRoID0gRWRpdGluZ0hpc3RvcnkvbWFpbi5tOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07
CisJCTUxNkFEQkIyMURFMTU1QkQwMEUyQjk4RCAvKiBUZXN0UnVubmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRlc3RSdW5uZXIuaDsgcGF0aCA9IEVkaXRpbmdIaXN0b3J5
L1Rlc3RSdW5uZXIuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk1MTZBREJCMzFE
RTE1NUJEMDBFMkI5OEQgLyogVGVzdFJ1bm5lci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9i
amM7IG5hbWUgPSBUZXN0UnVubmVyLm07IHBhdGggPSBFZGl0aW5nSGlzdG9yeS9UZXN0UnVubmVy
Lm07IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNTE2QURCQjQxREUxNTVCRDAwRTJC
OThEIC8qIFRlc3RVdGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRlc3RV
dGlsLmg7IHBhdGggPSBFZGl0aW5nSGlzdG9yeS9UZXN0VXRpbC5oOyBzb3VyY2VUcmVlID0gU09V
UkNFX1JPT1Q7IH07CisJCTUxNkFEQkI1MURFMTU1QkQwMEUyQjk4RCAvKiBUZXN0VXRpbC5tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IG5hbWUgPSBUZXN0VXRpbC5tOyBwYXRoID0gRWRp
dGluZ0hpc3RvcnkvVGVzdFV0aWwubTsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk1
MTZBREJCNjFERTE1NUJEMDBFMkI5OEQgLyogV0tXZWJWaWV3QWRkaXRpb25zLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLV2ViVmlld0FkZGl0aW9ucy5oOyBwYXRoID0gRWRp
dGluZ0hpc3RvcnkvV0tXZWJWaWV3QWRkaXRpb25zLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9P
VDsgfTsKKwkJNTE2QURCQjcxREUxNTVCRDAwRTJCOThEIC8qIFdLV2ViVmlld0FkZGl0aW9ucy5t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IG5hbWUgPSBXS1dlYlZpZXdBZGRpdGlvbnMu
bTsgcGF0aCA9IEVkaXRpbmdIaXN0b3J5L1dLV2ViVmlld0FkZGl0aW9ucy5tOyBzb3VyY2VUcmVl
ID0gU09VUkNFX1JPT1Q7IH07CisJCTUxNkFEQkMxMURFMTU1RkMwMEUyQjk4RCAvKiBFZGl0aW5n
SGlzdG9yeS5hcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IHdyYXBwZXIuYXBwbGljYXRpb247IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IEVkaXRp
bmdIaXN0b3J5LmFwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJNTE2
QURCRjAxREUxNTdBRDAwRTJCOThEIC8qIEVkaXRpbmdIaXN0b3J5VGVzdHMueGN0ZXN0ICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmNmYnVu
ZGxlOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBFZGl0aW5nSGlzdG9yeVRlc3RzLnhjdGVz
dDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJNTE2QURCRjIxREUxNTdB
RDAwRTJCOThEIC8qIFJld2luZEFuZFBsYXliYWNrVGVzdHMubSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0g
UmV3aW5kQW5kUGxheWJhY2tUZXN0cy5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MTZBREJGNDFERTE1N0FEMDBFMkI5OEQgLyogSW5mby5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QueG1sOyBwYXRoID0gSW5m
by5wbGlzdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE3RkQ5M0IxREUxOERDOTAw
QTczNjczIC8qIERPTVRlc3RpbmdVdGlsLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2Ny
aXB0OyBuYW1lID0gRE9NVGVzdGluZ1V0aWwuanM7IHBhdGggPSBFZGl0aW5nSGlzdG9yeS9SZXNv
dXJjZXMvRE9NVGVzdGluZ1V0aWwuanM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJ
NTFEMzk0N0UxREYyNTQxRDAwQUJFODc1IC8qIER1bXBFZGl0aW5nSGlzdG9yeS5qcyAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9IER1bXBFZGl0aW5nSGlzdG9yeS5qczsg
cGF0aCA9IC4uLy4uL1NvdXJjZS9XZWJDb3JlL0ludGVybmFsU2NyaXB0cy9EdW1wRWRpdGluZ0hp
c3RvcnkuanM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJNTFEMzk0N0YxREYyNTQx
RDAwQUJFODc1IC8qIEVkaXRpbmdIaXN0b3J5VXRpbC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
amF2YXNjcmlwdDsgbmFtZSA9IEVkaXRpbmdIaXN0b3J5VXRpbC5qczsgcGF0aCA9IC4uLy4uL1Nv
dXJjZS9XZWJDb3JlL0ludGVybmFsU2NyaXB0cy9FZGl0aW5nSGlzdG9yeVV0aWwuanM7IHNvdXJj
ZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKy8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24g
Ki8KKworLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQk1MTZB
REJCRTFERTE1NUZDMDBFMkI5OEQgLyogRnJhbWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZy
YW1ld29ya3NCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJ
CWZpbGVzID0gKAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOworCQl9OworCQk1MTZBREJFRDFERTE1N0FEMDBFMkI5OEQgLyogRnJhbWV3b3JrcyAqLyA9
IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworLyogRW5kIFBCWEZyYW1ld29ya3NCdWlsZFBo
YXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYR3JvdXAgc2VjdGlvbiAqLworCQk1MTJEN0E4
QTFERTBGQkVGMDAyOEYwRTYgPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0g
KAorCQkJCTUxMkQ3QTk1MURFMEZCRUYwMDI4RjBFNiAvKiBFZGl0aW5nSGlzdG9yeSAqLywKKwkJ
CQk1MTZBREJGMTFERTE1N0FEMDBFMkI5OEQgLyogRWRpdGluZ0hpc3RvcnlUZXN0cyAqLywKKwkJ
CQk1MTJEN0E5NDFERTBGQkVGMDAyOEYwRTYgLyogUHJvZHVjdHMgKi8sCisJCQkpOworCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNTEyRDdBOTQxREUwRkJFRjAwMjhGMEU2IC8q
IFByb2R1Y3RzICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJ
CQk1MTZBREJDMTFERTE1NUZDMDBFMkI5OEQgLyogRWRpdGluZ0hpc3RvcnkuYXBwICovLAorCQkJ
CTUxNkFEQkYwMURFMTU3QUQwMEUyQjk4RCAvKiBFZGl0aW5nSGlzdG9yeVRlc3RzLnhjdGVzdCAq
LywKKwkJCSk7CisJCQluYW1lID0gUHJvZHVjdHM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OworCQl9OworCQk1MTJEN0E5NTFERTBGQkVGMDAyOEYwRTYgLyogRWRpdGluZ0hpc3RvcnkgKi8g
PSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTUxNkFEQkIwMURF
MTU1QkQwMEUyQjk4RCAvKiBJbmZvLnBsaXN0ICovLAorCQkJCTUxNkFEQkIxMURFMTU1QkQwMEUy
Qjk4RCAvKiBtYWluLm0gKi8sCisJCQkJNTE2QURCQjIxREUxNTVCRDAwRTJCOThEIC8qIFRlc3RS
dW5uZXIuaCAqLywKKwkJCQk1MTZBREJCMzFERTE1NUJEMDBFMkI5OEQgLyogVGVzdFJ1bm5lci5t
ICovLAorCQkJCTUxNkFEQkI0MURFMTU1QkQwMEUyQjk4RCAvKiBUZXN0VXRpbC5oICovLAorCQkJ
CTUxNkFEQkI1MURFMTU1QkQwMEUyQjk4RCAvKiBUZXN0VXRpbC5tICovLAorCQkJCTUxNkFEQkI2
MURFMTU1QkQwMEUyQjk4RCAvKiBXS1dlYlZpZXdBZGRpdGlvbnMuaCAqLywKKwkJCQk1MTZBREJC
NzFERTE1NUJEMDBFMkI5OEQgLyogV0tXZWJWaWV3QWRkaXRpb25zLm0gKi8sCisJCQkJNTEyRDdB
QjUxREUwRkM1OTAwMjhGMEU2IC8qIFJlc291cmNlcyAqLywKKwkJCSk7CisJCQluYW1lID0gRWRp
dGluZ0hpc3Rvcnk7CisJCQlwYXRoID0gRWRpdGluZ0hpc3RvcnlUZXN0OworCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNTEyRDdBQjUxREUwRkM1OTAwMjhGMEU2IC8qIFJlc291
cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNTFE
Mzk0N0UxREYyNTQxRDAwQUJFODc1IC8qIER1bXBFZGl0aW5nSGlzdG9yeS5qcyAqLywKKwkJCQk1
MUQzOTQ3RjFERjI1NDFEMDBBQkU4NzUgLyogRWRpdGluZ0hpc3RvcnlVdGlsLmpzICovLAorCQkJ
CTUxN0ZEOTNCMURFMThEQzkwMEE3MzY3MyAvKiBET01UZXN0aW5nVXRpbC5qcyAqLywKKwkJCQk1
MTZBREJBODFERTE1NUFCMDBFMkI5OEQgLyogQ2FwdHVyZUhhcm5lc3MuaHRtbCAqLywKKwkJCQk1
MTZBREJBQjFERTE1NUFCMDBFMkI5OEQgLyogUGxheWJhY2tIYXJuZXNzLmh0bWwgKi8sCisJCQkp
OworCQkJbmFtZSA9IFJlc291cmNlczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07
CisJCTUxNkFEQkYxMURFMTU3QUQwMEUyQjk4RCAvKiBFZGl0aW5nSGlzdG9yeVRlc3RzICovID0g
eworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk1MTZBREJGMjFERTE1
N0FEMDBFMkI5OEQgLyogUmV3aW5kQW5kUGxheWJhY2tUZXN0cy5tICovLAorCQkJCTUxNkFEQkY0
MURFMTU3QUQwMEUyQjk4RCAvKiBJbmZvLnBsaXN0ICovLAorCQkJKTsKKwkJCXBhdGggPSBFZGl0
aW5nSGlzdG9yeVRlc3RzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKy8qIEVu
ZCBQQlhHcm91cCBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9u
ICovCisJCTUxNkFEQkMwMURFMTU1RkMwMEUyQjk4RCAvKiBFZGl0aW5nSGlzdG9yeSAqLyA9IHsK
KwkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSA1
MTZBREJEQTFERTE1NUZDMDBFMkI5OEQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQ
QlhOYXRpdmVUYXJnZXQgIkVkaXRpbmdIaXN0b3J5IiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAor
CQkJCTUxNkFEQkJEMURFMTU1RkMwMEUyQjk4RCAvKiBTb3VyY2VzICovLAorCQkJCTUxNkFEQkJF
MURFMTU1RkMwMEUyQjk4RCAvKiBGcmFtZXdvcmtzICovLAorCQkJCTUxNkFEQkJGMURFMTU1RkMw
MEUyQjk4RCAvKiBSZXNvdXJjZXMgKi8sCisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgKKwkJCSk7
CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJbmFtZSA9IEVkaXRpbmdIaXN0b3J5Owor
CQkJcHJvZHVjdE5hbWUgPSBFZGl0aW5nSGlzdG9yeTsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSA1
MTZBREJDMTFERTE1NUZDMDBFMkI5OEQgLyogRWRpdGluZ0hpc3RvcnkuYXBwICovOworCQkJcHJv
ZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5hcHBsaWNhdGlvbiI7CisJCX07CisJ
CTUxNkFEQkVGMURFMTU3QUQwMEUyQjk4RCAvKiBFZGl0aW5nSGlzdG9yeVRlc3RzICovID0gewor
CQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDUx
NkFEQkY3MURFMTU3QUQwMEUyQjk4RCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBC
WE5hdGl2ZVRhcmdldCAiRWRpdGluZ0hpc3RvcnlUZXN0cyIgKi87CisJCQlidWlsZFBoYXNlcyA9
ICgKKwkJCQk1MTZBREJFQzFERTE1N0FEMDBFMkI5OEQgLyogU291cmNlcyAqLywKKwkJCQk1MTZB
REJFRDFERTE1N0FEMDBFMkI5OEQgLyogRnJhbWV3b3JrcyAqLywKKwkJCQk1MTZBREJFRTFERTE1
N0FEMDBFMkI5OEQgLyogUmVzb3VyY2VzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJ
CQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJCTUxNkFEQkY2MURFMTU3QUQwMEUyQjk4RCAv
KiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAorCQkJKTsKKwkJCW5hbWUgPSBFZGl0aW5nSGlzdG9y
eVRlc3RzOworCQkJcHJvZHVjdE5hbWUgPSBFZGl0aW5nSGlzdG9yeVRlc3RzOworCQkJcHJvZHVj
dFJlZmVyZW5jZSA9IDUxNkFEQkYwMURFMTU3QUQwMEUyQjk4RCAvKiBFZGl0aW5nSGlzdG9yeVRl
c3RzLnhjdGVzdCAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUu
YnVuZGxlLnVuaXQtdGVzdCI7CisJCX07CisvKiBFbmQgUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24g
Ki8KKworLyogQmVnaW4gUEJYUHJvamVjdCBzZWN0aW9uICovCisJCTUxMkQ3QThCMURFMEZCRUYw
MDI4RjBFNiAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKKwkJCWlzYSA9IFBCWFByb2plY3Q7CisJ
CQlhdHRyaWJ1dGVzID0geworCQkJCUxhc3RVcGdyYWRlQ2hlY2sgPSAwODIwOworCQkJCVRhcmdl
dEF0dHJpYnV0ZXMgPSB7CisJCQkJCTUxNkFEQkMwMURFMTU1RkMwMEUyQjk4RCA9IHsKKwkJCQkJ
CUNyZWF0ZWRPblRvb2xzVmVyc2lvbiA9IDguMjsKKwkJCQkJCVByb3Zpc2lvbmluZ1N0eWxlID0g
QXV0b21hdGljOworCQkJCQl9OworCQkJCQk1MTZBREJFRjFERTE1N0FEMDBFMkI5OEQgPSB7CisJ
CQkJCQlDcmVhdGVkT25Ub29sc1ZlcnNpb24gPSA4LjI7CisJCQkJCQlQcm92aXNpb25pbmdTdHls
ZSA9IEF1dG9tYXRpYzsKKwkJCQkJCVRlc3RUYXJnZXRJRCA9IDUxNkFEQkMwMURFMTU1RkMwMEUy
Qjk4RDsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3Qg
PSA1MTJEN0E4RTFERTBGQkVGMDAyOEYwRTYgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZv
ciBQQlhQcm9qZWN0ICJFZGl0aW5nSGlzdG9yeSIgKi87CisJCQljb21wYXRpYmlsaXR5VmVyc2lv
biA9ICJYY29kZSAzLjIiOworCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNoOworCQkJaGFz
U2Nhbm5lZEZvckVuY29kaW5ncyA9IDA7CisJCQlrbm93blJlZ2lvbnMgPSAoCisJCQkJZW4sCisJ
CQkJQmFzZSwKKwkJCSk7CisJCQltYWluR3JvdXAgPSA1MTJEN0E4QTFERTBGQkVGMDAyOEYwRTY7
CisJCQlwcm9kdWN0UmVmR3JvdXAgPSA1MTJEN0E5NDFERTBGQkVGMDAyOEYwRTYgLyogUHJvZHVj
dHMgKi87CisJCQlwcm9qZWN0RGlyUGF0aCA9ICIiOworCQkJcHJvamVjdFJvb3QgPSAiIjsKKwkJ
CXRhcmdldHMgPSAoCisJCQkJNTE2QURCQzAxREUxNTVGQzAwRTJCOThEIC8qIEVkaXRpbmdIaXN0
b3J5ICovLAorCQkJCTUxNkFEQkVGMURFMTU3QUQwMEUyQjk4RCAvKiBFZGl0aW5nSGlzdG9yeVRl
c3RzICovLAorCQkJKTsKKwkJfTsKKy8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KKworLyog
QmVnaW4gUEJYUmVzb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTUxNkFEQkJGMURFMTU1
RkMwMEUyQjk4RCAvKiBSZXNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhSZXNvdXJjZXNCdWls
ZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAor
CQkJCTUxRDM5NDgwMURGMjU0MUQwMEFCRTg3NSAvKiBEdW1wRWRpdGluZ0hpc3RvcnkuanMgaW4g
UmVzb3VyY2VzICovLAorCQkJCTUxNkFEQkUyMURFMTU2QTkwMEUyQjk4RCAvKiBDYXB0dXJlSGFy
bmVzcy5odG1sIGluIFJlc291cmNlcyAqLywKKwkJCQk1MTdGRDkzQzFERTE4REM5MDBBNzM2NzMg
LyogRE9NVGVzdGluZ1V0aWwuanMgaW4gUmVzb3VyY2VzICovLAorCQkJCTUxNkFEQkU1MURFMTU2
QTkwMEUyQjk4RCAvKiBQbGF5YmFja0hhcm5lc3MuaHRtbCBpbiBSZXNvdXJjZXMgKi8sCisJCQkJ
NTFEMzk0ODExREYyNTQxRDAwQUJFODc1IC8qIEVkaXRpbmdIaXN0b3J5VXRpbC5qcyBpbiBSZXNv
dXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CisJCX07CisJCTUxNkFEQkVFMURFMTU3QUQwMEUyQjk4RCAvKiBSZXNvdXJjZXMgKi8gPSB7
CisJCQlpc2EgPSBQQlhSZXNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0g
MjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworLyogRW5kIFBCWFJlc291cmNlc0J1aWxkUGhhc2Ug
c2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJ
CTUxNkFEQkJEMURFMTU1RkMwMEUyQjk4RCAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJY
U291cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJ
ZmlsZXMgPSAoCisJCQkJNTE2QURCRTYxREUxNTZCQjAwRTJCOThEIC8qIG1haW4ubSBpbiBTb3Vy
Y2VzICovLAorCQkJCTUxRUNDM0VBMURFRTMzREQwMENCMjY3RSAvKiBUZXN0UnVubmVyLm0gaW4g
U291cmNlcyAqLywKKwkJCQk1MUVDQzNFNzFERUUzM0NFMDBDQjI2N0UgLyogVGVzdFV0aWwubSBp
biBTb3VyY2VzICovLAorCQkJCTUxRUNDM0U5MURFRTMzRDIwMENCMjY3RSAvKiBXS1dlYlZpZXdB
ZGRpdGlvbnMubSBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworCQk1MTZBREJFQzFERTE1N0FEMDBFMkI5OEQgLyog
U291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRB
Y3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCTUxNkFEQkYzMURFMTU3
QUQwMEUyQjk4RCAvKiBSZXdpbmRBbmRQbGF5YmFja1Rlc3RzLm0gaW4gU291cmNlcyAqLywKKwkJ
CSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKy8q
IEVuZCBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWFRhcmdl
dERlcGVuZGVuY3kgc2VjdGlvbiAqLworCQk1MTZBREJGNjFERTE1N0FEMDBFMkI5OEQgLyogUEJY
VGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKKwkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CisJ
CQl0YXJnZXQgPSA1MTZBREJDMDFERTE1NUZDMDBFMkI5OEQgLyogRWRpdGluZ0hpc3RvcnkgKi87
CisJCQl0YXJnZXRQcm94eSA9IDUxNkFEQkY1MURFMTU3QUQwMEUyQjk4RCAvKiBQQlhDb250YWlu
ZXJJdGVtUHJveHkgKi87CisJCX07CisvKiBFbmQgUEJYVGFyZ2V0RGVwZW5kZW5jeSBzZWN0aW9u
ICovCisKKy8qIEJlZ2luIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KKwkJNTEyRDdB
QTIxREUwRkJFRjAwMjhGMEU2IC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZp
Z3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUFMV0FZU19TRUFSQ0hfVVNFUl9Q
QVRIUyA9IE5POworCQkJCUNMQU5HX0FOQUxZWkVSX05PTk5VTEwgPSBZRVM7CisJCQkJQ0xBTkdf
Q1hYX0xBTkdVQUdFX1NUQU5EQVJEID0gImdudSsrMHgiOworCQkJCUNMQU5HX0NYWF9MSUJSQVJZ
ID0gImxpYmMrKyI7CisJCQkJQ0xBTkdfRU5BQkxFX01PRFVMRVMgPSBZRVM7CisJCQkJQ0xBTkdf
RU5BQkxFX09CSkNfQVJDID0gWUVTOworCQkJCUNMQU5HX1dBUk5fQk9PTF9DT05WRVJTSU9OID0g
WUVTOworCQkJCUNMQU5HX1dBUk5fQ09OU1RBTlRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFO
R19XQVJOX0RJUkVDVF9PQkpDX0lTQV9VU0FHRSA9IFlFU19FUlJPUjsKKwkJCQlDTEFOR19XQVJO
X0RPQ1VNRU5UQVRJT05fQ09NTUVOVFMgPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9FTVBUWV9CT0RZ
ID0gWUVTOworCQkJCUNMQU5HX1dBUk5fRU5VTV9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5H
X1dBUk5fSU5GSU5JVEVfUkVDVVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fSU5UX0NPTlZF
UlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9PQkpDX1JPT1RfQ0xBU1MgPSBZRVNfRVJST1I7
CisJCQkJQ0xBTkdfV0FSTl9TVVNQSUNJT1VTX01PVkUgPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9V
TlJFQUNIQUJMRV9DT0RFID0gWUVTOworCQkJCUNMQU5HX1dBUk5fX0RVUExJQ0FURV9NRVRIT0Rf
TUFUQ0ggPSBZRVM7CisJCQkJQ09ERV9TSUdOX0lERU5USVRZID0gIi0iOworCQkJCUNPUFlfUEhB
U0VfU1RSSVAgPSBOTzsKKwkJCQlERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSBkd2FyZjsKKwkJ
CQlFTkFCTEVfU1RSSUNUX09CSkNfTVNHU0VORCA9IFlFUzsKKwkJCQlFTkFCTEVfVEVTVEFCSUxJ
VFkgPSBZRVM7CisJCQkJR0NDX0NfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnU5OTsKKwkJCQlHQ0Nf
RFlOQU1JQ19OT19QSUMgPSBOTzsKKwkJCQlHQ0NfTk9fQ09NTU9OX0JMT0NLUyA9IFlFUzsKKwkJ
CQlHQ0NfT1BUSU1JWkFUSU9OX0xFVkVMID0gMDsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklO
SVRJT05TID0gKAorCQkJCQkiREVCVUc9MSIsCisJCQkJCSIkKGluaGVyaXRlZCkiLAorCQkJCSk7
CisJCQkJR0NDX1dBUk5fNjRfVE9fMzJfQklUX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJR0NDX1dB
Uk5fQUJPVVRfUkVUVVJOX1RZUEUgPSBZRVNfRVJST1I7CisJCQkJR0NDX1dBUk5fVU5ERUNMQVJF
RF9TRUxFQ1RPUiA9IFlFUzsKKwkJCQlHQ0NfV0FSTl9VTklOSVRJQUxJWkVEX0FVVE9TID0gWUVT
X0FHR1JFU1NJVkU7CisJCQkJR0NDX1dBUk5fVU5VU0VEX0ZVTkNUSU9OID0gWUVTOworCQkJCUdD
Q19XQVJOX1VOVVNFRF9WQVJJQUJMRSA9IFlFUzsKKwkJCQlNQUNPU1hfREVQTE9ZTUVOVF9UQVJH
RVQgPSAxMC4xMzsKKwkJCQlNVExfRU5BQkxFX0RFQlVHX0lORk8gPSBZRVM7CisJCQkJT05MWV9B
Q1RJVkVfQVJDSCA9IFlFUzsKKwkJCQlTREtST09UID0gbWFjb3N4OworCQkJfTsKKwkJCW5hbWUg
PSBEZWJ1ZzsKKwkJfTsKKwkJNTEyRDdBQTMxREUwRkJFRjAwMjhGMEU2IC8qIFJlbGVhc2UgKi8g
PSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7
CisJCQkJQUxXQVlTX1NFQVJDSF9VU0VSX1BBVEhTID0gTk87CisJCQkJQ0xBTkdfQU5BTFlaRVJf
Tk9OTlVMTCA9IFlFUzsKKwkJCQlDTEFOR19DWFhfTEFOR1VBR0VfU1RBTkRBUkQgPSAiZ251Kysw
eCI7CisJCQkJQ0xBTkdfQ1hYX0xJQlJBUlkgPSAibGliYysrIjsKKwkJCQlDTEFOR19FTkFCTEVf
TU9EVUxFUyA9IFlFUzsKKwkJCQlDTEFOR19FTkFCTEVfT0JKQ19BUkMgPSBZRVM7CisJCQkJQ0xB
TkdfV0FSTl9CT09MX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9DT05TVEFOVF9D
T05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fRElSRUNUX09CSkNfSVNBX1VTQUdFID0g
WUVTX0VSUk9SOworCQkJCUNMQU5HX1dBUk5fRE9DVU1FTlRBVElPTl9DT01NRU5UUyA9IFlFUzsK
KwkJCQlDTEFOR19XQVJOX0VNUFRZX0JPRFkgPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9FTlVNX0NP
TlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9JTkZJTklURV9SRUNVUlNJT04gPSBZRVM7
CisJCQkJQ0xBTkdfV0FSTl9JTlRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX09C
SkNfUk9PVF9DTEFTUyA9IFlFU19FUlJPUjsKKwkJCQlDTEFOR19XQVJOX1NVU1BJQ0lPVVNfTU9W
RSA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX1VOUkVBQ0hBQkxFX0NPREUgPSBZRVM7CisJCQkJQ0xB
TkdfV0FSTl9fRFVQTElDQVRFX01FVEhPRF9NQVRDSCA9IFlFUzsKKwkJCQlDT0RFX1NJR05fSURF
TlRJVFkgPSAiLSI7CisJCQkJQ09QWV9QSEFTRV9TVFJJUCA9IE5POworCQkJCURFQlVHX0lORk9S
TUFUSU9OX0ZPUk1BVCA9ICJkd2FyZi13aXRoLWRzeW0iOworCQkJCUVOQUJMRV9OU19BU1NFUlRJ
T05TID0gTk87CisJCQkJRU5BQkxFX1NUUklDVF9PQkpDX01TR1NFTkQgPSBZRVM7CisJCQkJR0ND
X0NfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnU5OTsKKwkJCQlHQ0NfTk9fQ09NTU9OX0JMT0NLUyA9
IFlFUzsKKwkJCQlHQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlH
Q0NfV0FSTl9BQk9VVF9SRVRVUk5fVFlQRSA9IFlFU19FUlJPUjsKKwkJCQlHQ0NfV0FSTl9VTkRF
Q0xBUkVEX1NFTEVDVE9SID0gWUVTOworCQkJCUdDQ19XQVJOX1VOSU5JVElBTElaRURfQVVUT1Mg
PSBZRVNfQUdHUkVTU0lWRTsKKwkJCQlHQ0NfV0FSTl9VTlVTRURfRlVOQ1RJT04gPSBZRVM7CisJ
CQkJR0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxFID0gWUVTOworCQkJCU1BQ09TWF9ERVBMT1lNRU5U
X1RBUkdFVCA9IDEwLjEzOworCQkJCU1UTF9FTkFCTEVfREVCVUdfSU5GTyA9IE5POworCQkJCVNE
S1JPT1QgPSBtYWNvc3g7CisJCQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTUxNkFE
QkRCMURFMTU1RkMwMEUyQjk4RCAvKiBEZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25m
aWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlBU1NFVENBVEFMT0dfQ09NUElM
RVJfQVBQSUNPTl9OQU1FID0gQXBwSWNvbjsKKwkJCQlDT01CSU5FX0hJRFBJX0lNQUdFUyA9IFlF
UzsKKwkJCQlJTkZPUExJU1RfRklMRSA9IEVkaXRpbmdIaXN0b3J5L0luZm8ucGxpc3Q7CisJCQkJ
TERfUlVOUEFUSF9TRUFSQ0hfUEFUSFMgPSAiJChpbmhlcml0ZWQpIEBleGVjdXRhYmxlX3BhdGgv
Li4vRnJhbWV3b3JrcyI7CisJCQkJUFJPRFVDVF9CVU5ETEVfSURFTlRJRklFUiA9IGNvbS5hcHBs
ZS5FZGl0aW5nSGlzdG9yeTsKKwkJCQlQUk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOwor
CQkJCVNES1JPT1QgPSBtYWNvc3guaW50ZXJuYWw7CisJCQl9OworCQkJbmFtZSA9IERlYnVnOwor
CQl9OworCQk1MTZBREJEQzFERTE1NUZDMDBFMkI5OEQgLyogUmVsZWFzZSAqLyA9IHsKKwkJCWlz
YSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlBU1NF
VENBVEFMT0dfQ09NUElMRVJfQVBQSUNPTl9OQU1FID0gQXBwSWNvbjsKKwkJCQlDT01CSU5FX0hJ
RFBJX0lNQUdFUyA9IFlFUzsKKwkJCQlJTkZPUExJU1RfRklMRSA9IEVkaXRpbmdIaXN0b3J5L0lu
Zm8ucGxpc3Q7CisJCQkJTERfUlVOUEFUSF9TRUFSQ0hfUEFUSFMgPSAiJChpbmhlcml0ZWQpIEBl
eGVjdXRhYmxlX3BhdGgvLi4vRnJhbWV3b3JrcyI7CisJCQkJUFJPRFVDVF9CVU5ETEVfSURFTlRJ
RklFUiA9IGNvbS5hcHBsZS5FZGl0aW5nSGlzdG9yeTsKKwkJCQlQUk9EVUNUX05BTUUgPSAiJChU
QVJHRVRfTkFNRSkiOworCQkJCVNES1JPT1QgPSBtYWNvc3guaW50ZXJuYWw7CisJCQl9OworCQkJ
bmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTUxNkFEQkY4MURFMTU3QUQwMEUyQjk4RCAvKiBEZWJ1
ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5n
cyA9IHsKKwkJCQlCVU5ETEVfTE9BREVSID0gIiQoVEVTVF9IT1NUKSI7CisJCQkJQ09NQklORV9I
SURQSV9JTUFHRVMgPSBZRVM7CisJCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgK
KwkJCQkJIkRFQlVHPTEiLAorCQkJCQkiJChpbmhlcml0ZWQpIiwKKwkJCQkJIlRFU1Q9MSIsCisJ
CQkJKTsKKwkJCQlJTkZPUExJU1RfRklMRSA9IEVkaXRpbmdIaXN0b3J5VGVzdHMvSW5mby5wbGlz
dDsKKwkJCQlMRF9SVU5QQVRIX1NFQVJDSF9QQVRIUyA9ICIkKGluaGVyaXRlZCkgQGV4ZWN1dGFi
bGVfcGF0aC8uLi9GcmFtZXdvcmtzIEBsb2FkZXJfcGF0aC8uLi9GcmFtZXdvcmtzIjsKKwkJCQlQ
Uk9EVUNUX0JVTkRMRV9JREVOVElGSUVSID0gY29tLmFwcGxlLkVkaXRpbmdIaXN0b3J5VGVzdHM7
CisJCQkJUFJPRFVDVF9OQU1FID0gIiQoVEFSR0VUX05BTUUpIjsKKwkJCQlURVNUX0hPU1QgPSAi
JChCVUlMVF9QUk9EVUNUU19ESVIpL0VkaXRpbmdIaXN0b3J5LmFwcC9Db250ZW50cy9NYWNPUy9F
ZGl0aW5nSGlzdG9yeSI7CisJCQl9OworCQkJbmFtZSA9IERlYnVnOworCQl9OworCQk1MTZBREJG
OTFERTE1N0FEMDBFMkI5OEQgLyogUmVsZWFzZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25m
aWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlCVU5ETEVfTE9BREVSID0gIiQo
VEVTVF9IT1NUKSI7CisJCQkJQ09NQklORV9ISURQSV9JTUFHRVMgPSBZRVM7CisJCQkJR0NDX1BS
RVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICJURVNUPTEiOworCQkJCUlORk9QTElTVF9GSUxFID0g
RWRpdGluZ0hpc3RvcnlUZXN0cy9JbmZvLnBsaXN0OworCQkJCUxEX1JVTlBBVEhfU0VBUkNIX1BB
VEhTID0gIiQoaW5oZXJpdGVkKSBAZXhlY3V0YWJsZV9wYXRoLy4uL0ZyYW1ld29ya3MgQGxvYWRl
cl9wYXRoLy4uL0ZyYW1ld29ya3MiOworCQkJCVBST0RVQ1RfQlVORExFX0lERU5USUZJRVIgPSBj
b20uYXBwbGUuRWRpdGluZ0hpc3RvcnlUZXN0czsKKwkJCQlQUk9EVUNUX05BTUUgPSAiJChUQVJH
RVRfTkFNRSkiOworCQkJCVRFU1RfSE9TVCA9ICIkKEJVSUxUX1BST0RVQ1RTX0RJUikvRWRpdGlu
Z0hpc3RvcnkuYXBwL0NvbnRlbnRzL01hY09TL0VkaXRpbmdIaXN0b3J5IjsKKwkJCX07CisJCQlu
YW1lID0gUmVsZWFzZTsKKwkJfTsKKy8qIEVuZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9u
ICovCisKKy8qIEJlZ2luIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLworCQk1MTJEN0E4
RTFERTBGQkVGMDAyOEYwRTYgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9q
ZWN0ICJFZGl0aW5nSGlzdG9yeSIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0
OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQk1MTJEN0FBMjFERTBGQkVGMDAyOEYw
RTYgLyogRGVidWcgKi8sCisJCQkJNTEyRDdBQTMxREUwRkJFRjAwMjhGMEU2IC8qIFJlbGVhc2Ug
Ki8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJZGVm
YXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJNTE2QURCREExREUxNTVG
QzAwRTJCOThEIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0
ICJFZGl0aW5nSGlzdG9yeSIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0Owor
CQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQk1MTZBREJEQjFERTE1NUZDMDBFMkI5OEQg
LyogRGVidWcgKi8sCisJCQkJNTE2QURCREMxREUxNTVGQzAwRTJCOThEIC8qIFJlbGVhc2UgKi8s
CisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJZGVmYXVs
dENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJNTE2QURCRjcxREUxNTdBRDAw
RTJCOThEIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJF
ZGl0aW5nSGlzdG9yeVRlc3RzIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7
CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCTUxNkFEQkY4MURFMTU3QUQwMEUyQjk4
RCAvKiBEZWJ1ZyAqLywKKwkJCQk1MTZBREJGOTFERTE1N0FEMDBFMkI5OEQgLyogUmVsZWFzZSAq
LywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CisJCQlkZWZh
dWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOworCQl9OworLyogRW5kIFhDQ29uZmlndXJh
dGlvbkxpc3Qgc2VjdGlvbiAqLworCX07CisJcm9vdE9iamVjdCA9IDUxMkQ3QThCMURFMEZCRUYw
MDI4RjBFNiAvKiBQcm9qZWN0IG9iamVjdCAqLzsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL0VkaXRp
bmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L0luZm8ucGxpc3QgYi9Ub29scy9FZGl0aW5nSGlzdG9y
eS9FZGl0aW5nSGlzdG9yeS9JbmZvLnBsaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhNGViYmYxY2FiZmYzZDk4
NGNiZjU1NmNiNjkwYmQyYmQyMzA1MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9FZGl0aW5n
SGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9JbmZvLnBsaXN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1s
IHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgcGxpc3QgUFVCTElD
ICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERz
L1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KKzxwbGlzdCB2ZXJzaW9uPSIxLjAiPgorPGRpY3Q+CisJ
PGtleT5DRkJ1bmRsZURldmVsb3BtZW50UmVnaW9uPC9rZXk+CisJPHN0cmluZz5lbjwvc3RyaW5n
PgorCTxrZXk+Q0ZCdW5kbGVFeGVjdXRhYmxlPC9rZXk+CisJPHN0cmluZz4kKEVYRUNVVEFCTEVf
TkFNRSk8L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlSWNvbkZpbGU8L2tleT4KKwk8c3RyaW5nPjwv
c3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVJZGVudGlmaWVyPC9rZXk+CisJPHN0cmluZz4kKFBST0RV
Q1RfQlVORExFX0lERU5USUZJRVIpPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZUluZm9EaWN0aW9u
YXJ5VmVyc2lvbjwva2V5PgorCTxzdHJpbmc+Ni4wPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZU5h
bWU8L2tleT4KKwk8c3RyaW5nPiQoUFJPRFVDVF9OQU1FKTwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5k
bGVQYWNrYWdlVHlwZTwva2V5PgorCTxzdHJpbmc+QVBQTDwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5k
bGVTaG9ydFZlcnNpb25TdHJpbmc8L2tleT4KKwk8c3RyaW5nPjEuMDwvc3RyaW5nPgorCTxrZXk+
Q0ZCdW5kbGVWZXJzaW9uPC9rZXk+CisJPHN0cmluZz4xPC9zdHJpbmc+CisJPGtleT5MU01pbmlt
dW1TeXN0ZW1WZXJzaW9uPC9rZXk+CisJPHN0cmluZz4kKE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdF
VCk8L3N0cmluZz4KKwk8a2V5Pk5TUHJpbmNpcGFsQ2xhc3M8L2tleT4KKwk8c3RyaW5nPk5TQXBw
bGljYXRpb248L3N0cmluZz4KKzwvZGljdD4KKzwvcGxpc3Q+CmRpZmYgLS1naXQgYS9Ub29scy9F
ZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9SZXNvdXJjZXMvQ2FwdHVyZUhhcm5lc3MuaHRt
bCBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Jlc291cmNlcy9DYXB0dXJl
SGFybmVzcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBhMDIyOGNmMzkxNzllYzdhNWI5MmU1MDk5NzIxMjdh
ZTNhNzFkOTQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5n
SGlzdG9yeS9SZXNvdXJjZXMvQ2FwdHVyZUhhcm5lc3MuaHRtbApAQCAtMCwwICsxLDE0IEBACis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9IkRPTVRlc3RpbmdVdGlsLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJFZGl0aW5nSGlzdG9yeVV0aWwuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4K
K3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgKCkgPT4geworICAgIGxldCBzY3JpcHRF
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CisgICAgc2NyaXB0RWxl
bWVudC5zcmMgPSAiRHVtcEVkaXRpbmdIaXN0b3J5LmpzIjsKKyAgICBzY3JpcHRFbGVtZW50LmFk
ZEV2ZW50TGlzdGVuZXIoImxvYWQiLCAoKSA9PiBkb2N1bWVudC5ib2R5LmZvY3VzKCkpOworICAg
IGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0RWxlbWVudCk7Cit9KTsKKzwvc2NyaXB0
PgorPC9oZWFkPgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRp
dGluZ0hpc3RvcnkvUmVzb3VyY2VzL0RPTVRlc3RpbmdVdGlsLmpzIGIvVG9vbHMvRWRpdGluZ0hp
c3RvcnkvRWRpdGluZ0hpc3RvcnkvUmVzb3VyY2VzL0RPTVRlc3RpbmdVdGlsLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmMyYzk5MzQ4ZDljODZkNzViNzM3MjA0MzVjZGJkNGVmNmYxMGQ3YTYKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9SZXNvdXJjZXMvRE9N
VGVzdGluZ1V0aWwuanMKQEAgLTAsMCArMSwyNCBAQAorKCgpID0+IHsKKyAgICBmdW5jdGlvbiBz
dWJ0cmVlQXNTdHJpbmcobm9kZSwgY3VycmVudERlcHRoID0gMCkgeworICAgICAgICBsZXQgY2hp
bGROb2Rlc0FzU3RyaW5ncyA9IEFycmF5LmZyb20obm9kZS5jaGlsZE5vZGVzKS5tYXAoY2hpbGQg
PT4gc3VidHJlZUFzU3RyaW5nKGNoaWxkLCBjdXJyZW50RGVwdGggKyAxKSk7CisgICAgICAgIGxl
dCBub2RlQXNTdHJpbmcgPSBub2RlLm5vZGVOYW1lOworICAgICAgICBpZiAobm9kZS5ub2RlVHlw
ZSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkgeworICAgICAgICAgICAgbm9kZUFzU3RyaW5nID0gYDwk
e25vZGVBc1N0cmluZ30+YAorICAgICAgICAgICAgbGV0IGF0dHJpYnV0ZURlc2NyaXB0aW9ucyA9
IFtdOworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmF0dHJpYnV0ZXMubGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBsZXQgYXR0cmlidXRlID0gbm9kZS5hdHRyaWJ1
dGVzLml0ZW0oaSk7CisgICAgICAgICAgICAgICAgYXR0cmlidXRlRGVzY3JpcHRpb25zLnB1c2go
YCR7YXR0cmlidXRlLmxvY2FsTmFtZX09JHthdHRyaWJ1dGUudmFsdWV9YCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBub2RlQXNTdHJpbmcgKz0gYDogJHthdHRyaWJ1dGVEZXNjcmlwdGlv
bnMuam9pbigiLCAiKX1gOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUg
PT0gTm9kZS5URVhUX05PREUpCisgICAgICAgICAgICBub2RlQXNTdHJpbmcgKz0gYDogJyR7bm9k
ZS50ZXh0Q29udGVudC5yZXBsYWNlKC9ccy9nLCAiICIpfSdgOworCisgICAgICAgIHJldHVybiBg
JHsiICAgICIucmVwZWF0KGN1cnJlbnREZXB0aCl9JHtub2RlQXNTdHJpbmd9XG4ke2NoaWxkTm9k
ZXNBc1N0cmluZ3Muam9pbigiXG4iKX1gCisgICAgfQorCisgICAgd2luZG93LkRPTVV0aWwgPSB7
CisgICAgICAgIHN1YnRyZWVBc1N0cmluZworICAgIH07Cit9KSgpOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvUmVzb3VyY2VzL1BsYXliYWNrSGFybmVz
cy5odG1sIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvUmVzb3VyY2VzL1Bs
YXliYWNrSGFybmVzcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjNmZlMDM1MWRiMmRjOTU0NWRlNWMyZjli
YzczMGIwYWI3YThkYjQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9F
ZGl0aW5nSGlzdG9yeS9SZXNvdXJjZXMvUGxheWJhY2tIYXJuZXNzLmh0bWwKQEAgLTAsMCArMSw0
MjIgQEAKKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+Citib2R5IHsKKyAgICBtYXJnaW46IDhweDsK
K30KKworI292ZXJsYXkgeworICAgIHdpZHRoOiAzMDBweDsKKyAgICBoZWlnaHQ6IGNhbGMoMTAw
JSAtIDMycHgpOworICAgIHBvc2l0aW9uOiBmaXhlZDsKKyAgICByaWdodDogMTZweDsKKyAgICB0
b3A6IDE2cHg7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1
KTsKKyAgICB0cmFuc2l0aW9uOiAwLjI1cyBlYXNlLWluLW91dDsKK30KKworI3VwZGF0ZUluZm9Q
YW5lbCB7CisgICAgaGVpZ2h0OiBjYWxjKDkwJSAtIDMwcHgpOworICAgIG92ZXJmbG93OiBzY3Jv
bGw7CisgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKKyAgICBwYWRkaW5nOiAxMHB4OworfQorCisj
Y29udHJvbHMgeworICAgIGhlaWdodDogMTAlOworICAgIGRpc3BsYXk6IGZsZXg7CisgICAgZmxl
eC1kaXJlY3Rpb246IGNvbHVtbjsKKyAgICBhbGlnbi1pdGVtczogY2VudGVyOworICAgIHRleHQt
YWxpZ246IGNlbnRlcjsKK30KKworI2NvbnRyb2xzLXdyYXBwZXIgeworICAgIG1hcmdpbjogMCBh
dXRvOworfQorCitzdW1tYXJ5OmZvY3VzIHsKKyAgICBvdXRsaW5lOiBub25lOworfQorCitkZXRh
aWxzIHsKKyAgICBwYWRkaW5nOiA0cHggMDsKK30KKworI3VwZGF0ZU1hcmtlciB7CisgICAgd2lk
dGg6IDgwJTsKKyAgICBtYXJnaW46IDIwcHggMDsKKyAgICBib3JkZXItdG9wOiAxcHggcmVkIGRh
c2hlZDsKK30KKworLmVoLW5vZGUgeworICAgIG1hcmdpbjogMCAycHg7CisgICAgcGFkZGluZzog
MCA0cHg7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg1OSwgMTMxLCAyMzgsIDAuMjUpOwor
ICAgIGJvcmRlci1yYWRpdXM6IDRweDsKKyAgICBjdXJzb3I6IGRlZmF1bHQ7Cit9CisKKy5laC1u
b2RlOmhvdmVyIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDU5LCAxMzEsIDIzOCwgMC41
KTsKK30KKworLm5vZGUtaGlnaGxpZ2h0IHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAg
YmFja2dyb3VuZC1jb2xvcjogcmdiYSg1OSwgMTMxLCAyMzgsIDAuMDUpOworICAgIGJvcmRlcjog
MXB4IHNvbGlkIHJnYig1OSwgMTMxLCAyMzgpOworICAgIGJvcmRlci1yYWRpdXM6IDJweDsKKyAg
ICB6LWluZGV4OiAtMTsKK30KKworbGkgeworICAgIGxpbmUtaGVpZ2h0OiAxLjU7Cit9CisKK3N1
bW1hcnkgeworICAgIG1hcmdpbi10b3A6IDA7Cit9CisKKyNkcm9wem9uZSB7CisgICAgbWFyZ2lu
OiAxMDBweDsKKyAgICBwYWRkaW5nOiA1MHB4OworICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAzMDBw
eCk7CisgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAzMDBweCk7CisgICAgYm9yZGVyOiAxNXB4ICNF
OEU4RTggZGFzaGVkOworICAgIGRpc3BsYXk6IGZsZXg7CisgICAgYWxpZ24taXRlbXM6IGNlbnRl
cjsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgY3Vyc29yOiBwb2ludGVyOworfQorCith
OnZpc2l0ZWQsIGE6bGluayB7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGNvbG9y
OiByZWQ7Cit9CisKKyN0b2dnbGVPdmVybGF5QnV0dG9uIHsKKyAgICBtYXJnaW4tdG9wOiAxMHB4
OworfQorCisjdXBsb2FkIHsKKyAgICBvcGFjaXR5OiAwOworfQorCisjZHJvcE1lc3NhZ2Ugewor
ICAgIGZvbnQtc2l6ZTogNTBweDsKKyAgICBjb2xvcjogI0U4RThFODsKKyAgICBtYXJnaW46IDAg
YXV0bzsKKyAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKKyAgICBmb250LWZhbWlseTogLWFwcGxl
LXN5c3RlbTsKK30KKzwvc3R5bGU+Cis8c2NyaXB0IHNyYz0iRE9NVGVzdGluZ1V0aWwuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9IkVkaXRpbmdIaXN0b3J5VXRpbC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0PgorY2xhc3MgRE9NVXBkYXRlSGlzdG9yeUNvbnRleHQgeworICAgIGNvbnN0cnVjdG9y
KG5vZGVNYXAsIHVwZGF0ZXMpIHsKKyAgICAgICAgdGhpcy5fbm9kZU1hcCA9IG5vZGVNYXA7Cisg
ICAgICAgIHRoaXMuX3VwZGF0ZXMgPSB1cGRhdGVzOworICAgICAgICB0aGlzLl9jdXJyZW50VXBk
YXRlSW5kZXggPSB1cGRhdGVzLmxlbmd0aDsKKyAgICB9CisKKyAgICBjdXJyZW50SW5kZXgoKSB7
CisgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50VXBkYXRlSW5kZXg7CisgICAgfQorCisgICAg
dXBkYXRlcygpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZXM7CisgICAgfQorCisgICAg
dXBkYXRlQXQoaW5kZXgpIHsKKyAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlz
Ll91cGRhdGVzLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIHJl
dHVybiB0aGlzLl91cGRhdGVzW2luZGV4XTsKKyAgICB9CisKKyAgICBzZWxlY3Rpb25TdGF0ZUF0
KGluZGV4KSB7CisgICAgICAgIGxldCBiZWZvcmVVcGRhdGUgPSB0aGlzLnVwZGF0ZUF0KGluZGV4
IC0gMSk7CisgICAgICAgIGxldCBhZnRlclVwZGF0ZSA9IHRoaXMudXBkYXRlQXQoaW5kZXgpOwor
ICAgICAgICBpZiAoYmVmb3JlVXBkYXRlIGluc3RhbmNlb2YgRWRpdGluZ0hpc3RvcnkuU2VsZWN0
aW9uVXBkYXRlKQorICAgICAgICAgICAgcmV0dXJuIGJlZm9yZVVwZGF0ZS5zdGF0ZTsKKyAgICAg
ICAgaWYgKGFmdGVyVXBkYXRlIGluc3RhbmNlb2YgRWRpdGluZ0hpc3RvcnkuU2VsZWN0aW9uVXBk
YXRlKQorICAgICAgICAgICAgcmV0dXJuIGFmdGVyVXBkYXRlLnN0YXRlOworICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICB9CisKKyAgICBhcHBseUN1cnJlbnRTZWxlY3Rpb25TdGF0ZShzZWxlY3Rp
b24pIHsKKyAgICAgICAgbGV0IHNlbGVjdGlvblN0YXRlID0gdGhpcy5zZWxlY3Rpb25TdGF0ZUF0
KHRoaXMuX2N1cnJlbnRVcGRhdGVJbmRleCk7CisgICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZSAm
JiBzZWxlY3Rpb24pCisgICAgICAgICAgICBzZWxlY3Rpb25TdGF0ZS5hcHBseVRvU2VsZWN0aW9u
KHNlbGVjdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVB
bGxSYW5nZXMoKTsKKyAgICB9CisKKyAgICBuZXh0KCkgeworICAgICAgICBpZiAodGhpcy5fY3Vy
cmVudFVwZGF0ZUluZGV4ID49IHRoaXMuX3VwZGF0ZXMubGVuZ3RoKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIHRoaXMuX3VwZGF0ZXNbdGhpcy5fY3VycmVudFVwZGF0ZUluZGV4XS5h
cHBseSgpOworICAgICAgICB0aGlzLl9jdXJyZW50VXBkYXRlSW5kZXgrKzsKKyAgICB9CisKKyAg
ICBwcmV2aW91cygpIHsKKyAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRVcGRhdGVJbmRleCA8PSAw
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX3VwZGF0ZXNbdGhpcy5fY3Vy
cmVudFVwZGF0ZUluZGV4IC0gMV0udW5hcHBseSgpOworICAgICAgICB0aGlzLl9jdXJyZW50VXBk
YXRlSW5kZXgtLTsKKyAgICB9CisKKyAgICBqdW1wVG8oaW5kZXgpIHsKKyAgICAgICAgaW5kZXgg
PSBNYXRoLm1heChNYXRoLm1pbihpbmRleCwgdGhpcy5fdXBkYXRlcy5sZW5ndGgpLCAwKTsKKyAg
ICAgICAgd2hpbGUodGhpcy5fY3VycmVudFVwZGF0ZUluZGV4ICE9IGluZGV4KSB7CisgICAgICAg
ICAgICBpZiAodGhpcy5fY3VycmVudFVwZGF0ZUluZGV4IDwgaW5kZXgpCisgICAgICAgICAgICAg
ICAgdGhpcy5uZXh0KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGhpcy5w
cmV2aW91cygpOworICAgICAgICB9CisgICAgfQorfQorCit3aW5kb3cub25sb2FkID0gKCkgPT4g
eworICAgIGZ1bmN0aW9uIHNldHVwRWRpdGluZ0hpc3RvcnkoanNvbkRhdGEsIHdpdGhDb250cm9s
cz10cnVlKSB7CisgICAgICAgIGxldCBwYXJzZWRSZXN1bHQgPSBKU09OLnBhcnNlKGpzb25EYXRh
KTsKKyAgICAgICAgbGV0IGdsb2JhbE5vZGVNYXAgPSBFZGl0aW5nSGlzdG9yeS5HbG9iYWxOb2Rl
TWFwLmZyb21PYmplY3QocGFyc2VkUmVzdWx0Lmdsb2JhbE5vZGVNYXApOworICAgICAgICBsZXQg
dXBkYXRlcyA9IHBhcnNlZFJlc3VsdC51cGRhdGVzLm1hcCh1cGRhdGVJbmZvID0+IEVkaXRpbmdI
aXN0b3J5LkRPTVVwZGF0ZS5vZlR5cGUodXBkYXRlSW5mby50eXBlKS5mcm9tT2JqZWN0KHVwZGF0
ZUluZm8sIGdsb2JhbE5vZGVNYXApKTsKKyAgICAgICAgRWRpdGluZ0hpc3RvcnkuY29udGV4dCA9
IG5ldyBET01VcGRhdGVIaXN0b3J5Q29udGV4dChnbG9iYWxOb2RlTWFwLCB1cGRhdGVzKTsKKwor
ICAgICAgICBmdW5jdGlvbiBkZXRhaWxzRWxlbWVudEF0SW5kZXgoaW5kZXgpIHsKKyAgICAgICAg
ICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjdXBkYXRlSW5mby0ke2luZGV4fWAp
OworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdXBkYXRlT3ZlcmxheSgpIHsKKyAgICAg
ICAgICAgIGxldCBjdXJyZW50SW5kZXggPSBFZGl0aW5nSGlzdG9yeS5jb250ZXh0LmN1cnJlbnRJ
bmRleCgpOworICAgICAgICAgICAgbGV0IG51bWJlck9mVXBkYXRlcyA9IEVkaXRpbmdIaXN0b3J5
LmNvbnRleHQudXBkYXRlcygpLmxlbmd0aDsKKyAgICAgICAgICAgIHByb2dyZXNzTGFiZWwudGV4
dENvbnRlbnQgPSBgJHtjdXJyZW50SW5kZXh9LyR7bnVtYmVyT2ZVcGRhdGVzfWA7CisgICAgICAg
ICAgICBwcmV2aW91c0J1dHRvbi5kaXNhYmxlZCA9IGN1cnJlbnRJbmRleCA8PSAwOworICAgICAg
ICAgICAgbmV4dEJ1dHRvbi5kaXNhYmxlZCA9IGN1cnJlbnRJbmRleCA+PSBudW1iZXJPZlVwZGF0
ZXM7CisgICAgICAgICAgICB1cGRhdGVNYXJrZXIucmVtb3ZlKCk7CisgICAgICAgICAgICBpZiAo
MCA8PSBjdXJyZW50SW5kZXggJiYgY3VycmVudEluZGV4IDw9IG51bWJlck9mVXBkYXRlcykgewor
ICAgICAgICAgICAgICAgIGxldCBjdXJyZW50VXBkYXRlRGV0YWlscyA9IGRldGFpbHNFbGVtZW50
QXRJbmRleChjdXJyZW50SW5kZXgpOworICAgICAgICAgICAgICAgIHVwZGF0ZUluZm9QYW5lbC5p
bnNlcnRCZWZvcmUodXBkYXRlTWFya2VyLCBjdXJyZW50VXBkYXRlRGV0YWlscyk7CisgICAgICAg
ICAgICAgICAgaWYgKHVwZGF0ZU1hcmtlci5vZmZzZXRUb3AgPCB1cGRhdGVJbmZvUGFuZWwuc2Ny
b2xsVG9wIHx8IHVwZGF0ZUluZm9QYW5lbC5zY3JvbGxUb3AgKyB1cGRhdGVJbmZvUGFuZWwuY2xp
ZW50SGVpZ2h0IDwgdXBkYXRlTWFya2VyLm9mZnNldFRvcCkKKyAgICAgICAgICAgICAgICB1cGRh
dGVNYXJrZXIuc2Nyb2xsSW50b1ZpZXcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGZ1bmN0aW9uIG9wZW5BbGxEZXRhaWxzVW5kZXJFbGVtZW50KGVsZW1lbnQpIHsKKyAg
ICAgICAgICAgIGZvciAobGV0IGNoaWxkIG9mIEFycmF5LmZyb20oZWxlbWVudC5jaGlsZHJlbikp
IHsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQudGFnTmFtZSA9PT0gIkRFVEFJTFMiKQorICAg
ICAgICAgICAgICAgICAgICBjaGlsZC5vcGVuID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIG9w
ZW5BbGxEZXRhaWxzVW5kZXJFbGVtZW50KGNoaWxkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHVwbG9hZC5yZW1vdmUoKTsKKyAgICAgICAgZHJvcHpvbmUucmVtb3ZlKCk7
CisgICAgICAgIGZvciAobGV0IG5vZGUgb2YgZ2xvYmFsTm9kZU1hcC5ub2RlcygpKSB7CisgICAg
ICAgICAgICBpZiAobm9kZS50YWdOYW1lID09PSAiQk9EWSIpIHsKKyAgICAgICAgICAgICAgICBk
b2N1bWVudC5ib2R5ID0gbm9kZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghd2l0aENvbnRyb2xzKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGxldCBvdmVybGF5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
ZGl2Iik7CisgICAgICAgIG92ZXJsYXkuaWQgPSAib3ZlcmxheSI7CisgICAgICAgIG92ZXJsYXku
aW5uZXJIVE1MID0KKyAgICAgICAgYDxjb2RlPgorICAgICAgICAgICAgPGRpdiBpZD0iaW5mb3Jt
YXRpb24iPgorICAgICAgICAgICAgICAgIDxkaXYgaWQ9InVwZGF0ZUluZm9QYW5lbCI+PC9kaXY+
CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxkaXYgaWQ9ImNvbnRyb2xzIj4KKyAg
ICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJleHBh
bmRCdXR0b24iPjxjb2RlPlNob3cgYWxsPC9jb2RlPjwvYnV0dG9uPjxidXR0b24gaWQ9ImNvbGxh
cHNlQnV0dG9uIj48Y29kZT5IaWRlIGFsbDwvY29kZT48L2J1dHRvbj4KKyAgICAgICAgICAgICAg
ICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgICA8YnV0
dG9uIGRpc2FibGVkIGlkPSJwcmV2aW91c0J1dHRvbiI+Jmx0OzwvYnV0dG9uPjxidXR0b24gZGlz
YWJsZWQgaWQ9Im5leHRCdXR0b24iPiZndDs8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICA8L2Rp
dj4KKyAgICAgICAgICAgICAgICA8ZGl2IGlkPSJwcm9ncmVzc0xhYmVsIj4tLy08L2Rpdj4KKyAg
ICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJ0b2dn
bGVPdmVybGF5QnV0dG9uIj5Ub2dnbGUgb3ZlcmxheTwvYnV0dG9uPgorICAgICAgICAgICAgICAg
IDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvY29kZT5gOworICAgICAgICBk
b2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG92ZXJsYXkpOworICAgICAgICB1cGRhdGVzLmZvckVh
Y2goKHVwZGF0ZSwgaW5kZXgpID0+IHsKKyAgICAgICAgICAgIGxldCBkZXRhaWxzRWxlbWVudCA9
IHVwZGF0ZS5kZXRhaWxzRWxlbWVudCgpOworICAgICAgICAgICAgbGV0IHN1bW1hcnkgPSBkZXRh
aWxzRWxlbWVudC5jaGlsZHJlblswXTsKKyAgICAgICAgICAgIGxldCBpbmRleEVsZW1lbnQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgICAgICBpbmRleEVsZW1lbnQu
aW5uZXJIVE1MID0gYFs8YSBocmVmPSM+JHtpbmRleH08L2E+XSBgOworICAgICAgICAgICAgaW5k
ZXhFbGVtZW50LmNoaWxkcmVuWzBdLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewor
ICAgICAgICAgICAgICAgIEVkaXRpbmdIaXN0b3J5LmNvbnRleHQuanVtcFRvKGluZGV4ICsgMSk7
CisgICAgICAgICAgICAgICAgRWRpdGluZ0hpc3RvcnkuY29udGV4dC5hcHBseUN1cnJlbnRTZWxl
Y3Rpb25TdGF0ZShnZXRTZWxlY3Rpb24oKSk7CisgICAgICAgICAgICAgICAgZGV0YWlsc0VsZW1l
bnQub3BlbiA9IHRydWU7CisgICAgICAgICAgICAgICAgdXBkYXRlT3ZlcmxheSgpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICBzdW1tYXJ5Lmluc2VydEJlZm9yZShpbmRleEVsZW1lbnQs
IHN1bW1hcnkuY2hpbGROb2Rlc1swXSk7CisgICAgICAgICAgICBkZXRhaWxzRWxlbWVudC5pZCA9
IGB1cGRhdGVJbmZvLSR7aW5kZXh9YDsKKyAgICAgICAgICAgIGRldGFpbHNFbGVtZW50LmNsYXNz
TGlzdC5hZGQoInVwZGF0ZUluZm8iKTsKKyAgICAgICAgICAgIGRldGFpbHNFbGVtZW50LmFkZEV2
ZW50TGlzdGVuZXIoImNsaWNrIiwgKGV2ZW50KSA9PiB7CisgICAgICAgICAgICAgICAgaWYgKGV2
ZW50LmFsdEtleSAmJiAhZGV0YWlsc0VsZW1lbnQub3BlbikKKyAgICAgICAgICAgICAgICAgICAg
b3BlbkFsbERldGFpbHNVbmRlckVsZW1lbnQoZGV0YWlsc0VsZW1lbnQpOworCisgICAgICAgICAg
ICAgICAgRWRpdGluZ0hpc3RvcnkuY29udGV4dC5hcHBseUN1cnJlbnRTZWxlY3Rpb25TdGF0ZShn
ZXRTZWxlY3Rpb24oKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHVwZGF0ZUluZm9Q
YW5lbC5hcHBlbmQoZGV0YWlsc0VsZW1lbnQpOworICAgICAgICB9KTsKKyAgICAgICAgbGV0IHVw
ZGF0ZU1hcmtlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICB1cGRh
dGVNYXJrZXIuaWQgPSAidXBkYXRlTWFya2VyIjsKKyAgICAgICAgdXBkYXRlSW5mb1BhbmVsLmFw
cGVuZCh1cGRhdGVNYXJrZXIpOworCisgICAgICAgIG5leHRCdXR0b24uYWRkRXZlbnRMaXN0ZW5l
cigiY2xpY2siLCAoKSA9PiB7CisgICAgICAgICAgICBFZGl0aW5nSGlzdG9yeS5jb250ZXh0Lm5l
eHQoKTsKKyAgICAgICAgICAgIEVkaXRpbmdIaXN0b3J5LmNvbnRleHQuYXBwbHlDdXJyZW50U2Vs
ZWN0aW9uU3RhdGUoZ2V0U2VsZWN0aW9uKCkpOworICAgICAgICAgICAgdXBkYXRlT3ZlcmxheSgp
OworICAgICAgICB9KTsKKworICAgICAgICBwcmV2aW91c0J1dHRvbi5hZGRFdmVudExpc3RlbmVy
KCJjbGljayIsICgpID0+IHsKKyAgICAgICAgICAgIEVkaXRpbmdIaXN0b3J5LmNvbnRleHQucHJl
dmlvdXMoKTsKKyAgICAgICAgICAgIEVkaXRpbmdIaXN0b3J5LmNvbnRleHQuYXBwbHlDdXJyZW50
U2VsZWN0aW9uU3RhdGUoZ2V0U2VsZWN0aW9uKCkpOworICAgICAgICAgICAgdXBkYXRlT3Zlcmxh
eSgpOworICAgICAgICB9KTsKKworICAgICAgICBsZXQgaXNPdmVybGF5RXhwYW5kZWQgPSBmYWxz
ZTsKKyAgICAgICAgdG9nZ2xlT3ZlcmxheUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIs
ICgpID0+IHsKKyAgICAgICAgICAgIGlmIChpc092ZXJsYXlFeHBhbmRlZCkgeworICAgICAgICAg
ICAgICAgIG92ZXJsYXkuc3R5bGUud2lkdGggPSAiMzAwcHgiOworICAgICAgICAgICAgICAgIHRv
Z2dsZU92ZXJsYXlCdXR0b24udmFsdWUgPSAiRXhwYW5kIG92ZXJsYXkiOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBvdmVybGF5LnN0eWxlLndpZHRoID0gIjUwJSI7Cisg
ICAgICAgICAgICAgICAgdG9nZ2xlT3ZlcmxheUJ1dHRvbi52YWx1ZSA9ICJDb2xsYXBzZSBvdmVy
bGF5IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlzT3ZlcmxheUV4cGFuZGVkID0gIWlz
T3ZlcmxheUV4cGFuZGVkOworICAgICAgICB9KTsKKworICAgICAgICBkb2N1bWVudC5hZGRFdmVu
dExpc3RlbmVyKCJrZXlkb3duIiwgZXZlbnQgPT4geworICAgICAgICAgICAgaWYgKGV2ZW50Lmtl
eSA9PT0gIkFycm93UmlnaHQiIHx8IGV2ZW50LmtleSA9PT0gIkFycm93RG93biIpIHsKKyAgICAg
ICAgICAgICAgICByZW1vdmVBbGxIaWdobGlnaHRzKCk7CisgICAgICAgICAgICAgICAgRWRpdGlu
Z0hpc3RvcnkuY29udGV4dC5uZXh0KCk7CisgICAgICAgICAgICAgICAgRWRpdGluZ0hpc3Rvcnku
Y29udGV4dC5hcHBseUN1cnJlbnRTZWxlY3Rpb25TdGF0ZShnZXRTZWxlY3Rpb24oKSk7CisgICAg
ICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICB1cGRh
dGVPdmVybGF5KCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gIkFycm93
TGVmdCIgfHwgZXZlbnQua2V5ID09PSAiQXJyb3dVcCIpIHsKKyAgICAgICAgICAgICAgICByZW1v
dmVBbGxIaWdobGlnaHRzKCk7CisgICAgICAgICAgICAgICAgRWRpdGluZ0hpc3RvcnkuY29udGV4
dC5wcmV2aW91cygpOworICAgICAgICAgICAgICAgIEVkaXRpbmdIaXN0b3J5LmNvbnRleHQuYXBw
bHlDdXJyZW50U2VsZWN0aW9uU3RhdGUoZ2V0U2VsZWN0aW9uKCkpOworICAgICAgICAgICAgICAg
IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgdXBkYXRlT3ZlcmxheSgp
OworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBleHBhbmRCdXR0b24uYWRk
RXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CisgICAgICAgICAgICBkb2N1bWVudC5xdWVy
eVNlbGVjdG9yQWxsKCIudXBkYXRlSW5mbyIpLmZvckVhY2goZGV0YWlscyA9PiBkZXRhaWxzLm9w
ZW4gPSB0cnVlKTsKKyAgICAgICAgICAgIHVwZGF0ZU92ZXJsYXkoKTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgY29sbGFwc2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7
CisgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIudXBkYXRlSW5mbyIpLmZv
ckVhY2goZGV0YWlscyA9PiBkZXRhaWxzLm9wZW4gPSBmYWxzZSk7CisgICAgICAgICAgICB1cGRh
dGVPdmVybGF5KCk7CisgICAgICAgIH0pOworCisgICAgICAgIFsic2VsZWN0c3RhcnQiLCAiZHJh
Z2VudGVyIiwgImRyYWdvdmVyIiwgImRyb3AiLCAiYmVmb3JlaW5wdXQiXS5mb3JFYWNoKCh0eXBl
KSA9PiB7CisgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50
ID0+IGV2ZW50LnByZXZlbnREZWZhdWx0KCkpOworICAgICAgICB9KTsKKworICAgICAgICBkb2N1
bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuZWgtbm9kZSIpLmZvckVhY2goKG5vZGUpID0+IHsKKyAg
ICAgICAgICAgIGxldCBndWlkID0gcGFyc2VJbnQobm9kZS5nZXRBdHRyaWJ1dGUoImVoLWd1aWQi
KSk7CisgICAgICAgICAgICBpZiAoaXNOYU4oZ3VpZCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICBsZXQgdGFyZ2V0Tm9kZSA9IGdsb2JhbE5vZGVNYXAubm9kZUZvckdV
SUQoZ3VpZCk7CisgICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkg
PT4gY29uc29sZS5sb2codGFyZ2V0Tm9kZSkpOworICAgICAgICAgICAgbm9kZS5hZGRFdmVudExp
c3RlbmVyKCJtb3VzZWVudGVyIiwgKCkgPT4gc2hvd0hpZ2hsaWdodE92ZXJOb2RlKHRhcmdldE5v
ZGUpKTsKKyAgICAgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsIHJl
bW92ZUFsbEhpZ2hsaWdodHMpOworICAgICAgICB9KTsKKworICAgICAgICB1cGRhdGVPdmVybGF5
KCk7CisgICAgICAgIEVkaXRpbmdIaXN0b3J5LmNvbnRleHQuYXBwbHlDdXJyZW50U2VsZWN0aW9u
U3RhdGUoZ2V0U2VsZWN0aW9uKCkpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNob3dIaWdobGln
aHRPdmVyTm9kZShub2RlKSB7CisgICAgICAgIGlmICghZG9jdW1lbnQuYm9keS5jb250YWlucyhu
b2RlKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9
PT0gTm9kZS5FTEVNRU5UX05PREUpIHsKKyAgICAgICAgICAgIHNob3dIaWdobGlnaHRPdmVyQm91
bmRpbmdSZWN0KG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVY
VF9OT0RFKSB7CisgICAgICAgICAgICBsZXQgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgp
OworICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKG5vZGUpOworICAgICAgICAg
ICAgc2hvd0hpZ2hsaWdodE92ZXJCb3VuZGluZ1JlY3QocmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRS
ZWN0KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gc2hvd0hpZ2hsaWdodE92
ZXJCb3VuZGluZ1JlY3QoYm91bmRzKSB7CisgICAgICAgIGxldCBoaWdobGlnaHQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgaGlnaGxpZ2h0LmNsYXNzTGlzdC5hZGQo
Im5vZGUtaGlnaGxpZ2h0Iik7CisgICAgICAgIGhpZ2hsaWdodC5zdHlsZS5sZWZ0ID0gYm91bmRz
LmxlZnQgLSAyOworICAgICAgICBoaWdobGlnaHQuc3R5bGUudG9wID0gYm91bmRzLnRvcCAtIDI7
CisgICAgICAgIGhpZ2hsaWdodC5zdHlsZS53aWR0aCA9IGJvdW5kcy53aWR0aCArIDM7CisgICAg
ICAgIGhpZ2hsaWdodC5zdHlsZS5oZWlnaHQgPSBib3VuZHMuaGVpZ2h0ICsgMzsKKyAgICAgICAg
ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoaWdobGlnaHQpOworICAgIH0KKworICAgIGZ1bmN0
aW9uIHJlbW92ZUFsbEhpZ2hsaWdodHMoKSB7CisgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0
b3JBbGwoIi5ub2RlLWhpZ2hsaWdodCIpLmZvckVhY2goaGlnaGxpZ2h0ID0+IGhpZ2hsaWdodC5y
ZW1vdmUoKSk7CisgICAgfQorCisgICAgZHJvcHpvbmUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vl
bnRlciIsIGVtcGhhc2l6ZURyb3ApOworICAgIGRyb3B6b25lLmFkZEV2ZW50TGlzdGVuZXIoIm1v
dXNlbGVhdmUiLCB1bmVtcGhhc2l6ZURyb3ApOworICAgIGRyb3B6b25lLmFkZEV2ZW50TGlzdGVu
ZXIoImRyYWdlbnRlciIsIGVtcGhhc2l6ZURyb3ApOworICAgIGRyb3B6b25lLmFkZEV2ZW50TGlz
dGVuZXIoImRyYWdsZWF2ZSIsIHVuZW1waGFzaXplRHJvcCk7CisgICAgZHJvcHpvbmUuYWRkRXZl
bnRMaXN0ZW5lcigiZHJhZ292ZXIiLCBldmVudCA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpKTsK
KyAgICBkcm9wem9uZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHVwbG9hZC5jbGlj
aygpKTsKKyAgICBkcm9wem9uZS5hZGRFdmVudExpc3RlbmVyKCJkcm9wIiwgZHJvcEV2ZW50ID0+
IHsKKyAgICAgICAgZHJvcEV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgIGZpbGVTZWxl
Y3RlZChkcm9wRXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzKTsKKyAgICB9KTsKKworICAgIHVwbG9h
ZC5maWxlcyA9IG51bGw7CisgICAgRWRpdGluZ0hpc3Rvcnkuc2V0dXBFZGl0aW5nSGlzdG9yeSA9
IHNldHVwRWRpdGluZ0hpc3Rvcnk7Cit9OworCitmdW5jdGlvbiBlbXBoYXNpemVEcm9wKGV2ZW50
KSB7CisgICAgZHJvcHpvbmUuc3R5bGUuYm9yZGVyID0gIjE1cHggI0Q4RDhEOCBkYXNoZWQiOwor
ICAgIGRyb3BNZXNzYWdlLnN0eWxlLmNvbG9yID0gIiNEOEQ4RDgiOworICAgIGV2ZW50LnByZXZl
bnREZWZhdWx0KCk7Cit9CisKK2Z1bmN0aW9uIHVuZW1waGFzaXplRHJvcChldmVudCkgeworICAg
IGRyb3B6b25lLnN0eWxlLmJvcmRlciA9ICIxNXB4ICNFOEU4RTggZGFzaGVkIjsKKyAgICBkcm9w
TWVzc2FnZS5zdHlsZS5jb2xvciA9ICIjRThFOEU4IjsKKyAgICBldmVudC5wcmV2ZW50RGVmYXVs
dCgpOworfQorCitmdW5jdGlvbiBmaWxlU2VsZWN0ZWQoZmlsZXMpIHsKKyAgICBkcm9wem9uZS5y
ZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIiwgZW1waGFzaXplRHJvcCk7CisgICAgZHJv
cHpvbmUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsIHVuZW1waGFzaXplRHJvcCk7
CisgICAgZHJvcHpvbmUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ2VudGVyIiwgZW1waGFzaXpl
RHJvcCk7CisgICAgZHJvcHpvbmUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ2xlYXZlIiwgdW5l
bXBoYXNpemVEcm9wKTsKKworICAgIGNvbnNvbGUubG9nKGBTZWxlY3RlZCAke2ZpbGVzLmxlbmd0
aH0gZmlsZShzKS5gKTsKKworICAgIGxldCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOworICAg
IHJlYWRlci5vbmxvYWQgPSBldmVudCA9PiBFZGl0aW5nSGlzdG9yeS5zZXR1cEVkaXRpbmdIaXN0
b3J5KGV2ZW50LnRhcmdldC5yZXN1bHQpOworICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGVzWzBd
KTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisgICAgPGRpdiBpZD0iZHJvcHpvbmUi
PgorICAgICAgICA8ZGl2IGlkPSJkcm9wTWVzc2FnZSI+RHJvcCBhbiBlZGl0aW5nIHJlY29yZCBo
ZXJlPC9kaXY+CisgICAgPC9kaXY+CisgICAgPGlucHV0IGlkPSJ1cGxvYWQiIG9uY2hhbmdlPWZp
bGVTZWxlY3RlZChmaWxlcykgdHlwZT0iZmlsZSI+PC9pbnB1dD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Rlc3RSdW5u
ZXIuaCBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Rlc3RSdW5uZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wMGRjZWQxYTcyM2Y3MDcyN2ZhOTUxMGU2MzM2MDhiMGQzYWRiNWIxCi0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvVGVzdFJ1
bm5lci5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxBcHBLaXQvQXBw
S2l0Lmg+CisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPFdlYktp
dC9XZWJLaXQuaD4KKworQGludGVyZmFjZSBUZXN0UnVubmVyIDogTlNPYmplY3QKKworQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU1dpbmRvdyAqd2luZG93OworQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5KSBXS1dlYlZpZXcgKndlYlZpZXc7CisKKy0gKHZvaWQpZXhwZWN0
RXZlbnRzOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgTlNOdW1iZXIgKj4gKilleHBlY3RlZEV2
ZW50Q291bnRzIGFmdGVyUGVyZm9ybWluZzooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb247CistICh2
b2lkKWxvYWRDYXB0dXJlVGVzdEhhcm5lc3M7CistICh2b2lkKWxvYWRQbGF5YmFja1Rlc3RIYXJu
ZXNzV2l0aEpTT046KE5TU3RyaW5nICopanNvbjsKKy0gKHZvaWQpc2V0VGV4dE9iZnVzY2F0aW9u
RW5hYmxlZDooQk9PTCllbmFibGVkOworLSAodm9pZCl0eXBlU3RyaW5nOihOU1N0cmluZyAqKXN0
cmluZzsKKy0gKHZvaWQpanVtcFRvVXBkYXRlSW5kZXg6KE5TSW50ZWdlcilpbmRleDsKKy0gKHZv
aWQpZGVsZXRlQmFja3dhcmRzOihOU0ludGVnZXIpdGltZXM7CitAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIE5TU3RyaW5nICplZGl0aW5nSGlzdG9yeUpTT047CitAcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHkpIE5TU3RyaW5nICpib2R5RWxlbWVudFN1YnRyZWU7CitAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TU3RyaW5nICpib2R5VGV4dENvbnRlbnQ7CitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TSW50ZWdlciBudW1iZXJPZlVwZGF0ZXM7CisK
K0BlbmQKZGlmZiAtLWdpdCBhL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Rl
c3RSdW5uZXIubSBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1Rlc3RSdW5u
ZXIubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42MzFiZjQ3ZGViNzczMjM2MWFhZmEwMDE3MTRlN2U0Mzk0MmVhOWVh
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3Rvcnkv
VGVzdFJ1bm5lci5tCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJUZXN0UnVubmVyLmgiCisKKyNpbXBvcnQgIlRlc3RVdGlsLmgiCisj
aW1wb3J0ICJXS1dlYlZpZXdBZGRpdGlvbnMuaCIKKyNpbXBvcnQgPENhcmJvbi9DYXJib24uaD4K
Kworc3RhdGljIFdLVXNlclNjcmlwdCAqaW5qZWN0ZWRNZXNzYWdlRXZlbnRIYW5kbGVyU2NyaXB0
KE5TU3RyaW5nICpsaXN0ZW5lciwgTlNTdHJpbmcgKmV2ZW50KQoreworICAgIE5TU3RyaW5nICpz
b3VyY2UgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVALmFkZEV2ZW50TGlzdGVuZXIo
JyVAJywgKCkgPT4geyIKKyAgICAgICAgInNldFRpbWVvdXQoKCkgPT4gd2Via2l0Lm1lc3NhZ2VI
YW5kbGVycy5ldmVudEhhbmRsZXIucG9zdE1lc3NhZ2UoJyVAJyksIDApOyIKKyAgICAgICAgIn0p
OyIsIGxpc3RlbmVyLCBldmVudCwgZXZlbnRdOworICAgIHJldHVybiBbW1dLVXNlclNjcmlwdCBh
bGxvY10gaW5pdFdpdGhTb3VyY2U6c291cmNlIGluamVjdGlvblRpbWU6V0tVc2VyU2NyaXB0SW5q
ZWN0aW9uVGltZUF0RG9jdW1lbnRFbmQgZm9yTWFpbkZyYW1lT25seTpZRVNdOworfQorCitAaW50
ZXJmYWNlIFRlc3RSdW5uZXIgKCkgPFdLU2NyaXB0TWVzc2FnZUhhbmRsZXI+CisKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljKSBOU011dGFibGVEaWN0aW9uYXJ5ICpwZW5kaW5nRXZlbnRDb3VudHM7CisK
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RSdW5uZXIKKworLSAoaW5zdGFuY2V0eXBlKWlu
aXQKK3sKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gW1tOU1dpbmRvdyBhbGxvY10gaW5pdFdpdGhD
b250ZW50UmVjdDpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBzdHlsZU1hc2s6TlNXaW5kb3dT
dHlsZU1hc2tCb3JkZXJsZXNzIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZlcjpO
T107CisgICAgW3dpbmRvdyBzZXRGcmFtZU9yaWdpbjpOU01ha2VQb2ludCgwLCAwKV07CisgICAg
W3dpbmRvdyBzZXRJc1Zpc2libGU6WUVTXTsKKworICAgIFdLV2ViVmlldyAqd2ViVmlldyA9IFtb
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDAp
XTsKKyAgICBbW3dpbmRvdyBjb250ZW50Vmlld10gYWRkU3Vidmlldzp3ZWJWaWV3XTsKKyAgICBb
d2luZG93IG1ha2VLZXlBbmRPcmRlckZyb250OndlYlZpZXddOworICAgIFt3ZWJWaWV3IGJlY29t
ZUZpcnN0UmVzcG9uZGVyXTsKKworICAgIF93aW5kb3cgPSB3aW5kb3c7CisgICAgX3dlYlZpZXcg
PSB3ZWJWaWV3OworICAgIF9wZW5kaW5nRXZlbnRDb3VudHMgPSBuaWw7CisKKyAgICBXS1VzZXJD
b250ZW50Q29udHJvbGxlciAqY29udGVudENvbnRyb2xsZXIgPSB3ZWJWaWV3LmNvbmZpZ3VyYXRp
b24udXNlckNvbnRlbnRDb250cm9sbGVyOworICAgIFtjb250ZW50Q29udHJvbGxlciBhZGRTY3Jp
cHRNZXNzYWdlSGFuZGxlcjpzZWxmIG5hbWU6QCJldmVudEhhbmRsZXIiXTsKKyAgICBbY29udGVu
dENvbnRyb2xsZXIgYWRkVXNlclNjcmlwdDppbmplY3RlZE1lc3NhZ2VFdmVudEhhbmRsZXJTY3Jp
cHQoQCJkb2N1bWVudC5ib2R5IiwgQCJmb2N1cyIpXTsKKyAgICBbY29udGVudENvbnRyb2xsZXIg
YWRkVXNlclNjcmlwdDppbmplY3RlZE1lc3NhZ2VFdmVudEhhbmRsZXJTY3JpcHQoQCJkb2N1bWVu
dCIsIEAiaW5wdXQiKV07CisgICAgW2NvbnRlbnRDb250cm9sbGVyIGFkZFVzZXJTY3JpcHQ6aW5q
ZWN0ZWRNZXNzYWdlRXZlbnRIYW5kbGVyU2NyaXB0KEAiZG9jdW1lbnQiLCBAInNlbGVjdGlvbmNo
YW5nZSIpXTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlbGV0ZUJhY2t3YXJk
czooTlNJbnRlZ2VyKXRpbWVzCit7CisgICAgZm9yIChOU0ludGVnZXIgaSA9IDA7IGkgPCB0aW1l
czsgaSsrKSB7CisgICAgICAgIFtzZWxmIGV4cGVjdEV2ZW50czpAeyBAImlucHV0IjogQDEsIEAi
c2VsZWN0aW9uY2hhbmdlIjogQDEgfSBhZnRlclBlcmZvcm1pbmc6XigpIHsKKyAgICAgICAgICAg
IFtfd2ViVmlldyBrZXlQcmVzc1dpdGhDaGFyYWN0ZXJzOm5pbCBrZXlDb2RlOktleUNvZGVUeXBl
RGVsZXRlQmFja3dhcmRdOworICAgICAgICB9XTsKKyAgICB9Cit9CisKKy0gKHZvaWQpdHlwZVN0
cmluZzooTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICBmb3IgKE5TSW50ZWdlciBjaGFySW5kZXgg
PSAwOyBjaGFySW5kZXggPCBzdHJpbmcubGVuZ3RoOyBjaGFySW5kZXgrKykgeworICAgICAgICBb
c2VsZiBleHBlY3RFdmVudHM6QHsgQCJpbnB1dCI6IEAxLCBAInNlbGVjdGlvbmNoYW5nZSI6IEAx
IH0gYWZ0ZXJQZXJmb3JtaW5nOl4oKSB7CisgICAgICAgICAgICBbX3dlYlZpZXcgdHlwZUNoYXJh
Y3Rlcjpbc3RyaW5nIGNoYXJhY3RlckF0SW5kZXg6Y2hhckluZGV4XV07CisgICAgICAgIH1dOwor
ICAgIH0KK30KKworLSAoTlNTdHJpbmcgKilib2R5RWxlbWVudFN1YnRyZWUKK3sKKyAgICByZXR1
cm4gW193ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOltOU1N0
cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRE9NVXRpbC5zdWJ0cmVlQXNTdHJpbmcoZG9jdW1lbnQu
Ym9keSkiXV07Cit9CisKKy0gKE5TU3RyaW5nICopYm9keVRleHRDb250ZW50Cit7CisgICAgcmV0
dXJuIFtfd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzpbTlNT
dHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImRvY3VtZW50LmJvZHkudGV4dENvbnRlbnQiXV07Cit9
CisKKy0gKE5TU3RyaW5nICopZWRpdGluZ0hpc3RvcnlKU09OCit7CisgICAgcmV0dXJuIFtfd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzpbTlNTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpAIkVkaXRpbmdIaXN0b3J5LmdldEVkaXRpbmdIaXN0b3J5QXNKU09OU3Ry
aW5nKGZhbHNlKSJdXTsKK30KKworLSAodm9pZClsb2FkUGxheWJhY2tUZXN0SGFybmVzc1dpdGhK
U09OOihOU1N0cmluZyAqKWpzb24KK3sKKyAgICBbX3dlYlZpZXcgbG9hZFBhZ2VGcm9tQnVuZGxl
TmFtZWQ6QCJQbGF5YmFja0hhcm5lc3MiXTsKKyAgICB3YWl0VW50aWwoQ09ORElUSU9OX0JMT0NL
KFtbX3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6QCIhIXdp
bmRvdy5FZGl0aW5nSGlzdG9yeSAmJiAhIUVkaXRpbmdIaXN0b3J5LnNldHVwRWRpdGluZ0hpc3Rv
cnkiXSBib29sVmFsdWVdKSk7CisKKyAgICBqc29uID0gW1tqc29uIHN0cmluZ0J5UmVwbGFjaW5n
T2NjdXJyZW5jZXNPZlN0cmluZzpAIlxcIiB3aXRoU3RyaW5nOkAiXFxcXCJdIHN0cmluZ0J5UmVw
bGFjaW5nT2NjdXJyZW5jZXNPZlN0cmluZzpAImAiIHdpdGhTdHJpbmc6QCJcXGAiXTsKKyAgICBb
X3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6W05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCJFZGl0aW5nSGlzdG9yeS5zZXR1cEVkaXRpbmdIaXN0b3J5KGAl
QGAsIGZhbHNlKSIsIGpzb25dXTsKK30KKworLSAoTlNJbnRlZ2VyKW51bWJlck9mVXBkYXRlcyB7
CisgICAgcmV0dXJuIFtbX3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21T
dHJpbmc6QCJFZGl0aW5nSGlzdG9yeS5jb250ZXh0LnVwZGF0ZXMoKS5sZW5ndGgiXSBpbnRlZ2Vy
VmFsdWVdOworfQorCistICh2b2lkKWp1bXBUb1VwZGF0ZUluZGV4OihOU0ludGVnZXIpaW5kZXgK
K3sKKyAgICBbX3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6
W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFZGl0aW5nSGlzdG9yeS5jb250ZXh0Lmp1bXBU
bygldHUpIiwgaW5kZXhdXTsKK30KKworLSAodm9pZClleHBlY3RFdmVudHM6KE5TRGljdGlvbmFy
eTxOU1N0cmluZyAqLCBOU051bWJlciAqPiAqKWV4cGVjdGVkRXZlbnRDb3VudHMgYWZ0ZXJQZXJm
b3JtaW5nOihkaXNwYXRjaF9ibG9ja190KWFjdGlvbgoreworICAgIF9wZW5kaW5nRXZlbnRDb3Vu
dHMgPSBbZXhwZWN0ZWRFdmVudENvdW50cyBtdXRhYmxlQ29weV07CisgICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgYWN0aW9uKTsKKyAgICB3YWl0VW50aWwoQ09O
RElUSU9OX0JMT0NLKHNlbGYuaXNEb25lV2FpdGluZ0ZvclBlbmRpbmdFdmVudHMpKTsKKyAgICBf
cGVuZGluZ0V2ZW50Q291bnRzID0gbmlsOworfQorCistICh2b2lkKWxvYWRDYXB0dXJlVGVzdEhh
cm5lc3MKK3sKKyAgICBbc2VsZiBleHBlY3RFdmVudHM6QHsgQCJmb2N1cyIgOiBAMSB9IGFmdGVy
UGVyZm9ybWluZzpeKCkgeworICAgICAgICBbX3dlYlZpZXcgbG9hZFBhZ2VGcm9tQnVuZGxlTmFt
ZWQ6QCJDYXB0dXJlSGFybmVzcyJdOworICAgIH1dOworfQorCistICh2b2lkKXNldFRleHRPYmZ1
c2NhdGlvbkVuYWJsZWQ6KEJPT0wpZW5hYmxlZAoreworICAgIFtfd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
IkVkaXRpbmdIaXN0b3J5Lk9iZnVzY2F0b3Iuc2hhcmVkKCkuZW5hYmxlZCA9ICVzIiwgZW5hYmxl
ZCA/ICJ0cnVlIiA6ICJmYWxzZSJdXTsKK30KKworLSAoQk9PTClpc0RvbmVXYWl0aW5nRm9yUGVu
ZGluZ0V2ZW50cworeworICAgIE5TSW50ZWdlciBudW1iZXJPZlBlbmRpbmdFdmVudHMgPSAwOwor
ICAgIGZvciAoTlNOdW1iZXIgKmNvdW50IGluIF9wZW5kaW5nRXZlbnRDb3VudHMuYWxsVmFsdWVz
KQorICAgICAgICBudW1iZXJPZlBlbmRpbmdFdmVudHMgKz0gW2NvdW50IGludGVnZXJWYWx1ZV07
CisgICAgcmV0dXJuIF9wZW5kaW5nRXZlbnRDb3VudHMgJiYgIW51bWJlck9mUGVuZGluZ0V2ZW50
czsKK30KKworLSAodm9pZCl1c2VyQ29udGVudENvbnRyb2xsZXI6KFdLVXNlckNvbnRlbnRDb250
cm9sbGVyICopdXNlckNvbnRlbnRDb250cm9sbGVyIGRpZFJlY2VpdmVTY3JpcHRNZXNzYWdlOihX
S1NjcmlwdE1lc3NhZ2UgKiltZXNzYWdlCit7CisgICAgaWYgKFttZXNzYWdlLm5hbWUgaXNFcXVh
bFRvU3RyaW5nOkAiZXZlbnRIYW5kbGVyIl0gJiYgX3BlbmRpbmdFdmVudENvdW50cykgeworICAg
ICAgICBOU1N0cmluZyAqZXZlbnRUeXBlID0gbWVzc2FnZS5ib2R5OworICAgICAgICBfcGVuZGlu
Z0V2ZW50Q291bnRzW2V2ZW50VHlwZV0gPSBAKE1BWCgwLCBbX3BlbmRpbmdFdmVudENvdW50c1tl
dmVudFR5cGVdIGludGVnZXJWYWx1ZV0gLSAxKSk7CisgICAgfQorfQorCitAZW5kCmRpZmYgLS1n
aXQgYS9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9UZXN0VXRpbC5oIGIvVG9v
bHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvVGVzdFV0aWwuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
ZDRjMzEzZmQxZjdkMTFiMzJiZTY3ODFkYTRiYmE0NmI4NWRlZmE0Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvVGVzdFV0aWwuaApAQCAtMCww
ICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbXBvcnQgPEZvdW5kYXRp
b24vRm91bmRhdGlvbi5oPgorCisvLyBTb21lIG5hbWVkIGtleSBjb2RlcywgbWFpbmx5IGZvciBj
b252ZW5pZW5jZS4KK2VudW0gS2V5Q29kZVR5cGUgeworICAgIEtleUNvZGVUeXBlRGVsZXRlQmFj
a3dhcmQgPSAweDMzLAorICAgIEtleUNvZGVUeXBlTGVmdEFycm93ID0gMHg3QiwKKyAgICBLZXlD
b2RlVHlwZVJpZ2h0QXJyb3cgPSAweDdDCit9OworCisvKioKKyAqIFJldHVybiBZRVMgd2hlbiB0
aGUgY29uZGl0aW9uIGlzIGRvbmUgYW5kIHRoZSBwcm9ncmFtIHNob3VsZCBzdG9wIHNwaW5uaW5n
LgorICovCit0eXBlZGVmIEJPT0wgKF5Db25kaXRpb25CbG9jaykoKTsKKyNkZWZpbmUgQ09ORElU
SU9OX0JMT0NLKGV4cHIpIF5CT09MKCkgeyByZXR1cm4gZXhwcjsgfQorCisvKioKKyAqIFNwaW5z
IGEgcnVubG9vcCB1bnRpbCB0aGUgZ2l2ZW4gY29uZGl0aW9uIGJsb2NrIGV2YWx1YXRlcyB0byBZ
RVMuIElmIHRoZSBnaXZlbiB0aW1lb3V0IGludGVydmFsIGhhcyBlbGFwc2VkLCBhbmQgdGhlIGNv
bmRpdGlvbiBpcyBzdGlsbCB1bnNhdGlzZmllZCwKKyAqIHN0b3Agc3Bpbm5pbmcgYW5kIHJldHVy
biBOTy4gT3RoZXJ3aXNlLCByZXR1cm4gWUVTLgorICovCitCT09MIHdhaXRVbnRpbFdpdGhUaW1l
b3V0KENvbmRpdGlvbkJsb2NrLCBOU1RpbWVJbnRlcnZhbCk7CitCT09MIHdhaXRVbnRpbChDb25k
aXRpb25CbG9jayk7CmRpZmYgLS1naXQgYS9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlz
dG9yeS9UZXN0VXRpbC5tIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvVGVz
dFV0aWwubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44ZDkzZTZkNjhhM2E1YjAwODRjNjdjNzAyM2Q1MGY4Y2I2NGEy
NTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRWRpdGluZ0hpc3RvcnkvRWRpdGluZ0hpc3Rv
cnkvVGVzdFV0aWwubQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJUZXN0VXRpbC5oIgorCitjb25zdCBOU1RpbWVJbnRlcnZhbCBEZWZh
dWx0VGltZW91dEludGVydmFsID0gMTA7CisKK0JPT0wgd2FpdFVudGlsV2l0aFRpbWVvdXQoQ29u
ZGl0aW9uQmxvY2sgY29uZGl0aW9uLCBOU1RpbWVJbnRlcnZhbCB0aW1lb3V0KQoreworICAgIE5T
VGltZUludGVydmFsIHN0YXJ0VGltZSA9IFtOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVu
Y2VEYXRlXTsKKyAgICB3aGlsZSAoW1tOU1J1bkxvb3AgY3VycmVudFJ1bkxvb3BdIHJ1bk1vZGU6
TlNEZWZhdWx0UnVuTG9vcE1vZGUgYmVmb3JlRGF0ZTpbTlNEYXRlIGRpc3RhbnRQYXN0XV0gJiYg
W05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdIC0gc3RhcnRUaW1lIDwgdGlt
ZW91dCkgeworICAgICAgICBpZiAoY29uZGl0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gWUVT
OworICAgIH0KKyAgICByZXR1cm4gTk87Cit9CisKK0JPT0wgd2FpdFVudGlsKENvbmRpdGlvbkJs
b2NrIGNvbmRpdGlvbikKK3sKKyAgICByZXR1cm4gd2FpdFVudGlsV2l0aFRpbWVvdXQoY29uZGl0
aW9uLCBEZWZhdWx0VGltZW91dEludGVydmFsKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL0VkaXRp
bmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1dLV2ViVmlld0FkZGl0aW9ucy5oIGIvVG9vbHMvRWRp
dGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvV0tXZWJWaWV3QWRkaXRpb25zLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZGZkMzgzMzBkYjNmYWUyYjQ1YTcyYjRmNjNjYTY4ZTc3YWZmNzdjNQotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1dLV2ViVmlld0FkZGl0
aW9ucy5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQvV2Vi
S2l0Lmg+CisKK05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisKK0BpbnRlcmZhY2UgV0tXZWJWaWV3
IChFZGl0aW5nSGlzdG9yeVRlc3QpCisKKy0gKHZvaWQpbG9hZFBhZ2VGcm9tQnVuZGxlTmFtZWQ6
KE5TU3RyaW5nICopbmFtZTsKKy0gKHZvaWQpdHlwZUNoYXJhY3RlcjooY2hhciljaGFyYWN0ZXI7
CistICh2b2lkKWtleVByZXNzV2l0aENoYXJhY3RlcnM6KG51bGxhYmxlIE5TU3RyaW5nICopY2hh
cmFjdGVycyBrZXlDb2RlOihjaGFyKWtleUNvZGU7CistIChudWxsYWJsZSBOU1N0cmluZyAqKXN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOihOU1N0cmluZyAqKXNjcmlwdDsK
KworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBhL1Rvb2xzL0VkaXRp
bmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1dLV2ViVmlld0FkZGl0aW9ucy5tIGIvVG9vbHMvRWRp
dGluZ0hpc3RvcnkvRWRpdGluZ0hpc3RvcnkvV0tXZWJWaWV3QWRkaXRpb25zLm0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNDk3OTMwZGNkZDZjMTJkOTdkMDk3MWFhM2Y5MTI1ZDA1NjA4MTg1YwotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L1dLV2ViVmlld0FkZGl0
aW9ucy5tCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIldLV2ViVmlld0FkZGl0aW9ucy5oIgorCisjaW1wb3J0ICJUZXN0VXRpbC5oIgor
CisjaW1wb3J0IDxDYXJib24vQ2FyYm9uLmg+CisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcg
KEVkaXRpbmdIaXN0b3J5VGVzdCkKKworLSAodm9pZClsb2FkUGFnZUZyb21CdW5kbGVOYW1lZDoo
TlNTdHJpbmcgKiluYW1lCit7CisgICAgTlNVUkwgKnBhdGhUb1BhZ2UgPSBbW05TQnVuZGxlIG1h
aW5CdW5kbGVdIFVSTEZvclJlc291cmNlOm5hbWUgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRp
cmVjdG9yeTpuaWxdOworICAgIFtzZWxmIGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVz
dFdpdGhVUkw6cGF0aFRvUGFnZV1dOworfQorCistICh2b2lkKXR5cGVDaGFyYWN0ZXI6KGNoYXIp
Y2hhcmFjdGVyCit7CisgICAgW3NlbGYga2V5UHJlc3NXaXRoQ2hhcmFjdGVyczpbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIiVjIiwgY2hhcmFjdGVyXSBrZXlDb2RlOmNoYXJhY3Rlcl07Cit9
CisKKy0gKHZvaWQpa2V5UHJlc3NXaXRoQ2hhcmFjdGVyczoobnVsbGFibGUgTlNTdHJpbmcgKilj
aGFyYWN0ZXJzIGtleUNvZGU6KGNoYXIpa2V5Q29kZQoreworICAgIE5TRXZlbnRUeXBlIGtleURv
d25FdmVudFR5cGUgPSBOU0V2ZW50VHlwZUtleURvd247CisgICAgTlNFdmVudFR5cGUga2V5VXBF
dmVudFR5cGUgPSBOU0V2ZW50VHlwZUtleVVwOworICAgIFtzZWxmIGtleURvd246W05TRXZlbnQg
a2V5RXZlbnRXaXRoVHlwZTprZXlEb3duRXZlbnRUeXBlIGxvY2F0aW9uOk5TWmVyb1BvaW50IG1v
ZGlmaWVyRmxhZ3M6MCB0aW1lc3RhbXA6R2V0Q3VycmVudEV2ZW50VGltZSgpIHdpbmRvd051bWJl
cjpzZWxmLndpbmRvdy53aW5kb3dOdW1iZXIgY29udGV4dDpuaWwgY2hhcmFjdGVyczpjaGFyYWN0
ZXJzIGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyczpjaGFyYWN0ZXJzIGlzQVJlcGVhdDpOTyBr
ZXlDb2RlOmtleUNvZGVdXTsKKyAgICBbc2VsZiBrZXlVcDpbTlNFdmVudCBrZXlFdmVudFdpdGhU
eXBlOmtleVVwRXZlbnRUeXBlIGxvY2F0aW9uOk5TWmVyb1BvaW50IG1vZGlmaWVyRmxhZ3M6MCB0
aW1lc3RhbXA6R2V0Q3VycmVudEV2ZW50VGltZSgpIHdpbmRvd051bWJlcjpzZWxmLndpbmRvdy53
aW5kb3dOdW1iZXIgY29udGV4dDpuaWwgY2hhcmFjdGVyczpjaGFyYWN0ZXJzIGNoYXJhY3RlcnNJ
Z25vcmluZ01vZGlmaWVyczpjaGFyYWN0ZXJzIGlzQVJlcGVhdDpOTyBrZXlDb2RlOmtleUNvZGVd
XTsKK30KKworLSAobnVsbGFibGUgTlNTdHJpbmcgKilzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0RnJvbVN0cmluZzooTlNTdHJpbmcgKilzY3JpcHQKK3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9u
ZUV2YWx1YXRpbmdKYXZhU2NyaXB0ID0gZmFsc2U7CisgICAgX19ibG9jayBOU1N0cmluZyAqcmV0
dXJuUmVzdWx0ID0gbmlsOworICAgIFtzZWxmIGV2YWx1YXRlSmF2YVNjcmlwdDpzY3JpcHQgY29t
cGxldGlvbkhhbmRsZXI6XihpZCByZXR1cm5WYWx1ZSwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAg
ICAgaWYgKGVycm9yKQorICAgICAgICAgICAgTlNMb2coQCJFcnJvciBldmFsdWF0aW5nIEphdmFT
Y3JpcHQ6ICVAIiwgZXJyb3IpOworCisgICAgICAgIHJldHVyblJlc3VsdCA9IGVycm9yIHx8ICFy
ZXR1cm5WYWx1ZSA/IG5pbCA6IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAiLCByZXR1
cm5WYWx1ZV07CisgICAgICAgIGRvbmVFdmFsdWF0aW5nSmF2YVNjcmlwdCA9IHRydWU7CisgICAg
fV07CisgICAgd2FpdFVudGlsKENPTkRJVElPTl9CTE9DSyhkb25lRXZhbHVhdGluZ0phdmFTY3Jp
cHQpKTsKKyAgICByZXR1cm4gcmV0dXJuUmVzdWx0OworfQorCitAZW5kCmRpZmYgLS1naXQgYS9U
b29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9tYWluLm0gYi9Ub29scy9FZGl0aW5n
SGlzdG9yeS9FZGl0aW5nSGlzdG9yeS9tYWluLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTdlODQ4NTBhOWM0MDhl
ZGJlMGM1NDAxZmNiNmQ3M2FmM2Q2OGU4MwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0VkaXRp
bmdIaXN0b3J5L0VkaXRpbmdIaXN0b3J5L21haW4ubQpAQCAtMCwwICsxLDM0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2ltcG9ydCA8QXBwS2l0L0FwcEtpdC5oPgorI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4K
KworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiBhcmd2W10pCit7CisgICAgW1tOU1dv
cmtzcGFjZSBzaGFyZWRXb3Jrc3BhY2VdIG9wZW5GaWxlOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0g
cGF0aEZvclJlc291cmNlOkAiUGxheWJhY2tIYXJuZXNzIiBvZlR5cGU6QCJodG1sIl0gd2l0aEFw
cGxpY2F0aW9uOkAiU2FmYXJpIl07CisKKyAgICByZXR1cm4gTlNBcHBsaWNhdGlvbk1haW4oYXJn
YywgYXJndik7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlz
dG9yeVRlc3RzL0luZm8ucGxpc3QgYi9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9y
eVRlc3RzL0luZm8ucGxpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmM2YzIzYzQzYWRjODg2MjFjZTNhYmZiZDE1
ODVjODc5MmJkMTY1YwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0Vk
aXRpbmdIaXN0b3J5VGVzdHMvSW5mby5wbGlzdApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJz
aW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8v
QXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9w
ZXJ0eUxpc3QtMS4wLmR0ZCI+Cis8cGxpc3QgdmVyc2lvbj0iMS4wIj4KKzxkaWN0PgorCTxrZXk+
Q0ZCdW5kbGVEZXZlbG9wbWVudFJlZ2lvbjwva2V5PgorCTxzdHJpbmc+ZW48L3N0cmluZz4KKwk8
a2V5PkNGQnVuZGxlRXhlY3V0YWJsZTwva2V5PgorCTxzdHJpbmc+JChFWEVDVVRBQkxFX05BTUUp
PC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZUlkZW50aWZpZXI8L2tleT4KKwk8c3RyaW5nPiQoUFJP
RFVDVF9CVU5ETEVfSURFTlRJRklFUik8L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlSW5mb0RpY3Rp
b25hcnlWZXJzaW9uPC9rZXk+CisJPHN0cmluZz42LjA8L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxl
TmFtZTwva2V5PgorCTxzdHJpbmc+JChQUk9EVUNUX05BTUUpPC9zdHJpbmc+CisJPGtleT5DRkJ1
bmRsZVBhY2thZ2VUeXBlPC9rZXk+CisJPHN0cmluZz5CTkRMPC9zdHJpbmc+CisJPGtleT5DRkJ1
bmRsZVNob3J0VmVyc2lvblN0cmluZzwva2V5PgorCTxzdHJpbmc+MS4wPC9zdHJpbmc+CisJPGtl
eT5DRkJ1bmRsZVZlcnNpb248L2tleT4KKwk8c3RyaW5nPjE8L3N0cmluZz4KKzwvZGljdD4KKzwv
cGxpc3Q+CmRpZmYgLS1naXQgYS9Ub29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeVRl
c3RzL1Jld2luZEFuZFBsYXliYWNrVGVzdHMubSBiL1Rvb2xzL0VkaXRpbmdIaXN0b3J5L0VkaXRp
bmdIaXN0b3J5VGVzdHMvUmV3aW5kQW5kUGxheWJhY2tUZXN0cy5tCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJjYmY0
OGE3ZjZjMWJlMjk5ZmYyYmM2MTkzMjlhMWUxYTQyZDBkZGIKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9FZGl0aW5nSGlzdG9yeS9FZGl0aW5nSGlzdG9yeVRlc3RzL1Jld2luZEFuZFBsYXliYWNr
VGVzdHMubQpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIlRlc3RSdW5u
ZXIuaCIKKyNpbXBvcnQgIlRlc3RVdGlsLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdBZGRpdGlvbnMu
aCIKKyNpbXBvcnQgPFhDVGVzdC9YQ1Rlc3QuaD4KKworQGludGVyZmFjZSBSZXdpbmRBbmRQbGF5
YmFja1Rlc3RzIDogWENUZXN0Q2FzZQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBSZXdpbmRB
bmRQbGF5YmFja1Rlc3RzIHsKKyAgICBUZXN0UnVubmVyICp0ZXN0UnVubmVyOworfQorCistICh2
b2lkKXNldFVwCit7CisgICAgdGVzdFJ1bm5lciA9IFtbVGVzdFJ1bm5lciBhbGxvY10gaW5pdF07
CisgICAgW3Rlc3RSdW5uZXIgbG9hZENhcHR1cmVUZXN0SGFybmVzc107CisgICAgW3Rlc3RSdW5u
ZXIgc2V0VGV4dE9iZnVzY2F0aW9uRW5hYmxlZDpOT107Cit9CisKKy0gKHZvaWQpdGVhckRvd24K
K3sKKyAgICB0ZXN0UnVubmVyID0gbmlsOworfQorCistICh2b2lkKXRlc3RUeXBpbmdTaW5nbGVM
aW5lT2ZUZXh0Cit7CisgICAgW3Rlc3RSdW5uZXIgdHlwZVN0cmluZzpAImhlbGxvIHdvcmxkIl07
CisgICAgTlNTdHJpbmcgKm9yaWdpbmFsU3VidHJlZSA9IHRlc3RSdW5uZXIuYm9keUVsZW1lbnRT
dWJ0cmVlOworCisgICAgW3NlbGYgcmV3aW5kQW5kUGxheWJhY2tFZGl0aW5nSW5QbGF5YmFja1Rl
c3RIYXJuZXNzXTsKKyAgICBYQ1RBc3NlcnRUcnVlKFtzZWxmIG9yaWdpbmFsQm9keVN1YnRyZWU6
b3JpZ2luYWxTdWJ0cmVlIGlzRXF1YWxUb0ZpbmFsU3VidHJlZTp0ZXN0UnVubmVyLmJvZHlFbGVt
ZW50U3VidHJlZV0pOworICAgIFhDVEFzc2VydEVxdWFsT2JqZWN0cyh0ZXN0UnVubmVyLmJvZHlU
ZXh0Q29udGVudCwgQCJoZWxsbyB3b3JsZCIpOworfQorCistICh2b2lkKXRlc3RUeXBpbmdNdWx0
aXBsZUxpbmVzT2ZUZXh0Cit7CisgICAgW3Rlc3RSdW5uZXIgdHlwZVN0cmluZzpAImZvbyJdOwor
ICAgIFt0ZXN0UnVubmVyIHR5cGVTdHJpbmc6QCJcbiJdOworICAgIFt0ZXN0UnVubmVyIHR5cGVT
dHJpbmc6QCJiYXIiXTsKKyAgICBOU1N0cmluZyAqb3JpZ2luYWxTdWJ0cmVlID0gdGVzdFJ1bm5l
ci5ib2R5RWxlbWVudFN1YnRyZWU7CisKKyAgICBbc2VsZiByZXdpbmRBbmRQbGF5YmFja0VkaXRp
bmdJblBsYXliYWNrVGVzdEhhcm5lc3NdOworICAgIFhDVEFzc2VydFRydWUoW3NlbGYgb3JpZ2lu
YWxCb2R5U3VidHJlZTpvcmlnaW5hbFN1YnRyZWUgaXNFcXVhbFRvRmluYWxTdWJ0cmVlOnRlc3RS
dW5uZXIuYm9keUVsZW1lbnRTdWJ0cmVlXSk7CisgICAgWENUQXNzZXJ0RXF1YWxPYmplY3RzKHRl
c3RSdW5uZXIuYm9keVRleHRDb250ZW50LCBAImZvb2JhciIpOworfQorCistICh2b2lkKXRlc3RU
eXBpbmdBbmREZWxldGluZ1RleHQKK3sKKyAgICBbdGVzdFJ1bm5lciB0eXBlU3RyaW5nOkAiYXBw
bGUiXTsKKyAgICBbdGVzdFJ1bm5lciBkZWxldGVCYWNrd2FyZHM6M107CisKKyAgICBOU1N0cmlu
ZyAqb3JpZ2luYWxTdWJ0cmVlID0gdGVzdFJ1bm5lci5ib2R5RWxlbWVudFN1YnRyZWU7CisKKyAg
ICBbc2VsZiByZXdpbmRBbmRQbGF5YmFja0VkaXRpbmdJblBsYXliYWNrVGVzdEhhcm5lc3NdOwor
ICAgIFhDVEFzc2VydFRydWUoW3NlbGYgb3JpZ2luYWxCb2R5U3VidHJlZTpvcmlnaW5hbFN1YnRy
ZWUgaXNFcXVhbFRvRmluYWxTdWJ0cmVlOnRlc3RSdW5uZXIuYm9keUVsZW1lbnRTdWJ0cmVlXSk7
CisgICAgWENUQXNzZXJ0RXF1YWxPYmplY3RzKHRlc3RSdW5uZXIuYm9keVRleHRDb250ZW50LCBA
ImFwIik7Cit9CisKKy0gKHZvaWQpcmV3aW5kQW5kUGxheWJhY2tFZGl0aW5nSW5QbGF5YmFja1Rl
c3RIYXJuZXNzCit7CisgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3QgcnVubmVyIGhh
cyBsb2FkZWQgdGhlIGNhcHR1cmUgdGVzdCBoYXJuZXNzLgorICAgIFt0ZXN0UnVubmVyIGxvYWRQ
bGF5YmFja1Rlc3RIYXJuZXNzV2l0aEpTT046dGVzdFJ1bm5lci5lZGl0aW5nSGlzdG9yeUpTT05d
OworCisgICAgLy8gUmV3aW5kIHRvIHRoZSB2ZXJ5IGJlZ2lubmluZywgdGhlbiBwbGF5IGJhY2sg
YWxsIGVkaXRpbmcgYWdhaW4uCisgICAgW3Rlc3RSdW5uZXIganVtcFRvVXBkYXRlSW5kZXg6MF07
CisgICAgW3Rlc3RSdW5uZXIganVtcFRvVXBkYXRlSW5kZXg6dGVzdFJ1bm5lci5udW1iZXJPZlVw
ZGF0ZXNdOworfQorCistIChCT09MKW9yaWdpbmFsQm9keVN1YnRyZWU6KE5TU3RyaW5nICopb3Jp
Z2luYWxTdWJ0cmVlIGlzRXF1YWxUb0ZpbmFsU3VidHJlZTooTlNTdHJpbmcgKilmaW5hbFN1YnRy
ZWUKK3sKKyAgICBpZiAoW29yaWdpbmFsU3VidHJlZSBpc0VxdWFsVG9TdHJpbmc6ZmluYWxTdWJ0
cmVlXSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKworICAgIE5TTG9nKEAiPj4+Pj4+PiIpOworICAg
IE5TTG9nKEAiVGhlIG9yaWdpbmFsIHN1YnRyZWUgaXM6XG4lQCIsIG9yaWdpbmFsU3VidHJlZSk7
CisgICAgTlNMb2coQCI9PT09PT09Iik7CisgICAgTlNMb2coQCJUaGUgZmluYWwgc3VidHJlZSBp
czpcbiVAIiwgZmluYWxTdWJ0cmVlKTsKKyAgICBOU0xvZyhAIjw8PDw8PDwiKTsKKworICAgIHJl
dHVybiBOTzsKK30KKworQGVuZAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>