<?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>198426</bug_id>
          
          <creation_ts>2019-05-31 10:47:14 -0700</creation_ts>
          <short_desc>[WHLSL] Auto initialize local variables</short_desc>
          <delta_ts>2019-06-10 12:59:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</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>
          
          <blocked>195771</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jonlee</cc>
    
    <cc>justin_fan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>rmorisset</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1540768</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-05-31 10:47:14 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1540770</commentid>
    <comment_count>1</comment_count>
      <attachid>371069</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-05-31 10:59:38 -0700</bug_when>
    <thetext>Created attachment 371069
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1540772</commentid>
    <comment_count>2</comment_count>
      <attachid>371069</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-05-31 11:00:27 -0700</bug_when>
    <thetext>Comment on attachment 371069
patch

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

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLAutoInitializeVariables.cpp:66
&gt; +        StringPrintStream printStream;
&gt; +        printStream.print(TypeDumper(*type));

Is this overkill just to get a nice function name? I could make this happen just on debug builds, and use some constant name for release builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542377</commentid>
    <comment_count>3</comment_count>
      <attachid>371069</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-06-06 06:28:18 -0700</bug_when>
    <thetext>Comment on attachment 371069
patch

Please see my comments in https://bugs.webkit.org/show_bug.cgi?id=195771. Should that bug be marked as a duplicate of this one?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543399</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-10 11:34:36 -0700</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #5)
&gt; Comment on attachment 371047 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=371047&amp;action=review
&gt; 
&gt; Does the Metal compiler still produce warnings now?
&gt; GPURenderPipelineMetal.mm has a FIXME with a link to this bug.
&gt; 
&gt; &gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLAutoInitializeVariables.cpp:54
&gt; &gt; +        // Skip argument declarations.
&gt; 
&gt; Cool.
&gt; 
&gt; &gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLAutoInitializeVariables.cpp:66
&gt; &gt; +        printStream.print(TypeDumper(*type));
&gt; 
&gt; 🤔 This seems unwise, though I do understand how it isn&apos;t observable. Are
&gt; you confident this is a good idea?
I will make this debug builds only.

&gt; 
&gt; &gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:-360
&gt; &gt; -        auto* overload = resolveFunctionOverloadImpl(*getterFuncs, argumentTypeReferences, nullptr);
&gt; 
&gt; Excellent.
&gt; 
&gt; &gt; Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLVariableDeclaration.h:73
&gt; &gt; +    void setInitializer(UniqueRef&lt;Expression&gt; expression)
&gt; 
&gt; Doesn&apos;t this need to take an rvalue reference? UniqueRef is move-only (I
&gt; think???)
Rvalue references are just a cast. What happens here is a caller must move the argument into this value, calling the move constructor.

&gt; 
&gt; &gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:453
&gt; &gt;          m_stringBuilder.append(makeString(m_typeNamer.mangledNameForType(*variableDeclaration.type()), &apos; &apos;, variableName, &quot;;\n&quot;));
&gt; 
&gt; Is this dead code now?
No. Since there are passes that run after this that create variables without initializers.

&gt; 
&gt; &gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:110
&gt; &gt; +            stringBuilder.append(makeString(&quot;    for (size_t i = 0; i &lt; sizeof(&quot;, metalReturnName, &quot;); ++i) {\n&quot;));
&gt; &gt; +            stringBuilder.append(&quot;        ptr[i] = 0;\n&quot;);
&gt; &gt; +            stringBuilder.append(&quot;    }\n&quot;);
&gt; 
&gt; Can we remove the { } and pull it up into one line?

Sure!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543407</commentid>
    <comment_count>5</comment_count>
      <attachid>371767</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-10 11:52:37 -0700</bug_when>
    <thetext>Created attachment 371767
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543408</commentid>
    <comment_count>6</comment_count>
      <attachid>371768</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-10 11:54:15 -0700</bug_when>
    <thetext>Created attachment 371768
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543429</commentid>
    <comment_count>7</comment_count>
      <attachid>371768</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-06-10 12:58:25 -0700</bug_when>
    <thetext>Comment on attachment 371768
patch for landing

Clearing flags on attachment: 371768

Committed r246273: &lt;https://trac.webkit.org/changeset/246273&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543430</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-06-10 12:58:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543431</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-06-10 12:59:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/51593411&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>371069</attachid>
            <date>2019-05-31 10:59:38 -0700</date>
            <delta_ts>2019-06-10 11:52:37 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>41290</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NTk3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDE5LTA1LTMxICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gQXV0byBpbml0aWFs
aXplIGxvY2FsIHZhcmlhYmxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk4NDI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIHplcm8tZmlsbGluZyBmb3IgbG9jYWwg
dmFyaWFibGVzIGluIHR3byBwYXJ0czoKKyAgICAgICAgMS4gV2UgYWRkIGEgbmV3IHBhc3MsIGF1
dG9Jbml0aWFsaXplVmFyaWFibGVzLCB3aGljaCBtYWtlcyBhbnkgdmFyaWFibGUgZGVjbGFyYXRp
b24KKyAgICAgICAgd2l0aG91dCBhbiBpbml0aWFsaXplciBjYWxsIHRoZSBkZWZhdWx0IGNvbnN0
cnVjdG9yIGZvciB0aGUgdmFyaWFibGUncyB0eXBlLgorICAgICAgICBTaW5jZSB3ZSBhdXRvIGdl
bmVyYXRlIHRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yLCBpdCdzIGEgbmF0aXZlIGZ1bmN0aW9uIHdo
b3NlCisgICAgICAgIGltcGxlbWVudGF0aW9uIHdlIGNvbnRyb2wuCisgICAgICAgIAorICAgICAg
ICAyLiBFYWNoIG5hdGl2ZSBjb25zdHJ1Y3RvciBpcyBpbXBsZW1lbnRlZCBhcyBhIG1lbXNldCgm
dmFsdWUsIHNpemVvZih2YWx1ZSksIDApLgorICAgICAgICBUaGlzIG1lbXNldCBpcyBhbiBpbmxp
bmVkIGxvb3AgaW4gZWFjaCBjb25zdHJ1Y3Rvci4gVGhlIHJlYXNvbiB0aGlzIHR1cm5zCisgICAg
ICAgIGV2ZXJ5dGhpbmcgaW50byB6ZXJvIGlzIHRoYXQgZm9yIGV2ZXJ5IHByaW1pdGl2ZSB0eXBl
LCB0aGUgInplcm8iIHZhbHVlIGlzCisgICAgICAgIHJlcHJlc2VudGVkIGFzIGFsbCB6ZXJvZXMg
aW4gbWVtb3J5OiBmbG9hdCwgaW50LCBwb2ludGVycywgZXRjLgorICAgICAgICAKKyAgICAgICAg
U2luY2Ugb3VyIGFiaWxpdHkgdG8gdGVzdCBzb21lIG9mIHRoaXMgaXMgbGltaXRlZCwgSSBvcGVu
ZWQgYSBmb2xsb3ctdXAgYnVnIHRvCisgICAgICAgIHRlc3QgdGhpcyBtb3JlOgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NDEzCisKKyAgICAgICAg
VGVzdHM6IHdlYmdwdS93aGxzbC16ZXJvLWluaXRpYWxpemUtdmFsdWVzLTIuaHRtbAorICAgICAg
ICAgICAgICAgd2ViZ3B1L3dobHNsLXplcm8taW5pdGlhbGl6ZS12YWx1ZXMuaHRtbAorCisgICAg
ICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5o
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbjo6c2V0
SW5pdGlhbGl6ZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
RnVuY3Rpb25Xcml0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpNZXRhbDo6d3JpdGVOYXRpdmVGdW5jdGlvbik6CisgICAgICAgICogTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xBU1REdW1wZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTEF1dG9Jbml0aWFsaXplVmFyaWFibGVzLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6QXV0b0luaXRpYWxpemU6OkF1dG9Jbml0aWFsaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpBdXRvSW5pdGlhbGl6ZTo6dmlzaXQpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OmF1dG9Jbml0aWFsaXplVmFyaWFibGVzKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTEF1dG9Jbml0aWFsaXplVmFyaWFibGVzLmg6IEFkZGVkLgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6Y2hlY2tPcGVyYXRvck92ZXJsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpDaGVja2VyOjp2aXNpdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xJbmZlclR5cGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjppbmZlclR5cGVz
Rm9yQ2FsbEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmluZmVyVHlwZXNGb3JDYWxs
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuaDoKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OnByZXBhcmVTaGFyZWQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6cmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpyZXNvbHZlRnVuY3Rpb25PdmVybG9hZCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmg6CisgICAgICAgICogU291cmNlcy50eHQ6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE5LTA1
LTMxICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgU29tZSBX
ZWFrUHRyIGNsZWFudXAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNDU5NTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzA3LDYgKzMwNyw3
IEBAIE1vZHVsZXMvd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU28KIE1vZHVsZXMvd2Vi
Z3B1L0dQVUNhbnZhc0NvbnRleHQuY3BwCiBNb2R1bGVzL3dlYmdwdS9OYXZpZ2F0b3JHUFUuY3Bw
CiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1bXBlci5jcHAKK01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMQXV0b0luaXRpYWxpemVWYXJpYWJsZXMuY3BwCiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTEluZmVyVHlwZXMuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVy
LmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1bXBlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQVNURHVtcGVyLmgJ
KHJldmlzaW9uIDI0NTk1MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMQVNURHVtcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw2ICsxNDIsNyBAQCBNQUtF
X1BSSU5UX0FEQVBUT1IoU3RhdGVtZW50RHVtcGVyLCBBU1Q6CiBNQUtFX1BSSU5UX0FEQVBUT1Io
UHJvZ3JhbUR1bXBlciwgUHJvZ3JhbSYsIGR1bXBBU1ROb2RlKTsKIE1BS0VfUFJJTlRfQURBUFRP
UihTdHJ1Y3R1cmVEZWZpbml0aW9uRHVtcGVyLCBBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mLCBk
dW1wQVNUTm9kZSk7CiBNQUtFX1BSSU5UX0FEQVBUT1IoRnVuY3Rpb25EZWZpbml0aW9uRHVtcGVy
LCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYsIGR1bXBBU1ROb2RlKTsKK01BS0VfUFJJTlRfQURB
UFRPUihUeXBlRHVtcGVyLCBBU1Q6OlVubmFtZWRUeXBlJiwgZHVtcEFTVE5vZGUpOwogCiAKIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgZHVtcEFTVChQcm9ncmFtJiBwcm9ncmFtKQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBdXRvSW5pdGlhbGl6ZVZh
cmlhYmxlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xBdXRvSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBdXRvSW5pdGlhbGl6ZVZh
cmlhYmxlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTEF1dG9Jbml0aWFsaXplVmFyaWFi
bGVzLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xBU1QuaCIKKyNp
bmNsdWRlICJXSExTTEFTVER1bXBlci5oIgorI2luY2x1ZGUgIldITFNMTmFtZUNvbnRleHQuaCIK
KyNpbmNsdWRlICJXSExTTFJlc29sdmVPdmVybG9hZEltcGwuaCIKKyNpbmNsdWRlICJXSExTTFJl
c29sdmluZ1R5cGUuaCIKKyNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKKyNpbmNsdWRlIDx3dGYv
U3RyaW5nUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ug
V0hMU0wgeworCitjbGFzcyBBdXRvSW5pdGlhbGl6ZSA6IHB1YmxpYyBWaXNpdG9yIHsKKyAgICB1
c2luZyBCYXNlID0gVmlzaXRvcjsKK3B1YmxpYzoKKyAgICBBdXRvSW5pdGlhbGl6ZShOYW1lQ29u
dGV4dCYgbmFtZUNvbnRleHQpCisgICAgICAgIDogbV9uYW1lQ29udGV4dChuYW1lQ29udGV4dCkK
KyAgICAgICAgLCBtX2Nhc3RGdW5jdGlvbnMoKm1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKCJv
cGVyYXRvciBjYXN0Il9zdHIpKQorICAgIHsgfQorCitwcml2YXRlOgorICAgIHZvaWQgdmlzaXQo
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJikKKyAgICB7CisgICAgICAgIC8vIFNraXAgYXJndW1l
bnQgZGVjbGFyYXRpb25zLgorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKHZhcmlh
YmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBBU1Q6OlVubmFtZWRUeXBlKiB0eXBlID0gdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHR5cGUpOworCisgICAgICAgIFN0cmluZ1ByaW50U3Ry
ZWFtIHByaW50U3RyZWFtOworICAgICAgICBwcmludFN0cmVhbS5wcmludChUeXBlRHVtcGVyKCp0
eXBlKSk7CisgICAgICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6
Q2FsbEV4cHJlc3Npb24+KHZhcmlhYmxlRGVjbGFyYXRpb24ub3JpZ2luKCksIHByaW50U3RyZWFt
LnRvU3RyaW5nKCksIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4oKSk7CisgICAg
ICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKHR5cGUtPmNsb25lKCkpOworICAgICAgICBjYWxs
RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworICAgICAg
ICBjYWxsRXhwcmVzc2lvbi0+c2V0T3ZlcmxvYWRzKG1fY2FzdEZ1bmN0aW9ucyk7CisgICAgICAg
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBhcmd1bWVudFR5
cGVzOworICAgICAgICBhdXRvKiBmdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKCpj
YWxsRXhwcmVzc2lvbi0+b3ZlcmxvYWRzKCksIGFyZ3VtZW50VHlwZXMsIHR5cGUpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChmdW5jdGlvbik7CisgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRG
dW5jdGlvbigqZnVuY3Rpb24pOworCisgICAgICAgIHZhcmlhYmxlRGVjbGFyYXRpb24uc2V0SW5p
dGlhbGl6ZXIoV1RGTW92ZShjYWxsRXhwcmVzc2lvbikpOworICAgIH0KKworICAgIE5hbWVDb250
ZXh0JiBtX25hbWVDb250ZXh0OworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBtX2Nhc3RGdW5jdGlvbnM7Cit9OworCit2b2lk
IGF1dG9Jbml0aWFsaXplVmFyaWFibGVzKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgQXV0b0lu
aXRpYWxpemUgYXV0b0luaXRpYWxpemUocHJvZ3JhbS5uYW1lQ29udGV4dCgpKTsKKyAgICBhdXRv
SW5pdGlhbGl6ZS5WaXNpdG9yOjp2aXNpdChwcm9ncmFtKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V0hMU0wKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQ
VSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQXV0b0lu
aXRpYWxpemVWYXJpYWJsZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTEF1dG9Jbml0aWFsaXplVmFyaWFibGVzLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBdXRvSW5pdGlh
bGl6ZVZhcmlhYmxlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgUHJvZ3JhbTsKKwordm9pZCBhdXRv
SW5pdGlhbGl6ZVZhcmlhYmxlcyhQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVj
a2VyLmNwcAkocmV2aXNpb24gMjQ1OTUxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU3LDcgKzM1Nyw3
IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCAKICAgICAgICAgICAg
IGFyZ3VtZW50VHlwZXMuYXBwZW5kKCgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVsw
XS0+dHlwZSgpKS0+Y2xvbmUoKSk7CiAgICAgICAgIGZvciAoYXV0byYgYXJndW1lbnRUeXBlIDog
YXJndW1lbnRUeXBlcykKICAgICAgICAgICAgIGFyZ3VtZW50VHlwZVJlZmVyZW5jZXMuYXBwZW5k
KGFyZ3VtZW50VHlwZSk7Ci0gICAgICAgIGF1dG8qIG92ZXJsb2FkID0gcmVzb2x2ZUZ1bmN0aW9u
T3ZlcmxvYWRJbXBsKCpnZXR0ZXJGdW5jcywgYXJndW1lbnRUeXBlUmVmZXJlbmNlcywgbnVsbHB0
cik7CisgICAgICAgIGF1dG8qIG92ZXJsb2FkID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoKmdl
dHRlckZ1bmNzLCBhcmd1bWVudFR5cGVSZWZlcmVuY2VzKTsKICAgICAgICAgaWYgKCFvdmVybG9h
ZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYXV0byYgcmVzdWx0VHlwZSA9
IG92ZXJsb2FkLT50eXBlKCk7CkBAIC05NzksNyArOTc5LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNp
dChBU1Q6OkRvdEV4cHJlc3Npb24mIAogICAgIEFTVDo6VW5uYW1lZFR5cGUqIGdldHRlclJldHVy
blR5cGUgPSBudWxscHRyOwogICAgIHsKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8UmVzb2x2aW5nVHlwZT4+IGdldHRlckFyZ3VtZW50VHlwZXMgeyBiYXNlSW5mby0+cmVz
b2x2aW5nVHlwZSB9OwotICAgICAgICBnZXR0ZXJGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92
ZXJsb2FkSW1wbChkb3RFeHByZXNzaW9uLnBvc3NpYmxlR2V0dGVyT3ZlcmxvYWRzKCksIGdldHRl
ckFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOworICAgICAgICBnZXR0ZXJGdW5jdGlvbiA9IHJlc29s
dmVGdW5jdGlvbk92ZXJsb2FkKGRvdEV4cHJlc3Npb24ucG9zc2libGVHZXR0ZXJPdmVybG9hZHMo
KSwgZ2V0dGVyQXJndW1lbnRUeXBlcyk7CiAgICAgICAgIGlmIChnZXR0ZXJGdW5jdGlvbikKICAg
ICAgICAgICAgIGdldHRlclJldHVyblR5cGUgPSAmZ2V0dGVyRnVuY3Rpb24tPnR5cGUoKTsKICAg
ICB9CkBAIC05ODksNyArOTg5LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkRvdEV4cHJl
c3Npb24mIAogICAgIGlmIChhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBiYXNlSW5mby0+dHlwZUFu
bm90YXRpb24ubGVmdEFkZHJlc3NTcGFjZSgpKSB7CiAgICAgICAgIGF1dG8gYXJndW1lbnRUeXBl
ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oZG90RXhwcmVz
c2lvbi5vcmlnaW4oKSksICpsZWZ0QWRkcmVzc1NwYWNlLCBiYXNlVW5uYW1lZFR5cGUtPmdldCgp
LmNsb25lKCkpOwogICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZp
bmdUeXBlPj4gYW5kZXJBcmd1bWVudFR5cGVzIHsgYmFzZUluZm8tPnJlc29sdmluZ1R5cGUgfTsK
LSAgICAgICAgYW5kZXJGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChkb3RF
eHByZXNzaW9uLnBvc3NpYmxlQW5kZXJPdmVybG9hZHMoKSwgYW5kZXJBcmd1bWVudFR5cGVzLCBu
dWxscHRyKTsKKyAgICAgICAgYW5kZXJGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2Fk
KGRvdEV4cHJlc3Npb24ucG9zc2libGVBbmRlck92ZXJsb2FkcygpLCBhbmRlckFyZ3VtZW50VHlw
ZXMpOwogICAgICAgICBpZiAoYW5kZXJGdW5jdGlvbikKICAgICAgICAgICAgIGFuZGVyUmV0dXJu
VHlwZSA9ICZkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRlckZ1bmN0aW9uLT50eXBlKCkp
LmVsZW1lbnRUeXBlKCk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk4MTY0IEVuZm9yY2UgdGhlIHJldHVybiBvZiBhbmRlcnMgd2lsbCBhbHdheXMg
YmUgYSBwb2ludGVyCiAgICAgfQpAQCAtOTk5LDcgKzk5OSw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlz
aXQoQVNUOjpEb3RFeHByZXNzaW9uJiAKICAgICB7CiAgICAgICAgIGF1dG8gYXJndW1lbnRUeXBl
ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oZG90RXhwcmVz
c2lvbi5vcmlnaW4oKSksIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIGJhc2VVbm5hbWVkVHlw
ZS0+Z2V0KCkuY2xvbmUoKSk7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PFJlc29sdmluZ1R5cGU+PiB0aHJlYWRBbmRlckFyZ3VtZW50VHlwZXMgeyBiYXNlSW5mby0+cmVz
b2x2aW5nVHlwZSB9OwotICAgICAgICB0aHJlYWRBbmRlckZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0
aW9uT3ZlcmxvYWRJbXBsKGRvdEV4cHJlc3Npb24ucG9zc2libGVBbmRlck92ZXJsb2FkcygpLCB0
aHJlYWRBbmRlckFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOworICAgICAgICB0aHJlYWRBbmRlckZ1
bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoZG90RXhwcmVzc2lvbi5wb3NzaWJsZUFu
ZGVyT3ZlcmxvYWRzKCksIHRocmVhZEFuZGVyQXJndW1lbnRUeXBlcyk7CiAgICAgICAgIGlmICh0
aHJlYWRBbmRlckZ1bmN0aW9uKQogICAgICAgICAgICAgdGhyZWFkQW5kZXJSZXR1cm5UeXBlID0g
JmRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHRocmVhZEFuZGVyRnVuY3Rpb24tPnR5cGUoKSku
ZWxlbWVudFR5cGUoKTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTgxNjQgRW5mb3JjZSB0aGUgcmV0dXJuIG9mIGFuZGVycyB3aWxsIGFsd2F5cyBi
ZSBhIHBvaW50ZXIKICAgICB9CkBAIC0xMDI0LDcgKzEwMjQsNyBAQCB2b2lkIENoZWNrZXI6OnZp
c2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgCiAgICAgewogICAgICAgICBSZXNvbHZpbmdUeXBlIGZp
ZWxkUmVzb2x2aW5nVHlwZShmaWVsZFR5cGUtPmNsb25lKCkpOwogICAgICAgICBWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gc2V0dGVyQXJndW1lbnRUeXBlcyB7
IGJhc2VJbmZvLT5yZXNvbHZpbmdUeXBlLCBmaWVsZFJlc29sdmluZ1R5cGUgfTsKLSAgICAgICAg
c2V0dGVyRnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoZG90RXhwcmVzc2lv
bi5wb3NzaWJsZVNldHRlck92ZXJsb2FkcygpLCBzZXR0ZXJBcmd1bWVudFR5cGVzLCBudWxscHRy
KTsKKyAgICAgICAgc2V0dGVyRnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChkb3RF
eHByZXNzaW9uLnBvc3NpYmxlU2V0dGVyT3ZlcmxvYWRzKCksIHNldHRlckFyZ3VtZW50VHlwZXMp
OwogICAgICAgICBpZiAoc2V0dGVyRnVuY3Rpb24pCiAgICAgICAgICAgICBzZXR0ZXJSZXR1cm5U
eXBlID0gJnNldHRlckZ1bmN0aW9uLT50eXBlKCk7CiAgICAgfQpAQCAtMTM5Nyw3ICsxMzk3LDcg
QEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJgogICAgIC8vIFdlIGRv
bid0IHdhbnQgdG8gcmVjdXJzZSB0byB0aGUgc2FtZSBub2RlIHR3aWNlLgogCiAgICAgQVNTRVJU
KGNhbGxFeHByZXNzaW9uLmhhc092ZXJsb2FkcygpKTsKLSAgICBhdXRvKiBmdW5jdGlvbiA9IHJl
c29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbCgqY2FsbEV4cHJlc3Npb24ub3ZlcmxvYWRzKCksIHR5
cGVzLCBjYWxsRXhwcmVzc2lvbi5jYXN0UmV0dXJuVHlwZSgpKTsKKyAgICBhdXRvKiBmdW5jdGlv
biA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKCpjYWxsRXhwcmVzc2lvbi5vdmVybG9hZHMoKSwg
dHlwZXMsIGNhbGxFeHByZXNzaW9uLmNhc3RSZXR1cm5UeXBlKCkpOwogICAgIGlmICghZnVuY3Rp
b24pIHsKICAgICAgICAgaWYgKGF1dG8gbmV3RnVuY3Rpb24gPSByZXNvbHZlQnlJbnN0YW50aWF0
aW9uKGNhbGxFeHByZXNzaW9uLCB0eXBlcywgbV9pbnRyaW5zaWNzKSkgewogICAgICAgICAgICAg
bV9wcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpuZXdGdW5jdGlvbikpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMu
Y3BwCShyZXZpc2lvbiAyNDU5NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTEluZmVyVHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNyArMjIxLDgg
QEAgYm9vbCBpbmZlclR5cGVzRm9yVHlwZUFyZ3VtZW50cyhBU1Q6Ok5hbQogICAgIHJldHVybiB0
cnVlOwogfQogCi1ib29sIGluZmVyVHlwZXNGb3JDYWxsKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
biYgcG9zc2libGVGdW5jdGlvbiwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2
aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBjb25zdCBBU1Q6Ok5hbWVkVHlwZSogY2FzdFJldHVy
blR5cGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZUtpbmQ+CitBTFdBWVNfSU5MSU5FIGJvb2wg
aW5mZXJUeXBlc0ZvckNhbGxJbXBsKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgcG9zc2libGVG
dW5jdGlvbiwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBh
cmd1bWVudFR5cGVzLCBjb25zdCBUeXBlS2luZCogY2FzdFJldHVyblR5cGUpCiB7CiAgICAgaWYg
KHBvc3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVycygpLnNpemUoKSAhPSBhcmd1bWVudFR5cGVzLnNp
emUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjM5LDYgKzI0MCwxNiBAQCBib29sIGlu
ZmVyVHlwZXNGb3JDYWxsKEFTVDo6RnVuY3Rpb25EZWNsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
K2Jvb2wgaW5mZXJUeXBlc0ZvckNhbGwoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBwb3NzaWJs
ZUZ1bmN0aW9uLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4m
IGFyZ3VtZW50VHlwZXMsIGNvbnN0IEFTVDo6TmFtZWRUeXBlKiBjYXN0UmV0dXJuVHlwZSkKK3sK
KyAgICByZXR1cm4gaW5mZXJUeXBlc0ZvckNhbGxJbXBsKHBvc3NpYmxlRnVuY3Rpb24sIGFyZ3Vt
ZW50VHlwZXMsIGNhc3RSZXR1cm5UeXBlKTsKK30KKworYm9vbCBpbmZlclR5cGVzRm9yQ2FsbChB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIHBvc3NpYmxlRnVuY3Rpb24sIFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywgY29uc3QgQVNU
OjpVbm5hbWVkVHlwZSogY2FzdFJldHVyblR5cGUpCit7CisgICAgcmV0dXJuIGluZmVyVHlwZXNG
b3JDYWxsSW1wbChwb3NzaWJsZUZ1bmN0aW9uLCBhcmd1bWVudFR5cGVzLCBjYXN0UmV0dXJuVHlw
ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdITFNMCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMSW5mZXJUeXBlcy5oCShyZXZpc2lvbiAyNDU5NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTQs
NiArNTQsNyBAQCBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hCiBPcHRp
b25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IGNvbW1pdChBU1Q6OlJlc29sdmFibGVU
eXBlJik7CiBib29sIGluZmVyVHlwZXNGb3JUeXBlQXJndW1lbnRzKEFTVDo6TmFtZWRUeXBlJiBw
b3NzaWJsZVR5cGUsIEFTVDo6VHlwZUFyZ3VtZW50cyYpOwogYm9vbCBpbmZlclR5cGVzRm9yQ2Fs
bChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIHBvc3NpYmxlRnVuY3Rpb24sIFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywgY29uc3Qg
QVNUOjpOYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlKTsKK2Jvb2wgaW5mZXJUeXBlc0ZvckNhbGwo
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBwb3NzaWJsZUZ1bmN0aW9uLCBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIGNvbnN0IEFT
VDo6VW5uYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlKTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAJKHJl
dmlzaW9uIDI0NTk1MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUHJlcGFyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFC
TEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xBU1REdW1wZXIuaCIKKyNpbmNsdWRlICJXSExT
TEF1dG9Jbml0aWFsaXplVmFyaWFibGVzLmgiCiAjaW5jbHVkZSAiV0hMU0xDaGVja0R1cGxpY2F0
ZUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIldITFNMQ2hlY2tlci5oIgogI2luY2x1ZGUgIldITFNM
RnVuY3Rpb25TdGFnZUNoZWNrZXIuaCIKQEAgLTU3LDcgKzU4LDcgQEAgbmFtZXNwYWNlIFdITFNM
IHsKIAogc3RhdGljIGNvbnN0ZXhwciBib29sIGR1bXBBU1RCZWZvcmVFYWNoUGFzcyA9IGZhbHNl
Owogc3RhdGljIGNvbnN0ZXhwciBib29sIGR1bXBBU1RBZnRlclBhcnNpbmcgPSBmYWxzZTsKLXN0
YXRpYyBjb25zdGV4cHIgYm9vbCBkdW1wQVNUQXRFbmQgPSB0cnVlOworc3RhdGljIGNvbnN0ZXhw
ciBib29sIGR1bXBBU1RBdEVuZCA9IGZhbHNlOwogc3RhdGljIGNvbnN0ZXhwciBib29sIGFsd2F5
c0R1bXBQYXNzRmFpbHVyZXMgPSBmYWxzZTsKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBkdW1wUGFz
c0ZhaWx1cmUgPSBkdW1wQVNUQmVmb3JlRWFjaFBhc3MgfHwgZHVtcEFTVEFmdGVyUGFyc2luZyB8
fCBkdW1wQVNUQXRFbmQgfHwgYWx3YXlzRHVtcFBhc3NGYWlsdXJlczsKIApAQCAtMTI0LDYgKzEy
NSw3IEBAIHN0YXRpYyBPcHRpb25hbDxQcm9ncmFtPiBwcmVwYXJlU2hhcmVkKFMKICAgICBSVU5f
UEFTUyhjaGVjaywgcHJvZ3JhbSk7CiAKICAgICBjaGVja0xpdGVyYWxUeXBlcyhwcm9ncmFtKTsK
KyAgICBhdXRvSW5pdGlhbGl6ZVZhcmlhYmxlcyhwcm9ncmFtKTsKICAgICByZXNvbHZlUHJvcGVy
dGllcyhwcm9ncmFtKTsKICAgICBmaW5kSGlnaFpvbWJpZXMocHJvZ3JhbSk7CiAgICAgUlVOX1BB
U1MoY2hlY2tTdGF0ZW1lbnRCZWhhdmlvciwgcHJvZ3JhbSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2
ZU92ZXJsb2FkSW1wbC5jcHAJKHJldmlzaW9uIDI0NTk1MSkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUxLDcgKzUxLDggQEAgc3RhdGljIHVuc2lnbmVkIGNvbnZlcnNpb25Db3N0KEFT
VDo6RnVuYwogICAgIHJldHVybiBjb252ZXJzaW9uQ29zdDsKIH0KIAotQVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rp
b25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3Vt
ZW50VHlwZXMsIEFTVDo6TmFtZWRUeXBlKiBjYXN0UmV0dXJuVHlwZSkKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUeXBlS2luZD4KK0FTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9u
T3ZlcmxvYWRJbXBsKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBUeXBlS2luZCogY2FzdFJl
dHVyblR5cGUpCiB7CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uPiwgMT4gY2FuZGlkYXRlczsKICAgICBmb3IgKGF1dG8mIHBvc3NpYmxl
RnVuY3Rpb24gOiBwb3NzaWJsZUZ1bmN0aW9ucykgewpAQCAtNzYsNiArNzcsMjEgQEAgQVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3RpbwogICAgIHJldHVybiBudWxscHRyOwog
fQogCitBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+
JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2
aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzKQoreworICAgIHJldHVybiByZXNvbHZlRnVuY3Rpb25P
dmVybG9hZEltcGwocG9zc2libGVGdW5jdGlvbnMsIGFyZ3VtZW50VHlwZXMsIHN0YXRpY19jYXN0
PEFTVDo6TmFtZWRUeXBlKj4obnVsbHB0cikpOworfQorCitBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBB
U1Q6Ok5hbWVkVHlwZSogY2FzdFJldHVyblR5cGUpCit7CisgICAgcmV0dXJuIHJlc29sdmVGdW5j
dGlvbk92ZXJsb2FkSW1wbChwb3NzaWJsZUZ1bmN0aW9ucywgYXJndW1lbnRUeXBlcywgY2FzdFJl
dHVyblR5cGUpOworfQorCitBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlv
bk92ZXJsb2FkKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBBU1Q6OlVubmFtZWRUeXBlKiBj
YXN0UmV0dXJuVHlwZSkKK3sKKyAgICByZXR1cm4gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBs
KHBvc3NpYmxlRnVuY3Rpb25zLCBhcmd1bWVudFR5cGVzLCBjYXN0UmV0dXJuVHlwZSk7Cit9CisK
IEFTVDo6TmFtZWRUeXBlKiByZXNvbHZlVHlwZU92ZXJsb2FkSW1wbChWZWN0b3I8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+JiBwb3NzaWJsZVR5cGVzLCBBU1Q6OlR5
cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVudHMpCiB7CiAgICAgQVNUOjpOYW1lZFR5cGUqIHJlc3Vs
dCA9IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFJlc29sdmVPdmVybG9hZEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuaAkocmV2aXNpb24g
MjQ1OTUxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNv
bHZlT3ZlcmxvYWRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDkgQEAgY2xhc3Mg
TmFtZWRUeXBlOwogCiB9CiAKLUFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0
aW9uT3ZlcmxvYWRJbXBsKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBBU1Q6Ok5hbWVkVHlw
ZSogY2FzdFJldHVyblR5cGUpOworQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVu
Y3Rpb25PdmVybG9hZChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcyk7CitBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9u
cywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVu
dFR5cGVzLCBBU1Q6Ok5hbWVkVHlwZSogY2FzdFJldHVyblR5cGUpOworQVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMs
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRU
eXBlcywgQVNUOjpVbm5hbWVkVHlwZSogY2FzdFJldHVyblR5cGUpOwogQVNUOjpOYW1lZFR5cGUq
IHJlc29sdmVUeXBlT3ZlcmxvYWRJbXBsKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFT
VDo6TmFtZWRUeXBlPiwgMT4mLCBBU1Q6OlR5cGVBcmd1bWVudHMmKTsKIAogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJh
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMjQ1OTUxKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJh
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCwxMSBAQCBwdWJsaWM6CiAgICAgRXhw
cmVzc2lvbiogaW5pdGlhbGl6ZXIoKSB7IHJldHVybiBtX2luaXRpYWxpemVyID8gJiptX2luaXRp
YWxpemVyIDogbnVsbHB0cjsgfQogICAgIGJvb2wgaXNBbm9ueW1vdXMoKSBjb25zdCB7IHJldHVy
biBtX25hbWUuaXNOdWxsKCk7IH0KICAgICBPcHRpb25hbDxVbmlxdWVSZWY8RXhwcmVzc2lvbj4+
IHRha2VJbml0aWFsaXplcigpIHsgcmV0dXJuIFdURk1vdmUobV9pbml0aWFsaXplcik7IH0KKyAg
ICB2b2lkIHNldEluaXRpYWxpemVyKFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBleHByZXNzaW9uKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCFpbml0aWFsaXplcigpKTsKKyAgICAgICAgbV9pbml0aWFs
aXplciA9IFdURk1vdmUoZXhwcmVzc2lvbik7CisgICAgfQogCiBwcml2YXRlOgogICAgIFF1YWxp
ZmllcnMgbV9xdWFsaWZpZXJzOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5j
cHAJKHJldmlzaW9uIDI0NTk1MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDks
MTAgKzQ0OSw4IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAg
ICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKSB7CiAgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKTsKICAgICAg
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpLCAnICcsIHZhcmlhYmxlTmFt
ZSwgIiA9ICIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIjtcbiIpKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
NTc3MSBaZXJvLWZpbGwgdGhlIHZhcmlhYmxlLgorICAgIH0gZWxzZQogICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KCp2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiO1xuIikp
OwotICAgIH0KIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6
QXNzaWdubWVudEV4cHJlc3Npb24mIGFzc2lnbm1lbnRFeHByZXNzaW9uKQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldy
aXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAJKHJldmlzaW9uIDI0NTk1MSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZl
RnVuY3Rpb25Xcml0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDEwIEBAIFN0
cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAgICAgICAgaWYgKCFuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkpIHsKICAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91
dHB1dEZ1bmN0aW9uTmFtZSwgIigpIHtcbiIpKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcoIiAgICAiLCBtZXRhbFJldHVybk5hbWUsICIgeDtcbiIpKTsKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTk1NzcxIFplcm8tZmlsbAorICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAg
ICB0aHJlYWQgY2hhciogcHRyID0gc3RhdGljX2Nhc3Q8dGhyZWFkIGNoYXIqPihzdGF0aWNfY2Fz
dDx0aHJlYWQgdm9pZCo+KCZ4KSk7XG4iKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcoIiAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZigiLCBtZXRh
bFJldHVybk5hbWUsICIpOyArK2kpIHtcbiIpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCIgICAgICAgIHB0cltpXSA9IDA7XG4iKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCIgICAgfVxuIik7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgi
ICAgIHJldHVybiB4O1xuIik7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxu
Iik7CiAgICAgICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMjQ1OTUxKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04MzQ1LDYgKzgzNDUsOCBAQAogCQk1MkIw
RDRCRDFDNTdGRDFFMDA3N0NFNTMgLyogUGxhdGZvcm1WaWV3LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MkIwRDRCRjFDNTdGRDY2MDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJCMEQ0QzEx
QzU3RkY5MTAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJCMzQzNDkyMkEwNzUyMjAwRTQ5Mzg5IC8q
IFdITFNMQXV0b0luaXRpYWxpemVWYXJpYWJsZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xBdXRv
SW5pdGlhbGl6ZVZhcmlhYmxlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkIz
NDM0QjIyQTA3NTIzMDBFNDkzODkgLyogV0hMU0xBdXRvSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEF1dG9Jbml0aWFsaXplVmFyaWFibGVzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJENUExOEQxQzU0NTkwMzAwREUzNEEzIC8qIFZp
ZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlck9iakMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXJPYmpDLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkQ1QTE4RTFDNTQ1OTAzMDBERTM0QTMgLyogVmlk
ZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyT2JqQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXJPYmpDLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUyRDVBMUE0MUM1NzQ4ODkwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU0MzQsNiArMjU0MzYs
OCBAQAogCQkJCTFDRUNCM0FEMjFGMkI5NjQwMEY0NDU0MiAvKiBNZXRhbCAqLywKIAkJCQlDMjBG
ODhBQTIyOTY2QjBFMDBENjEwRkEgLyogV0hMU0xBU1REdW1wZXIuY3BwICovLAogCQkJCUMyMEY4
OEFDMjI5NjZCMEYwMEQ2MTBGQSAvKiBXSExTTEFTVER1bXBlci5oICovLAorCQkJCTUyQjM0MzRC
MjJBMDc1MjMwMEU0OTM4OSAvKiBXSExTTEF1dG9Jbml0aWFsaXplVmFyaWFibGVzLmNwcCAqLywK
KwkJCQk1MkIzNDM0OTIyQTA3NTIyMDBFNDkzODkgLyogV0hMU0xBdXRvSW5pdGlhbGl6ZVZhcmlh
Ymxlcy5oICovLAogCQkJCUMyMzRBOUIyMjFFOTJDMUYwMDNDOTg0RCAvKiBXSExTTENoZWNrRHVw
bGljYXRlRnVuY3Rpb25zLmNwcCAqLywKIAkJCQlDMjM0QTlBRTIxRTkyQzFBMDAzQzk4NEQgLyog
V0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oICovLAogCQkJCTFDODQwQjlCMjFFQzQwMDkw
MEQwNTAwRCAvKiBXSExTTENoZWNrZXIuY3BwICovLApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjQ1OTUx
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTktMDUtMzEgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAg
ICAgW1dITFNMXSBBdXRvIGluaXRpYWxpemUgbG9jYWwgdmFyaWFibGVzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg0MjYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdlYmdwdS93aGxzbC16ZXJvLWlu
aXRpYWxpemUtdmFsdWVzLTItZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1
L3dobHNsLXplcm8taW5pdGlhbGl6ZS12YWx1ZXMtMi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3
ZWJncHUvd2hsc2wtemVyby1pbml0aWFsaXplLXZhbHVlcy1leHBlY3RlZC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWJncHUvd2hsc2wtemVyby1pbml0aWFsaXplLXZhbHVlcy5odG1sOiBBZGRl
ZC4KKwogMjAxOS0wNS0zMCAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAg
ICAgICBWaWRlbyBwbGF5YmFjayBpbiBTYWZhcmkgc2hvdWxkIGNvbnRpbnVlIHdoZW4gQ2FyUGxh
eSBpcyBwbHVnZ2VkIGluCkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVyby1pbml0
aWFsaXplLXZhbHVlcy0yLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXplcm8taW5pdGlhbGl6ZS12YWx1ZXMtMi1leHBlY3RlZC5odG1sCShub25l
eGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC16ZXJvLWluaXRpYWxpemUtdmFs
dWVzLTItZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9
ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2Fz
eW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRl
eHQoIjJkIik7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7CisgICAgY29udGV4dC5m
aWxsUmVjdCgwLCAwLCA0MDAsIDQwMCk7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmxhY2si
OworICAgIGNvbnRleHQuZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsKK30KK3dpbmRvdy5h
ZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVyby1pbml0aWFsaXplLXZhbHVl
cy0yLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXplcm8taW5p
dGlhbGl6ZS12YWx1ZXMtMi5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdw
dS93aGxzbC16ZXJvLWluaXRpYWxpemUtdmFsdWVzLTIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE1MiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgor
PGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2Nh
bnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgVmVydGV4T3V0
IHsKKyAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKKyAgICBmbG9hdCBzaGFkZSA6
IGF0dHJpYnV0ZSgwKTsKK30KKworc3RydWN0IEJhciB7CisgICAgZmxvYXQgeTsKKyAgICBmbG9h
dCB5MTsKKyAgICBmbG9hdCB5MjsKKyAgICBmbG9hdCB5MzsKKyAgICBmbG9hdCB5NDsKKyAgICBm
bG9hdCB5NTsKKyAgICBmbG9hdCB5NjsKKyAgICBmbG9hdCB5NzsKKyAgICBmbG9hdCB5ODsKKyAg
ICBmbG9hdCB5OTsKKyAgICBmbG9hdCB5MTA7CisgICAgZmxvYXQgeTExOworICAgIGZsb2F0IHkx
MjsKKyAgICBmbG9hdCB5MTM7CisgICAgZmxvYXQgeTE0OworICAgIGZsb2F0IHkxNTsKKyAgICBm
bG9hdCB5MTY7CisgICAgZmxvYXQgeTE3OworICAgIGZsb2F0IHkxODsKKyAgICBmbG9hdCB5MTk7
CisgICAgZmxvYXQgeTIwOworfQorCit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9h
dDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7
CisgICAgVmVydGV4T3V0IHJlc3VsdDsKKworICAgIEJhciBiYXI7CisKKyAgICByZXN1bHQucG9z
aXRpb24gPSBwb3NpdGlvbjsKKyAgICByZXN1bHQuc2hhZGUgPSBiYXIueTIwOworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNo
YWRlIDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KHNo
YWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7
CisgICAgY29uc3QgYWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIo
KTsKKyAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKwor
ICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6
IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0g
e21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAg
Y29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDog
ImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5n
bGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJj
dyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBj
b25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDog
InJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8v
IEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVs
bDsKKworICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDog
ImZsb2F0NCIsIG9mZnNldDogMH07CisgICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2Nh
dGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKKyAgICBjb25zdCBhdHRyaWJ1
dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJp
ZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9OworICAgIGNvbnN0IGlucHV0cyA9IFtp
bnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307
CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2Jp
bmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07CisgICAg
Y29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5k
R3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0
b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBp
cGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0
RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVy
dGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9u
U3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBs
ZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBl
bGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0
b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQz
MkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5W
RVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZl
cjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKKyAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdy
aXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZs
b2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0g
PSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzRdID0gMS4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0w
LjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDEuMDsKKwor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41OworICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzEyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMTldID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKKworICAg
IGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllU
RVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVy
VXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVh
dGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1
ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOwor
ICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShy
ZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJh
eVswXSA9IDE7CisgICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGJ1ZmZl
ckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07CisgICAgY29uc3Qg
YmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307
CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91
dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3VwID0g
ZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0
IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBj
b250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRl
c2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dh
cENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7
CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgp
OworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZh
dWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29t
bWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwg
YTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0
VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVP
cDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0
YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JB
dHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFz
c0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2Ny
aXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5l
KTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKKyAg
ICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwXSwg
WzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRl
clBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFu
ZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5k
QnVmZmVyXSk7CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5u
ZXIud2FpdFVudGlsRG9uZSgpOword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFy
dCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdw
dS93aGxzbC16ZXJvLWluaXRpYWxpemUtdmFsdWVzLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXplcm8taW5pdGlhbGl6ZS12YWx1ZXMtZXhwZWN0
ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVyby1p
bml0aWFsaXplLXZhbHVlcy1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5Pgor
PGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8
c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgY2FudmFzID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52
YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJibHVlIjsKKyAg
ICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQwMCwgNDAwKTsKKyAgICBjb250ZXh0LmZpbGxTdHls
ZSA9ICJibGFjayI7CisgICAgY29udGV4dC5maWxsUmVjdCgxMDAsIDEwMCwgMjAwLCAyMDApOwor
fQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC16ZXJvLWluaXRp
YWxpemUtdmFsdWVzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LXplcm8taW5pdGlhbGl6ZS12YWx1ZXMuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtemVyby1pbml0aWFsaXplLXZhbHVlcy5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTM1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAi
PjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBWZXJ0
ZXhPdXQgeworICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICAgIGZsb2F0IHNo
YWRlIDogYXR0cmlidXRlKDApOworfQorCit0aHJlYWQgZmxvYXQqIHB0cigpIHsKKyAgICBmbG9h
dCBsb2NhbDsKKyAgICByZXR1cm4gJmxvY2FsOworfQorCit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRl
eFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0
cmlidXRlKDEpKSB7CisgICAgVmVydGV4T3V0IHJlc3VsdDsKKworICAgIHRocmVhZCBmbG9hdCog
cCA9IHB0cigpOworICAgICpwID0gMS4wOworICAgIGZsb2F0IHZhbHVlID0gKnB0cigpOyAvLyBj
YWxsaW5nIHB0cigpIHplcm8gaW5pdGlhbGl6ZXMuCisKKyAgICByZXN1bHQucG9zaXRpb24gPSBw
b3NpdGlvbjsKKyAgICByZXN1bHQuc2hhZGUgPSB2YWx1ZTsKKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJp
YnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUs
IHNoYWRlLCAxLjApOworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0
IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7CisgICAgY29u
c3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBjb25zdCBz
aGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3Vy
Y2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNo
YWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdt
ZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNo
YWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsK
KyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9k
ZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JC
bGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3Jt
IiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldy
aXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisKKyAgICBj
b25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQiLCBv
ZmZzZXQ6IDB9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEsIGZv
cm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07CisgICAgY29uc3QgYXR0cmlidXRlcyA9IFthdHRy
aWJ1dGUwLCBhdHRyaWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwgYXR0
cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKKyAg
ICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29u
c3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2
aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRH
cm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0
RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRH
cm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91
dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3Ip
OworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBm
cmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xv
clN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwg
bGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZp
Y2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRF
U19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BV
QnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNl
LmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4
QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7
CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXko
dmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9
IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41OworICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzExXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAuNTsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzE5XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7CisKKyAgICBjb25zdCByZXNv
dXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVN
RU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9X
UklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJl
c291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1
ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCBy
ZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VCdWZm
ZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOwor
ICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBidWZmZXJCaW5kaW5nID0g
e2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAgIGNvbnN0IGJpbmRHcm91cEJp
bmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0
IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdz
OiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVh
dGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjYW52YXMgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNh
bnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0g
e2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNv
bnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0
IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25z
dCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsK
KworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVy
KCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAg
IGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3
LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIs
IGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBu
dWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMs
IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0g
Y29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAg
ICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVu
ZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgcmVuZGVyUGFz
c0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMF0sIFswXSk7CisgICAg
cmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rl
ci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZp
bmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwor
CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRp
bERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="386954"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>371767</attachid>
            <date>2019-06-10 11:52:37 -0700</date>
            <delta_ts>2019-06-10 11:54:15 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>41467</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NjI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDE5LTA2LTEwICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gQXV0byBpbml0aWFs
aXplIGxvY2FsIHZhcmlhYmxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk4NDI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTXlsZXMgTWF4ZmllbGQu
CisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIHplcm8tZmlsbGluZyBmb3IgbG9jYWwg
dmFyaWFibGVzIGluIHR3byBwYXJ0czoKKyAgICAgICAgMS4gV2UgYWRkIGEgbmV3IHBhc3MsIGF1
dG9Jbml0aWFsaXplVmFyaWFibGVzLCB3aGljaCBtYWtlcyBhbnkgdmFyaWFibGUgZGVjbGFyYXRp
b24KKyAgICAgICAgd2l0aG91dCBhbiBpbml0aWFsaXplciBjYWxsIHRoZSBkZWZhdWx0IGNvbnN0
cnVjdG9yIGZvciB0aGUgdmFyaWFibGUncyB0eXBlLgorICAgICAgICBTaW5jZSB3ZSBhdXRvIGdl
bmVyYXRlIHRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yLCBpdCdzIGEgbmF0aXZlIGZ1bmN0aW9uIHdo
b3NlCisgICAgICAgIGltcGxlbWVudGF0aW9uIHdlIGNvbnRyb2wuCisgICAgICAgIAorICAgICAg
ICAyLiBFYWNoIG5hdGl2ZSBjb25zdHJ1Y3RvciBpcyBpbXBsZW1lbnRlZCBhcyBhIG1lbXNldCgm
dmFsdWUsIHNpemVvZih2YWx1ZSksIDApLgorICAgICAgICBUaGlzIG1lbXNldCBpcyBhbiBpbmxp
bmVkIGxvb3AgaW4gZWFjaCBjb25zdHJ1Y3Rvci4gVGhlIHJlYXNvbiB0aGlzIHR1cm5zCisgICAg
ICAgIGV2ZXJ5dGhpbmcgaW50byB6ZXJvIGlzIHRoYXQgZm9yIGV2ZXJ5IHByaW1pdGl2ZSB0eXBl
LCB0aGUgInplcm8iIHZhbHVlIGlzCisgICAgICAgIHJlcHJlc2VudGVkIGFzIGFsbCB6ZXJvZXMg
aW4gbWVtb3J5OiBmbG9hdCwgaW50LCBwb2ludGVycywgZXRjLgorICAgICAgICAKKyAgICAgICAg
U2luY2Ugb3VyIGFiaWxpdHkgdG8gdGVzdCBzb21lIG9mIHRoaXMgaXMgbGltaXRlZCwgSSBvcGVu
ZWQgYSBmb2xsb3ctdXAgYnVnIHRvCisgICAgICAgIHRlc3QgdGhpcyBtb3JlOgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NDEzCisKKyAgICAgICAg
VGVzdHM6IHdlYmdwdS93aGxzbC16ZXJvLWluaXRpYWxpemUtdmFsdWVzLTIuaHRtbAorICAgICAg
ICAgICAgICAgd2ViZ3B1L3dobHNsLXplcm8taW5pdGlhbGl6ZS12YWx1ZXMuaHRtbAorCisgICAg
ICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5o
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbjo6c2V0
SW5pdGlhbGl6ZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
RnVuY3Rpb25Xcml0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpNZXRhbDo6d3JpdGVOYXRpdmVGdW5jdGlvbik6CisgICAgICAgICogTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xBU1REdW1wZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTEF1dG9Jbml0aWFsaXplVmFyaWFibGVzLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6QXV0b0luaXRpYWxpemU6OkF1dG9Jbml0aWFsaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpBdXRvSW5pdGlhbGl6ZTo6dmlzaXQpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OmF1dG9Jbml0aWFsaXplVmFyaWFibGVzKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTEF1dG9Jbml0aWFsaXplVmFyaWFibGVzLmg6IEFkZGVkLgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6Y2hlY2tPcGVyYXRvck92ZXJsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpDaGVja2VyOjp2aXNpdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xJbmZlclR5cGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjppbmZlclR5cGVz
Rm9yQ2FsbEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmluZmVyVHlwZXNGb3JDYWxs
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuaDoKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OnByZXBhcmVTaGFyZWQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6cmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpyZXNvbHZlRnVuY3Rpb25PdmVybG9hZCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmg6CisgICAgICAgICogU291cmNlcy50eHQ6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE5LTA2
LTEwICBBbGkgSnVtYSAgPGFqdW1hQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9O
IChyMjQ1Mzk2KTogUGFnZSBsb2FkIHRpbWUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbgpJbmRleDog
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQJKHJldmlzaW9uIDI0NjI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zMDcsNiArMzA3LDcgQEAgTW9kdWxlcy93ZWJzb2NrZXRz
L1dvcmtlclRocmVhZGFibGVXZWJTbwogTW9kdWxlcy93ZWJncHUvR1BVQ2FudmFzQ29udGV4dC5j
cHAKIE1vZHVsZXMvd2ViZ3B1L05hdmlnYXRvckdQVS5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMQVNURHVtcGVyLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBdXRvSW5pdGlh
bGl6ZVZhcmlhYmxlcy5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5j
cHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFBhcnNlci5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMQVNURHVtcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBU1REdW1wZXIuaAkocmV2aXNpb24gMjQ2MjY5KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBU1REdW1wZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMTQyLDYgKzE0Miw3IEBAIE1BS0VfUFJJTlRfQURBUFRPUihTdGF0ZW1l
bnREdW1wZXIsIEFTVDoKIE1BS0VfUFJJTlRfQURBUFRPUihQcm9ncmFtRHVtcGVyLCBQcm9ncmFt
JiwgZHVtcEFTVE5vZGUpOwogTUFLRV9QUklOVF9BREFQVE9SKFN0cnVjdHVyZURlZmluaXRpb25E
dW1wZXIsIEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYsIGR1bXBBU1ROb2RlKTsKIE1BS0VfUFJJ
TlRfQURBUFRPUihGdW5jdGlvbkRlZmluaXRpb25EdW1wZXIsIEFTVDo6RnVuY3Rpb25EZWZpbml0
aW9uJiwgZHVtcEFTVE5vZGUpOworTUFLRV9QUklOVF9BREFQVE9SKFR5cGVEdW1wZXIsIEFTVDo6
VW5uYW1lZFR5cGUmLCBkdW1wQVNUTm9kZSk7CiAKIAogc3RhdGljIEFMV0FZU19JTkxJTkUgdm9p
ZCBkdW1wQVNUKFByb2dyYW0mIHByb2dyYW0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTEF1dG9Jbml0aWFsaXplVmFyaWFibGVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEF1dG9Jbml0aWFs
aXplVmFyaWFibGVzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTEF1dG9Jbml0aWFsaXplVmFyaWFibGVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldITFNMQXV0b0luaXRpYWxpemVWYXJpYWJsZXMuaCIKKworI2lmIEVOQUJMRShX
RUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEFTVC5oIgorI2luY2x1ZGUgIldITFNMQVNURHVtcGVy
LmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lQ29udGV4dC5oIgorI2luY2x1ZGUgIldITFNMUmVzb2x2
ZU92ZXJsb2FkSW1wbC5oIgorI2luY2x1ZGUgIldITFNMUmVzb2x2aW5nVHlwZS5oIgorI2luY2x1
ZGUgIldITFNMVmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIEF1dG9J
bml0aWFsaXplIDogcHVibGljIFZpc2l0b3IgeworICAgIHVzaW5nIEJhc2UgPSBWaXNpdG9yOwor
cHVibGljOgorICAgIEF1dG9Jbml0aWFsaXplKE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCkKKyAg
ICAgICAgOiBtX25hbWVDb250ZXh0KG5hbWVDb250ZXh0KQorICAgICAgICAsIG1fY2FzdEZ1bmN0
aW9ucygqbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMoIm9wZXJhdG9yIGNhc3QiX3N0cikpCisg
ICAgeyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24mKQorICAgIHsKKyAgICAgICAgLy8gU2tpcCBhcmd1bWVudCBkZWNsYXJhdGlvbnMuCisgICAg
fQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVj
bGFyYXRpb24pCisgICAgeworICAgICAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFs
aXplcigpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEFTVDo6VW5uYW1lZFR5cGUq
IHR5cGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQodHlwZSk7CisKKworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0g
cHJpbnRTdHJlYW07CisgICAgICAgIHByaW50U3RyZWFtLnByaW50KFR5cGVEdW1wZXIoKnR5cGUp
KTsKKyAgICAgICAgU3RyaW5nIGZ1bmN0aW9uTmFtZSA9IHByaW50U3RyZWFtLnRvU3RyaW5nKCk7
CisjZWxzZQorICAgICAgICBTdHJpbmcgZnVuY3Rpb25OYW1lID0gIjx6ZXJvLWluaXQ+Il9zOwor
I2VuZGlmCisgICAgICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6
Q2FsbEV4cHJlc3Npb24+KHZhcmlhYmxlRGVjbGFyYXRpb24ub3JpZ2luKCksIFdURk1vdmUoZnVu
Y3Rpb25OYW1lKSwgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PigpKTsKKyAgICAg
ICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUodHlwZS0+Y2xvbmUoKSk7CisgICAgICAgIGNhbGxF
eHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgICAg
IGNhbGxFeHByZXNzaW9uLT5zZXRPdmVybG9hZHMobV9jYXN0RnVuY3Rpb25zKTsKKyAgICAgICAg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IGFyZ3VtZW50VHlw
ZXM7CisgICAgICAgIGF1dG8qIGZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoKmNh
bGxFeHByZXNzaW9uLT5vdmVybG9hZHMoKSwgYXJndW1lbnRUeXBlcywgdHlwZSk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1
bmN0aW9uKCpmdW5jdGlvbik7CisKKyAgICAgICAgdmFyaWFibGVEZWNsYXJhdGlvbi5zZXRJbml0
aWFsaXplcihXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7CisgICAgfQorCisgICAgTmFtZUNvbnRl
eHQmIG1fbmFtZUNvbnRleHQ7CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIG1fY2FzdEZ1bmN0aW9uczsKK307CisKK3ZvaWQg
YXV0b0luaXRpYWxpemVWYXJpYWJsZXMoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBBdXRvSW5p
dGlhbGl6ZSBhdXRvSW5pdGlhbGl6ZShwcm9ncmFtLm5hbWVDb250ZXh0KCkpOworICAgIGF1dG9J
bml0aWFsaXplLlZpc2l0b3I6OnZpc2l0KHByb2dyYW0pOworfQorCit9IC8vIG5hbWVzcGFjZSBX
SExTTAorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BV
KQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBdXRvSW5p
dGlhbGl6ZVZhcmlhYmxlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMQXV0b0luaXRpYWxpemVWYXJpYWJsZXMuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEF1dG9Jbml0aWFs
aXplVmFyaWFibGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCit2b2lkIGF1dG9J
bml0aWFsaXplVmFyaWFibGVzKFByb2dyYW0mKTsKKworfQorCit9CisKKyNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNr
ZXIuY3BwCShyZXZpc2lvbiAyNDYyNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTENoZWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTcsNyArMzU3LDcg
QEAgc3RhdGljIGJvb2wgY2hlY2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0IAogICAgICAgICAgICAg
YXJndW1lbnRUeXBlcy5hcHBlbmQoKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBd
LT50eXBlKCkpLT5jbG9uZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiBhcmd1bWVudFR5cGUgOiBh
cmd1bWVudFR5cGVzKQogICAgICAgICAgICAgYXJndW1lbnRUeXBlUmVmZXJlbmNlcy5hcHBlbmQo
YXJndW1lbnRUeXBlKTsKLSAgICAgICAgYXV0byogb3ZlcmxvYWQgPSByZXNvbHZlRnVuY3Rpb25P
dmVybG9hZEltcGwoKmdldHRlckZ1bmNzLCBhcmd1bWVudFR5cGVSZWZlcmVuY2VzLCBudWxscHRy
KTsKKyAgICAgICAgYXV0byogb3ZlcmxvYWQgPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZCgqZ2V0
dGVyRnVuY3MsIGFyZ3VtZW50VHlwZVJlZmVyZW5jZXMpOwogICAgICAgICBpZiAoIW92ZXJsb2Fk
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBhdXRvJiByZXN1bHRUeXBlID0g
b3ZlcmxvYWQtPnR5cGUoKTsKQEAgLTk3OSw3ICs5NzksNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0
KEFTVDo6RG90RXhwcmVzc2lvbiYgCiAgICAgQVNUOjpVbm5hbWVkVHlwZSogZ2V0dGVyUmV0dXJu
VHlwZSA9IG51bGxwdHI7CiAgICAgewogICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxSZXNvbHZpbmdUeXBlPj4gZ2V0dGVyQXJndW1lbnRUeXBlcyB7IGJhc2VJbmZvLT5yZXNv
bHZpbmdUeXBlIH07Ci0gICAgICAgIGdldHRlckZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3Zl
cmxvYWRJbXBsKGRvdEV4cHJlc3Npb24ucG9zc2libGVHZXR0ZXJPdmVybG9hZHMoKSwgZ2V0dGVy
QXJndW1lbnRUeXBlcywgbnVsbHB0cik7CisgICAgICAgIGdldHRlckZ1bmN0aW9uID0gcmVzb2x2
ZUZ1bmN0aW9uT3ZlcmxvYWQoZG90RXhwcmVzc2lvbi5wb3NzaWJsZUdldHRlck92ZXJsb2Fkcygp
LCBnZXR0ZXJBcmd1bWVudFR5cGVzKTsKICAgICAgICAgaWYgKGdldHRlckZ1bmN0aW9uKQogICAg
ICAgICAgICAgZ2V0dGVyUmV0dXJuVHlwZSA9ICZnZXR0ZXJGdW5jdGlvbi0+dHlwZSgpOwogICAg
IH0KQEAgLTk4OSw3ICs5ODksNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVz
c2lvbiYgCiAgICAgaWYgKGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGJhc2VJbmZvLT50eXBlQW5u
b3RhdGlvbi5sZWZ0QWRkcmVzc1NwYWNlKCkpIHsKICAgICAgICAgYXV0byBhcmd1bWVudFR5cGUg
PSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihkb3RFeHByZXNz
aW9uLm9yaWdpbigpKSwgKmxlZnRBZGRyZXNzU3BhY2UsIGJhc2VVbm5hbWVkVHlwZS0+Z2V0KCku
Y2xvbmUoKSk7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmlu
Z1R5cGU+PiBhbmRlckFyZ3VtZW50VHlwZXMgeyBiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSB9Owot
ICAgICAgICBhbmRlckZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKGRvdEV4
cHJlc3Npb24ucG9zc2libGVBbmRlck92ZXJsb2FkcygpLCBhbmRlckFyZ3VtZW50VHlwZXMsIG51
bGxwdHIpOworICAgICAgICBhbmRlckZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQo
ZG90RXhwcmVzc2lvbi5wb3NzaWJsZUFuZGVyT3ZlcmxvYWRzKCksIGFuZGVyQXJndW1lbnRUeXBl
cyk7CiAgICAgICAgIGlmIChhbmRlckZ1bmN0aW9uKQogICAgICAgICAgICAgYW5kZXJSZXR1cm5U
eXBlID0gJmRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZGVyRnVuY3Rpb24tPnR5cGUoKSku
ZWxlbWVudFR5cGUoKTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTgxNjQgRW5mb3JjZSB0aGUgcmV0dXJuIG9mIGFuZGVycyB3aWxsIGFsd2F5cyBi
ZSBhIHBvaW50ZXIKICAgICB9CkBAIC05OTksNyArOTk5LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNp
dChBU1Q6OkRvdEV4cHJlc3Npb24mIAogICAgIHsKICAgICAgICAgYXV0byBhcmd1bWVudFR5cGUg
PSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihkb3RFeHByZXNz
aW9uLm9yaWdpbigpKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgYmFzZVVubmFtZWRUeXBl
LT5nZXQoKS5jbG9uZSgpKTsKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
UmVzb2x2aW5nVHlwZT4+IHRocmVhZEFuZGVyQXJndW1lbnRUeXBlcyB7IGJhc2VJbmZvLT5yZXNv
bHZpbmdUeXBlIH07Ci0gICAgICAgIHRocmVhZEFuZGVyRnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rp
b25PdmVybG9hZEltcGwoZG90RXhwcmVzc2lvbi5wb3NzaWJsZUFuZGVyT3ZlcmxvYWRzKCksIHRo
cmVhZEFuZGVyQXJndW1lbnRUeXBlcywgbnVsbHB0cik7CisgICAgICAgIHRocmVhZEFuZGVyRnVu
Y3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChkb3RFeHByZXNzaW9uLnBvc3NpYmxlQW5k
ZXJPdmVybG9hZHMoKSwgdGhyZWFkQW5kZXJBcmd1bWVudFR5cGVzKTsKICAgICAgICAgaWYgKHRo
cmVhZEFuZGVyRnVuY3Rpb24pCiAgICAgICAgICAgICB0aHJlYWRBbmRlclJldHVyblR5cGUgPSAm
ZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odGhyZWFkQW5kZXJGdW5jdGlvbi0+dHlwZSgpKS5l
bGVtZW50VHlwZSgpOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5ODE2NCBFbmZvcmNlIHRoZSByZXR1cm4gb2YgYW5kZXJzIHdpbGwgYWx3YXlzIGJl
IGEgcG9pbnRlcgogICAgIH0KQEAgLTEwMjQsNyArMTAyNCw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlz
aXQoQVNUOjpEb3RFeHByZXNzaW9uJiAKICAgICB7CiAgICAgICAgIFJlc29sdmluZ1R5cGUgZmll
bGRSZXNvbHZpbmdUeXBlKGZpZWxkVHlwZS0+Y2xvbmUoKSk7CiAgICAgICAgIFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBzZXR0ZXJBcmd1bWVudFR5cGVzIHsg
YmFzZUluZm8tPnJlc29sdmluZ1R5cGUsIGZpZWxkUmVzb2x2aW5nVHlwZSB9OwotICAgICAgICBz
ZXR0ZXJGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChkb3RFeHByZXNzaW9u
LnBvc3NpYmxlU2V0dGVyT3ZlcmxvYWRzKCksIHNldHRlckFyZ3VtZW50VHlwZXMsIG51bGxwdHIp
OworICAgICAgICBzZXR0ZXJGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKGRvdEV4
cHJlc3Npb24ucG9zc2libGVTZXR0ZXJPdmVybG9hZHMoKSwgc2V0dGVyQXJndW1lbnRUeXBlcyk7
CiAgICAgICAgIGlmIChzZXR0ZXJGdW5jdGlvbikKICAgICAgICAgICAgIHNldHRlclJldHVyblR5
cGUgPSAmc2V0dGVyRnVuY3Rpb24tPnR5cGUoKTsKICAgICB9CkBAIC0xMzk3LDcgKzEzOTcsNyBA
QCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mCiAgICAgLy8gV2UgZG9u
J3Qgd2FudCB0byByZWN1cnNlIHRvIHRoZSBzYW1lIG5vZGUgdHdpY2UuCiAKICAgICBBU1NFUlQo
Y2FsbEV4cHJlc3Npb24uaGFzT3ZlcmxvYWRzKCkpOwotICAgIGF1dG8qIGZ1bmN0aW9uID0gcmVz
b2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKCpjYWxsRXhwcmVzc2lvbi5vdmVybG9hZHMoKSwgdHlw
ZXMsIGNhbGxFeHByZXNzaW9uLmNhc3RSZXR1cm5UeXBlKCkpOworICAgIGF1dG8qIGZ1bmN0aW9u
ID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoKmNhbGxFeHByZXNzaW9uLm92ZXJsb2FkcygpLCB0
eXBlcywgY2FsbEV4cHJlc3Npb24uY2FzdFJldHVyblR5cGUoKSk7CiAgICAgaWYgKCFmdW5jdGlv
bikgewogICAgICAgICBpZiAoYXV0byBuZXdGdW5jdGlvbiA9IHJlc29sdmVCeUluc3RhbnRpYXRp
b24oY2FsbEV4cHJlc3Npb24sIHR5cGVzLCBtX2ludHJpbnNpY3MpKSB7CiAgICAgICAgICAgICBt
X3Byb2dyYW0uYXBwZW5kKFdURk1vdmUoKm5ld0Z1bmN0aW9uKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5j
cHAJKHJldmlzaW9uIDI0NjI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMSW5mZXJUeXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw3ICsyMjEsOCBA
QCBib29sIGluZmVyVHlwZXNGb3JUeXBlQXJndW1lbnRzKEFTVDo6TmFtCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgaW5mZXJUeXBlc0ZvckNhbGwoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
JiBwb3NzaWJsZUZ1bmN0aW9uLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZp
bmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIGNvbnN0IEFTVDo6TmFtZWRUeXBlKiBjYXN0UmV0dXJu
VHlwZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUeXBlS2luZD4KK0FMV0FZU19JTkxJTkUgYm9vbCBp
bmZlclR5cGVzRm9yQ2FsbEltcGwoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBwb3NzaWJsZUZ1
bmN0aW9uLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFy
Z3VtZW50VHlwZXMsIGNvbnN0IFR5cGVLaW5kKiBjYXN0UmV0dXJuVHlwZSkKIHsKICAgICBpZiAo
cG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IGFyZ3VtZW50VHlwZXMuc2l6
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzksNiArMjQwLDE2IEBAIGJvb2wgaW5m
ZXJUeXBlc0ZvckNhbGwoQVNUOjpGdW5jdGlvbkRlY2wKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAor
Ym9vbCBpbmZlclR5cGVzRm9yQ2FsbChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIHBvc3NpYmxl
RnVuY3Rpb24sIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYg
YXJndW1lbnRUeXBlcywgY29uc3QgQVNUOjpOYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlKQorewor
ICAgIHJldHVybiBpbmZlclR5cGVzRm9yQ2FsbEltcGwocG9zc2libGVGdW5jdGlvbiwgYXJndW1l
bnRUeXBlcywgY2FzdFJldHVyblR5cGUpOworfQorCitib29sIGluZmVyVHlwZXNGb3JDYWxsKEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgcG9zc2libGVGdW5jdGlvbiwgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBjb25zdCBBU1Q6
OlVubmFtZWRUeXBlKiBjYXN0UmV0dXJuVHlwZSkKK3sKKyAgICByZXR1cm4gaW5mZXJUeXBlc0Zv
ckNhbGxJbXBsKHBvc3NpYmxlRnVuY3Rpb24sIGFyZ3VtZW50VHlwZXMsIGNhc3RSZXR1cm5UeXBl
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV0hMU0wKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xJbmZlclR5cGVzLmgJKHJldmlzaW9uIDI0NjI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2
ICs1NCw3IEBAIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWEKIE9wdGlv
bmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gY29tbWl0KEFTVDo6UmVzb2x2YWJsZVR5
cGUmKTsKIGJvb2wgaW5mZXJUeXBlc0ZvclR5cGVBcmd1bWVudHMoQVNUOjpOYW1lZFR5cGUmIHBv
c3NpYmxlVHlwZSwgQVNUOjpUeXBlQXJndW1lbnRzJik7CiBib29sIGluZmVyVHlwZXNGb3JDYWxs
KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgcG9zc2libGVGdW5jdGlvbiwgVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBjb25zdCBB
U1Q6Ok5hbWVkVHlwZSogY2FzdFJldHVyblR5cGUpOworYm9vbCBpbmZlclR5cGVzRm9yQ2FsbChB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIHBvc3NpYmxlRnVuY3Rpb24sIFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywgY29uc3QgQVNU
OjpVbm5hbWVkVHlwZSogY2FzdFJldHVyblR5cGUpOwogCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAkocmV2
aXNpb24gMjQ2MjY5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQcmVwYXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJM
RShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEFTVER1bXBlci5oIgorI2luY2x1ZGUgIldITFNM
QXV0b0luaXRpYWxpemVWYXJpYWJsZXMuaCIKICNpbmNsdWRlICJXSExTTENoZWNrRHVwbGljYXRl
RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiV0hMU0xDaGVja2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xG
dW5jdGlvblN0YWdlQ2hlY2tlci5oIgpAQCAtNTgsNyArNTksNyBAQCBuYW1lc3BhY2UgV0hMU0wg
ewogc3RhdGljIGNvbnN0ZXhwciBib29sIGR1bXBBU1RCZWZvcmVFYWNoUGFzcyA9IGZhbHNlOwog
c3RhdGljIGNvbnN0ZXhwciBib29sIGR1bXBBU1RBZnRlclBhcnNpbmcgPSBmYWxzZTsKIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBkdW1wQVNUQXRFbmQgPSBmYWxzZTsKLXN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBhbHdheXNEdW1wUGFzc0ZhaWx1cmVzID0gdHJ1ZTsKK3N0YXRpYyBjb25zdGV4cHIgYm9v
bCBhbHdheXNEdW1wUGFzc0ZhaWx1cmVzID0gZmFsc2U7CiBzdGF0aWMgY29uc3RleHByIGJvb2wg
ZHVtcFBhc3NGYWlsdXJlID0gZHVtcEFTVEJlZm9yZUVhY2hQYXNzIHx8IGR1bXBBU1RBZnRlclBh
cnNpbmcgfHwgZHVtcEFTVEF0RW5kIHx8IGFsd2F5c0R1bXBQYXNzRmFpbHVyZXM7CiAKIHN0YXRp
YyBib29sIGR1bXBBU1RJZk5lZWRlZChib29sIHNob3VsZER1bXAsIFByb2dyYW0mIHByb2dyYW0s
IGNvbnN0IGNoYXIqIG1lc3NhZ2UpCkBAIC0xMzAsNiArMTMxLDcgQEAgc3RhdGljIE9wdGlvbmFs
PFByb2dyYW0+IHByZXBhcmVTaGFyZWQoUwogICAgIFJVTl9QQVNTKGNoZWNrLCBwcm9ncmFtKTsK
IAogICAgIGNoZWNrTGl0ZXJhbFR5cGVzKHByb2dyYW0pOworICAgIGF1dG9Jbml0aWFsaXplVmFy
aWFibGVzKHByb2dyYW0pOwogICAgIHJlc29sdmVQcm9wZXJ0aWVzKHByb2dyYW0pOwogICAgIGZp
bmRIaWdoWm9tYmllcyhwcm9ncmFtKTsKICAgICBSVU5fUEFTUyhjaGVja1N0YXRlbWVudEJlaGF2
aW9yLCBwcm9ncmFtKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcAkocmV2
aXNpb24gMjQ2MjY5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsOCBA
QCBzdGF0aWMgdW5zaWduZWQgY29udmVyc2lvbkNvc3QoQVNUOjpGdW5jCiAgICAgcmV0dXJuIGNv
bnZlcnNpb25Db3N0OwogfQogCi1BU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5j
dGlvbk92ZXJsb2FkSW1wbChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywgQVNUOjpOYW1lZFR5
cGUqIGNhc3RSZXR1cm5UeXBlKQordGVtcGxhdGUgPHR5cGVuYW1lIFR5cGVLaW5kPgorQVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3Np
YmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBl
Pj4mIGFyZ3VtZW50VHlwZXMsIFR5cGVLaW5kKiBjYXN0UmV0dXJuVHlwZSkKIHsKICAgICBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBj
YW5kaWRhdGVzOwogICAgIGZvciAoYXV0byYgcG9zc2libGVGdW5jdGlvbiA6IHBvc3NpYmxlRnVu
Y3Rpb25zKSB7CkBAIC03Niw2ICs3NywyMSBAQCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJl
c29sdmVGdW5jdGlvCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK0FTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlw
ZXMpCit7CisgICAgcmV0dXJuIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChwb3NzaWJsZUZ1
bmN0aW9ucywgYXJndW1lbnRUeXBlcywgc3RhdGljX2Nhc3Q8QVNUOjpOYW1lZFR5cGUqPihudWxs
cHRyKSk7Cit9CisKK0FTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3Zl
cmxvYWQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIEFTVDo6TmFtZWRUeXBlKiBjYXN0UmV0
dXJuVHlwZSkKK3sKKyAgICByZXR1cm4gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKHBvc3Np
YmxlRnVuY3Rpb25zLCBhcmd1bWVudFR5cGVzLCBjYXN0UmV0dXJuVHlwZSk7Cit9CisKK0FTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxl
RnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4m
IGFyZ3VtZW50VHlwZXMsIEFTVDo6VW5uYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlKQoreworICAg
IHJldHVybiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwocG9zc2libGVGdW5jdGlvbnMsIGFy
Z3VtZW50VHlwZXMsIGNhc3RSZXR1cm5UeXBlKTsKK30KKwogQVNUOjpOYW1lZFR5cGUqIHJlc29s
dmVUeXBlT3ZlcmxvYWRJbXBsKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFt
ZWRUeXBlPiwgMT4mIHBvc3NpYmxlVHlwZXMsIEFTVDo6VHlwZUFyZ3VtZW50cyYgdHlwZUFyZ3Vt
ZW50cykKIHsKICAgICBBU1Q6Ok5hbWVkVHlwZSogcmVzdWx0ID0gbnVsbHB0cjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oCShyZXZpc2lvbiAyNDYyNjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuaAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNyArNDMsOSBAQCBjbGFzcyBOYW1lZFR5cGU7CiAKIH0KIAotQVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBv
c3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdU
eXBlPj4mIGFyZ3VtZW50VHlwZXMsIEFTVDo6TmFtZWRUeXBlKiBjYXN0UmV0dXJuVHlwZSk7CitB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3Nz
aWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlw
ZT4+JiBhcmd1bWVudFR5cGVzKTsKK0FTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1
bmN0aW9uT3ZlcmxvYWQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIEFTVDo6TmFtZWRUeXBl
KiBjYXN0UmV0dXJuVHlwZSk7CitBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5j
dGlvbk92ZXJsb2FkKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBBU1Q6OlVubmFtZWRUeXBl
KiBjYXN0UmV0dXJuVHlwZSk7CiBBU1Q6Ok5hbWVkVHlwZSogcmVzb2x2ZVR5cGVPdmVybG9hZElt
cGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiYsIEFT
VDo6VHlwZUFyZ3VtZW50cyYpOwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNs
YXJhdGlvbi5oCShyZXZpc2lvbiAyNDYyNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTcwLDYgKzcwLDExIEBAIHB1YmxpYzoKICAgICBFeHByZXNzaW9uKiBpbml0aWFsaXplcigp
IHsgcmV0dXJuIG1faW5pdGlhbGl6ZXIgPyAmKm1faW5pdGlhbGl6ZXIgOiBudWxscHRyOyB9CiAg
ICAgYm9vbCBpc0Fub255bW91cygpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZS5pc051bGwoKTsgfQog
ICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4gdGFrZUluaXRpYWxpemVyKCkgeyBy
ZXR1cm4gV1RGTW92ZShtX2luaXRpYWxpemVyKTsgfQorICAgIHZvaWQgc2V0SW5pdGlhbGl6ZXIo
VW5pcXVlUmVmPEV4cHJlc3Npb24+IGV4cHJlc3Npb24pCisgICAgeworICAgICAgICBBU1NFUlQo
IWluaXRpYWxpemVyKCkpOworICAgICAgICBtX2luaXRpYWxpemVyID0gV1RGTW92ZShleHByZXNz
aW9uKTsKKyAgICB9CiAKIHByaXZhdGU6CiAgICAgUXVhbGlmaWVycyBtX3F1YWxpZmllcnM7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0
aW9uV3JpdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAkocmV2aXNpb24gMjQ2MjY5KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlv
bldyaXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3NywxMCArNDc3LDggQEAgdm9pZCBGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogICAgIGlmICh2YXJpYWJsZURlY2xhcmF0
aW9uLmluaXRpYWxpemVyKCkpIHsKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp2YXJpYWJs
ZURlY2xhcmF0aW9uLmluaXRpYWxpemVyKCkpOwogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCp2YXJpYWJsZURl
Y2xhcmF0aW9uLnR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gIiwgbV9zdGFjay50YWtl
TGFzdCgpLCAiO1xuIikpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEZJWE1FOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NzcxIFplcm8tZmlsbCB0aGUgdmFy
aWFibGUuCisgICAgfSBlbHNlCiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKnZhcmlhYmxlRGVjbGFyYXRpb24u
dHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICI7XG4iKSk7Ci0gICAgfQogfQogCiB2b2lkIEZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYg
YXNzaWdubWVudEV4cHJlc3Npb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1
bmN0aW9uV3JpdGVyLmNwcAkocmV2aXNpb24gMjQ2MjY5KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsOCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlv
bihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIGlmICghbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKCkuc2l6ZSgpKSB7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICIoKSB7
XG4iKSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAg
IiwgbWV0YWxSZXR1cm5OYW1lLCAiIHg7XG4iKSk7Ci0gICAgICAgICAgICAvLyBGSVhNRTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTc3MSBaZXJvLWZpbGwKKyAg
ICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgdGhyZWFkIGNoYXIqIHB0ciA9IHN0
YXRpY19jYXN0PHRocmVhZCBjaGFyKj4oc3RhdGljX2Nhc3Q8dGhyZWFkIHZvaWQqPigmeCkpO1xu
Iik7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoIiwgbWV0YWxSZXR1cm5OYW1lLCAiKTsgKytpKSBw
dHJbaV0gPSAwO1xuIikpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICBy
ZXR1cm4geDtcbiIpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwog
ICAgICAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDI0NjI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODM0Nyw2ICs4MzQ3LDggQEAKIAkJNTJCMEQ0QkQx
QzU3RkQxRTAwNzdDRTUzIC8qIFBsYXRmb3JtVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQbGF0Zm9ybVZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTJCMEQ0QkYxQzU3RkQ2NjAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjBENEMxMUM1N0ZG
OTEwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyQjM0MzQ5MjJBMDc1MjIwMEU0OTM4OSAvKiBXSExT
TEF1dG9Jbml0aWFsaXplVmFyaWFibGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQXV0b0luaXRp
YWxpemVWYXJpYWJsZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJCMzQzNEIy
MkEwNzUyMzAwRTQ5Mzg5IC8qIFdITFNMQXV0b0luaXRpYWxpemVWYXJpYWJsZXMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV0hMU0xBdXRvSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDVBMThEMUM1NDU5MDMwMERFMzRBMyAvKiBWaWRlb0Z1
bGxzY3JlZW5MYXllck1hbmFnZXJPYmpDLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyT2JqQy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJENUExOEUxQzU0NTkwMzAwREUzNEEzIC8qIFZpZGVvRnVs
bHNjcmVlbkxheWVyTWFuYWdlck9iakMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyT2JqQy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MkQ1QTFBNDFDNTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9k
ZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTW9k
ZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NDQwLDYgKzI1NDQyLDggQEAK
IAkJCQkxQ0VDQjNBRDIxRjJCOTY0MDBGNDQ1NDIgLyogTWV0YWwgKi8sCiAJCQkJQzIwRjg4QUEy
Mjk2NkIwRTAwRDYxMEZBIC8qIFdITFNMQVNURHVtcGVyLmNwcCAqLywKIAkJCQlDMjBGODhBQzIy
OTY2QjBGMDBENjEwRkEgLyogV0hMU0xBU1REdW1wZXIuaCAqLywKKwkJCQk1MkIzNDM0QjIyQTA3
NTIzMDBFNDkzODkgLyogV0hMU0xBdXRvSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHAgKi8sCisJCQkJ
NTJCMzQzNDkyMkEwNzUyMjAwRTQ5Mzg5IC8qIFdITFNMQXV0b0luaXRpYWxpemVWYXJpYWJsZXMu
aCAqLywKIAkJCQlDMjM0QTlCMjIxRTkyQzFGMDAzQzk4NEQgLyogV0hMU0xDaGVja0R1cGxpY2F0
ZUZ1bmN0aW9ucy5jcHAgKi8sCiAJCQkJQzIzNEE5QUUyMUU5MkMxQTAwM0M5ODREIC8qIFdITFNM
Q2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaCAqLywKIAkJCQkxQzg0MEI5QjIxRUM0MDA5MDBEMDUw
MEQgLyogV0hMU0xDaGVja2VyLmNwcCAqLywKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NjI2OSkKKysr
IExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisy
MDE5LTA2LTEwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtX
SExTTF0gQXV0byBpbml0aWFsaXplIGxvY2FsIHZhcmlhYmxlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NDI2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTXlsZXMgTWF4ZmllbGQuCisKKyAgICAgICAgKiB3ZWJncHUvd2hsc2wtemVyby1pbml0aWFs
aXplLXZhbHVlcy0yLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxz
bC16ZXJvLWluaXRpYWxpemUtdmFsdWVzLTIuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1
L3dobHNsLXplcm8taW5pdGlhbGl6ZS12YWx1ZXMtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAg
ICAgICogd2ViZ3B1L3dobHNsLXplcm8taW5pdGlhbGl6ZS12YWx1ZXMuaHRtbDogQWRkZWQuCisK
IDIwMTktMDYtMTAgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAg
IENhbGwgd2FzIG5lZ290aWF0ZWQgd2l0aCBIMjY0IEJhc2UgUHJvZmlsZSA0MmUwMWYgYnV0IGVu
Y29kZWQgaW4gSGlnaCBQcm9maWxlCkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVy
by1pbml0aWFsaXplLXZhbHVlcy0yLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLXplcm8taW5pdGlhbGl6ZS12YWx1ZXMtMi1leHBlY3RlZC5odG1s
CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC16ZXJvLWluaXRpYWxp
emUtdmFsdWVzLTItZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52
YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlw
dD4KK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdl
dENvbnRleHQoIjJkIik7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7CisgICAgY29u
dGV4dC5maWxsUmVjdCgwLCAwLCA0MDAsIDQwMCk7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAi
YmxhY2siOworICAgIGNvbnRleHQuZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsKK30KK3dp
bmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVyby1pbml0aWFsaXpl
LXZhbHVlcy0yLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXpl
cm8taW5pdGlhbGl6ZS12YWx1ZXMtMi5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC16ZXJvLWluaXRpYWxpemUtdmFsdWVzLTIuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE1MiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9o
ZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAw
Ij48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgVmVy
dGV4T3V0IHsKKyAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKKyAgICBmbG9hdCBz
aGFkZSA6IGF0dHJpYnV0ZSgwKTsKK30KKworc3RydWN0IEJhciB7CisgICAgZmxvYXQgeTsKKyAg
ICBmbG9hdCB5MTsKKyAgICBmbG9hdCB5MjsKKyAgICBmbG9hdCB5MzsKKyAgICBmbG9hdCB5NDsK
KyAgICBmbG9hdCB5NTsKKyAgICBmbG9hdCB5NjsKKyAgICBmbG9hdCB5NzsKKyAgICBmbG9hdCB5
ODsKKyAgICBmbG9hdCB5OTsKKyAgICBmbG9hdCB5MTA7CisgICAgZmxvYXQgeTExOworICAgIGZs
b2F0IHkxMjsKKyAgICBmbG9hdCB5MTM7CisgICAgZmxvYXQgeTE0OworICAgIGZsb2F0IHkxNTsK
KyAgICBmbG9hdCB5MTY7CisgICAgZmxvYXQgeTE3OworICAgIGZsb2F0IHkxODsKKyAgICBmbG9h
dCB5MTk7CisgICAgZmxvYXQgeTIwOworfQorCit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRl
cihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRl
KDEpKSB7CisgICAgVmVydGV4T3V0IHJlc3VsdDsKKworICAgIEJhciBiYXI7CisKKyAgICByZXN1
bHQucG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICByZXN1bHQuc2hhZGUgPSBiYXIueTIwOworCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZs
b2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxv
YXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3Rh
cnQoKSB7CisgICAgY29uc3QgYWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFk
YXB0ZXIoKTsKKyAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2Uo
KTsKKworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUo
e2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0
YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07
CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQ
b2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAi
dHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZh
Y2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsK
KyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zv
cm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1
fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRl
ID0gbnVsbDsKKworICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZv
cm1hdDogImZsb2F0NCIsIG9mZnNldDogMH07CisgICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFk
ZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKKyAgICBjb25zdCBh
dHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOworICAgIGNvbnN0IGlucHV0MCA9
IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9OworICAgIGNvbnN0IGlucHV0
cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlu
cHV0c307CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdz
OiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07
CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91
dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERl
c2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNv
bnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5l
TGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3Ig
PSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJp
emF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQs
IHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5k
ZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURl
c2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTog
RmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJV
c2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRl
eEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsK
KyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIw
Lm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0g
bmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzRdID0gMS4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1
XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDEu
MDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41OworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzEyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsK
KworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJy
YXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BV
QnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmlj
ZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCByZXNv
dXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3lu
YygpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJB
cnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0
MzJBcnJheVswXSA9IDE7CisgICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0
IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07CisgICAg
Y29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmlu
ZGluZ307CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91
cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdy
b3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAg
IGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBj
b25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBD
aGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29u
c3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3Jp
cHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4
dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVh
dGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3Jl
YXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwg
YjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDog
b3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwg
c3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVu
Y2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7
Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVu
ZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFz
c0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBp
cGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3Vw
KTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZm
ZXIwXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAg
IHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0g
Y29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtj
b21tYW5kQnVmZmVyXSk7CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRl
c3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQi
LCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC16ZXJvLWluaXRpYWxpemUtdmFsdWVzLWV4cGVjdGVkLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXplcm8taW5pdGlhbGl6ZS12YWx1ZXMt
ZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
emVyby1pbml0aWFsaXplLXZhbHVlcy1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxi
b2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52
YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgY2FudmFz
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQg
PSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJibHVl
IjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQwMCwgNDAwKTsKKyAgICBjb250ZXh0LmZp
bGxTdHlsZSA9ICJibGFjayI7CisgICAgY29udGV4dC5maWxsUmVjdCgxMDAsIDEwMCwgMjAwLCAy
MDApOworfQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC16ZXJv
LWluaXRpYWxpemUtdmFsdWVzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLXplcm8taW5pdGlhbGl6ZS12YWx1ZXMuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtemVyby1pbml0aWFsaXplLXZhbHVlcy5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTM1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0
PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0cnVj
dCBWZXJ0ZXhPdXQgeworICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICAgIGZs
b2F0IHNoYWRlIDogYXR0cmlidXRlKDApOworfQorCit0aHJlYWQgZmxvYXQqIHB0cigpIHsKKyAg
ICBmbG9hdCBsb2NhbDsKKyAgICByZXR1cm4gJmxvY2FsOworfQorCit2ZXJ0ZXggVmVydGV4T3V0
IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRl
IDogYXR0cmlidXRlKDEpKSB7CisgICAgVmVydGV4T3V0IHJlc3VsdDsKKworICAgIHRocmVhZCBm
bG9hdCogcCA9IHB0cigpOworICAgICpwID0gMS4wOworICAgIGZsb2F0IHZhbHVlID0gKnB0cigp
OyAvLyBjYWxsaW5nIHB0cigpIHplcm8gaW5pdGlhbGl6ZXMuCisKKyAgICByZXN1bHQucG9zaXRp
b24gPSBwb3NpdGlvbjsKKyAgICByZXN1bHQuc2hhZGUgPSB2YWx1ZTsKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBzaGFkZSA6
IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NChzaGFkZSwg
c2hhZGUsIHNoYWRlLCAxLjApOworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAg
IGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7Cisg
ICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBj
b25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFk
ZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1
bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0
IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFn
bWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0
cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBj
dWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3Qg
Y29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2Jh
OHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVD
b2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisK
KyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9h
dDQiLCBvZmZzZXQ6IDB9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246
IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07CisgICAgY29uc3QgYXR0cmlidXRlcyA9
IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAy
MCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQw
XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisg
ICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5n
OiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19OworICAgIGNvbnN0
IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3Vw
TGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0g
e2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGlu
ZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2Ny
aXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0
YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRl
LCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3Vu
dDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUg
PSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsK
KworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJh
eS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVY
IHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0g
ZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7CisgICAgY29uc3Qg
dmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFz
eW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMy
QXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVs0XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41Owor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5Wzhd
ID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAxLjA7CisKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzExXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9
IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzE5XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7CisKKyAgICBjb25z
dCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BF
Ul9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdl
Lk1BUF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVm
ZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJB
cnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBj
b25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3Vy
Y2VCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0g
PSAxOworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBidWZmZXJCaW5k
aW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAgIGNvbnN0IGJpbmRH
cm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAg
IGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJp
bmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmlj
ZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjYW52
YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4
dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlw
dG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFp
biA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAg
IGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAg
ICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZp
ZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRF
bmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9
OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1
cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJz
dG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1l
bnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNo
bWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNv
ZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9y
KTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgcmVu
ZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMF0sIFswXSk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNz
RW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNv
ZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZl
cl0pOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5v
dGlmeURvbmUoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndh
aXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>371768</attachid>
            <date>2019-06-10 11:54:15 -0700</date>
            <delta_ts>2019-06-10 12:58:25 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>41465</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NjI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDE5LTA2LTEwICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gQXV0byBpbml0aWFs
aXplIGxvY2FsIHZhcmlhYmxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk4NDI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTXlsZXMgTWF4ZmllbGQu
CisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIHplcm8tZmlsbGluZyBmb3IgbG9jYWwg
dmFyaWFibGVzIGluIHR3byBwYXJ0czoKKyAgICAgICAgMS4gV2UgYWRkIGEgbmV3IHBhc3MsIGF1
dG9Jbml0aWFsaXplVmFyaWFibGVzLCB3aGljaCBtYWtlcyBhbnkgdmFyaWFibGUgZGVjbGFyYXRp
b24KKyAgICAgICAgd2l0aG91dCBhbiBpbml0aWFsaXplciBjYWxsIHRoZSBkZWZhdWx0IGNvbnN0
cnVjdG9yIGZvciB0aGUgdmFyaWFibGUncyB0eXBlLgorICAgICAgICBTaW5jZSB3ZSBhdXRvIGdl
bmVyYXRlIHRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yLCBpdCdzIGEgbmF0aXZlIGZ1bmN0aW9uIHdo
b3NlCisgICAgICAgIGltcGxlbWVudGF0aW9uIHdlIGNvbnRyb2wuCisgICAgICAgIAorICAgICAg
ICAyLiBFYWNoIG5hdGl2ZSBjb25zdHJ1Y3RvciBpcyBpbXBsZW1lbnRlZCBhcyBhIG1lbXNldCgm
dmFsdWUsIHNpemVvZih2YWx1ZSksIDApLgorICAgICAgICBUaGlzIG1lbXNldCBpcyBhbiBpbmxp
bmVkIGxvb3AgaW4gZWFjaCBjb25zdHJ1Y3Rvci4gVGhlIHJlYXNvbiB0aGlzIHR1cm5zCisgICAg
ICAgIGV2ZXJ5dGhpbmcgaW50byB6ZXJvIGlzIHRoYXQgZm9yIGV2ZXJ5IHByaW1pdGl2ZSB0eXBl
LCB0aGUgInplcm8iIHZhbHVlIGlzCisgICAgICAgIHJlcHJlc2VudGVkIGFzIGFsbCB6ZXJvZXMg
aW4gbWVtb3J5OiBmbG9hdCwgaW50LCBwb2ludGVycywgZXRjLgorICAgICAgICAKKyAgICAgICAg
U2luY2Ugb3VyIGFiaWxpdHkgdG8gdGVzdCBzb21lIG9mIHRoaXMgaXMgbGltaXRlZCwgSSBvcGVu
ZWQgYSBmb2xsb3ctdXAgYnVnIHRvCisgICAgICAgIHRlc3QgdGhpcyBtb3JlOgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NDEzCisKKyAgICAgICAg
VGVzdHM6IHdlYmdwdS93aGxzbC16ZXJvLWluaXRpYWxpemUtdmFsdWVzLTIuaHRtbAorICAgICAg
ICAgICAgICAgd2ViZ3B1L3dobHNsLXplcm8taW5pdGlhbGl6ZS12YWx1ZXMuaHRtbAorCisgICAg
ICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5o
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbjo6c2V0
SW5pdGlhbGl6ZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
RnVuY3Rpb25Xcml0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpNZXRhbDo6d3JpdGVOYXRpdmVGdW5jdGlvbik6CisgICAgICAgICogTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xBU1REdW1wZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTEF1dG9Jbml0aWFsaXplVmFyaWFibGVzLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6QXV0b0luaXRpYWxpemU6OkF1dG9Jbml0aWFsaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpBdXRvSW5pdGlhbGl6ZTo6dmlzaXQpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OmF1dG9Jbml0aWFsaXplVmFyaWFibGVzKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTEF1dG9Jbml0aWFsaXplVmFyaWFibGVzLmg6IEFkZGVkLgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6Y2hlY2tPcGVyYXRvck92ZXJsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpDaGVja2VyOjp2aXNpdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xJbmZlclR5cGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjppbmZlclR5cGVz
Rm9yQ2FsbEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmluZmVyVHlwZXNGb3JDYWxs
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuaDoKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OnByZXBhcmVTaGFyZWQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6cmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpyZXNvbHZlRnVuY3Rpb25PdmVybG9hZCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmg6CisgICAgICAgICogU291cmNlcy50eHQ6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE5LTA2
LTEwICBBbGkgSnVtYSAgPGFqdW1hQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9O
IChyMjQ1Mzk2KTogUGFnZSBsb2FkIHRpbWUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbgpJbmRleDog
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQJKHJldmlzaW9uIDI0NjI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zMDcsNiArMzA3LDcgQEAgTW9kdWxlcy93ZWJzb2NrZXRz
L1dvcmtlclRocmVhZGFibGVXZWJTbwogTW9kdWxlcy93ZWJncHUvR1BVQ2FudmFzQ29udGV4dC5j
cHAKIE1vZHVsZXMvd2ViZ3B1L05hdmlnYXRvckdQVS5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMQVNURHVtcGVyLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBdXRvSW5pdGlh
bGl6ZVZhcmlhYmxlcy5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5j
cHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFBhcnNlci5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMQVNURHVtcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBU1REdW1wZXIuaAkocmV2aXNpb24gMjQ2MjY5KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBU1REdW1wZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMTQyLDYgKzE0Miw3IEBAIE1BS0VfUFJJTlRfQURBUFRPUihTdGF0ZW1l
bnREdW1wZXIsIEFTVDoKIE1BS0VfUFJJTlRfQURBUFRPUihQcm9ncmFtRHVtcGVyLCBQcm9ncmFt
JiwgZHVtcEFTVE5vZGUpOwogTUFLRV9QUklOVF9BREFQVE9SKFN0cnVjdHVyZURlZmluaXRpb25E
dW1wZXIsIEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYsIGR1bXBBU1ROb2RlKTsKIE1BS0VfUFJJ
TlRfQURBUFRPUihGdW5jdGlvbkRlZmluaXRpb25EdW1wZXIsIEFTVDo6RnVuY3Rpb25EZWZpbml0
aW9uJiwgZHVtcEFTVE5vZGUpOworTUFLRV9QUklOVF9BREFQVE9SKFR5cGVEdW1wZXIsIEFTVDo6
VW5uYW1lZFR5cGUmLCBkdW1wQVNUTm9kZSk7CiAKIAogc3RhdGljIEFMV0FZU19JTkxJTkUgdm9p
ZCBkdW1wQVNUKFByb2dyYW0mIHByb2dyYW0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTEF1dG9Jbml0aWFsaXplVmFyaWFibGVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEF1dG9Jbml0aWFs
aXplVmFyaWFibGVzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTEF1dG9Jbml0aWFsaXplVmFyaWFibGVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldITFNMQXV0b0luaXRpYWxpemVWYXJpYWJsZXMuaCIKKworI2lmIEVOQUJMRShX
RUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEFTVC5oIgorI2luY2x1ZGUgIldITFNMQVNURHVtcGVy
LmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lQ29udGV4dC5oIgorI2luY2x1ZGUgIldITFNMUmVzb2x2
ZU92ZXJsb2FkSW1wbC5oIgorI2luY2x1ZGUgIldITFNMUmVzb2x2aW5nVHlwZS5oIgorI2luY2x1
ZGUgIldITFNMVmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIEF1dG9J
bml0aWFsaXplIDogcHVibGljIFZpc2l0b3IgeworICAgIHVzaW5nIEJhc2UgPSBWaXNpdG9yOwor
cHVibGljOgorICAgIEF1dG9Jbml0aWFsaXplKE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCkKKyAg
ICAgICAgOiBtX25hbWVDb250ZXh0KG5hbWVDb250ZXh0KQorICAgICAgICAsIG1fY2FzdEZ1bmN0
aW9ucygqbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMoIm9wZXJhdG9yIGNhc3QiX3N0cikpCisg
ICAgeyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24mKQorICAgIHsKKyAgICAgICAgLy8gU2tpcCBhcmd1bWVudCBkZWNsYXJhdGlvbnMuCisgICAg
fQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVj
bGFyYXRpb24pCisgICAgeworICAgICAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFs
aXplcigpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEFTVDo6VW5uYW1lZFR5cGUq
IHR5cGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQodHlwZSk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIHBy
aW50U3RyZWFtOworICAgICAgICBwcmludFN0cmVhbS5wcmludChUeXBlRHVtcGVyKCp0eXBlKSk7
CisgICAgICAgIFN0cmluZyBmdW5jdGlvbk5hbWUgPSBwcmludFN0cmVhbS50b1N0cmluZygpOwor
I2Vsc2UKKyAgICAgICAgU3RyaW5nIGZ1bmN0aW9uTmFtZSA9ICI8emVyby1pbml0PiJfczsKKyNl
bmRpZgorICAgICAgICBhdXRvIGNhbGxFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNh
bGxFeHByZXNzaW9uPih2YXJpYWJsZURlY2xhcmF0aW9uLm9yaWdpbigpLCBXVEZNb3ZlKGZ1bmN0
aW9uTmFtZSksIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4oKSk7CisgICAgICAg
IGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKHR5cGUtPmNsb25lKCkpOworICAgICAgICBjYWxsRXhw
cmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworICAgICAgICBj
YWxsRXhwcmVzc2lvbi0+c2V0T3ZlcmxvYWRzKG1fY2FzdEZ1bmN0aW9ucyk7CisgICAgICAgIFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBhcmd1bWVudFR5cGVz
OworICAgICAgICBhdXRvKiBmdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKCpjYWxs
RXhwcmVzc2lvbi0+b3ZlcmxvYWRzKCksIGFyZ3VtZW50VHlwZXMsIHR5cGUpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChmdW5jdGlvbik7CisgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5j
dGlvbigqZnVuY3Rpb24pOworCisgICAgICAgIHZhcmlhYmxlRGVjbGFyYXRpb24uc2V0SW5pdGlh
bGl6ZXIoV1RGTW92ZShjYWxsRXhwcmVzc2lvbikpOworICAgIH0KKworICAgIE5hbWVDb250ZXh0
JiBtX25hbWVDb250ZXh0OworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBtX2Nhc3RGdW5jdGlvbnM7Cit9OworCit2b2lkIGF1
dG9Jbml0aWFsaXplVmFyaWFibGVzKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgQXV0b0luaXRp
YWxpemUgYXV0b0luaXRpYWxpemUocHJvZ3JhbS5uYW1lQ29udGV4dCgpKTsKKyAgICBhdXRvSW5p
dGlhbGl6ZS5WaXNpdG9yOjp2aXNpdChwcm9ncmFtKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV0hM
U0wKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQXV0b0luaXRp
YWxpemVWYXJpYWJsZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTEF1dG9Jbml0aWFsaXplVmFyaWFibGVzLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBdXRvSW5pdGlhbGl6
ZVZhcmlhYmxlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgUHJvZ3JhbTsKKwordm9pZCBhdXRvSW5p
dGlhbGl6ZVZhcmlhYmxlcyhQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2Vy
LmNwcAkocmV2aXNpb24gMjQ2MjY5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xDaGVja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU3LDcgKzM1Nyw3IEBA
IHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCAKICAgICAgICAgICAgIGFy
Z3VtZW50VHlwZXMuYXBwZW5kKCgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS0+
dHlwZSgpKS0+Y2xvbmUoKSk7CiAgICAgICAgIGZvciAoYXV0byYgYXJndW1lbnRUeXBlIDogYXJn
dW1lbnRUeXBlcykKICAgICAgICAgICAgIGFyZ3VtZW50VHlwZVJlZmVyZW5jZXMuYXBwZW5kKGFy
Z3VtZW50VHlwZSk7Ci0gICAgICAgIGF1dG8qIG92ZXJsb2FkID0gcmVzb2x2ZUZ1bmN0aW9uT3Zl
cmxvYWRJbXBsKCpnZXR0ZXJGdW5jcywgYXJndW1lbnRUeXBlUmVmZXJlbmNlcywgbnVsbHB0cik7
CisgICAgICAgIGF1dG8qIG92ZXJsb2FkID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoKmdldHRl
ckZ1bmNzLCBhcmd1bWVudFR5cGVSZWZlcmVuY2VzKTsKICAgICAgICAgaWYgKCFvdmVybG9hZCkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYXV0byYgcmVzdWx0VHlwZSA9IG92
ZXJsb2FkLT50eXBlKCk7CkBAIC05NzksNyArOTc5LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChB
U1Q6OkRvdEV4cHJlc3Npb24mIAogICAgIEFTVDo6VW5uYW1lZFR5cGUqIGdldHRlclJldHVyblR5
cGUgPSBudWxscHRyOwogICAgIHsKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8UmVzb2x2aW5nVHlwZT4+IGdldHRlckFyZ3VtZW50VHlwZXMgeyBiYXNlSW5mby0+cmVzb2x2
aW5nVHlwZSB9OwotICAgICAgICBnZXR0ZXJGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJs
b2FkSW1wbChkb3RFeHByZXNzaW9uLnBvc3NpYmxlR2V0dGVyT3ZlcmxvYWRzKCksIGdldHRlckFy
Z3VtZW50VHlwZXMsIG51bGxwdHIpOworICAgICAgICBnZXR0ZXJGdW5jdGlvbiA9IHJlc29sdmVG
dW5jdGlvbk92ZXJsb2FkKGRvdEV4cHJlc3Npb24ucG9zc2libGVHZXR0ZXJPdmVybG9hZHMoKSwg
Z2V0dGVyQXJndW1lbnRUeXBlcyk7CiAgICAgICAgIGlmIChnZXR0ZXJGdW5jdGlvbikKICAgICAg
ICAgICAgIGdldHRlclJldHVyblR5cGUgPSAmZ2V0dGVyRnVuY3Rpb24tPnR5cGUoKTsKICAgICB9
CkBAIC05ODksNyArOTg5LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Np
b24mIAogICAgIGlmIChhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBiYXNlSW5mby0+dHlwZUFubm90
YXRpb24ubGVmdEFkZHJlc3NTcGFjZSgpKSB7CiAgICAgICAgIGF1dG8gYXJndW1lbnRUeXBlID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lv
bi5vcmlnaW4oKSksICpsZWZ0QWRkcmVzc1NwYWNlLCBiYXNlVW5uYW1lZFR5cGUtPmdldCgpLmNs
b25lKCkpOwogICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdU
eXBlPj4gYW5kZXJBcmd1bWVudFR5cGVzIHsgYmFzZUluZm8tPnJlc29sdmluZ1R5cGUgfTsKLSAg
ICAgICAgYW5kZXJGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChkb3RFeHBy
ZXNzaW9uLnBvc3NpYmxlQW5kZXJPdmVybG9hZHMoKSwgYW5kZXJBcmd1bWVudFR5cGVzLCBudWxs
cHRyKTsKKyAgICAgICAgYW5kZXJGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKGRv
dEV4cHJlc3Npb24ucG9zc2libGVBbmRlck92ZXJsb2FkcygpLCBhbmRlckFyZ3VtZW50VHlwZXMp
OwogICAgICAgICBpZiAoYW5kZXJGdW5jdGlvbikKICAgICAgICAgICAgIGFuZGVyUmV0dXJuVHlw
ZSA9ICZkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRlckZ1bmN0aW9uLT50eXBlKCkpLmVs
ZW1lbnRUeXBlKCk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk4MTY0IEVuZm9yY2UgdGhlIHJldHVybiBvZiBhbmRlcnMgd2lsbCBhbHdheXMgYmUg
YSBwb2ludGVyCiAgICAgfQpAQCAtOTk5LDcgKzk5OSw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQo
QVNUOjpEb3RFeHByZXNzaW9uJiAKICAgICB7CiAgICAgICAgIGF1dG8gYXJndW1lbnRUeXBlID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lv
bi5vcmlnaW4oKSksIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIGJhc2VVbm5hbWVkVHlwZS0+
Z2V0KCkuY2xvbmUoKSk7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJl
c29sdmluZ1R5cGU+PiB0aHJlYWRBbmRlckFyZ3VtZW50VHlwZXMgeyBiYXNlSW5mby0+cmVzb2x2
aW5nVHlwZSB9OwotICAgICAgICB0aHJlYWRBbmRlckZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9u
T3ZlcmxvYWRJbXBsKGRvdEV4cHJlc3Npb24ucG9zc2libGVBbmRlck92ZXJsb2FkcygpLCB0aHJl
YWRBbmRlckFyZ3VtZW50VHlwZXMsIG51bGxwdHIpOworICAgICAgICB0aHJlYWRBbmRlckZ1bmN0
aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoZG90RXhwcmVzc2lvbi5wb3NzaWJsZUFuZGVy
T3ZlcmxvYWRzKCksIHRocmVhZEFuZGVyQXJndW1lbnRUeXBlcyk7CiAgICAgICAgIGlmICh0aHJl
YWRBbmRlckZ1bmN0aW9uKQogICAgICAgICAgICAgdGhyZWFkQW5kZXJSZXR1cm5UeXBlID0gJmRv
d25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHRocmVhZEFuZGVyRnVuY3Rpb24tPnR5cGUoKSkuZWxl
bWVudFR5cGUoKTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xOTgxNjQgRW5mb3JjZSB0aGUgcmV0dXJuIG9mIGFuZGVycyB3aWxsIGFsd2F5cyBiZSBh
IHBvaW50ZXIKICAgICB9CkBAIC0xMDI0LDcgKzEwMjQsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0
KEFTVDo6RG90RXhwcmVzc2lvbiYgCiAgICAgewogICAgICAgICBSZXNvbHZpbmdUeXBlIGZpZWxk
UmVzb2x2aW5nVHlwZShmaWVsZFR5cGUtPmNsb25lKCkpOwogICAgICAgICBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gc2V0dGVyQXJndW1lbnRUeXBlcyB7IGJh
c2VJbmZvLT5yZXNvbHZpbmdUeXBlLCBmaWVsZFJlc29sdmluZ1R5cGUgfTsKLSAgICAgICAgc2V0
dGVyRnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoZG90RXhwcmVzc2lvbi5w
b3NzaWJsZVNldHRlck92ZXJsb2FkcygpLCBzZXR0ZXJBcmd1bWVudFR5cGVzLCBudWxscHRyKTsK
KyAgICAgICAgc2V0dGVyRnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChkb3RFeHBy
ZXNzaW9uLnBvc3NpYmxlU2V0dGVyT3ZlcmxvYWRzKCksIHNldHRlckFyZ3VtZW50VHlwZXMpOwog
ICAgICAgICBpZiAoc2V0dGVyRnVuY3Rpb24pCiAgICAgICAgICAgICBzZXR0ZXJSZXR1cm5UeXBl
ID0gJnNldHRlckZ1bmN0aW9uLT50eXBlKCk7CiAgICAgfQpAQCAtMTM5Nyw3ICsxMzk3LDcgQEAg
dm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJgogICAgIC8vIFdlIGRvbid0
IHdhbnQgdG8gcmVjdXJzZSB0byB0aGUgc2FtZSBub2RlIHR3aWNlLgogCiAgICAgQVNTRVJUKGNh
bGxFeHByZXNzaW9uLmhhc092ZXJsb2FkcygpKTsKLSAgICBhdXRvKiBmdW5jdGlvbiA9IHJlc29s
dmVGdW5jdGlvbk92ZXJsb2FkSW1wbCgqY2FsbEV4cHJlc3Npb24ub3ZlcmxvYWRzKCksIHR5cGVz
LCBjYWxsRXhwcmVzc2lvbi5jYXN0UmV0dXJuVHlwZSgpKTsKKyAgICBhdXRvKiBmdW5jdGlvbiA9
IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKCpjYWxsRXhwcmVzc2lvbi5vdmVybG9hZHMoKSwgdHlw
ZXMsIGNhbGxFeHByZXNzaW9uLmNhc3RSZXR1cm5UeXBlKCkpOwogICAgIGlmICghZnVuY3Rpb24p
IHsKICAgICAgICAgaWYgKGF1dG8gbmV3RnVuY3Rpb24gPSByZXNvbHZlQnlJbnN0YW50aWF0aW9u
KGNhbGxFeHByZXNzaW9uLCB0eXBlcywgbV9pbnRyaW5zaWNzKSkgewogICAgICAgICAgICAgbV9w
cm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpuZXdGdW5jdGlvbikpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3Bw
CShyZXZpc2lvbiAyNDYyNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEluZmVyVHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNyArMjIxLDggQEAg
Ym9vbCBpbmZlclR5cGVzRm9yVHlwZUFyZ3VtZW50cyhBU1Q6Ok5hbQogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIGluZmVyVHlwZXNGb3JDYWxsKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYg
cG9zc2libGVGdW5jdGlvbiwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5n
VHlwZT4+JiBhcmd1bWVudFR5cGVzLCBjb25zdCBBU1Q6Ok5hbWVkVHlwZSogY2FzdFJldHVyblR5
cGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZUtpbmQ+CitBTFdBWVNfSU5MSU5FIGJvb2wgaW5m
ZXJUeXBlc0ZvckNhbGxJbXBsKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgcG9zc2libGVGdW5j
dGlvbiwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1
bWVudFR5cGVzLCBjb25zdCBUeXBlS2luZCogY2FzdFJldHVyblR5cGUpCiB7CiAgICAgaWYgKHBv
c3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVycygpLnNpemUoKSAhPSBhcmd1bWVudFR5cGVzLnNpemUo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjM5LDYgKzI0MCwxNiBAQCBib29sIGluZmVy
VHlwZXNGb3JDYWxsKEFTVDo6RnVuY3Rpb25EZWNsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jv
b2wgaW5mZXJUeXBlc0ZvckNhbGwoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBwb3NzaWJsZUZ1
bmN0aW9uLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFy
Z3VtZW50VHlwZXMsIGNvbnN0IEFTVDo6TmFtZWRUeXBlKiBjYXN0UmV0dXJuVHlwZSkKK3sKKyAg
ICByZXR1cm4gaW5mZXJUeXBlc0ZvckNhbGxJbXBsKHBvc3NpYmxlRnVuY3Rpb24sIGFyZ3VtZW50
VHlwZXMsIGNhc3RSZXR1cm5UeXBlKTsKK30KKworYm9vbCBpbmZlclR5cGVzRm9yQ2FsbChBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24mIHBvc3NpYmxlRnVuY3Rpb24sIFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywgY29uc3QgQVNUOjpV
bm5hbWVkVHlwZSogY2FzdFJldHVyblR5cGUpCit7CisgICAgcmV0dXJuIGluZmVyVHlwZXNGb3JD
YWxsSW1wbChwb3NzaWJsZUZ1bmN0aW9uLCBhcmd1bWVudFR5cGVzLCBjYXN0UmV0dXJuVHlwZSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdITFNMCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
SW5mZXJUeXBlcy5oCShyZXZpc2lvbiAyNDYyNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiAr
NTQsNyBAQCBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hCiBPcHRpb25h
bDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IGNvbW1pdChBU1Q6OlJlc29sdmFibGVUeXBl
Jik7CiBib29sIGluZmVyVHlwZXNGb3JUeXBlQXJndW1lbnRzKEFTVDo6TmFtZWRUeXBlJiBwb3Nz
aWJsZVR5cGUsIEFTVDo6VHlwZUFyZ3VtZW50cyYpOwogYm9vbCBpbmZlclR5cGVzRm9yQ2FsbChB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIHBvc3NpYmxlRnVuY3Rpb24sIFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywgY29uc3QgQVNU
OjpOYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlKTsKK2Jvb2wgaW5mZXJUeXBlc0ZvckNhbGwoQVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBwb3NzaWJsZUZ1bmN0aW9uLCBWZWN0b3I8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIGNvbnN0IEFTVDo6
VW5uYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlKTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAJKHJldmlz
aW9uIDI0NjI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UHJlcGFyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUo
V0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xBU1REdW1wZXIuaCIKKyNpbmNsdWRlICJXSExTTEF1
dG9Jbml0aWFsaXplVmFyaWFibGVzLmgiCiAjaW5jbHVkZSAiV0hMU0xDaGVja0R1cGxpY2F0ZUZ1
bmN0aW9ucy5oIgogI2luY2x1ZGUgIldITFNMQ2hlY2tlci5oIgogI2luY2x1ZGUgIldITFNMRnVu
Y3Rpb25TdGFnZUNoZWNrZXIuaCIKQEAgLTU4LDcgKzU5LDcgQEAgbmFtZXNwYWNlIFdITFNMIHsK
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBkdW1wQVNUQmVmb3JlRWFjaFBhc3MgPSBmYWxzZTsKIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBkdW1wQVNUQWZ0ZXJQYXJzaW5nID0gZmFsc2U7CiBzdGF0aWMg
Y29uc3RleHByIGJvb2wgZHVtcEFTVEF0RW5kID0gZmFsc2U7Ci1zdGF0aWMgY29uc3RleHByIGJv
b2wgYWx3YXlzRHVtcFBhc3NGYWlsdXJlcyA9IHRydWU7CitzdGF0aWMgY29uc3RleHByIGJvb2wg
YWx3YXlzRHVtcFBhc3NGYWlsdXJlcyA9IGZhbHNlOwogc3RhdGljIGNvbnN0ZXhwciBib29sIGR1
bXBQYXNzRmFpbHVyZSA9IGR1bXBBU1RCZWZvcmVFYWNoUGFzcyB8fCBkdW1wQVNUQWZ0ZXJQYXJz
aW5nIHx8IGR1bXBBU1RBdEVuZCB8fCBhbHdheXNEdW1wUGFzc0ZhaWx1cmVzOwogCiBzdGF0aWMg
Ym9vbCBkdW1wQVNUSWZOZWVkZWQoYm9vbCBzaG91bGREdW1wLCBQcm9ncmFtJiBwcm9ncmFtLCBj
b25zdCBjaGFyKiBtZXNzYWdlKQpAQCAtMTMwLDYgKzEzMSw3IEBAIHN0YXRpYyBPcHRpb25hbDxQ
cm9ncmFtPiBwcmVwYXJlU2hhcmVkKFMKICAgICBSVU5fUEFTUyhjaGVjaywgcHJvZ3JhbSk7CiAK
ICAgICBjaGVja0xpdGVyYWxUeXBlcyhwcm9ncmFtKTsKKyAgICBhdXRvSW5pdGlhbGl6ZVZhcmlh
Ymxlcyhwcm9ncmFtKTsKICAgICByZXNvbHZlUHJvcGVydGllcyhwcm9ncmFtKTsKICAgICBmaW5k
SGlnaFpvbWJpZXMocHJvZ3JhbSk7CiAgICAgUlVOX1BBU1MoY2hlY2tTdGF0ZW1lbnRCZWhhdmlv
ciwgcHJvZ3JhbSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAJKHJldmlz
aW9uIDI0NjI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDggQEAg
c3RhdGljIHVuc2lnbmVkIGNvbnZlcnNpb25Db3N0KEFTVDo6RnVuYwogICAgIHJldHVybiBjb252
ZXJzaW9uQ29zdDsKIH0KIAotQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rp
b25PdmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIEFTVDo6TmFtZWRUeXBl
KiBjYXN0UmV0dXJuVHlwZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUeXBlS2luZD4KK0FTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJs
ZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+
JiBhcmd1bWVudFR5cGVzLCBUeXBlS2luZCogY2FzdFJldHVyblR5cGUpCiB7CiAgICAgVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gY2Fu
ZGlkYXRlczsKICAgICBmb3IgKGF1dG8mIHBvc3NpYmxlRnVuY3Rpb24gOiBwb3NzaWJsZUZ1bmN0
aW9ucykgewpAQCAtNzYsNiArNzcsMjEgQEAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNv
bHZlRnVuY3RpbwogICAgIHJldHVybiBudWxscHRyOwogfQogCitBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVz
KQoreworICAgIHJldHVybiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwocG9zc2libGVGdW5j
dGlvbnMsIGFyZ3VtZW50VHlwZXMsIHN0YXRpY19jYXN0PEFTVDo6TmFtZWRUeXBlKj4obnVsbHB0
cikpOworfQorCitBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJs
b2FkKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
bj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBBU1Q6Ok5hbWVkVHlwZSogY2FzdFJldHVy
blR5cGUpCit7CisgICAgcmV0dXJuIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChwb3NzaWJs
ZUZ1bmN0aW9ucywgYXJndW1lbnRUeXBlcywgY2FzdFJldHVyblR5cGUpOworfQorCitBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1
bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBh
cmd1bWVudFR5cGVzLCBBU1Q6OlVubmFtZWRUeXBlKiBjYXN0UmV0dXJuVHlwZSkKK3sKKyAgICBy
ZXR1cm4gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKHBvc3NpYmxlRnVuY3Rpb25zLCBhcmd1
bWVudFR5cGVzLCBjYXN0UmV0dXJuVHlwZSk7Cit9CisKIEFTVDo6TmFtZWRUeXBlKiByZXNvbHZl
VHlwZU92ZXJsb2FkSW1wbChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVk
VHlwZT4sIDE+JiBwb3NzaWJsZVR5cGVzLCBBU1Q6OlR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVu
dHMpCiB7CiAgICAgQVNUOjpOYW1lZFR5cGUqIHJlc3VsdCA9IG51bGxwdHI7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFJlc29sdmVPdmVybG9hZEltcGwuaAkocmV2aXNpb24gMjQ2MjY5KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDcgKzQzLDkgQEAgY2xhc3MgTmFtZWRUeXBlOwogCiB9CiAKLUFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3Nz
aWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlw
ZT4+JiBhcmd1bWVudFR5cGVzLCBBU1Q6Ok5hbWVkVHlwZSogY2FzdFJldHVyblR5cGUpOworQVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2li
bGVGdW5jdGlvbnMsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+
PiYgYXJndW1lbnRUeXBlcyk7CitBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5j
dGlvbk92ZXJsb2FkKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBBU1Q6Ok5hbWVkVHlwZSog
Y2FzdFJldHVyblR5cGUpOworQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rp
b25PdmVybG9hZChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywgQVNUOjpVbm5hbWVkVHlwZSog
Y2FzdFJldHVyblR5cGUpOwogQVNUOjpOYW1lZFR5cGUqIHJlc29sdmVUeXBlT3ZlcmxvYWRJbXBs
KFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4mLCBBU1Q6
OlR5cGVBcmd1bWVudHMmKTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFy
YXRpb24uaAkocmV2aXNpb24gMjQ2MjY5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MCw2ICs3MCwxMSBAQCBwdWJsaWM6CiAgICAgRXhwcmVzc2lvbiogaW5pdGlhbGl6ZXIoKSB7
IHJldHVybiBtX2luaXRpYWxpemVyID8gJiptX2luaXRpYWxpemVyIDogbnVsbHB0cjsgfQogICAg
IGJvb2wgaXNBbm9ueW1vdXMoKSBjb25zdCB7IHJldHVybiBtX25hbWUuaXNOdWxsKCk7IH0KICAg
ICBPcHRpb25hbDxVbmlxdWVSZWY8RXhwcmVzc2lvbj4+IHRha2VJbml0aWFsaXplcigpIHsgcmV0
dXJuIFdURk1vdmUobV9pbml0aWFsaXplcik7IH0KKyAgICB2b2lkIHNldEluaXRpYWxpemVyKFVu
aXF1ZVJlZjxFeHByZXNzaW9uPiBleHByZXNzaW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFp
bml0aWFsaXplcigpKTsKKyAgICAgICAgbV9pbml0aWFsaXplciA9IFdURk1vdmUoZXhwcmVzc2lv
bik7CisgICAgfQogCiBwcml2YXRlOgogICAgIFF1YWxpZmllcnMgbV9xdWFsaWZpZXJzOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlv
bldyaXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAJKHJldmlzaW9uIDI0NjI2OSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25X
cml0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzcsMTAgKzQ3Nyw4IEBAIHZvaWQgRnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlv
bi5pbml0aWFsaXplcigpKSB7CiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdmFyaWFibGVE
ZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKTsKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqdmFyaWFibGVEZWNs
YXJhdGlvbi50eXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIsIG1fc3RhY2sudGFrZUxh
c3QoKSwgIjtcbiIpKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTc3MSBaZXJvLWZpbGwgdGhlIHZhcmlh
YmxlLgorICAgIH0gZWxzZQogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCp2YXJpYWJsZURlY2xhcmF0aW9uLnR5
cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiO1xuIikpOwotICAgIH0KIH0KIAogdm9pZCBGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFz
c2lnbm1lbnRFeHByZXNzaW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5j
dGlvbldyaXRlci5jcHAJKHJldmlzaW9uIDI0NjI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDggQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24o
QVNUOjpOYXRpdmVGdQogICAgICAgICBpZiAoIW5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpLnNpemUoKSkgewogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAiKCkge1xu
IikpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICIs
IG1ldGFsUmV0dXJuTmFtZSwgIiB4O1xuIikpOwotICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU3NzEgWmVyby1maWxsCisgICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICAgIHRocmVhZCBjaGFyKiBwdHIgPSBzdGF0
aWNfY2FzdDx0aHJlYWQgY2hhcio+KHN0YXRpY19jYXN0PHRocmVhZCB2b2lkKj4oJngpKTtcbiIp
OworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKCIsIG1ldGFsUmV0dXJuTmFtZSwgIik7ICsraSkgcHRy
W2ldID0gMDtcbiIpKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgcmV0
dXJuIHg7XG4iKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKICAg
ICAgICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyNDYyNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTgzNDcsNiArODM0Nyw4IEBACiAJCTUyQjBENEJEMUM1
N0ZEMUUwMDc3Q0U1MyAvKiBQbGF0Zm9ybVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGxhdGZvcm1WaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUy
QjBENEJGMUM1N0ZENjYwMDc3Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkIwRDRDMTFDNTdGRjkx
MDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1MkIzNDM0OTIyQTA3NTIyMDBFNDkzODkgLyogV0hMU0xB
dXRvSW5pdGlhbGl6ZVZhcmlhYmxlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEF1dG9Jbml0aWFs
aXplVmFyaWFibGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyQjM0MzRCMjJB
MDc1MjMwMEU0OTM4OSAvKiBXSExTTEF1dG9Jbml0aWFsaXplVmFyaWFibGVzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdITFNMQXV0b0luaXRpYWxpemVWYXJpYWJsZXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MkQ1QTE4RDFDNTQ1OTAzMDBERTM0QTMgLyogVmlkZW9GdWxs
c2NyZWVuTGF5ZXJNYW5hZ2VyT2JqQy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlck9iakMubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUyRDVBMThFMUM1NDU5MDMwMERFMzRBMyAvKiBWaWRlb0Z1bGxz
Y3JlZW5MYXllck1hbmFnZXJPYmpDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlck9iakMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTJENUExQTQxQzU3NDg4OTAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1vZGVs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTQ0MCw2ICsyNTQ0Miw4IEBACiAJ
CQkJMUNFQ0IzQUQyMUYyQjk2NDAwRjQ0NTQyIC8qIE1ldGFsICovLAogCQkJCUMyMEY4OEFBMjI5
NjZCMEUwMEQ2MTBGQSAvKiBXSExTTEFTVER1bXBlci5jcHAgKi8sCiAJCQkJQzIwRjg4QUMyMjk2
NkIwRjAwRDYxMEZBIC8qIFdITFNMQVNURHVtcGVyLmggKi8sCisJCQkJNTJCMzQzNEIyMkEwNzUy
MzAwRTQ5Mzg5IC8qIFdITFNMQXV0b0luaXRpYWxpemVWYXJpYWJsZXMuY3BwICovLAorCQkJCTUy
QjM0MzQ5MjJBMDc1MjIwMEU0OTM4OSAvKiBXSExTTEF1dG9Jbml0aWFsaXplVmFyaWFibGVzLmgg
Ki8sCiAJCQkJQzIzNEE5QjIyMUU5MkMxRjAwM0M5ODREIC8qIFdITFNMQ2hlY2tEdXBsaWNhdGVG
dW5jdGlvbnMuY3BwICovLAogCQkJCUMyMzRBOUFFMjFFOTJDMUEwMDNDOTg0RCAvKiBXSExTTENo
ZWNrRHVwbGljYXRlRnVuY3Rpb25zLmggKi8sCiAJCQkJMUM4NDBCOUIyMUVDNDAwOTAwRDA1MDBE
IC8qIFdITFNMQ2hlY2tlci5jcHAgKi8sCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDYyNjkpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAx
OS0wNi0xMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBbV0hM
U0xdIEF1dG8gaW5pdGlhbGl6ZSBsb2NhbCB2YXJpYWJsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODQyNgorCisgICAgICAgIFJldmlld2VkIGJ5
IE15bGVzIE1heGZpZWxkLgorCisgICAgICAgICogd2ViZ3B1L3dobHNsLXplcm8taW5pdGlhbGl6
ZS12YWx1ZXMtMi1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wt
emVyby1pbml0aWFsaXplLXZhbHVlcy0yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93
aGxzbC16ZXJvLWluaXRpYWxpemUtdmFsdWVzLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIHdlYmdwdS93aGxzbC16ZXJvLWluaXRpYWxpemUtdmFsdWVzLmh0bWw6IEFkZGVkLgorCiAy
MDE5LTA2LTEwICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBD
YWxsIHdhcyBuZWdvdGlhdGVkIHdpdGggSDI2NCBCYXNlIFByb2ZpbGUgNDJlMDFmIGJ1dCBlbmNv
ZGVkIGluIEhpZ2ggUHJvZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXplcm8t
aW5pdGlhbGl6ZS12YWx1ZXMtMi1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3dlYmdwdS93aGxzbC16ZXJvLWluaXRpYWxpemUtdmFsdWVzLTItZXhwZWN0ZWQuaHRtbAko
bm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVyby1pbml0aWFsaXpl
LXZhbHVlcy0yLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOSBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFz
IGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+
Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRD
b250ZXh0KCIyZCIpOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gImJsdWUiOworICAgIGNvbnRl
eHQuZmlsbFJlY3QoMCwgMCwgNDAwLCA0MDApOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gImJs
YWNrIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDEwMCwgMTAwLCAyMDAsIDIwMCk7Cit9Cit3aW5k
b3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXplcm8taW5pdGlhbGl6ZS12
YWx1ZXMtMi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC16ZXJv
LWluaXRpYWxpemUtdmFsdWVzLTIuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtemVyby1pbml0aWFsaXplLXZhbHVlcy0yLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNTIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVh
ZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+
PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorc3RydWN0IFZlcnRl
eE91dCB7CisgICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247CisgICAgZmxvYXQgc2hh
ZGUgOiBhdHRyaWJ1dGUoMCk7Cit9CisKK3N0cnVjdCBCYXIgeworICAgIGZsb2F0IHk7CisgICAg
ZmxvYXQgeTE7CisgICAgZmxvYXQgeTI7CisgICAgZmxvYXQgeTM7CisgICAgZmxvYXQgeTQ7Cisg
ICAgZmxvYXQgeTU7CisgICAgZmxvYXQgeTY7CisgICAgZmxvYXQgeTc7CisgICAgZmxvYXQgeTg7
CisgICAgZmxvYXQgeTk7CisgICAgZmxvYXQgeTEwOworICAgIGZsb2F0IHkxMTsKKyAgICBmbG9h
dCB5MTI7CisgICAgZmxvYXQgeTEzOworICAgIGZsb2F0IHkxNDsKKyAgICBmbG9hdCB5MTU7Cisg
ICAgZmxvYXQgeTE2OworICAgIGZsb2F0IHkxNzsKKyAgICBmbG9hdCB5MTg7CisgICAgZmxvYXQg
eTE5OworICAgIGZsb2F0IHkyMDsKK30KKwordmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIo
ZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgx
KSkgeworICAgIFZlcnRleE91dCByZXN1bHQ7CisKKyAgICBCYXIgYmFyOworCisgICAgcmVzdWx0
LnBvc2l0aW9uID0gcG9zaXRpb247CisgICAgcmVzdWx0LnNoYWRlID0gYmFyLnkyMDsKKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9h
dCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0
NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0
KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFw
dGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7
CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtj
b2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFn
ZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9Owor
ICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9p
bnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRy
aWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNl
OiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307Cisg
ICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3Jt
YXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1d
OyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9
IG51bGw7CisKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3Jt
YXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVy
TG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07CisgICAgY29uc3QgYXR0
cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1dDAgPSB7
c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKKyAgICBjb25zdCBpbnB1dHMg
PSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1
dHN9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczog
W3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19Owor
ICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQo
YmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNj
cmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25z
dCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxh
eW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0g
e3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXph
dGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBz
YW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVy
UGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZs
b2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNh
Z2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhC
dWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7Cisg
ICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5t
YXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5l
dyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs0XSA9IDEuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0g
PSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzhdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAxLjA7
CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzE2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzE5XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7CisK
KyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5
LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1
ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2Uu
Y3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVzb3Vy
Y2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMo
KTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJy
YXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMy
QXJyYXlbMF0gPSAxOworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBi
dWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAgIGNv
bnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRp
bmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBM
YXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91
cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBj
b25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29u
c3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hh
aW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0
IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0
b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1
cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRl
RGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0
ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6
IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91
dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0
b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNp
bEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2Nv
bG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRl
clBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NE
ZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBl
bGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVy
MF0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNv
bW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29t
bWFuZEJ1ZmZlcl0pOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0
UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwg
c3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtemVyby1pbml0aWFsaXplLXZhbHVlcy1leHBlY3RlZC5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC16ZXJvLWluaXRpYWxpemUtdmFsdWVzLWV4
cGVjdGVkLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXpl
cm8taW5pdGlhbGl6ZS12YWx1ZXMtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFz
PgorPHNjcmlwdD4KK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGNhbnZhcyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0g
Y2FudmFzLmdldENvbnRleHQoIjJkIik7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7
CisgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCA0MDAsIDQwMCk7CisgICAgY29udGV4dC5maWxs
U3R5bGUgPSAiYmxhY2siOworICAgIGNvbnRleHQuZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAw
KTsKK30KK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtemVyby1p
bml0aWFsaXplLXZhbHVlcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93
aGxzbC16ZXJvLWluaXRpYWxpemUtdmFsdWVzLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLXplcm8taW5pdGlhbGl6ZS12YWx1ZXMuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEzNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0i
NDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3Qg
VmVydGV4T3V0IHsKKyAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKKyAgICBmbG9h
dCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKK30KKwordGhyZWFkIGZsb2F0KiBwdHIoKSB7CisgICAg
ZmxvYXQgbG9jYWw7CisgICAgcmV0dXJuICZsb2NhbDsKK30KKwordmVydGV4IFZlcnRleE91dCB2
ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6
IGF0dHJpYnV0ZSgxKSkgeworICAgIFZlcnRleE91dCByZXN1bHQ7CisKKyAgICB0aHJlYWQgZmxv
YXQqIHAgPSBwdHIoKTsKKyAgICAqcCA9IDEuMDsKKyAgICBmbG9hdCB2YWx1ZSA9ICpwdHIoKTsg
Ly8gY2FsbGluZyBwdHIoKSB6ZXJvIGluaXRpYWxpemVzLgorCisgICAgcmVzdWx0LnBvc2l0aW9u
ID0gcG9zaXRpb247CisgICAgcmVzdWx0LnNoYWRlID0gdmFsdWU7CisKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBh
dHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNo
YWRlLCBzaGFkZSwgMS4wKTsKK30KK2A7Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBj
b25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAg
IGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29u
c3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVy
U291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxl
OiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBm
cmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21l
bnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJp
cCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3Vs
bE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNv
bG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1
bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29s
b3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworCisg
ICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0
Iiwgb2Zmc2V0OiAwfTsKKyAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxvY2F0aW9uOiAx
LCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OworICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBb
YXR0cmlidXRlMCwgYXR0cmlidXRlMV07CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMjAs
IGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07
CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAg
IGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzog
MCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKKyAgICBjb25zdCBi
aW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExh
eW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHti
aW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVM
YXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlw
dG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFn
ZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwg
Y29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6
IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0g
ZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXku
QllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8
IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRl
dmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3lu
YygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFy
cmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
NF0gPSAxLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0gLTAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9
IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMS4wOworCisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNl0gPSAw
LjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7CisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxOV0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOworCisgICAgY29uc3Qg
cmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJf
RUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5N
QVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZl
cihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyQXJy
YXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29u
c3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc291cmNl
QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzBdID0g
MTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgYnVmZmVyQmluZGlu
ZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKKyAgICBjb25zdCBiaW5kR3Jv
dXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBj
b25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5k
aW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2Uu
Y3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY2FudmFz
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQg
PSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRv
ciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4g
PSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBj
b25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAg
Y29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3
KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5j
b2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsK
KyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJl
VmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3Rv
cmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50
ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1l
bnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2Rl
ciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAg
IHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIHJlbmRl
clBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOwor
ICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0Vu
Y29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rl
ci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJd
KTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3Rp
ZnlEb25lKCk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0
VW50aWxEb25lKCk7Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>