<?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>195808</bug_id>
          
          <creation_ts>2019-03-15 11:45:31 -0700</creation_ts>
          <short_desc>[WHLSL] Implement loop expressions</short_desc>
          <delta_ts>2019-06-05 11:36:37 -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>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>jonlee</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1517040</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-03-15 11:45:31 -0700</bug_when>
    <thetext>We transform WHLSL expressions like &quot;a &lt; b * c&quot; into something like:

auto temporary1 = b * c;
auto result = a &lt; temporary1;

This works in the general case, but not if we have something like:

while (a &lt; b * c) { ... }

MSL doesn&apos;t support lambdas, so we can&apos;t just throw the statements into a lambda.

There are two solutions to this problem:

1) Turn all loops into infinite loops, and emulate their expressions by emitting code in all the necessary places. So, something like:

while (true) {
    auto temporary1 = b * c;
    auto result = a &lt; temporary1;
    if (!result)
        break;
}

2) Generate a functor class, passing in references to all referenced variables. So, something like:

class Functor {
    Functor(int&amp; a, int&amp; b, int&amp; c) : a(a), b(b), c(c) {}
    bool operator()() {
        auto temporary1 = b * c;
        auto result = a &lt; temporary1;
        return result;
    }

private:
    int&amp; a;
    int&amp; b;
    int&amp; c;
};

while (Functor(a, b, c)()) {
   ...
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1535886</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-05-13 17:08:08 -0700</bug_when>
    <thetext>&lt;rdar://problem/50746309&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1540928</commentid>
    <comment_count>2</comment_count>
      <attachid>371103</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-05-31 19:39:19 -0700</bug_when>
    <thetext>Created attachment 371103
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1541955</commentid>
    <comment_count>3</comment_count>
      <attachid>371103</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-06-05 06:22:25 -0700</bug_when>
    <thetext>Comment on attachment 371103
patch

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

&gt; Source/WebCore/ChangeLog:46
&gt; +            while (0) {

while(0)? The body of this loop will never execute, then. Are you sure you didn&apos;t mean do { } while (0);?

This description could be a little more clear. It appears that by wrapping the body of the loop in a do/while loop, you&apos;re modelling &quot;goto the bottom of the loop&quot; as a &quot;break&quot;. Therefore, WHLSL&apos;s &quot;continue&quot; is modeled as &quot;breakOutOfCurrentLoop = false; break;&quot; and WHLSL&apos;s &quot;break&quot; is modeled as &quot;breakOutOfCurrentLoop = true; break;&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1541958</commentid>
    <comment_count>4</comment_count>
      <attachid>371103</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-06-05 06:23:14 -0700</bug_when>
    <thetext>Comment on attachment 371103
patch

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

&gt;&gt; Source/WebCore/ChangeLog:46
&gt;&gt; +            while (0) {
&gt; 
&gt; while(0)? The body of this loop will never execute, then. Are you sure you didn&apos;t mean do { } while (0);?
&gt; 
&gt; This description could be a little more clear. It appears that by wrapping the body of the loop in a do/while loop, you&apos;re modelling &quot;goto the bottom of the loop&quot; as a &quot;break&quot;. Therefore, WHLSL&apos;s &quot;continue&quot; is modeled as &quot;breakOutOfCurrentLoop = false; break;&quot; and WHLSL&apos;s &quot;break&quot; is modeled as &quot;breakOutOfCurrentLoop = true; break;&quot;

Also, a for loop example would be more interesting than a while loop example here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1541982</commentid>
    <comment_count>5</comment_count>
      <attachid>371103</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-05 08:16:01 -0700</bug_when>
    <thetext>Comment on attachment 371103
patch

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

&gt;&gt;&gt; Source/WebCore/ChangeLog:46
&gt;&gt;&gt; +            while (0) {
&gt;&gt; 
&gt;&gt; while(0)? The body of this loop will never execute, then. Are you sure you didn&apos;t mean do { } while (0);?
&gt;&gt; 
&gt;&gt; This description could be a little more clear. It appears that by wrapping the body of the loop in a do/while loop, you&apos;re modelling &quot;goto the bottom of the loop&quot; as a &quot;break&quot;. Therefore, WHLSL&apos;s &quot;continue&quot; is modeled as &quot;breakOutOfCurrentLoop = false; break;&quot; and WHLSL&apos;s &quot;break&quot; is modeled as &quot;breakOutOfCurrentLoop = true; break;&quot;
&gt; 
&gt; Also, a for loop example would be more interesting than a while loop example here.

Yeah I meant “ do {} while(0) “</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542023</commentid>
    <comment_count>6</comment_count>
      <attachid>371103</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-06-05 09:33:40 -0700</bug_when>
    <thetext>Comment on attachment 371103
patch

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

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:231
&gt; +    m_stringBuilder.append(makeString(m_breakOutOfCurrentLoopEarlyVariable, &quot; = true;\n&quot;));

Can we ASSERT() that the variable is non-empty?

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:237
&gt; +    m_stringBuilder.append(&quot;break;\n&quot;);

Ditto

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:257
&gt; +    m_stringBuilder.append(&quot;while (1) {\n&quot;);

Nit: I think while (true) is clearer.

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:266
&gt; +    m_stringBuilder.append(&quot;} while(0); \n&quot;);

Nit: while(false)

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:267
&gt; +    m_stringBuilder.append(makeString(&quot;if (&quot;, m_breakOutOfCurrentLoopEarlyVariable, &quot;) break;\n&quot;));

Cool.

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:276
&gt; +        m_stack.takeLast();

Maybe add a short comment about why we need to takeLast()

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:279
&gt; +    m_stringBuilder.append(&quot;} \n&quot;); // while (1) { 

Spurious comment?

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:284
&gt; +    emitLoop(false, &amp;doWhileLoop.conditional(), nullptr, doWhileLoop.body());

I think WebKit style usually prefers not to have magic &quot;true&quot; or &quot;false&quot; values, instead preferring to use an enum class with 2 values.

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:297
&gt;          checkErrorAndVisit(expression);

I know you didn&apos;t write this code, but I think we should scope these statements to just the loop, by surrounding the entire for loop with { }. It doesn&apos;t affect correctness, but it can at least tell us early if we&apos;ve messed something up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542028</commentid>
    <comment_count>7</comment_count>
      <attachid>371103</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-05 09:43:22 -0700</bug_when>
    <thetext>Comment on attachment 371103
patch

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

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:279
&gt;&gt; +    m_stringBuilder.append(&quot;} \n&quot;); // while (1) { 
&gt; 
&gt; Spurious comment?

I meant to indicate this is where the &quot;while 1&quot; from above is closed. I can remove it since it may be more confusing than not having it.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:297
&gt;&gt;          checkErrorAndVisit(expression);
&gt; 
&gt; I know you didn&apos;t write this code, but I think we should scope these statements to just the loop, by surrounding the entire for loop with { }. It doesn&apos;t affect correctness, but it can at least tell us early if we&apos;ve messed something up.

👍🏼</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542034</commentid>
    <comment_count>8</comment_count>
      <attachid>371103</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-05 09:51:46 -0700</bug_when>
    <thetext>Comment on attachment 371103
patch

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

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:276
&gt;&gt; +        m_stack.takeLast();
&gt; 
&gt; Maybe add a short comment about why we need to takeLast()

Will do. I guess a more elegant solution in the future would be to just make increment an effectful statement node.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542058</commentid>
    <comment_count>9</comment_count>
      <attachid>371417</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-05 10:12:15 -0700</bug_when>
    <thetext>Created attachment 371417
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542108</commentid>
    <comment_count>10</comment_count>
      <attachid>371417</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-06-05 11:36:35 -0700</bug_when>
    <thetext>Comment on attachment 371417
patch for landing

Clearing flags on attachment: 371417

Committed r246121: &lt;https://trac.webkit.org/changeset/246121&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542109</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-06-05 11:36:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>371103</attachid>
            <date>2019-05-31 19:39:19 -0700</date>
            <delta_ts>2019-06-05 10:12:15 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>79680</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NjAwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2IEBACisyMDE5LTA1LTMxICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gSW1wbGVtZW50IGxv
b3AgZXhwcmVzc2lvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5NTgwOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTA3NDYzMDk+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtl
cyBjb250aW51ZS9icmVhayBicmVhayBmb3IgImRvL3doaWxlL2ZvciIgbG9vcHMKKyAgICAgICAg
aW4gV0hMU0wuIEJlY2F1c2Ugb2YgdGhlIHdheSB3ZSBlbWl0IGNvZGUgd2hlcmUgZXZlcnkgZXhw
cmVzc2lvbgorICAgICAgICB0dXJucyBpbnRvIGEgTWV0YWwgc3RhdGVtZW50LCBpdCdzIG5vdCBj
b252ZW5pZW50IHRvIGVtaXQgbmF0aXZlCisgICAgICAgIE1ldGFsIGxvb3AgY29uc3RydWN0cy4g
SW5zdGVhZCwgd2UgbW9kZWwgYnJlYWsvY29udGludWUgYXMgaWYKKyAgICAgICAgd2UgaGFkIGdv
dG8uCisgICAgICAgIAorICAgICAgICBGb3IgZXhhbXBsZSwgdGhpcyBXSExTTCBwcm9ncmFtOgor
ICAgICAgICBgYGAKKyAgICAgICAgd2hpbGUgKGMpIHsKKyAgICAgICAgICAgIGlmIChiKSB7Cisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBgYGAKKyAgICAgICAgd291bGQgYmVjb21lIHNvbWV0aGlu
ZyBsaWtlOgorICAgICAgICBgYGAKKyAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgY29uZGl0
aW9uOgorICAgICAgICAgICAgaWYgKCFjKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgaWYgKGIpIHsKKyAgICAgICAgICAgICAgICBnb3RvIGNvbmRpdGlvbjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgICAgICBleGl0Ogor
ICAgICAgICBgYGAKKyAgICAgICAgCisgICAgICAgIEhvd2V2ZXIsIE1ldGFsIGRvZXNuJ3QgaGF2
ZSBnb3RvLCBzbyB3ZSBtb2RlbCBnb3RvIHVzaW5nIGEgdmFyaWFibGUKKyAgICAgICAgaW5kaWNh
dGluZyBpZiB3ZSBzaG91bGQgYnJlYWsgb3V0IG9mIHRoZSBsb29wIGVhcmx5IG9yIG5vdC4gVGhl
IGFib3ZlCisgICAgICAgIFdITFNMIHdpbGwgdHVybiBpbnRvIHRoaXMgTWV0YWw6CisgICAgICAg
IGBgYAorICAgICAgICBib29sIGJyZWFrT3V0T2ZDdXJyZW50TG9vcCA9IGZhbHNlOworICAgICAg
ICB3aGlsZSAoMSkgeworICAgICAgICAgICAgaWYgKCFjKQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgd2hpbGUgKDApIHsKKyAgICAgICAgICAgICAgICBpZiAoYikgeworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAgICAgICAgIGJyZWFrT3V0T2ZDdXJyZW50TG9vcCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYnJlYWtPdXRPZkN1cnJl
bnRMb29wKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGBgYAor
ICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGZvdW5kIGEgYnVnIHdpdGggRm9yTG9v
cCB3aGVyZSBpdCBoZWxkIGEgVmFyaWFudDxWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCwg
RXhwcmVzc2lvbj4uCisgICAgICAgIFRoaXMgaXMgaW52YWxpZCB0byBkbyBzaW5jZSB3ZSBtdXRh
dGUgdGhlIEFTVCBpbiBwbGFjZS4gVGhpcyBtZWFucyBzb21lIHBoYXNlCisgICAgICAgIGNvdWxk
IHJlcGxhY2UgVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQgd2l0aCBzb21lIG90aGVyIFN0
YXRlbWVudCwgYW5kCisgICAgICAgIHdlJ2QgYmUgYnJlYWtpbmcgdGhlIEMrKyB0eXBlIHN5c3Rl
bS4gU28gdGhpcyBwYXRjaCBtaWdyYXRlcyBGb3JMb29wIHRvIGhvbGQKKyAgICAgICAgYSBzdGF0
ZW1lbnQgaW5zdGVhZC4gSW4gZ2VuZXJhbCwgQVNUIG5vZGVzIHRoYXQgcG9pbnQgdG8gb3RoZXIg
QVNUIG5vZGVzCisgICAgICAgIHNob3VsZCB1c2UgYnJvYWQgdHlwZXMgdW5sZXNzIHdlIGtub3cg
YXByaW9yaSB0aGF0IGEgY2VydGFpbiB0eXBlIHdpbGwKKyAgICAgICAgbmV2ZXIgYmUgcmVwbGFj
ZWQuCisKKyAgICAgICAgVGVzdHM6IHdlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLWJyZWFrLmh0
bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLWNvbnRpbnVlLmh0
bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLmh0bWwKKyAgICAg
ICAgICAgICAgIHdlYmdwdS93aGxzbC1sb29wcy1icmVhay5odG1sCisgICAgICAgICAgICAgICB3
ZWJncHUvd2hsc2wtbG9vcHMtY29udGludWUuaHRtbAorICAgICAgICAgICAgICAgd2ViZ3B1L3do
bHNsLWxvb3BzLmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93aGxzbC1uZXN0ZWQtbG9vcC5o
dG1sCisgICAgICAgICAgICAgICB3ZWJncHUvd2hsc2wtd2hpbGUtbG9vcC1icmVhay5odG1sCisg
ICAgICAgICAgICAgICB3ZWJncHUvd2hsc2wtd2hpbGUtbG9vcC1jb250aW51ZS5odG1sCisKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGb3JMb29wLmg6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6QVNUOjpGb3JMb29wOjpGb3JMb29wKToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpBU1Q6OkZvckxvb3A6OmluaXRpYWxpemF0aW9uKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdCk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRl
cjo6ZW1pdExvb3ApOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQVNURHVt
cGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1REdW1wZXI6OnZpc2l0KToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OnZpc2l0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2Vy
OjpwYXJzZUZvckxvb3ApOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJl
cGFyZS5jcHA6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExp
YnJhcnkudHh0OgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6VmlzaXRvcjo6dmlzaXQpOgorCiAyMDE5LTA1
LTMxICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYW4g
b3B0aW9uIHRvIG11dGUgYXVkaW8gY2FwdHVyZSBhdXRvbWF0aWNhbGx5IHdoZW4gcGFnZSBpcyBu
b3QgdmlzaWJsZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xBU1REdW1wZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMQVNURHVtcGVyLmNwcAkocmV2aXNpb24gMjQ1OTgyKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBU1REdW1wZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MTMsOCArNDEzLDggQEAgdm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6RG9X
aGlsZUxvb3AmIAogdm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkK
IHsKICAgICBtX291dC5wcmludCgiZm9yICgiKTsKLSAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZp
c2l0b3IoWyZdKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQmIHZhcmlhYmxlRGVj
bGFyYXRpb25zU3RhdGVtZW50KSB7Ci0gICAgICAgIHZpc2l0KHZhcmlhYmxlRGVjbGFyYXRpb25z
U3RhdGVtZW50KTsKKyAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJl
ZjxBU1Q6OlN0YXRlbWVudD4mIHN0YXRlbWVudCkgeworICAgICAgICB2aXNpdChzdGF0ZW1lbnQp
OwogICAgIH0sIFsmXShVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYgZXhwcmVzc2lvbikgewog
ICAgICAgICB2aXNpdChleHByZXNzaW9uKTsKICAgICB9KSwgZm9yTG9vcC5pbml0aWFsaXphdGlv
bigpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hl
Y2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xDaGVja2VyLmNwcAkocmV2aXNpb24gMjQ1OTgyKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE4OSw4ICsxMTg5LDggQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkRvV2hpbGVMb29wJiBk
bwogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkKIHsKLSAgICBX
VEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNT
dGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KSB7Ci0gICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCk7CisgICAgV1RGOjp2
aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpTdGF0ZW1lbnQ+JiBzdGF0
ZW1lbnQpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRlbWVudCk7CiAgICAgfSwg
WyZdKFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9uKSB7CiAgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uKTsKICAgICB9KSwgZm9yTG9vcC5pbml0aWFsaXph
dGlvbigpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFBhcnNlci5jcHAJKHJldmlzaW9uIDI0NTk4MikKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQxNCw3ICsxNDE0LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlRm9yTG9vcCgpIC0+IEV4cGVjdGVk
PAogICAgIGlmICghb3JpZ2luKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ob3Jp
Z2luLmVycm9yKCkpOwogCi0gICAgYXV0byBwYXJzZVJlbWFpbmRlciA9IFsmXShWYXJpYW50PEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQsIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Np
b24+PiYmIGluaXRpYWxpemF0aW9uKSAtPiBFeHBlY3RlZDxBU1Q6OkZvckxvb3AsIEVycm9yPiB7
CisgICAgYXV0byBwYXJzZVJlbWFpbmRlciA9IFsmXShWYXJpYW50PFVuaXF1ZVJlZjxBU1Q6OlN0
YXRlbWVudD4sIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiYmIGluaXRpYWxpemF0aW9uKSAt
PiBFeHBlY3RlZDxBU1Q6OkZvckxvb3AsIEVycm9yPiB7CiAgICAgICAgIGF1dG8gc2VtaWNvbG9u
ID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpTZW1pY29sb24pOwogICAgICAgICBp
ZiAoIXNlbWljb2xvbikKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihzZW1p
Y29sb24uZXJyb3IoKSk7CkBAIC0xNDUzLDggKzE0NTMsMTAgQEAgYXV0byBQYXJzZXI6OnBhcnNl
Rm9yTG9vcCgpIC0+IEV4cGVjdGVkPAogICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbnMgPSBi
YWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVt
ZW50LCBFcnJvcj4+KFsmXSgpIHsKICAgICAgICAgcmV0dXJuIHBhcnNlVmFyaWFibGVEZWNsYXJh
dGlvbnMoKTsKICAgICB9KTsKLSAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbnMpCi0gICAgICAg
IHJldHVybiBwYXJzZVJlbWFpbmRlcihXVEZNb3ZlKCp2YXJpYWJsZURlY2xhcmF0aW9ucykpOwor
ICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9ucykgeworICAgICAgICBVbmlxdWVSZWY8QVNUOjpT
dGF0ZW1lbnQ+IGRlY2xhcmF0aW9uU3RhdGVtZW50ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb25zU3RhdGVtZW50PihXVEZNb3ZlKCp2YXJpYWJsZURlY2xhcmF0aW9ucykp
OworICAgICAgICByZXR1cm4gcGFyc2VSZW1haW5kZXIoV1RGTW92ZShkZWNsYXJhdGlvblN0YXRl
bWVudCkpOworICAgIH0KIAogICAgIGF1dG8gZWZmZWN0ZnVsRXhwcmVzc2lvbiA9IHBhcnNlRWZm
ZWN0ZnVsRXhwcmVzc2lvbigpOwogICAgIGlmICghZWZmZWN0ZnVsRXhwcmVzc2lvbikKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVw
YXJlLmNwcAkocmV2aXNpb24gMjQ1OTgyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBA
QCBuYW1lc3BhY2UgV0hMU0wgewogCiBzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcEFTVEJlZm9y
ZUVhY2hQYXNzID0gZmFsc2U7CiBzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcEFTVEFmdGVyUGFy
c2luZyA9IGZhbHNlOwotc3RhdGljIGNvbnN0ZXhwciBib29sIGR1bXBBU1RBdEVuZCA9IHRydWU7
CitzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcEFTVEF0RW5kID0gZmFsc2U7CiBzdGF0aWMgY29u
c3RleHByIGJvb2wgYWx3YXlzRHVtcFBhc3NGYWlsdXJlcyA9IGZhbHNlOwogc3RhdGljIGNvbnN0
ZXhwciBib29sIGR1bXBQYXNzRmFpbHVyZSA9IGR1bXBBU1RCZWZvcmVFYWNoUGFzcyB8fCBkdW1w
QVNUQWZ0ZXJQYXJzaW5nIHx8IGR1bXBBU1RBdEVuZCB8fCBhbHdheXNEdW1wUGFzc0ZhaWx1cmVz
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5k
YXJkTGlicmFyeS50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0CShyZXZpc2lvbiAyNDU5ODIpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeS50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTM4NCw2ICszODQsMTQgQEAgbmF0aXZlIGZsb2F0NCBvcGVy
YXRvci55PShmbG9hdDQsIGZsb2F0KQogbmF0aXZlIGZsb2F0NCBvcGVyYXRvci56PShmbG9hdDQs
IGZsb2F0KTsKIG5hdGl2ZSBmbG9hdDQgb3BlcmF0b3Iudz0oZmxvYXQ0LCBmbG9hdCk7CiAKK25h
dGl2ZSBmbG9hdCBvcGVyYXRvcisoZmxvYXQsIGZsb2F0KTsKK25hdGl2ZSBmbG9hdCBvcGVyYXRv
ci0oZmxvYXQsIGZsb2F0KTsKK25hdGl2ZSBpbnQgb3BlcmF0b3IrKGludCwgaW50KTsKK25hdGl2
ZSB1aW50IG9wZXJhdG9yKyh1aW50LCB1aW50KTsKK25hdGl2ZSBib29sIG9wZXJhdG9yPChpbnQs
IGludCk7CituYXRpdmUgYm9vbCBvcGVyYXRvcjwodWludCwgdWludCk7CituYXRpdmUgYm9vbCBv
cGVyYXRvcjwoZmxvYXQsIGZsb2F0KTsKKwogbmF0aXZlIGZsb2F0IGRkeChmbG9hdCk7CiBuYXRp
dmUgZmxvYXQgZGR5KGZsb2F0KTsKIG5hdGl2ZSB2b2lkIEFsbE1lbW9yeUJhcnJpZXJXaXRoR3Jv
dXBTeW5jKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMVmlzaXRvci5jcHAJKHJldmlzaW9uIDI0NTk4MikKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzNCw4ICs0MzQsOCBAQCB2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RmFsbHRocm91Z2gm
KQogCiB2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkKIHsKLSAgICBX
VEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNT
dGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KSB7Ci0gICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCk7CisgICAgV1RGOjp2
aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpTdGF0ZW1lbnQ+JiBzdGF0
ZW1lbnQpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRlbWVudCk7CiAgICAgfSwg
WyZdKFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9uKSB7CiAgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uKTsKICAgICB9KSwgZm9yTG9vcC5pbml0aWFsaXph
dGlvbigpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEZvckxvb3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xGb3JMb29wLmgJKHJldmlzaW9uIDI0NTk4MikKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZvckxvb3AuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgRm9yTG9vcCA6
IHB1YmxpYyBTdGF0ZW1lbnQgewogcHVibGljOgotICAgIEZvckxvb3AoTGV4ZXI6OlRva2VuJiYg
b3JpZ2luLCBWYXJpYW50PFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LCBVbmlxdWVSZWY8
RXhwcmVzc2lvbj4+JiYgaW5pdGlhbGl6YXRpb24sIE9wdGlvbmFsPFVuaXF1ZVJlZjxFeHByZXNz
aW9uPj4mJiBjb25kaXRpb24sIE9wdGlvbmFsPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4mJiBpbmNy
ZW1lbnQsIFVuaXF1ZVJlZjxTdGF0ZW1lbnQ+JiYgYm9keSkKKyAgICBGb3JMb29wKExleGVyOjpU
b2tlbiYmIG9yaWdpbiwgVmFyaWFudDxVbmlxdWVSZWY8U3RhdGVtZW50PiwgVW5pcXVlUmVmPEV4
cHJlc3Npb24+PiYmIGluaXRpYWxpemF0aW9uLCBPcHRpb25hbDxVbmlxdWVSZWY8RXhwcmVzc2lv
bj4+JiYgY29uZGl0aW9uLCBPcHRpb25hbDxVbmlxdWVSZWY8RXhwcmVzc2lvbj4+JiYgaW5jcmVt
ZW50LCBVbmlxdWVSZWY8U3RhdGVtZW50PiYmIGJvZHkpCiAgICAgICAgIDogU3RhdGVtZW50KFdU
Rk1vdmUob3JpZ2luKSkKICAgICAgICAgLCBtX2luaXRpYWxpemF0aW9uKFdURk1vdmUoaW5pdGlh
bGl6YXRpb24pKQogICAgICAgICAsIG1fY29uZGl0aW9uKFdURk1vdmUoY29uZGl0aW9uKSkKQEAg
LTYyLDEzICs2MiwxMyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzRm9yTG9vcCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIFZhcmlhbnQ8VmFyaWFibGVEZWNsYXJhdGlv
bnNTdGF0ZW1lbnQsIFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4mIGluaXRpYWxpemF0aW9uKCkgeyBy
ZXR1cm4gbV9pbml0aWFsaXphdGlvbjsgfQorICAgIFZhcmlhbnQ8VW5pcXVlUmVmPFN0YXRlbWVu
dD4sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4mIGluaXRpYWxpemF0aW9uKCkgeyByZXR1cm4gbV9p
bml0aWFsaXphdGlvbjsgfQogICAgIEV4cHJlc3Npb24qIGNvbmRpdGlvbigpIHsgcmV0dXJuIG1f
Y29uZGl0aW9uID8gJiptX2NvbmRpdGlvbiA6IG51bGxwdHI7IH0KICAgICBFeHByZXNzaW9uKiBp
bmNyZW1lbnQoKSB7IHJldHVybiBtX2luY3JlbWVudCA/ICYqbV9pbmNyZW1lbnQgOiBudWxscHRy
OyB9CiAgICAgU3RhdGVtZW50JiBib2R5KCkgeyByZXR1cm4gbV9ib2R5OyB9CiAKIHByaXZhdGU6
Ci0gICAgVmFyaWFudDxWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCwgVW5pcXVlUmVmPEV4
cHJlc3Npb24+PiBtX2luaXRpYWxpemF0aW9uOworICAgIFZhcmlhbnQ8VW5pcXVlUmVmPFN0YXRl
bWVudD4sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4gbV9pbml0aWFsaXphdGlvbjsKICAgICBPcHRp
b25hbDxVbmlxdWVSZWY8RXhwcmVzc2lvbj4+IG1fY29uZGl0aW9uOwogICAgIE9wdGlvbmFsPFVu
aXF1ZVJlZjxFeHByZXNzaW9uPj4gbV9pbmNyZW1lbnQ7CiAgICAgVW5pcXVlUmVmPFN0YXRlbWVu
dD4gbV9ib2R5OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0
YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAJKHJldmlz
aW9uIDI0NTk4MikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFs
L1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBA
CiAjaW5jbHVkZSAiV0hMU0xUeXBlTmFtZXIuaCIKICNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIK
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtMTM5LDYgKzE0MCw4IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHZpc2l0KEFTVDo6VGVy
bmFyeUV4cHJlc3Npb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVS
ZWZlcmVuY2UmKSBvdmVycmlkZTsKIAorICAgIHZvaWQgZW1pdExvb3AoYm9vbCBlbWl0Q29uZGl0
aW9uQmVmb3JlQm9keSwgQVNUOjpFeHByZXNzaW9uKiBjb25kaXRpb25FeHByZXNzaW9uLCBBU1Q6
OkV4cHJlc3Npb24qIGluY3JlbWVudCwgQVNUOjpTdGF0ZW1lbnQmIGJvZHkpOworCiAgICAgU3Ry
aW5nIGNvbnN0YW50RXhwcmVzc2lvblN0cmluZyhBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYpOwog
CiAgICAgU3RyaW5nIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpCkBAIC0xNTUsNiArMTU4LDcg
QEAgcHJvdGVjdGVkOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeVBvaW50U2NhZmZvbGRpbmc+
IG1fZW50cnlQb2ludFNjYWZmb2xkaW5nOwogICAgIExheW91dCYgbV9sYXlvdXQ7CiAgICAgdW5z
aWduZWQgbV92YXJpYWJsZUNvdW50IHsgMCB9OworICAgIFN0cmluZyBtX2JyZWFrT3V0T2ZDdXJy
ZW50TG9vcEVhcmx5VmFyaWFibGU7CiB9OwogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRl
cjo6dmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uKQpAQCAtMjI0LDIyICsyMjgsMTMgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25X
cml0ZXI6OnZpc2l0KEFTVAogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQo
QVNUOjpCcmVhayYpCiB7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1f
YnJlYWtPdXRPZkN1cnJlbnRMb29wRWFybHlWYXJpYWJsZSwgIiA9IHRydWU7XG4iKSk7CiAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiYnJlYWs7XG4iKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRl
ZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6Q29udGludWUmKQogewotICAgIC8vIEZJWE1FOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1ODA4IEZpZ3VyZSBvdXQg
d2hpY2ggbG9vcCB3ZSdyZSBpbiwgYW5kIHJ1biB0aGUgaW5jcmVtZW50IGNvZGUKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQo
QVNUOjpEb1doaWxlTG9vcCYgZG9XaGlsZUxvb3ApCi17Ci0gICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZCgiZG8ge1xuIik7Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvV2hpbGVMb29wLmJvZHko
KSk7Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvV2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOwot
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCEiLCBtX3N0YWNrLnRh
a2VMYXN0KCksICIpIGJyZWFrO1xuIikpOwotICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZygifSB3aGlsZSh0cnVlKTtcbiIpKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KCJicmVhaztcbiIpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQo
QVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50JiBlZmZlY3RmdWxFeHByZXNzaW9uU3Rh
dGVtZW50KQpAQCAtMjUzLDI2ICsyNDgsNTcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0
ZXI6OnZpc2l0KEFTVAogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIltbY2xhbmc6OmZhbGx0
aHJvdWdoXV07XG4iKTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTU4MDggTWFrZSBzdXJlIHRoaXMgaXMgb2theS4gQWx0ZXJuYXRpdmVseSwgd2Ug
Y291bGQgZG8gbm90aGluZyBhbmQganVzdCByZXR1cm4gaGVyZSBpbnN0ZWFkLgogfQogCit2b2lk
IEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6ZW1pdExvb3AoYm9vbCBlbWl0Q29uZGl0aW9uQmVm
b3JlQm9keSwgQVNUOjpFeHByZXNzaW9uKiBjb25kaXRpb25FeHByZXNzaW9uLCBBU1Q6OkV4cHJl
c3Npb24qIGluY3JlbWVudCwgQVNUOjpTdGF0ZW1lbnQmIGJvZHkpCit7CisgICAgU2V0Rm9yU2Nv
cGU8U3RyaW5nPiBsb29wVmFyaWFibGVTY29wZShtX2JyZWFrT3V0T2ZDdXJyZW50TG9vcEVhcmx5
VmFyaWFibGUsIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpKTsKKworICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQobWFrZVN0cmluZygiYm9vbCAiLCBtX2JyZWFrT3V0T2ZDdXJyZW50TG9vcEVh
cmx5VmFyaWFibGUsICIgPSBmYWxzZTtcbiIpKTsKKworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQoIndoaWxlICgxKSB7XG4iKTsKKworICAgIGlmIChlbWl0Q29uZGl0aW9uQmVmb3JlQm9keSAm
JiBjb25kaXRpb25FeHByZXNzaW9uKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqY29u
ZGl0aW9uRXhwcmVzc2lvbik7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZygiaWYgKCEiLCBtX3N0YWNrLnRha2VMYXN0KCksICIpIGJyZWFrO1xuIikpOworICAgIH0K
KworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoImRvIHtcbiIpOworICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChib2R5KTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9IHdoaWxlKDApOyBc
biIpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCIsIG1fYnJl
YWtPdXRPZkN1cnJlbnRMb29wRWFybHlWYXJpYWJsZSwgIikgYnJlYWs7XG4iKSk7CisKKyAgICBp
ZiAoIWVtaXRDb25kaXRpb25CZWZvcmVCb2R5ICYmIGNvbmRpdGlvbkV4cHJlc3Npb24pIHsKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpjb25kaXRpb25FeHByZXNzaW9uKTsKKyAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJpZiAoISIsIG1fc3RhY2sudGFrZUxh
c3QoKSwgIikgYnJlYWs7XG4iKSk7CisgICAgfQorCisgICAgaWYgKGluY3JlbWVudCkgeworICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmluY3JlbWVudCk7CisgICAgICAgIG1fc3RhY2sudGFr
ZUxhc3QoKTsKKyAgICB9CisKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9IFxuIik7IC8v
IHdoaWxlICgxKSB7IAorfQorCit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQo
QVNUOjpEb1doaWxlTG9vcCYgZG9XaGlsZUxvb3ApCit7CisgICAgZW1pdExvb3AoZmFsc2UsICZk
b1doaWxlTG9vcC5jb25kaXRpb25hbCgpLCBudWxscHRyLCBkb1doaWxlTG9vcC5ib2R5KCkpOwor
fQorCit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpXaGlsZUxvb3Am
IHdoaWxlTG9vcCkKK3sKKyAgICBlbWl0TG9vcCh0cnVlLCAmd2hpbGVMb29wLmNvbmRpdGlvbmFs
KCksIG51bGxwdHIsIHdoaWxlTG9vcC5ib2R5KCkpOworfQorCiB2b2lkIEZ1bmN0aW9uRGVmaW5p
dGlvbldyaXRlcjo6dmlzaXQoQVNUOjpGb3JMb29wJiBmb3JMb29wKQogewotICAgIFdURjo6dmlz
aXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVu
dCYgdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpIHsKLSAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KTsKKyAgICBXVEY6OnZpc2l0KFdU
Rjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6U3RhdGVtZW50JiBzdGF0ZW1lbnQpIHsKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KHN0YXRlbWVudCk7CiAgICAgfSwgWyZdKFVuaXF1ZVJlZjxBU1Q6
OkV4cHJlc3Npb24+JiBleHByZXNzaW9uKSB7CiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChl
eHByZXNzaW9uKTsKICAgICAgICAgbV9zdGFjay50YWtlTGFzdCgpOyAvLyBXZSBkb24ndCBuZWVk
IHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdC4KICAgICB9KSwgZm9yTG9vcC5pbml0aWFs
aXphdGlvbigpKTsKIAotICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoImZvciAoIDsgOyApIHtc
biIpOwotICAgIGlmIChmb3JMb29wLmNvbmRpdGlvbigpKSB7Ci0gICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCgqZm9yTG9vcC5jb25kaXRpb24oKSk7Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZygiaWYgKCEiLCBtX3N0YWNrLnRha2VMYXN0KCksICIpIGJyZWFrO1xu
IikpOwotICAgIH0KLSAgICBjaGVja0Vycm9yQW5kVmlzaXQoZm9yTG9vcC5ib2R5KCkpOwotICAg
IGlmIChmb3JMb29wLmluY3JlbWVudCgpKSB7Ci0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgq
Zm9yTG9vcC5pbmNyZW1lbnQoKSk7Ci0gICAgICAgIG1fc3RhY2sudGFrZUxhc3QoKTsKLSAgICB9
Ci0gICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgZW1pdExvb3AodHJ1ZSwg
Zm9yTG9vcC5jb25kaXRpb24oKSwgZm9yTG9vcC5pbmNyZW1lbnQoKSwgZm9yTG9vcC5ib2R5KCkp
OwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpJZlN0YXRl
bWVudCYgaWZTdGF0ZW1lbnQpCkBAIC0zMzMsMTUgKzM1OSw2IEBAIHZvaWQgRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICBWaXNpdG9yOjp2aXNpdCh2YXJpYWJsZURlY2xh
cmF0aW9uc1N0YXRlbWVudCk7CiB9CiAKLXZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdChBU1Q6OldoaWxlTG9vcCYgd2hpbGVMb29wKQotewotICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZygid2hpbGUgKHRydWUpIHtcbiIpKTsKLSAgICBjaGVja0Vycm9yQW5k
VmlzaXQod2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOwotICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZygiaWYgKCEiLCBtX3N0YWNrLnRha2VMYXN0KCksICIpIGJyZWFrO1xuIikp
OwotICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuYm9keSgpKTsKLSAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKLX0KLQogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0
ZXI6OnZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKQogewogICAgIGF1
dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyNDU5ODIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwzMCBAQAorMjAxOS0wNS0zMSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxl
LmNvbT4KKworICAgICAgICBbV0hMU0xdIEltcGxlbWVudCBsb29wIGV4cHJlc3Npb25zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU4MDgKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzUwNzQ2MzA5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AtYnJlYWst
ZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxv
b3AtYnJlYWsuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxv
b3AtY29udGludWUtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNs
LWRvLXdoaWxlLWxvb3AtY29udGludWUuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3do
bHNsLWRvLXdoaWxlLWxvb3AtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1
L3dobHNsLWRvLXdoaWxlLWxvb3AuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNs
LWxvb3BzLWJyZWFrLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxz
bC1sb29wcy1icmVhay5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wtbG9vcHMt
Y29udGludWUtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsLWxv
b3BzLWNvbnRpbnVlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC1sb29wcy1l
eHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wtbG9vcHMuaHRtbDog
QWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsLW5lc3RlZC1sb29wLWV4cGVjdGVkLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC1uZXN0ZWQtbG9vcC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWJncHUvd2hsc2wtd2hpbGUtbG9vcC1icmVhay1leHBlY3RlZC5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wtd2hpbGUtbG9vcC1icmVhay5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wtd2hpbGUtbG9vcC1jb250aW51ZS1leHBlY3RlZC5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wtd2hpbGUtbG9vcC1jb250aW51ZS5o
dG1sOiBBZGRlZC4KKwogMjAxOS0wNS0zMSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFw
cGxlLmNvbT4KIAogICAgICAgICBNb3ZlIGNvZGUgdGhhdCBzZXRzIGNvbXBvc2l0aW5nIHBhaW50
IHBoYXNlcyBpbnRvIGEgc2luZ2xlIGZ1bmN0aW9uCkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtZG8td2hpbGUtbG9vcC1icmVhay1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLWJyZWFrLWV4cGVjdGVkLmh0bWwJ
KG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3At
YnJlYWstZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9
ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2Fz
eW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRl
eHQoIjJkIik7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7CisgICAgY29udGV4dC5m
aWxsUmVjdCgwLCAwLCA0MDAsIDQwMCk7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmxhY2si
OworICAgIGNvbnRleHQuZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsKK30KK3dpbmRvdy5h
ZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG8td2hpbGUtbG9vcC1icmVhay5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29w
LWJyZWFrLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRv
LXdoaWxlLWxvb3AtYnJlYWsuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMyBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFz
IGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+
Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgVmVydGV4T3V0IHsKKyAgICBmbG9hdDQg
cG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKKyAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsK
K30KKwordmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0
cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgeworICAgIFZlcnRleE91dCBy
ZXN1bHQ7CisKKyAgICBib29sIGIgPSB0cnVlOworICAgIGRvIHsKKyAgICAgICAgaWYgKGIpIHsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSB3aGlsZSAoKHNoYWRlID0gMS4w
LCBmYWxzZSkpOworCisgICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247CisgICAgcmVzdWx0
LnNoYWRlID0gc2hhZGU7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmcmFnbWVudCBmbG9h
dDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0
IDAgeworICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKK30KK2A7
Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2
aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFk
YXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNl
LmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7
CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9p
bnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTog
c2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBw
cmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXph
dGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29u
c3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25z
dCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9y
QmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29u
c3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtz
aGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0Iiwgb2Zmc2V0OiAwfTsKKyAgICBjb25z
dCBhdHRyaWJ1dGUxID0ge3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNl
dDogMTZ9OworICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07
CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRl
c307CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQg
PSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERl
c2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTog
InVuaWZvcm0tYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2Uu
Y3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNv
bnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdy
b3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlw
ZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0
aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNp
bFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlv
dXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVs
aW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIw
RGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICog
NCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklU
RX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4
QnVmZmVyMERlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9
IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1
ZmZlcik7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAwLjA7CisKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzVdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzldID0gMC4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsx
MF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMTNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRd
ID0gMC4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAwLjA7CisgICAgdmVy
dGV4QnVmZmVyMC51bm1hcCgpOworCisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9y
ID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZl
clVzYWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJl
c291cmNlQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0
b3IpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJj
ZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMy
QXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAg
IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICByZXNvdXJjZUJ1ZmZlci51
bm1hcCgpOworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVm
ZmVyLCBzaXplOiA0fTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAs
IHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9y
ID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmdd
fTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91
cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1
Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJn
cmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBD
aGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dh
cENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcg
PSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5k
RW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0
IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1l
bnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVs
bCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsK
KyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5k
ZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2ht
ZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2lu
UmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIu
c2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJp
bmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1
ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRy
YXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNv
bnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2Uu
Z2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGlmICh3aW5kb3cudGVz
dFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CitpZiAod2luZG93
LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cuYWRk
RXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AtY29udGludWUt
ZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG8t
d2hpbGUtbG9vcC1jb250aW51ZS1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLWNvbnRpbnVlLWV4cGVjdGVkLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAi
IGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Cithc3luYyBmdW5jdGlvbiBzdGFydCgp
IHsKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7
CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgIGNvbnRl
eHQuZmlsbFN0eWxlID0gImJsdWUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgNDAwLCA0
MDApOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gIndoaXRlIjsKKyAgICBjb250ZXh0LmZpbGxS
ZWN0KDEwMCwgMTAwLCAyMDAsIDIwMCk7Cit9Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9h
ZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AtY29udGludWUuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG8td2hpbGUtbG9vcC1jb250aW51ZS5odG1sCShu
b25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLWNv
bnRpbnVlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzUgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFz
IiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hh
ZGVyU291cmNlID0gYAorc3RydWN0IFZlcnRleE91dCB7CisgICAgZmxvYXQ0IHBvc2l0aW9uIDog
U1ZfUG9zaXRpb247CisgICAgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Cit9CisKK3ZlcnRl
eCBWZXJ0ZXhPdXQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwg
ZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMSkpIHsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0OworCisg
ICAgYm9vbCBiID0gdHJ1ZTsKKyAgICB1aW50IGkgPSAwOworICAgIGRvIHsKKyAgICAgICAgaWYg
KGIpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHNoYWRlID0g
MC4wOworICAgIH0gd2hpbGUgKChpID0gaSArIDEsIHNoYWRlID0gc2hhZGUgKyAwLjEsIGkgPCAx
MCkpOworCisgICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247CisgICAgcmVzdWx0LnNoYWRl
ID0gc2hhZGU7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmcmFnbWVudCBmbG9hdDQgZnJh
Z21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgewor
ICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKK30KK2A7Cithc3lu
YyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9y
LmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIu
cmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0
ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAg
Y29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2
ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVy
TW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRp
dmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0
YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxw
aGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xv
clN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQs
IHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVw
dGhTdGVuY2lsU3RhdGUgPSBudWxsOworCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJM
b2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0Iiwgb2Zmc2V0OiAwfTsKKyAgICBjb25zdCBhdHRy
aWJ1dGUxID0ge3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9
OworICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07CisgICAg
Y29uc3QgaW5wdXQwID0ge3N0cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307Cisg
ICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVy
dGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0
b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZv
cm0tYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRl
QmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBp
cGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5
b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVM
YXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9w
b2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRl
LCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9Owor
ICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJl
bmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3Jp
cHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNh
Z2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Cisg
ICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVy
MERlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0
IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAwLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzVdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZd
ID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzldID0gMC4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAw
LjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMC4w
OworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAwLjA7CisgICAgdmVydGV4QnVm
ZmVyMC51bm1hcCgpOworCisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3Np
emU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdl
LlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNl
QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOwor
ICAgIGNvbnN0IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZl
ci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkg
PSBuZXcgRmxvYXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291
cmNlQnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgp
OworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBz
aXplOiA0fTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291
cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xh
eW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAg
ICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2Ny
aXB0b3IpOworCisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNh
bnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Cisg
ICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5v
cm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihz
d2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWlu
LmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRw
dXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2Rl
ciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9
IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0g
W3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9h
ZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBj
b25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNz
RGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsK
KyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVy
UGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlw
ZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91
cCgwLCBiaW5kR3JvdXApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMo
MCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwg
MSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNv
bW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVl
dWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CitpZiAod2luZG93LnRlc3RS
dW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cuYWRkRXZlbnRM
aXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AtZXhwZWN0ZWQuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG8td2hpbGUtbG9vcC1leHBl
Y3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kby13
aGlsZS1sb29wLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOSBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFz
IGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+
Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRD
b250ZXh0KCIyZCIpOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gImJsdWUiOworICAgIGNvbnRl
eHQuZmlsbFJlY3QoMCwgMCwgNDAwLCA0MDApOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gIndo
aXRlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDEwMCwgMTAwLCAyMDAsIDIwMCk7Cit9Cit3aW5k
b3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG8td2hpbGUtbG9vcC5o
dG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kby13aGlsZS1s
b29wLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzAgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3
aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVy
U291cmNlID0gYAorc3RydWN0IFZlcnRleE91dCB7CisgICAgZmxvYXQ0IHBvc2l0aW9uIDogU1Zf
UG9zaXRpb247CisgICAgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Cit9CisKK3ZlcnRleCBW
ZXJ0ZXhPdXQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxv
YXQgc2hhZGUgOiBhdHRyaWJ1dGUoMSkpIHsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0OworCisgICAg
ZG8geworICAgICAgICBzaGFkZSA9IDEuMDsKKyAgICB9IHdoaWxlKGZhbHNlKTsKKworICAgIHJl
c3VsdC5wb3NpdGlvbiA9IHBvc2l0aW9uOworICAgIHJlc3VsdC5zaGFkZSA9IHNoYWRlOworCisg
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
RmxvYXQzMkFycmF5WzRdID0gMC4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1
XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDAu
MDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41OworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzEyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDAuMDsKKworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMC4wOworICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsK
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
L3dlYmdwdS93aGxzbC1sb29wcy1icmVhay1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy1icmVhay1leHBlY3RlZC5odG1sCShub25leGlz
dGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy1icmVhay1leHBlY3RlZC5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0i
NDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gc3Rh
cnQoKSB7CisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZh
cyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBj
b250ZXh0LmZpbGxTdHlsZSA9ICJibHVlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQw
MCwgNDAwKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJibGFjayI7CisgICAgY29udGV4dC5m
aWxsUmVjdCgxMDAsIDEwMCwgMjAwLCAyMDApOworfQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIo
ImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy1icmVhay5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy1icmVhay5odG1sCShub25leGlzdGVudCkKKysrIExh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy1icmVhay5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTM0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwv
Y2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBWZXJ0ZXhP
dXQgeworICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICAgIGZsb2F0IHNoYWRl
IDogYXR0cmlidXRlKDApOworfQorCit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9h
dDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7
CisgICAgVmVydGV4T3V0IHJlc3VsdDsKKworICAgIGJvb2wgYiA9IHRydWU7CisgICAgZm9yICh1
aW50IGkgPSAwOyBpIDwgMTA7IChpID0gaSArIDEsIHNoYWRlID0gc2hhZGUgKyAxLjApKSB7Cisg
ICAgICAgIGlmIChiKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBz
aGFkZSA9IHNoYWRlICsgMS4wOworICAgIH0KKworICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBvc2l0
aW9uOworICAgIHJlc3VsdC5zaGFkZSA9IHNoYWRlOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRl
KDApKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hh
ZGUsIDEuMCk7Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgYWRh
cHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBjb25zdCBk
ZXZpY2UgPSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKworICAgIGNvbnN0IHNoYWRl
ck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwg
aXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVy
TW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRT
dGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVy
In07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAg
IGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAi
bm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5k
ID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBh
bHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVC
aXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKworICAgIGNvbnN0
IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCIsIG9mZnNl
dDogMH07CisgICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0
OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKKyAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0
ZTAsIGF0dHJpYnV0ZTFdOworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1
dGVTZXQ6IGF0dHJpYnV0ZXN9OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNv
bnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBi
aW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2li
aWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3Vw
TGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNj
cmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3Vw
TGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0g
ZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdt
ZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3Rh
dGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlv
dXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5j
cmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29u
c3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BF
Ul9FTEVNRU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZm
ZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3Jl
YXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZm
ZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKKyAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0
ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0g
PSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0
MzJBcnJheVszXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMC4w
OworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7CisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDAuMDsKKworICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMTBdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzE0XSA9IDAuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMThdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTld
ID0gMC4wOworICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc291cmNl
QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQs
IHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRF
fTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3Vy
Y2VCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVy
ID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHJlc291
cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFy
cmF5QnVmZmVyKTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAg
cmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVm
ZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGlu
ZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmlu
ZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFti
aW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJp
bmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFz
LmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2
aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4
dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0
cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91
dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisg
ICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsg
Ly8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAgY29u
c3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJl
c29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xl
YXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7
CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVw
dGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21t
YW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJl
bmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQ
YXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKKyAgICByZW5kZXJQYXNzRW5j
b2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsKKyAgICByZW5k
ZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVu
ZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNo
KCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisKKyAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9u
ZSgpOword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy1j
b250aW51ZS1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1sb29wcy1jb250aW51ZS1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy1jb250aW51ZS1leHBlY3RlZC5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
KzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9
IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAg
Y29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNv
bnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjb250ZXh0LmZpbGxT
dHlsZSA9ICJibHVlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQwMCwgNDAwKTsKKyAg
ICBjb250ZXh0LmZpbGxTdHlsZSA9ICJibGFjayI7CisgICAgY29udGV4dC5maWxsUmVjdCgxMDAs
IDEwMCwgMjAwLCAyMDApOworfQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFy
dCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1sb29wcy1jb250aW51ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1sb29wcy1jb250aW51ZS5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1sb29wcy1jb250aW51ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTM0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2Fu
dmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBWZXJ0ZXhPdXQg
eworICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICAgIGZsb2F0IHNoYWRlIDog
YXR0cmlidXRlKDApOworfQorCit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9hdDQg
cG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7Cisg
ICAgVmVydGV4T3V0IHJlc3VsdDsKKworICAgIGJvb2wgYiA9IHRydWU7CisgICAgZm9yICh1aW50
IGkgPSAwOyBpIDwgMTA7IGkgPSBpICsgMSkgeworICAgICAgICBpZiAoYikgeworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgc2hhZGUgPSBzaGFkZSArIDEuMDsKKyAg
ICB9CisKKyAgICByZXN1bHQucG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICByZXN1bHQuc2hhZGUg
PSBzaGFkZTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFn
bWVudFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7Cisg
ICAgcmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOworfQorYDsKK2FzeW5j
IGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3Iu
Z3B1LnJlcXVlc3RBZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5y
ZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRl
U2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBj
b25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZl
cnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJN
b2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2
ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3Rh
dGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBo
YUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9y
U3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwg
d3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0
aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxv
Y2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9OworICAgIGNvbnN0IGF0dHJp
YnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07
CisgICAgY29uc3QgYXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKKyAgICBj
b25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKKyAg
ICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0
ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRv
ciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9y
bS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVC
aW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlw
ZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlv
dXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxh
eW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3Bv
bG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUs
IHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Cisg
ICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVu
ZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlw
dG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2Fn
ZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIw
RGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQg
dmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9IDAuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbNV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0g
PSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbOV0gPSAwLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7CisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAwLjA7
CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzE3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDAuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwLnVubWFwKCk7CisKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6
ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2Uu
VU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VC
dWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7Cisg
ICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVy
Lm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9
IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3Vy
Y2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7
CisKKyAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNp
emU6IDR9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3Vy
Y2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5
b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAg
IGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2Fu
dmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAg
ICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9y
bSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3
YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4u
Z2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1
dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVy
ID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0g
e3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBb
e2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2Fk
T3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNv
bnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NE
ZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9Owor
ICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQ
YXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBl
bGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3Vw
KDAsIGJpbmRHcm91cCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygw
LCBbdmVydGV4QnVmZmVyMF0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAx
LCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29t
bWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1
ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1
bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExp
c3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMtZXhwZWN0ZWQuaHRtbAkobm9uZXhp
c3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbG9vcHMtZXhwZWN0ZWQuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIg
aGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkg
eworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsK
KyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CisgICAgY29udGV4
dC5maWxsU3R5bGUgPSAiYmx1ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCA0MDAsIDQw
MCk7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAid2hpdGUiOworICAgIGNvbnRleHQuZmlsbFJl
Y3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsKK30KK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2Fk
Iiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtbG9vcHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtbG9vcHMuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtbG9vcHMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMCBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJj
YW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25z
dCBzaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgVmVydGV4T3V0IHsKKyAgICBmbG9hdDQgcG9zaXRp
b24gOiBTVl9Qb3NpdGlvbjsKKyAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsKK30KKwor
dmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRl
KDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgeworICAgIFZlcnRleE91dCByZXN1bHQ7
CisKKyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCAxMDsgaSA9IGkgKyAxKSB7CisgICAgICAgIHNo
YWRlID0gc2hhZGUgKyAwLjE7CisgICAgfQorCisgICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRp
b247CisgICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUo
MCkpIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFk
ZSwgMS4wKTsKK30KK2A7Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFw
dGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRl
dmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qgc2hhZGVy
TW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBp
c1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJN
b2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0
YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIi
fTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAg
Y29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJu
b25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQg
PSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFs
cGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJp
dHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworCisgICAgY29uc3Qg
YXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0Iiwgb2Zmc2V0
OiAwfTsKKyAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6
ICJmbG9hdCIsIG9mZnNldDogMTZ9OworICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbYXR0cmlidXRl
MCwgYXR0cmlidXRlMV07CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMjAsIGF0dHJpYnV0
ZVNldDogYXR0cmlidXRlc307CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07CisgICAgY29u
c3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IGJp
bmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJp
bGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBM
YXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2Ny
aXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBM
YXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBk
ZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKwor
ICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21l
bnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0
ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91
dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNy
ZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25z
dCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVS
X0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZl
clVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVh
dGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZl
cjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRl
eEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9
IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAwLjE7
CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0gLTAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDEuMDsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMC4xOworCisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsx
MV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMTRdID0gMC4xOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsx
NV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNl0gPSAwLjU7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOV0g
PSAwLjE7CisgICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOworCisgICAgY29uc3QgcmVzb3VyY2VC
dWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwg
dXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9
OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJj
ZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIg
PSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgcmVzb3Vy
Y2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJy
YXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICBy
ZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZm
ZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5n
ID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5k
R3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2Jp
bmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmlu
ZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY2FudmFzID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMu
Z2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZp
Y2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0
LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRw
dXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0
cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAg
ICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAv
LyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25z
dCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVz
b2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVh
ckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsK
KyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0
aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1h
bmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVu
ZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBh
c3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIHJlbmRlclBhc3NFbmNv
ZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOworICAgIHJlbmRl
clBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5k
UGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2go
KTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAg
IGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7
Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25l
KCk7Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW5lc3RlZC1s
b29wLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LW5lc3RlZC1sb29wLWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLW5lc3RlZC1sb29wLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgor
PGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2Nh
bnZhcz4KKzxzY3JpcHQ+Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBjYW52
YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4
dCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gImJs
dWUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgNDAwLCA0MDApOworICAgIGNvbnRleHQu
ZmlsbFN0eWxlID0gImJsYWNrIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDEwMCwgMTAwLCAyMDAs
IDIwMCk7Cit9Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW5l
c3RlZC1sb29wLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW5l
c3RlZC1sb29wLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LW5lc3RlZC1sb29wLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjYgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0i
Y2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29u
c3Qgc2hhZGVyU291cmNlID0gYAorc3RydWN0IFZlcnRleE91dCB7CisgICAgZmxvYXQ0IHBvc2l0
aW9uIDogU1ZfUG9zaXRpb247CisgICAgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Cit9CisK
K3ZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0
ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMSkpIHsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0
OworCisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCAxMDsgaSA9
IGkgKyAxKSB7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpZiAoYikgewor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2hhZGUg
PSAxLjA7CisgICAgICAgIH0KKworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAoYikgewor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlICgo
c2hhZGUgPSAxLjAsIGZhbHNlKSk7CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKGIp
IHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3
aGlsZSAoKHNoYWRlID0gc2hhZGUgKyAxLjAsIGZhbHNlKSk7CisKKyAgICAgICAgZG8geworICAg
ICAgICAgICAgaWYgKGIpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSB3aGlsZSAoKHNoYWRlID0gc2hhZGUgLSAxLjAsIGZhbHNlKSk7CisKKyAg
ICAgICAgd2hpbGUgKChzaGFkZSA9IHNoYWRlICsgMS4wLCB0cnVlKSkgeworICAgICAgICAgICAg
aWYgKGIpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHdoaWxlICgoc2hhZGUgPSBzaGFkZSAtIDEuMCwgdHJ1ZSkpIHsKKyAgICAg
ICAgICAgIGlmIChiKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXN1bHQucG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICBy
ZXN1bHQuc2hhZGUgPSBzaGFkZTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ZyYWdtZW50
IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9U
YXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjApOwor
fQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2Fp
dCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdh
aXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBk
ZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRy
dWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50
cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9k
dWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNv
bnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0
ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAg
ICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAg
IGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwg
Y29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAg
ICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisKKyAgICBjb25zdCBhdHRyaWJ1dGUw
ID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9OworICAg
IGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0Iiwg
b2Zmc2V0OiAxNn07CisgICAgY29uc3QgYXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1
dGUxXTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBhdHRy
aWJ1dGVzfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJ
bnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5
b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0
eXBlOiAidW5pZm9ybS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRl
dmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Cisg
ICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFti
aW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVh
dGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3Qg
cmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBw
cmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhT
dGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGlu
ZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVy
UGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1
ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAq
IDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQ
X1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2
ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5QnVm
ZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMEFy
cmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9IDAuMDsKKworICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAwLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzEwXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0wLjU7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxNF0gPSAwLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAuNTsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzE4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDAuMDsKKyAg
ICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7CisKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2Ny
aXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BV
QnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29u
c3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVyRGVz
Y3JpcHRvcik7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJl
c291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckZs
b2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7
CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOworICAgIHJlc291cmNlQnVm
ZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3Vy
Y2VCdWZmZXIsIHNpemU6IDR9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGlu
ZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2Ny
aXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmlu
ZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmlu
ZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0
KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0
OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJl
U3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUg
PSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJl
VmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNv
bW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAg
Y29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0
YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0
OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJl
ZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0
IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0
dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIu
YmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5j
b2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIu
c2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVy
dGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMF0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29k
ZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Cisg
ICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRl
dmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgaWYgKHdpbmRv
dy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KK2lmICh3
aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRv
dy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtd2hpbGUtbG9vcC1icmVhay1l
eHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC13aGls
ZS1sb29wLWJyZWFrLWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXdoaWxlLWxvb3AtYnJlYWstZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAi
PjwvY2FudmFzPgorPHNjcmlwdD4KK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0
IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBj
b250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CisgICAgY29udGV4dC5maWxsU3R5bGUg
PSAiYmx1ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCA0MDAsIDQwMCk7CisgICAgY29u
dGV4dC5maWxsU3R5bGUgPSAiYmxhY2siOworICAgIGNvbnRleHQuZmlsbFJlY3QoMTAwLCAxMDAs
IDIwMCwgMjAwKTsKK30KK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtd2hpbGUtbG9vcC1icmVhay5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdw
dS93aGxzbC13aGlsZS1sb29wLWJyZWFrLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLXdoaWxlLWxvb3AtYnJlYWsuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEzNiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgor
PGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2Nh
bnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgVmVydGV4T3V0
IHsKKyAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKKyAgICBmbG9hdCBzaGFkZSA6
IGF0dHJpYnV0ZSgwKTsKK30KKwordmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0
IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgewor
ICAgIFZlcnRleE91dCByZXN1bHQ7CisKKyAgICBib29sIGIgPSB0cnVlOworICAgIHVpbnQgaSA9
IDA7CisgICAgd2hpbGUgKGkgPCAxMCkgeworICAgICAgICBpZiAoYikgeworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2hhZGUgPSBzaGFkZSArIDEuMDsKKyAgICAgICAg
aSA9IGkgKyAxOworICAgIH0KKworICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBvc2l0aW9uOworICAg
IHJlc3VsdC5zaGFkZSA9IHNoYWRlOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZnJhZ21l
bnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6IFNW
X1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7
Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgYWRhcHRlciA9IGF3
YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBjb25zdCBkZXZpY2UgPSBh
d2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9
IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDog
dHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBl
bnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHtt
b2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAg
Y29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJh
c3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9Owor
ICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307Cisg
ICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5k
LCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAor
ICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKworICAgIGNvbnN0IGF0dHJpYnV0
ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCIsIG9mZnNldDogMH07Cisg
ICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQi
LCBvZmZzZXQ6IDE2fTsKKyAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJp
YnV0ZTFdOworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0
dHJpYnV0ZXN9OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRl
eElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBiaW5kR3JvdXBM
YXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcs
IHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0g
ZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsK
KyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czog
W2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNy
ZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25z
dCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2Us
IHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0
aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVs
aW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5k
ZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4
QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5U
ICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5N
QVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVy
KHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlC
dWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIw
QXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41Owor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsz
XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMC4wOworCisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7CisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDAuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTBdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzE0XSA9IDAuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMThdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMC4wOwor
ICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVz
Y3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBH
UFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBj
b25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJE
ZXNjcmlwdG9yKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQg
cmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVy
RmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVy
KTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAgcmVzb3VyY2VC
dWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNv
dXJjZUJ1ZmZlciwgc2l6ZTogNH07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5k
aW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmluZEdyb3VwRGVz
Y3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBC
aW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChi
aW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRl
eHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3Jt
YXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1
cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVy
ZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1
cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3Qg
Y29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAg
ICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JB
dHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJn
ZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjog
cmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29u
c3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2ls
QXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rl
ci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NF
bmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rl
ci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRW
ZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5j
b2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsK
KyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAg
ZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisKKyAgICBpZiAod2lu
ZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQoraWYg
KHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOword2lu
ZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC13aGlsZS1sb29wLWNvbnRp
bnVlLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LXdoaWxlLWxvb3AtY29udGludWUtZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtd2hpbGUtbG9vcC1jb250aW51ZS1leHBlY3RlZC5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBo
ZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7
CisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwor
ICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjb250ZXh0
LmZpbGxTdHlsZSA9ICJibHVlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQwMCwgNDAw
KTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CisgICAgY29udGV4dC5maWxsUmVj
dCgxMDAsIDEwMCwgMjAwLCAyMDApOworfQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQi
LCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC13aGlsZS1sb29wLWNvbnRpbnVlLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXdoaWxlLWxvb3AtY29udGludWUuaHRtbAkobm9uZXhpc3Rl
bnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtd2hpbGUtbG9vcC1jb250aW51ZS5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQw
MCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9
IGAKK3N0cnVjdCBWZXJ0ZXhPdXQgeworICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9u
OworICAgIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApOworfQorCit2ZXJ0ZXggVmVydGV4T3V0
IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRl
IDogYXR0cmlidXRlKDEpKSB7CisgICAgVmVydGV4T3V0IHJlc3VsdDsKKworICAgIGJvb2wgYiA9
IHRydWU7CisgICAgdWludCBpID0gMDsKKyAgICB3aGlsZSAoKHNoYWRlID0gc2hhZGUgKyAwLjEs
IGkgPCAxMCkpIHsKKyAgICAgICAgaWYgKGIpIHsKKyAgICAgICAgICAgIGkgPSBpICsgMTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHNoYWRlID0gMC4wOworICAg
IH0KKworICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBvc2l0aW9uOworICAgIHJlc3VsdC5zaGFkZSA9
IHNoYWRlOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdt
ZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6IFNWX1RhcmdldCAwIHsKKyAg
ICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7Cit9CitgOworYXN5bmMg
ZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgYWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5n
cHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBhZGFwdGVyLnJl
cXVlc3REZXZpY2UoKTsKKworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVT
aGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNv
bnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVy
dGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1v
ZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZl
VG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0
ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhh
QmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JT
dGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3
cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRo
U3RlbmNpbFN0YXRlID0gbnVsbDsKKworICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9j
YXRpb246IDAsIGZvcm1hdDogImZsb2F0NCIsIG9mZnNldDogMH07CisgICAgY29uc3QgYXR0cmli
dXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsK
KyAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJpYnV0ZTFdOworICAgIGNv
bnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9OworICAg
IGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRl
eEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9y
ID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3Jt
LWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJp
bmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBl
bGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91
dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5
b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGlu
ZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9s
b2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwg
dmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAg
ICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5k
ZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0
b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdl
OiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBE
ZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2
ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOwor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
Ml0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDEuMDsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMC4xOworCisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs1XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9
IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVs5XSA9IDAuMTsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzEzXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE0XSA9IDAuMTsK
KworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41OworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMTddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOwor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMC4xOworICAgIHZlcnRleEJ1ZmZl
cjAudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXpl
OiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5V
TklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCByZXNvdXJjZUJ1
ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKKyAg
ICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIu
bWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0g
bmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICByZXNvdXJj
ZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsK
KworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6
ZTogNH07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJj
ZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlv
dXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07CisgICAg
Y29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlw
dG9yKTsKKworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52
YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAg
IGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3Jt
In07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dh
cENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5n
ZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0
VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIg
PSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7
cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7
YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRP
cDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29u
c3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rl
c2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07Cisg
ICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBh
c3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVs
aW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAo
MCwgYmluZEdyb3VwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAs
IFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEs
IDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21t
YW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVl
KCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIp
CisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQoraWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOword2luZG93LmFkZEV2ZW50TGlz
dGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="386993"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>371417</attachid>
            <date>2019-06-05 10:12:15 -0700</date>
            <delta_ts>2019-06-05 11:36:35 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>80777</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NjExMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOCBAQAorMjAxOS0wNi0wNSAgU2FhbSBC
YXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBbV0hMU0xdIEltcGxlbWVudCBs
b29wIGV4cHJlc3Npb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTU4MDgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUwNzQ2MzA5PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE15bGVzIE1heGZpZWxkLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFr
ZXMgY29udGludWUvYnJlYWsgYnJlYWsgZm9yICJkby93aGlsZS9mb3IiIGxvb3BzCisgICAgICAg
IGluIFdITFNMLiBCZWNhdXNlIG9mIHRoZSB3YXkgd2UgZW1pdCBjb2RlIHdoZXJlIGV2ZXJ5IGV4
cHJlc3Npb24KKyAgICAgICAgdHVybnMgaW50byBhIE1ldGFsIHN0YXRlbWVudCwgaXQncyBub3Qg
Y29udmVuaWVudCB0byBlbWl0IG5hdGl2ZQorICAgICAgICBNZXRhbCBsb29wIGNvbnN0cnVjdHMu
IEluc3RlYWQsIHdlIG1vZGVsIGJyZWFrL2NvbnRpbnVlIGFzIGlmCisgICAgICAgIHdlIGhhZCBn
b3RvLgorICAgICAgICAKKyAgICAgICAgRm9yIGV4YW1wbGUsIHRoaXMgV0hMU0wgcHJvZ3JhbToK
KyAgICAgICAgYGBgCisgICAgICAgIGZvciAoSU5JVDsgQ09ORDsgSU5DKSB7CisgICAgICAgICAg
ICBpZiAoYikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChiMikK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBgYGAKKyAgICAgICAg
d291bGQgYmVjb21lIHNvbWV0aGluZyBsaWtlOgorICAgICAgICBgYGAKKyAgICAgICAgSU5JVDsK
KyAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgIGlmICghQ09ORCkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChiKQorICAgICAgICAgICAgICAgIGdvdG8gaW5j
cmVtZW50OworICAgICAgICAgICAgaWYgKGIyKQorICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsK
KyAgICAgICAgaW5jcmVtZW50OgorICAgICAgICAgICAgSU5DOworICAgICAgICB9CisgICAgICAg
IGV4aXQ6CisgICAgICAgIGBgYAorICAgICAgICAKKyAgICAgICAgSG93ZXZlciwgTWV0YWwgZG9l
c24ndCBoYXZlIGdvdG8sIHNvIHdlIG1vZGVsIGdvdG8gdXNpbmcgYSBydW4tb25jZQorICAgICAg
ICBsb29wIGFuZCBhIHZhcmlhYmxlIGluZGljYXRpbmcgaWYgd2Ugc2hvdWxkIGJyZWFrIG91dCBl
YXJseS4gVGhpcworICAgICAgICAiYnJlYWsgb3V0IGVhcmx5IiB2YXJpYWJsZSBpcyBpbml0aWFs
bHkgc2V0IHRvIGZhbHNlLiBXZSAic2hvdWxkCisgICAgICAgIGJyZWFrIG91dCBlYXJseSIgd2hl
biBleGVjdXRpbmcgYSBXSExTTCAiYnJlYWsiIHN0YXRlbWVudC4gImNvbnRpbnVlIgorICAgICAg
ICBpcyBtb2RlbGVkIGFzIGJyZWFraW5nIG91dCBvZiB0aGUgcnVuLW9uY2UgbG9vcCwgYnV0IG5v
dCB0b3VjaGluZyB0aGUKKyAgICAgICAgImJyZWFrIG91dCBlYXJseSIgdmFyaWFibGUuICJicmVh
ayIgaXMgbW9kZWxlZCBhcyBzZXR0aW5nIHRoZSAiYnJlYWsKKyAgICAgICAgb3V0IGVhcmx5IiB2
YXJpYWJsZSB0byB0cnVlLCBmb2xsb3dlZCBieSBicmVha2luZyBvdXQgb2YgdGhlIHJ1bi1vbmNl
IGxvb3AuCisgICAgICAgIFRoZSBhYm92ZSBXSExTTCB3aWxsIHR1cm4gaW50byB0aGlzIE1ldGFs
OgorICAgICAgICBgYGAKKyAgICAgICAgYm9vbCBicmVha091dE9mQ3VycmVudExvb3AgPSBmYWxz
ZTsKKyAgICAgICAgSU5JVDsKKyAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgIGlmICgh
Q09ORCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYikgeworICAgICAgICAgICAgICAgICAgICAvLyBXSExTTCAnY29udGludWUn
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBpZiAoYjIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV0hMU0wgJ2JyZWFrJwor
ICAgICAgICAgICAgICAgICAgICBicmVha091dE9mQ3VycmVudExvb3AgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IHdo
aWxlICgwKTsKKyAgICAgICAgICAgIGlmIChicmVha091dE9mQ3VycmVudExvb3ApCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBJTkM7CisgICAgICAgIH0KKyAgICAgICAgYGBg
CisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGFsc28gZm91bmQgYSBidWcgd2l0aCBGb3JM
b29wIHdoZXJlIGl0IGhlbGQgYSBWYXJpYW50PFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50
LCBFeHByZXNzaW9uPi4KKyAgICAgICAgVGhpcyBpcyBpbnZhbGlkIHRvIGRvIHNpbmNlIHdlIG11
dGF0ZSB0aGUgQVNUIGluIHBsYWNlLiBUaGlzIG1lYW5zIHNvbWUgcGhhc2UKKyAgICAgICAgY291
bGQgcmVwbGFjZSBWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCB3aXRoIHNvbWUgb3RoZXIg
U3RhdGVtZW50LCBhbmQKKyAgICAgICAgd2UnZCBiZSBicmVha2luZyB0aGUgQysrIHR5cGUgc3lz
dGVtLiBTbyB0aGlzIHBhdGNoIG1pZ3JhdGVzIEZvckxvb3AgdG8gaG9sZAorICAgICAgICBhIHN0
YXRlbWVudCBpbnN0ZWFkLiBJbiBnZW5lcmFsLCBBU1Qgbm9kZXMgdGhhdCBwb2ludCB0byBvdGhl
ciBBU1Qgbm9kZXMKKyAgICAgICAgc2hvdWxkIHVzZSBicm9hZCB0eXBlcyB1bmxlc3Mgd2Uga25v
dyBhcHJpb3JpIHRoYXQgYSBjZXJ0YWluIHR5cGUgd2lsbAorICAgICAgICBuZXZlciBiZSByZXBs
YWNlZC4KKworICAgICAgICBUZXN0czogd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AtYnJlYWsu
aHRtbAorICAgICAgICAgICAgICAgd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AtY29udGludWUu
aHRtbAorICAgICAgICAgICAgICAgd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AuaHRtbAorICAg
ICAgICAgICAgICAgd2ViZ3B1L3dobHNsLWxvb3BzLWJyZWFrLmh0bWwKKyAgICAgICAgICAgICAg
IHdlYmdwdS93aGxzbC1sb29wcy1jb250aW51ZS5odG1sCisgICAgICAgICAgICAgICB3ZWJncHUv
d2hsc2wtbG9vcHMuaHRtbAorICAgICAgICAgICAgICAgd2ViZ3B1L3dobHNsLW5lc3RlZC1sb29w
Lmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93aGxzbC13aGlsZS1sb29wLWJyZWFrLmh0bWwK
KyAgICAgICAgICAgICAgIHdlYmdwdS93aGxzbC13aGlsZS1sb29wLWNvbnRpbnVlLmh0bWwKKwor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZvckxvb3AuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkZvckxvb3A6OkZvckxvb3ApOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkFTVDo6Rm9yTG9vcDo6aW5pdGlhbGl6YXRpb24pOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjplbWl0TG9vcCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBU1RE
dW1wZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVER1bXBlcjo6dmlzaXQpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6dmlzaXQpOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJz
ZXI6OnBhcnNlRm9yTG9vcCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
cmVwYXJlLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJk
TGlicmFyeS50eHQ6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpWaXNpdG9yOjp2aXNpdCk6CisKIDIwMTkt
MDYtMDUgIFRydWl0dCBTYXZlbGwgIDx0c2F2ZWxsQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByMjQ2MDUyLgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xBU1REdW1wZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQVNURHVtcGVyLmNwcAkocmV2aXNpb24g
MjQ2MTEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBU1RE
dW1wZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTMsOCArNDEzLDggQEAgdm9pZCBBU1REdW1w
ZXI6OnZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmIAogdm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6
Rm9yTG9vcCYgZm9yTG9vcCkKIHsKICAgICBtX291dC5wcmludCgiZm9yICgiKTsKLSAgICBXVEY6
OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0
ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KSB7Ci0gICAgICAgIHZpc2l0KHZh
cmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KTsKKyAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZp
c2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlN0YXRlbWVudD4mIHN0YXRlbWVudCkgeworICAgICAg
ICB2aXNpdChzdGF0ZW1lbnQpOwogICAgIH0sIFsmXShVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9u
PiYgZXhwcmVzc2lvbikgewogICAgICAgICB2aXNpdChleHByZXNzaW9uKTsKICAgICB9KSwgZm9y
TG9vcC5pbml0aWFsaXphdGlvbigpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAkocmV2aXNpb24gMjQ2MTEyKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE4OSw4ICsxMTg5LDggQEAgdm9pZCBDaGVja2VyOjp2aXNpdChB
U1Q6OkRvV2hpbGVMb29wJiBkbwogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6Rm9yTG9vcCYg
Zm9yTG9vcCkKIHsKLSAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50
KSB7Ci0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRl
bWVudCk7CisgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNU
OjpTdGF0ZW1lbnQ+JiBzdGF0ZW1lbnQpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0
YXRlbWVudCk7CiAgICAgfSwgWyZdKFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNz
aW9uKSB7CiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uKTsKICAgICB9KSwg
Zm9yTG9vcC5pbml0aWFsaXphdGlvbigpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAJKHJldmlzaW9uIDI0NjExMikK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQxNCw3ICsxNDE0LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlRm9y
TG9vcCgpIC0+IEV4cGVjdGVkPAogICAgIGlmICghb3JpZ2luKQogICAgICAgICByZXR1cm4gVW5l
eHBlY3RlZDxFcnJvcj4ob3JpZ2luLmVycm9yKCkpOwogCi0gICAgYXV0byBwYXJzZVJlbWFpbmRl
ciA9IFsmXShWYXJpYW50PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQsIFVuaXF1
ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiYmIGluaXRpYWxpemF0aW9uKSAtPiBFeHBlY3RlZDxBU1Q6
OkZvckxvb3AsIEVycm9yPiB7CisgICAgYXV0byBwYXJzZVJlbWFpbmRlciA9IFsmXShWYXJpYW50
PFVuaXF1ZVJlZjxBU1Q6OlN0YXRlbWVudD4sIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiYm
IGluaXRpYWxpemF0aW9uKSAtPiBFeHBlY3RlZDxBU1Q6OkZvckxvb3AsIEVycm9yPiB7CiAgICAg
ICAgIGF1dG8gc2VtaWNvbG9uID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpTZW1p
Y29sb24pOwogICAgICAgICBpZiAoIXNlbWljb2xvbikKICAgICAgICAgICAgIHJldHVybiBVbmV4
cGVjdGVkPEVycm9yPihzZW1pY29sb24uZXJyb3IoKSk7CkBAIC0xNDUzLDggKzE0NTMsMTAgQEAg
YXV0byBQYXJzZXI6OnBhcnNlRm9yTG9vcCgpIC0+IEV4cGVjdGVkPAogICAgIGF1dG8gdmFyaWFi
bGVEZWNsYXJhdGlvbnMgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb25zU3RhdGVtZW50LCBFcnJvcj4+KFsmXSgpIHsKICAgICAgICAgcmV0dXJuIHBh
cnNlVmFyaWFibGVEZWNsYXJhdGlvbnMoKTsKICAgICB9KTsKLSAgICBpZiAodmFyaWFibGVEZWNs
YXJhdGlvbnMpCi0gICAgICAgIHJldHVybiBwYXJzZVJlbWFpbmRlcihXVEZNb3ZlKCp2YXJpYWJs
ZURlY2xhcmF0aW9ucykpOworICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9ucykgeworICAgICAg
ICBVbmlxdWVSZWY8QVNUOjpTdGF0ZW1lbnQ+IGRlY2xhcmF0aW9uU3RhdGVtZW50ID0gbWFrZVVu
aXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50PihXVEZNb3ZlKCp2YXJp
YWJsZURlY2xhcmF0aW9ucykpOworICAgICAgICByZXR1cm4gcGFyc2VSZW1haW5kZXIoV1RGTW92
ZShkZWNsYXJhdGlvblN0YXRlbWVudCkpOworICAgIH0KIAogICAgIGF1dG8gZWZmZWN0ZnVsRXhw
cmVzc2lvbiA9IHBhcnNlRWZmZWN0ZnVsRXhwcmVzc2lvbigpOwogICAgIGlmICghZWZmZWN0ZnVs
RXhwcmVzc2lvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUHJlcGFyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAkocmV2aXNpb24gMjQ2MTEyKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTcsNyArNTcsNyBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBzdGF0aWMgY29uc3RleHBy
IGJvb2wgZHVtcEFTVEJlZm9yZUVhY2hQYXNzID0gZmFsc2U7CiBzdGF0aWMgY29uc3RleHByIGJv
b2wgZHVtcEFTVEFmdGVyUGFyc2luZyA9IGZhbHNlOwotc3RhdGljIGNvbnN0ZXhwciBib29sIGR1
bXBBU1RBdEVuZCA9IHRydWU7CitzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcEFTVEF0RW5kID0g
ZmFsc2U7CiBzdGF0aWMgY29uc3RleHByIGJvb2wgYWx3YXlzRHVtcFBhc3NGYWlsdXJlcyA9IGZh
bHNlOwogc3RhdGljIGNvbnN0ZXhwciBib29sIGR1bXBQYXNzRmFpbHVyZSA9IGR1bXBBU1RCZWZv
cmVFYWNoUGFzcyB8fCBkdW1wQVNUQWZ0ZXJQYXJzaW5nIHx8IGR1bXBBU1RBdEVuZCB8fCBhbHdh
eXNEdW1wUGFzc0ZhaWx1cmVzOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeS50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0CShyZXZp
c2lvbiAyNDYxMTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFN0YW5kYXJkTGlicmFyeS50eHQJKHdvcmtpbmcgY29weSkKQEAgLTM4NCw2ICszODQsMTQgQEAg
bmF0aXZlIGZsb2F0NCBvcGVyYXRvci55PShmbG9hdDQsIGZsb2F0KQogbmF0aXZlIGZsb2F0NCBv
cGVyYXRvci56PShmbG9hdDQsIGZsb2F0KTsKIG5hdGl2ZSBmbG9hdDQgb3BlcmF0b3Iudz0oZmxv
YXQ0LCBmbG9hdCk7CiAKK25hdGl2ZSBmbG9hdCBvcGVyYXRvcisoZmxvYXQsIGZsb2F0KTsKK25h
dGl2ZSBmbG9hdCBvcGVyYXRvci0oZmxvYXQsIGZsb2F0KTsKK25hdGl2ZSBpbnQgb3BlcmF0b3Ir
KGludCwgaW50KTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yKyh1aW50LCB1aW50KTsKK25hdGl2ZSBi
b29sIG9wZXJhdG9yPChpbnQsIGludCk7CituYXRpdmUgYm9vbCBvcGVyYXRvcjwodWludCwgdWlu
dCk7CituYXRpdmUgYm9vbCBvcGVyYXRvcjwoZmxvYXQsIGZsb2F0KTsKKwogbmF0aXZlIGZsb2F0
IGRkeChmbG9hdCk7CiBuYXRpdmUgZmxvYXQgZGR5KGZsb2F0KTsKIG5hdGl2ZSB2b2lkIEFsbE1l
bW9yeUJhcnJpZXJXaXRoR3JvdXBTeW5jKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAJKHJldmlzaW9uIDI0NjEx
MikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNCw4ICs0MzQsOCBAQCB2b2lkIFZpc2l0b3I6OnZpc2l0
KEFTVDo6RmFsbHRocm91Z2gmKQogCiB2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6Rm9yTG9vcCYg
Zm9yTG9vcCkKIHsKLSAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50
KSB7Ci0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRl
bWVudCk7CisgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNU
OjpTdGF0ZW1lbnQ+JiBzdGF0ZW1lbnQpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0
YXRlbWVudCk7CiAgICAgfSwgWyZdKFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNz
aW9uKSB7CiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uKTsKICAgICB9KSwg
Zm9yTG9vcC5pbml0aWFsaXphdGlvbigpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEZvckxvb3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGb3JMb29wLmgJKHJldmlzaW9uIDI0
NjExMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZv
ckxvb3AuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgQVNUIHsK
IAogY2xhc3MgRm9yTG9vcCA6IHB1YmxpYyBTdGF0ZW1lbnQgewogcHVibGljOgotICAgIEZvckxv
b3AoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBWYXJpYW50PFZhcmlhYmxlRGVjbGFyYXRpb25zU3Rh
dGVtZW50LCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4+JiYgaW5pdGlhbGl6YXRpb24sIE9wdGlvbmFs
PFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4mJiBjb25kaXRpb24sIE9wdGlvbmFsPFVuaXF1ZVJlZjxF
eHByZXNzaW9uPj4mJiBpbmNyZW1lbnQsIFVuaXF1ZVJlZjxTdGF0ZW1lbnQ+JiYgYm9keSkKKyAg
ICBGb3JMb29wKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVmFyaWFudDxVbmlxdWVSZWY8U3RhdGVt
ZW50PiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+PiYmIGluaXRpYWxpemF0aW9uLCBPcHRpb25hbDxV
bmlxdWVSZWY8RXhwcmVzc2lvbj4+JiYgY29uZGl0aW9uLCBPcHRpb25hbDxVbmlxdWVSZWY8RXhw
cmVzc2lvbj4+JiYgaW5jcmVtZW50LCBVbmlxdWVSZWY8U3RhdGVtZW50PiYmIGJvZHkpCiAgICAg
ICAgIDogU3RhdGVtZW50KFdURk1vdmUob3JpZ2luKSkKICAgICAgICAgLCBtX2luaXRpYWxpemF0
aW9uKFdURk1vdmUoaW5pdGlhbGl6YXRpb24pKQogICAgICAgICAsIG1fY29uZGl0aW9uKFdURk1v
dmUoY29uZGl0aW9uKSkKQEAgLTYyLDEzICs2MiwxMyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlz
Rm9yTG9vcCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIFZhcmlhbnQ8
VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQsIFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4mIGlu
aXRpYWxpemF0aW9uKCkgeyByZXR1cm4gbV9pbml0aWFsaXphdGlvbjsgfQorICAgIFZhcmlhbnQ8
VW5pcXVlUmVmPFN0YXRlbWVudD4sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4mIGluaXRpYWxpemF0
aW9uKCkgeyByZXR1cm4gbV9pbml0aWFsaXphdGlvbjsgfQogICAgIEV4cHJlc3Npb24qIGNvbmRp
dGlvbigpIHsgcmV0dXJuIG1fY29uZGl0aW9uID8gJiptX2NvbmRpdGlvbiA6IG51bGxwdHI7IH0K
ICAgICBFeHByZXNzaW9uKiBpbmNyZW1lbnQoKSB7IHJldHVybiBtX2luY3JlbWVudCA/ICYqbV9p
bmNyZW1lbnQgOiBudWxscHRyOyB9CiAgICAgU3RhdGVtZW50JiBib2R5KCkgeyByZXR1cm4gbV9i
b2R5OyB9CiAKIHByaXZhdGU6Ci0gICAgVmFyaWFudDxWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRl
bWVudCwgVW5pcXVlUmVmPEV4cHJlc3Npb24+PiBtX2luaXRpYWxpemF0aW9uOworICAgIFZhcmlh
bnQ8VW5pcXVlUmVmPFN0YXRlbWVudD4sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4gbV9pbml0aWFs
aXphdGlvbjsKICAgICBPcHRpb25hbDxVbmlxdWVSZWY8RXhwcmVzc2lvbj4+IG1fY29uZGl0aW9u
OwogICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4gbV9pbmNyZW1lbnQ7CiAgICAg
VW5pcXVlUmVmPFN0YXRlbWVudD4gbV9ib2R5OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlv
bldyaXRlci5jcHAJKHJldmlzaW9uIDI0NjExMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiV0hMU0xUeXBlTmFtZXIuaCIKICNpbmNsdWRl
ICJXSExTTFZpc2l0b3IuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9TZXRGb3JTY29wZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTM5LDYgKzE0MCwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAg
dm9pZCB2aXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB2
aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJikgb3ZlcnJpZGU7CiAKKyAgICBlbnVtIGNsYXNz
IExvb3BDb25kaXRpb25Mb2NhdGlvbiB7CisgICAgICAgIEJlZm9yZUJvZHksCisgICAgICAgIEFm
dGVyQm9keQorICAgIH07CisgICAgdm9pZCBlbWl0TG9vcChMb29wQ29uZGl0aW9uTG9jYXRpb24s
IEFTVDo6RXhwcmVzc2lvbiogY29uZGl0aW9uRXhwcmVzc2lvbiwgQVNUOjpFeHByZXNzaW9uKiBp
bmNyZW1lbnQsIEFTVDo6U3RhdGVtZW50JiBib2R5KTsKKwogICAgIFN0cmluZyBjb25zdGFudEV4
cHJlc3Npb25TdHJpbmcoQVNUOjpDb25zdGFudEV4cHJlc3Npb24mKTsKIAogICAgIFN0cmluZyBn
ZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKQpAQCAtMTU1LDYgKzE2Miw3IEBAIHByb3RlY3RlZDoK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8RW50cnlQb2ludFNjYWZmb2xkaW5nPiBtX2VudHJ5UG9pbnRT
Y2FmZm9sZGluZzsKICAgICBMYXlvdXQmIG1fbGF5b3V0OwogICAgIHVuc2lnbmVkIG1fdmFyaWFi
bGVDb3VudCB7IDAgfTsKKyAgICBTdHJpbmcgbV9icmVha091dE9mQ3VycmVudExvb3BFYXJseVZh
cmlhYmxlOwogfTsKIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKQEAg
LTIyNCwyMiArMjMyLDE1IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChB
U1QKIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6QnJlYWsmKQog
eworICAgIEFTU0VSVChtX2JyZWFrT3V0T2ZDdXJyZW50TG9vcEVhcmx5VmFyaWFibGUubGVuZ3Ro
KCkpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX2JyZWFrT3V0T2ZD
dXJyZW50TG9vcEVhcmx5VmFyaWFibGUsICIgPSB0cnVlO1xuIikpOwogICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQoImJyZWFrO1xuIik7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjp2aXNpdChBU1Q6OkNvbnRpbnVlJikKIHsKLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTgwOCBGaWd1cmUgb3V0IHdoaWNoIGxvb3Ag
d2UncmUgaW4sIGFuZCBydW4gdGhlIGluY3JlbWVudCBjb2RlCi0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RG9XaGls
ZUxvb3AmIGRvV2hpbGVMb29wKQotewotICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoImRvIHtc
biIpOwotICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb1doaWxlTG9vcC5ib2R5KCkpOwotICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChkb1doaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKLSAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICghIiwgbV9zdGFjay50YWtlTGFzdCgpLCAi
KSBicmVhaztcbiIpKTsKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIn0g
d2hpbGUodHJ1ZSk7XG4iKSk7CisgICAgQVNTRVJUKG1fYnJlYWtPdXRPZkN1cnJlbnRMb29wRWFy
bHlWYXJpYWJsZS5sZW5ndGgoKSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiYnJlYWs7
XG4iKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RWZm
ZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCYgZWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCkK
QEAgLTI1MywyNSArMjU0LDYxIEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNp
dChBU1QKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJbW2NsYW5nOjpmYWxsdGhyb3VnaF1d
O1xuIik7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk1ODA4IE1ha2Ugc3VyZSB0aGlzIGlzIG9rYXkuIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGRv
IG5vdGhpbmcgYW5kIGp1c3QgcmV0dXJuIGhlcmUgaW5zdGVhZC4KIH0KIAordm9pZCBGdW5jdGlv
bkRlZmluaXRpb25Xcml0ZXI6OmVtaXRMb29wKExvb3BDb25kaXRpb25Mb2NhdGlvbiBsb29wQ29u
ZGl0aW9uTG9jYXRpb24sIEFTVDo6RXhwcmVzc2lvbiogY29uZGl0aW9uRXhwcmVzc2lvbiwgQVNU
OjpFeHByZXNzaW9uKiBpbmNyZW1lbnQsIEFTVDo6U3RhdGVtZW50JiBib2R5KQoreworICAgIFNl
dEZvclNjb3BlPFN0cmluZz4gbG9vcFZhcmlhYmxlU2NvcGUobV9icmVha091dE9mQ3VycmVudExv
b3BFYXJseVZhcmlhYmxlLCBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKSk7CisKKyAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImJvb2wgIiwgbV9icmVha091dE9mQ3VycmVu
dExvb3BFYXJseVZhcmlhYmxlLCAiID0gZmFsc2U7XG4iKSk7CisKKyAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKCJ3aGlsZSAodHJ1ZSkge1xuIik7CisKKyAgICBpZiAobG9vcENvbmRpdGlvbkxv
Y2F0aW9uID09IExvb3BDb25kaXRpb25Mb2NhdGlvbjo6QmVmb3JlQm9keSAmJiBjb25kaXRpb25F
eHByZXNzaW9uKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqY29uZGl0aW9uRXhwcmVz
c2lvbik7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCEi
LCBtX3N0YWNrLnRha2VMYXN0KCksICIpIGJyZWFrO1xuIikpOworICAgIH0KKworICAgIG1fc3Ry
aW5nQnVpbGRlci5hcHBlbmQoImRvIHtcbiIpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChib2R5
KTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9IHdoaWxlKGZhbHNlKTsgXG4iKTsKKyAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICgiLCBtX2JyZWFrT3V0T2ZD
dXJyZW50TG9vcEVhcmx5VmFyaWFibGUsICIpIGJyZWFrO1xuIikpOworCisgICAgaWYgKGluY3Jl
bWVudCkgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmluY3JlbWVudCk7CisgICAgICAg
IC8vIEV4cHJlc3Npb24gcmVzdWx0cyBnZXQgcHVzaGVkIHRvIG1fc3RhY2suIFdlIGRvbid0IHVz
ZSB0aGUgcmVzdWx0CisgICAgICAgIC8vIG9mIGluY3JlbWVudCwgc28gd2UgZGlzcGVuc2Ugb2Yg
dGhhdCBub3cuCisgICAgICAgIG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICB9CisKKyAgICBpZiAo
bG9vcENvbmRpdGlvbkxvY2F0aW9uID09IExvb3BDb25kaXRpb25Mb2NhdGlvbjo6QWZ0ZXJCb2R5
ICYmIGNvbmRpdGlvbkV4cHJlc3Npb24pIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpj
b25kaXRpb25FeHByZXNzaW9uKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKCJpZiAoISIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIikgYnJlYWs7XG4iKSk7CisgICAg
fQorCisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifSBcbiIpOworfQorCit2b2lkIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpEb1doaWxlTG9vcCYgZG9XaGlsZUxvb3Ap
Cit7CisgICAgZW1pdExvb3AoTG9vcENvbmRpdGlvbkxvY2F0aW9uOjpBZnRlckJvZHksICZkb1do
aWxlTG9vcC5jb25kaXRpb25hbCgpLCBudWxscHRyLCBkb1doaWxlTG9vcC5ib2R5KCkpOworfQor
Cit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdo
aWxlTG9vcCkKK3sKKyAgICBlbWl0TG9vcChMb29wQ29uZGl0aW9uTG9jYXRpb246OkJlZm9yZUJv
ZHksICZ3aGlsZUxvb3AuY29uZGl0aW9uYWwoKSwgbnVsbHB0ciwgd2hpbGVMb29wLmJvZHkoKSk7
Cit9CisKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkZvckxvb3Am
IGZvckxvb3ApCiB7Ci0gICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVu
dCkgewotICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0
ZW1lbnQpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIntcbiIpOworCisgICAgV1RGOjp2
aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OlN0YXRlbWVudCYgc3RhdGVtZW50KSB7Cisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdGF0ZW1lbnQpOwogICAgIH0sIFsmXShVbmlxdWVS
ZWY8QVNUOjpFeHByZXNzaW9uPiYgZXhwcmVzc2lvbikgewogICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZXhwcmVzc2lvbik7CiAgICAgICAgIG1fc3RhY2sudGFrZUxhc3QoKTsgLy8gV2UgZG9u
J3QgbmVlZCB0byBkbyBhbnl0aGluZyB3aXRoIHRoZSByZXN1bHQuCiAgICAgfSksIGZvckxvb3Au
aW5pdGlhbGl6YXRpb24oKSk7CiAKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJmb3IgKCA7
IDsgKSB7XG4iKTsKLSAgICBpZiAoZm9yTG9vcC5jb25kaXRpb24oKSkgewotICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoKmZvckxvb3AuY29uZGl0aW9uKCkpOwotICAgICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICghIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiKSBi
cmVhaztcbiIpKTsKLSAgICB9Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0KGZvckxvb3AuYm9keSgp
KTsKLSAgICBpZiAoZm9yTG9vcC5pbmNyZW1lbnQoKSkgewotICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoKmZvckxvb3AuaW5jcmVtZW50KCkpOwotICAgICAgICBtX3N0YWNrLnRha2VMYXN0KCk7
Ci0gICAgfQorICAgIGVtaXRMb29wKExvb3BDb25kaXRpb25Mb2NhdGlvbjo6QmVmb3JlQm9keSwg
Zm9yTG9vcC5jb25kaXRpb24oKSwgZm9yTG9vcC5pbmNyZW1lbnQoKSwgZm9yTG9vcC5ib2R5KCkp
OwogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwogfQogCkBAIC0zMzMsMTUgKzM3
MCw2IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICBWaXNp
dG9yOjp2aXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCk7CiB9CiAKLXZvaWQgRnVu
Y3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OldoaWxlTG9vcCYgd2hpbGVMb29wKQot
ewotICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygid2hpbGUgKHRydWUpIHtc
biIpKTsKLSAgICBjaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOwot
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCEiLCBtX3N0YWNrLnRh
a2VMYXN0KCksICIpIGJyZWFrO1xuIikpOwotICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxv
b3AuYm9keSgpKTsKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKLX0KLQogdm9p
ZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWwmIGlu
dGVnZXJMaXRlcmFsKQogewogICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFy
aWFibGVOYW1lKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDYxMTIpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMCBAQAorMjAxOS0wNi0wNSAgU2Fh
bSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBbV0hMU0xdIEltcGxlbWVu
dCBsb29wIGV4cHJlc3Npb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTU4MDgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUwNzQ2MzA5PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE15bGVzIE1heGZpZWxkLgorCisgICAgICAgICogd2ViZ3B1L3do
bHNsLWRvLXdoaWxlLWxvb3AtYnJlYWstZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICog
d2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AtYnJlYWsuaHRtbDogQWRkZWQuCisgICAgICAgICog
d2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AtY29udGludWUtZXhwZWN0ZWQuaHRtbDogQWRkZWQu
CisgICAgICAgICogd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AtY29udGludWUuaHRtbDogQWRk
ZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AtZXhwZWN0ZWQuaHRtbDog
QWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AuaHRtbDogQWRkZWQu
CisgICAgICAgICogd2ViZ3B1L3dobHNsLWxvb3BzLWJyZWFrLWV4cGVjdGVkLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHdlYmdwdS93aGxzbC1sb29wcy1icmVhay5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWJncHUvd2hsc2wtbG9vcHMtY29udGludWUtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisg
ICAgICAgICogd2ViZ3B1L3dobHNsLWxvb3BzLWNvbnRpbnVlLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIHdlYmdwdS93aGxzbC1sb29wcy1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3
ZWJncHUvd2hsc2wtbG9vcHMuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsLW5l
c3RlZC1sb29wLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC1u
ZXN0ZWQtbG9vcC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wtd2hpbGUtbG9v
cC1icmVhay1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wtd2hp
bGUtbG9vcC1icmVhay5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wtd2hpbGUt
bG9vcC1jb250aW51ZS1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hs
c2wtd2hpbGUtbG9vcC1jb250aW51ZS5odG1sOiBBZGRlZC4KKwogMjAxOS0wNi0wNSAgU2hhd24g
Um9iZXJ0cyAgPHNyb2JlcnRzQGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwL3Rlc3RzL3dlYnNv
Y2tldC90ZXN0cy9oeWJpL2hhbmRzaGFrZS1vay13aXRoLWxlZ2FjeS13ZWJzb2NrZXQtcmVzcG9u
c2UtaGVhZGVycy5odG1sIGlzIGEgZmxha3kgZmFpbHVyZSBvbiBNb2phdmUKSW5kZXg6IExheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLWJyZWFrLWV4cGVjdGVkLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AtYnJlYWst
ZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
ZG8td2hpbGUtbG9vcC1icmVhay1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5
PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+
Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgY2FudmFzID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBj
YW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJibHVlIjsK
KyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQwMCwgNDAwKTsKKyAgICBjb250ZXh0LmZpbGxT
dHlsZSA9ICJibGFjayI7CisgICAgY29udGV4dC5maWxsUmVjdCgxMDAsIDEwMCwgMjAwLCAyMDAp
OworfQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kby13aGls
ZS1sb29wLWJyZWFrLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LWRvLXdoaWxlLWxvb3AtYnJlYWsuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtZG8td2hpbGUtbG9vcC1icmVhay5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTMzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2Fu
dmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBWZXJ0ZXhPdXQg
eworICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICAgIGZsb2F0IHNoYWRlIDog
YXR0cmlidXRlKDApOworfQorCit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9hdDQg
cG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7Cisg
ICAgVmVydGV4T3V0IHJlc3VsdDsKKworICAgIGJvb2wgYiA9IHRydWU7CisgICAgZG8geworICAg
ICAgICBpZiAoYikgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IHdoaWxl
ICgoc2hhZGUgPSAxLjAsIGZhbHNlKSk7CisKKyAgICByZXN1bHQucG9zaXRpb24gPSBwb3NpdGlv
bjsKKyAgICByZXN1bHQuc2hhZGUgPSBzaGFkZTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgw
KSkgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRl
LCAxLjApOworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0
ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7CisgICAgY29uc3QgZGV2
aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBjb25zdCBzaGFkZXJN
b2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlz
V0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1v
ZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3Rh
Z2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9
OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBj
b25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5v
bmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9
IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxw
aGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0
cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisKKyAgICBjb25zdCBh
dHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQiLCBvZmZzZXQ6
IDB9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEsIGZvcm1hdDog
ImZsb2F0Iiwgb2Zmc2V0OiAxNn07CisgICAgY29uc3QgYXR0cmlidXRlcyA9IFthdHRyaWJ1dGUw
LCBhdHRyaWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmlidXRl
U2V0OiBhdHRyaWJ1dGVzfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKKyAgICBjb25z
dCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgYmlu
ZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmls
aXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRHcm91cExh
eW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3Jp
cHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExh
eW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRl
dmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisg
ICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVu
dFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRl
cywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0
OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3Jl
YXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0
IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJf
RUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVy
VXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0
ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVy
MEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7CisgICAg
Y29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4
QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0g
LTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9IDAuMDsK
KworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41OworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVs3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAwLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEx
XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAxLjA7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxNF0gPSAwLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1
XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9
IDAuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7CisKKyAgICBjb25zdCByZXNvdXJjZUJ1
ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1
c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07
CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNl
QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9
IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCByZXNvdXJj
ZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJh
eUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOworICAgIHJl
c291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZl
cjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcg
PSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRH
cm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmlu
ZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5k
R3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5n
ZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2Rldmlj
ZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQu
Y29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1
dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRw
dXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAg
IGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8v
IHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0
IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNv
bHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFy
Q29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOwor
ICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRo
U3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFu
ZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5k
ZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFz
c0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgcmVuZGVyUGFzc0VuY29k
ZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMF0sIFswXSk7CisgICAgcmVuZGVy
UGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQ
YXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgp
OworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsK
K30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUo
KTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG8td2hpbGUt
bG9vcC1jb250aW51ZS1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1kby13aGlsZS1sb29wLWNvbnRpbnVlLWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0
ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRvLXdoaWxlLWxvb3AtY29udGludWUt
ZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZh
cyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2FzeW5jIGZ1
bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoIjJk
Iik7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7CisgICAgY29udGV4dC5maWxsUmVj
dCgwLCAwLCA0MDAsIDQwMCk7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAid2hpdGUiOworICAg
IGNvbnRleHQuZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsKK30KK3dpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG8td2hpbGUtbG9vcC1jb250aW51ZS5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kby13aGlsZS1sb29wLWNv
bnRpbnVlLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWRv
LXdoaWxlLWxvb3AtY29udGludWUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNSBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2Fu
dmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3Jp
cHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgVmVydGV4T3V0IHsKKyAgICBmbG9h
dDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKKyAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgw
KTsKK30KKwordmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDog
YXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgeworICAgIFZlcnRleE91
dCByZXN1bHQ7CisKKyAgICBib29sIGIgPSB0cnVlOworICAgIHVpbnQgaSA9IDA7CisgICAgZG8g
eworICAgICAgICBpZiAoYikgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAg
ICAgICAgc2hhZGUgPSAwLjA7CisgICAgfSB3aGlsZSAoKGkgPSBpICsgMSwgc2hhZGUgPSBzaGFk
ZSArIDAuMSwgaSA8IDEwKSk7CisKKyAgICByZXN1bHQucG9zaXRpb24gPSBwb3NpdGlvbjsKKyAg
ICByZXN1bHQuc2hhZGUgPSBzaGFkZTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ZyYWdt
ZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKSkgOiBT
Vl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NChzaGFkZSwgc2hhZGUsIHNoYWRlLCAxLjAp
OworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBh
d2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0g
YXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUg
PSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6
IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwg
ZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7
bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAg
IGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCBy
YXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsK
KyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9Owor
ICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVu
ZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwK
KyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisKKyAgICBjb25zdCBhdHRyaWJ1
dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQiLCBvZmZzZXQ6IDB9Owor
ICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRpb246IDEsIGZvcm1hdDogImZsb2F0
Iiwgb2Zmc2V0OiAxNn07CisgICAgY29uc3QgYXR0cmlidXRlcyA9IFthdHRyaWJ1dGUwLCBhdHRy
aWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAyMCwgYXR0cmlidXRlU2V0OiBh
dHRyaWJ1dGVzfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0
ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgYmluZEdyb3Vw
TGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3
LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9
IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7
CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6
IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5j
cmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29u
c3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdl
LCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVw
dGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBl
bGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVu
ZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRl
eEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVO
VCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2Uu
TUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwID0gZGV2aWNlLmNyZWF0ZUJ1ZmZl
cih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEFycmF5
QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3Qg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVy
MEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzBdID0gLTAuNTsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
M10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9IDAuMDsKKworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs3XSA9
IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzhdID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAwLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzEwXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzExXSA9IC0w
LjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMl0gPSAxLjA7CisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxNF0gPSAwLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE1XSA9IDAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE5XSA9IDAuMDsK
KyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7CisKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRl
c2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTog
R1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAg
Y29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc291cmNlQnVmZmVy
RGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0
IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZl
ckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3VyY2VCdWZmZXJBcnJheUJ1ZmZl
cik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOworICAgIHJlc291cmNl
QnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVz
b3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7Ymlu
ZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERl
c2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3Vw
QmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAo
YmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250
ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9y
bWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmln
dXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1
cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0
dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0
IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9Cisg
ICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9y
QXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFy
Z2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6
IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNv
bnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNp
bEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29k
ZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNz
RW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29k
ZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0
VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMF0sIFswXSk7CisgICAgcmVuZGVyUGFzc0Vu
Y29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7
CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAg
IGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KK2lm
ICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK3dp
bmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG8td2hpbGUtbG9vcC1l
eHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kby13
aGlsZS1sb29wLWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWRvLXdoaWxlLWxvb3AtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2Fu
dmFzPgorPHNjcmlwdD4KK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGNhbnZh
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0
ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmx1
ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCA0MDAsIDQwMCk7CisgICAgY29udGV4dC5m
aWxsU3R5bGUgPSAid2hpdGUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwg
MjAwKTsKK30KK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG8t
d2hpbGUtbG9vcC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1k
by13aGlsZS1sb29wLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLWRvLXdoaWxlLWxvb3AuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMCBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFz
IGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+
Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgVmVydGV4T3V0IHsKKyAgICBmbG9hdDQg
cG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKKyAgICBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgwKTsK
K30KKwordmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0
cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgeworICAgIFZlcnRleE91dCBy
ZXN1bHQ7CisKKyAgICBkbyB7CisgICAgICAgIHNoYWRlID0gMS4wOworICAgIH0gd2hpbGUoZmFs
c2UpOworCisgICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247CisgICAgcmVzdWx0LnNoYWRl
ID0gc2hhZGU7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmcmFnbWVudCBmbG9hdDQgZnJh
Z21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgewor
ICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKK30KK2A7Cithc3lu
YyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9y
LmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIu
cmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0
ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAg
Y29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2
ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVy
TW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRp
dmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0
YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxw
aGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xv
clN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQs
IHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVw
dGhTdGVuY2lsU3RhdGUgPSBudWxsOworCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJM
b2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0Iiwgb2Zmc2V0OiAwfTsKKyAgICBjb25zdCBhdHRy
aWJ1dGUxID0ge3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9
OworICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07CisgICAg
Y29uc3QgaW5wdXQwID0ge3N0cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307Cisg
ICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVy
dGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0
b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZv
cm0tYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRl
QmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBp
cGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5
b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVM
YXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9w
b2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRl
LCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9Owor
ICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJl
bmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3Jp
cHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNh
Z2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Cisg
ICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVy
MERlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0
IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAwLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzVdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZd
ID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzldID0gMC4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAw
LjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMC4w
OworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxNl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAwLjA7CisgICAgdmVydGV4QnVm
ZmVyMC51bm1hcCgpOworCisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3Np
emU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdl
LlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNl
QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOwor
ICAgIGNvbnN0IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZl
ci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkg
PSBuZXcgRmxvYXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291
cmNlQnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgp
OworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBz
aXplOiA0fTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291
cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xh
eW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAg
ICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2Ny
aXB0b3IpOworCisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNh
bnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Cisg
ICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5v
cm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihz
d2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWlu
LmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRw
dXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2Rl
ciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9
IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0g
W3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9h
ZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBj
b25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNz
RGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsK
KyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVy
UGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlw
ZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91
cCgwLCBiaW5kR3JvdXApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMo
MCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwg
MSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNv
bW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVl
dWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CitpZiAod2luZG93LnRlc3RS
dW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cuYWRkRXZlbnRM
aXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLWJyZWFrLWV4cGVjdGVkLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLWJyZWFrLWV4cGVjdGVk
Lmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLWJy
ZWFrLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOSBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJj
YW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Cithc3lu
YyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0
KCIyZCIpOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gImJsdWUiOworICAgIGNvbnRleHQuZmls
bFJlY3QoMCwgMCwgNDAwLCA0MDApOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gImJsYWNrIjsK
KyAgICBjb250ZXh0LmZpbGxSZWN0KDEwMCwgMTAwLCAyMDAsIDIwMCk7Cit9Cit3aW5kb3cuYWRk
RXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLWJyZWFrLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLWJyZWFrLmh0bWwJKG5vbmV4
aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLWJyZWFrLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBo
ZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAor
c3RydWN0IFZlcnRleE91dCB7CisgICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247Cisg
ICAgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Cit9CisKK3ZlcnRleCBWZXJ0ZXhPdXQgdmVy
dGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBh
dHRyaWJ1dGUoMSkpIHsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0OworCisgICAgYm9vbCBiID0gdHJ1
ZTsKKyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCAxMDsgKGkgPSBpICsgMSwgc2hhZGUgPSBzaGFk
ZSArIDEuMCkpIHsKKyAgICAgICAgaWYgKGIpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIHNoYWRlID0gc2hhZGUgKyAxLjA7CisgICAgfQorCisgICAgcmVzdWx0LnBv
c2l0aW9uID0gcG9zaXRpb247CisgICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hh
ZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoc2hh
ZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsKK30KK2A7Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsK
KyAgICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigp
OworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOworCisg
ICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTog
c2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7
bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBj
b25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAi
ZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmds
ZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3
IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNv
bnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAi
cmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8g
R1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxs
OworCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAi
ZmxvYXQ0Iiwgb2Zmc2V0OiAwfTsKKyAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxvY2F0
aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OworICAgIGNvbnN0IGF0dHJpYnV0
ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmlidXRlMV07CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlk
ZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0cmlidXRlc307CisgICAgY29uc3QgaW5wdXRzID0gW2lu
cHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsK
KworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7Ymlu
ZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKKyAgICBj
b25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRH
cm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRv
ciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlw
ZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXRE
ZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0
ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25T
dGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxl
Q291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVs
aW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRv
cik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMy
QXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZF
UlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVy
MCA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOworICAgIGNv
bnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3Jp
dGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxv
YXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9
IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0
ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbNF0gPSAwLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0gLTAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41OworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVs4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMC4wOworCisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMC4wOworCisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsx
Nl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVsxOV0gPSAwLjA7CisgICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOworCisgICAg
Y29uc3QgcmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRF
U19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJV
c2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNyZWF0
ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHJlc291cmNlQnVm
ZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Cisg
ICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJl
c291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5
WzBdID0gMTsKKyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgYnVmZmVy
QmluZGluZyA9IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKKyAgICBjb25zdCBi
aW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsK
KyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0
LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBk
ZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3Qg
Y2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNv
bnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVz
Y3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2Fw
Q2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsK
KyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7
CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1
bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21t
YW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBh
OiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRU
ZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9w
OiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRh
Y2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0
dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNz
RW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3Jp
cHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUp
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAg
IHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBb
MF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVy
UGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5k
RW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRC
dWZmZXJdKTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5l
ci5ub3RpZnlEb25lKCk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5l
ci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0
KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWxvb3BzLWNvbnRpbnVlLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLWNvbnRpbnVlLWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0
ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLWNvbnRpbnVlLWV4cGVjdGVk
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRo
PSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Cithc3luYyBmdW5jdGlvbiBz
dGFydCgpIHsKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2Fu
dmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAg
IGNvbnRleHQuZmlsbFN0eWxlID0gImJsdWUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwg
NDAwLCA0MDApOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gImJsYWNrIjsKKyAgICBjb250ZXh0
LmZpbGxSZWN0KDEwMCwgMTAwLCAyMDAsIDIwMCk7Cit9Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5l
cigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLWNvbnRpbnVlLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLWNvbnRpbnVlLmh0bWwJKG5vbmV4aXN0ZW50
KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWxvb3BzLWNvbnRpbnVlLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMzQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWln
aHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorc3Ry
dWN0IFZlcnRleE91dCB7CisgICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247CisgICAg
ZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Cit9CisKK3ZlcnRleCBWZXJ0ZXhPdXQgdmVydGV4
U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQgc2hhZGUgOiBhdHRy
aWJ1dGUoMSkpIHsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0OworCisgICAgYm9vbCBiID0gdHJ1ZTsK
KyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCAxMDsgaSA9IGkgKyAxKSB7CisgICAgICAgIGlmIChi
KSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBzaGFkZSA9IHNo
YWRlICsgMS4wOworICAgIH0KKworICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBvc2l0aW9uOworICAg
IHJlc3VsdC5zaGFkZSA9IHNoYWRlOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZnJhZ21l
bnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApKSA6IFNW
X1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwgc2hhZGUsIDEuMCk7
Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgYWRhcHRlciA9IGF3
YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBjb25zdCBkZXZpY2UgPSBh
d2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9
IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDog
dHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBl
bnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHtt
b2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAg
Y29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJh
c3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9Owor
ICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307Cisg
ICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5k
LCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAor
ICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKworICAgIGNvbnN0IGF0dHJpYnV0
ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCIsIG9mZnNldDogMH07Cisg
ICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQi
LCBvZmZzZXQ6IDE2fTsKKyAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJpYnV0ZTAsIGF0dHJp
YnV0ZTFdOworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRyaWJ1dGVTZXQ6IGF0
dHJpYnV0ZXN9OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRl
eElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBiaW5kR3JvdXBM
YXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcs
IHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0g
ZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsK
KyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czog
W2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNy
ZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25z
dCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2Us
IHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0
aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVs
aW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5k
ZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4
QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5U
ICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5N
QVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVy
KHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlC
dWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIw
QXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41Owor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsz
XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0gMC4wOworCisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzddID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7CisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDAuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMy
QXJyYXlbMTBdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTFdID0gLTAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFy
cmF5WzE0XSA9IDAuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMC41
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41OworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMThdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTldID0gMC4wOwor
ICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVz
Y3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBH
UFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBj
b25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzb3VyY2VCdWZmZXJE
ZXNjcmlwdG9yKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQg
cmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVy
RmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZlckFycmF5QnVmZmVy
KTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAgcmVzb3VyY2VC
dWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNv
dXJjZUJ1ZmZlciwgc2l6ZTogNH07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5k
aW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmluZEdyb3VwRGVz
Y3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBC
aW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChi
aW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRl
eHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3Jt
YXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1
cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVy
ZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1
cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3Qg
Y29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAg
ICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JB
dHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJn
ZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjog
cmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29u
c3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2ls
QXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rl
ci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NF
bmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rl
ci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRW
ZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5j
b2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsK
KyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAg
ZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisKKyAgICBpZiAod2lu
ZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQoraWYg
KHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOword2lu
ZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy1leHBlY3RlZC5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy1leHBlY3Rl
ZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy1l
eHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFz
IiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVu
Y3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQi
KTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJibHVlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0
KDAsIDAsIDQwMCwgNDAwKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CisgICAg
Y29udGV4dC5maWxsUmVjdCgxMDAsIDEwMCwgMjAwLCAyMDApOworfQord2luZG93LmFkZEV2ZW50
TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy5odG1sCShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1sb29wcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTMwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgor
PHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBWZXJ0ZXhPdXQgeworICAg
IGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICAgIGZsb2F0IHNoYWRlIDogYXR0cmli
dXRlKDApOworfQorCit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRp
b24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDEpKSB7CisgICAgVmVy
dGV4T3V0IHJlc3VsdDsKKworICAgIGZvciAodWludCBpID0gMDsgaSA8IDEwOyBpID0gaSArIDEp
IHsKKyAgICAgICAgc2hhZGUgPSBzaGFkZSArIDAuMTsKKyAgICB9CisKKyAgICByZXN1bHQucG9z
aXRpb24gPSBwb3NpdGlvbjsKKyAgICByZXN1bHQuc2hhZGUgPSBzaGFkZTsKKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdCBzaGFk
ZSA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NChzaGFk
ZSwgc2hhZGUsIHNoYWRlLCAxLjApOworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgewor
ICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7
CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAg
ICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBz
aGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHtt
b2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNv
bnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJm
cmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xl
LXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ci
LCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29u
c3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJy
Z2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBH
UFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7
CisKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJm
bG9hdDQiLCBvZmZzZXQ6IDB9OworICAgIGNvbnN0IGF0dHJpYnV0ZTEgPSB7c2hhZGVyTG9jYXRp
b246IDEsIGZvcm1hdDogImZsb2F0Iiwgb2Zmc2V0OiAxNn07CisgICAgY29uc3QgYXR0cmlidXRl
cyA9IFthdHRyaWJ1dGUwLCBhdHRyaWJ1dGUxXTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRl
OiAyMCwgYXR0cmlidXRlU2V0OiBhdHRyaWJ1dGVzfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5w
dXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9Owor
CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5k
aW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAidW5pZm9ybS1idWZmZXIifV19OworICAgIGNv
bnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdy
b3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9y
ID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBl
bGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERl
c2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRl
eFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0
YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVD
b3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxp
bmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
KTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJB
cnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDUgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVS
VEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIw
ID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvcik7CisgICAgY29u
c3QgdmVydGV4QnVmZmVyMEFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMC5tYXBXcml0
ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheSA9IG5ldyBGbG9h
dDMyQXJyYXkodmVydGV4QnVmZmVyMEFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzFdID0g
LTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlcjBGbG9hdDMyQXJyYXlbM10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVs0XSA9IDAuMTsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNV0gPSAtMC41
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNl0gPSAwLjU7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVs3XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5
WzhdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOV0gPSAwLjE7CisKKyAg
ICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEwXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzExXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsx
Ml0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxM10gPSAxLjA7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNF0gPSAwLjE7CisKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzE1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE2
XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE3XSA9IDEuMDsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzE4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzE5XSA9IDAuMTsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFwKCk7CisKKyAgICBj
b25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVT
X1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVz
YWdlLk1BUF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRl
QnVmZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVzb3VyY2VCdWZm
ZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAg
ICBjb25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVz
b3VyY2VCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlb
MF0gPSAxOworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBidWZmZXJC
aW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAgIGNvbnN0IGJp
bmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9Owor
ICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQs
IGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRl
dmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBj
YW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29u
dGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNj
cmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBD
aGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOwor
ICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsK
KyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVs
dFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1h
bmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6
IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRl
eHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6
ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFj
aG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0
YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NF
bmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlw
dG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAg
cmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyMF0sIFsw
XSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQ
YXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRF
bmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1
ZmZlcl0pOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVy
Lm5vdGlmeURvbmUoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVy
LndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQp
OworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtbmVzdGVkLWxvb3AtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtbmVzdGVkLWxvb3AtZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisr
KyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbmVzdGVkLWxvb3AtZXhwZWN0ZWQuaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVp
Z2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgewor
ICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAg
ICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CisgICAgY29udGV4dC5m
aWxsU3R5bGUgPSAiYmx1ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCA0MDAsIDQwMCk7
CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmxhY2siOworICAgIGNvbnRleHQuZmlsbFJlY3Qo
MTAwLCAxMDAsIDIwMCwgMjAwKTsKK30KK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwg
c3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtbmVzdGVkLWxvb3AuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtbmVzdGVkLWxvb3AuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtbmVzdGVkLWxvb3AuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE2NiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+
Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4K
KzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgVmVydGV4T3V0IHsKKyAg
ICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKKyAgICBmbG9hdCBzaGFkZSA6IGF0dHJp
YnV0ZSgwKTsKK30KKwordmVydGV4IFZlcnRleE91dCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0
aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBzaGFkZSA6IGF0dHJpYnV0ZSgxKSkgeworICAgIFZl
cnRleE91dCByZXN1bHQ7CisKKyAgICBib29sIGIgPSB0cnVlOworICAgIGZvciAodWludCBpID0g
MDsgaSA8IDEwOyBpID0gaSArIDEpIHsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAg
ICAgIGlmIChiKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBzaGFkZSA9IDEuMDsKKyAgICAgICAgfQorCisgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgIGlmIChiKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gd2hpbGUgKChzaGFkZSA9IDEuMCwgZmFsc2UpKTsKKworICAgICAgICBkbyB7CisgICAg
ICAgICAgICBpZiAoYikgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICB9IHdoaWxlICgoc2hhZGUgPSBzaGFkZSArIDEuMCwgZmFsc2UpKTsKKworICAg
ICAgICBkbyB7CisgICAgICAgICAgICBpZiAoYikgeworICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlICgoc2hhZGUgPSBzaGFkZSAtIDEuMCwg
ZmFsc2UpKTsKKworICAgICAgICB3aGlsZSAoKHNoYWRlID0gc2hhZGUgKyAxLjAsIHRydWUpKSB7
CisgICAgICAgICAgICBpZiAoYikgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKChzaGFkZSA9IHNoYWRlIC0gMS4wLCB0
cnVlKSkgeworICAgICAgICAgICAgaWYgKGIpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJlc3VsdC5wb3NpdGlvbiA9IHBv
c2l0aW9uOworICAgIHJlc3VsdC5zaGFkZSA9IHNoYWRlOworCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0IHNoYWRlIDogYXR0cmli
dXRlKDApKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KHNoYWRlLCBzaGFkZSwg
c2hhZGUsIDEuMCk7Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3Qg
YWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBjb25z
dCBkZXZpY2UgPSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKworICAgIGNvbnN0IHNo
YWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJj
ZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hh
ZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21l
bnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hh
ZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwor
ICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2Rl
OiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJs
ZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0i
LCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3Jp
dGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKworICAgIGNv
bnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCIsIG9m
ZnNldDogMH07CisgICAgY29uc3QgYXR0cmlidXRlMSA9IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9y
bWF0OiAiZmxvYXQiLCBvZmZzZXQ6IDE2fTsKKyAgICBjb25zdCBhdHRyaWJ1dGVzID0gW2F0dHJp
YnV0ZTAsIGF0dHJpYnV0ZTFdOworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDIwLCBhdHRy
aWJ1dGVTZXQ6IGF0dHJpYnV0ZXN9OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAg
IGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25z
dCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZp
c2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdy
b3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXRE
ZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdy
b3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0
ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7
CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZy
YWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9y
U3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBs
YXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmlj
ZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAg
Y29uc3QgdmVydGV4QnVmZmVyMERlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVT
X1BFUl9FTEVNRU5UICogNSAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVC
dWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2Uu
Y3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjBEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhC
dWZmZXIwQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsK
KyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2
ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAg
IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVszXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzRdID0g
MC4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs1XSA9IC0wLjU7CisgICAgdmVy
dGV4QnVmZmVyMEZsb2F0MzJBcnJheVs2XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQz
MkFycmF5WzddID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs5XSA9IDAuMDsKKworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMTBdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMTFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEyXSA9IDEuMDsK
KyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzEzXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXIwRmxvYXQzMkFycmF5WzE0XSA9IDAuMDsKKworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMTVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTZdID0gMC41Owor
ICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTddID0gMS4wOworICAgIHZlcnRleEJ1ZmZl
cjBGbG9hdDMyQXJyYXlbMThdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlb
MTldID0gMC4wOworICAgIHZlcnRleEJ1ZmZlcjAudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc291
cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1F
TlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dS
SVRFfTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVz
b3VyY2VCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckFycmF5QnVm
ZmVyID0gYXdhaXQgcmVzb3VyY2VCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHJl
c291cmNlQnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXNvdXJjZUJ1ZmZl
ckFycmF5QnVmZmVyKTsKKyAgICByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7Cisg
ICAgcmVzb3VyY2VCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7
YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZTogNH07CisgICAgY29uc3QgYmluZEdyb3VwQmlu
ZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3Qg
YmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6
IFtiaW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0
ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNhbnZhcyA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2Fu
dmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7
ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29u
dGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qg
b3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0
IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOwor
CisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIo
KTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAg
Y29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcs
IHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwg
Y2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51
bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywg
ZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBj
b21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAg
IHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5k
ZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKKyAgICByZW5kZXJQYXNz
RW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwXSwgWzBdKTsKKyAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVy
LmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmlu
aXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisK
KyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGls
RG9uZSgpOword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC13aGls
ZS1sb29wLWJyZWFrLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLXdoaWxlLWxvb3AtYnJlYWstZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisr
KyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtd2hpbGUtbG9vcC1icmVhay1leHBlY3RlZC5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAw
IiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gc3RhcnQo
KSB7CisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIp
OworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjb250
ZXh0LmZpbGxTdHlsZSA9ICJibHVlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQwMCwg
NDAwKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJibGFjayI7CisgICAgY29udGV4dC5maWxs
UmVjdCgxMDAsIDEwMCwgMjAwLCAyMDApOworfQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxv
YWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL3dlYmdwdS93aGxzbC13aGlsZS1sb29wLWJyZWFrLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXdoaWxlLWxvb3AtYnJlYWsuaHRtbAkobm9uZXhpc3RlbnQp
CisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtd2hpbGUtbG9vcC1icmVhay5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVp
Z2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3N0
cnVjdCBWZXJ0ZXhPdXQgeworICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICAg
IGZsb2F0IHNoYWRlIDogYXR0cmlidXRlKDApOworfQorCit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRl
eFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IHNoYWRlIDogYXR0
cmlidXRlKDEpKSB7CisgICAgVmVydGV4T3V0IHJlc3VsdDsKKworICAgIGJvb2wgYiA9IHRydWU7
CisgICAgdWludCBpID0gMDsKKyAgICB3aGlsZSAoaSA8IDEwKSB7CisgICAgICAgIGlmIChiKSB7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzaGFkZSA9IHNoYWRlICsg
MS4wOworICAgICAgICBpID0gaSArIDE7CisgICAgfQorCisgICAgcmVzdWx0LnBvc2l0aW9uID0g
cG9zaXRpb247CisgICAgcmVzdWx0LnNoYWRlID0gc2hhZGU7CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRy
aWJ1dGUoMCkpIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRl
LCBzaGFkZSwgMS4wKTsKK30KK2A7Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25z
dCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNv
bnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qg
c2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291
cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBz
aGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFn
bWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRT
aGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7
CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1v
ZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9y
QmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9y
bSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JX
cml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworCisgICAg
Y29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0Iiwg
b2Zmc2V0OiAwfTsKKyAgICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxvY2F0aW9uOiAxLCBm
b3JtYXQ6ICJmbG9hdCIsIG9mZnNldDogMTZ9OworICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbYXR0
cmlidXRlMCwgYXR0cmlidXRlMV07CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMjAsIGF0
dHJpYnV0ZVNldDogYXR0cmlidXRlc307CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07Cisg
ICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNv
bnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwg
dmlzaWJpbGl0eTogNywgdHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5k
R3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91
dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5k
R3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlv
dXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9y
KTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwg
ZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29s
b3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEs
IGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2
aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllU
RVNfUEVSX0VMRU1FTlQgKiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQ
VUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmlj
ZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRl
eEJ1ZmZlcjBBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygp
OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5
KHZlcnRleEJ1ZmZlcjBBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5WzNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0g
PSAwLjA7CisKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0gLTAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9h
dDMyQXJyYXlbN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzldID0gMC4wOworCisgICAgdmVydGV4
QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMC4wOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNl0gPSAwLjU7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxOV0gPSAwLjA7CisgICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOworCisgICAgY29uc3QgcmVz
b3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxF
TUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBf
V1JJVEV9OworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihy
ZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyQXJyYXlC
dWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3Qg
cmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc291cmNlQnVm
ZmVyQXJyYXlCdWZmZXIpOworICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsK
KyAgICByZXNvdXJjZUJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9
IHtidWZmZXI6IHJlc291cmNlQnVmZmVyLCBzaXplOiA0fTsKKyAgICBjb25zdCBiaW5kR3JvdXBC
aW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25z
dCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5n
czogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3Jl
YXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY2FudmFzID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBj
YW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9
IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBj
b250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25z
dCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29u
c3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7
CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rl
cigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAg
ICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmll
dywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUi
LCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0g
bnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRz
LCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9
IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJl
bmRlclBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIHJlbmRlclBh
c3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOworICAg
IHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29k
ZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5m
aW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsK
KworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50
aWxEb25lKCk7Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXdo
aWxlLWxvb3AtY29udGludWUtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtd2hpbGUtbG9vcC1jb250aW51ZS1leHBlY3RlZC5odG1sCShub25leGlz
dGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC13aGlsZS1sb29wLWNvbnRpbnVlLWV4
cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMi
IHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Cithc3luYyBmdW5j
dGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIp
OworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gImJsdWUiOworICAgIGNvbnRleHQuZmlsbFJlY3Qo
MCwgMCwgNDAwLCA0MDApOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gIndoaXRlIjsKKyAgICBj
b250ZXh0LmZpbGxSZWN0KDEwMCwgMTAwLCAyMDAsIDIwMCk7Cit9Cit3aW5kb3cuYWRkRXZlbnRM
aXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXdoaWxlLWxvb3AtY29udGludWUuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtd2hpbGUtbG9vcC1jb250aW51ZS5o
dG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC13aGlsZS1sb29w
LWNvbnRpbnVlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzYgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2Fu
dmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qg
c2hhZGVyU291cmNlID0gYAorc3RydWN0IFZlcnRleE91dCB7CisgICAgZmxvYXQ0IHBvc2l0aW9u
IDogU1ZfUG9zaXRpb247CisgICAgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCk7Cit9CisKK3Zl
cnRleCBWZXJ0ZXhPdXQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgw
KSwgZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMSkpIHsKKyAgICBWZXJ0ZXhPdXQgcmVzdWx0Owor
CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICB1aW50IGkgPSAwOworICAgIHdoaWxlICgoc2hhZGUg
PSBzaGFkZSArIDAuMSwgaSA8IDEwKSkgeworICAgICAgICBpZiAoYikgeworICAgICAgICAgICAg
aSA9IGkgKyAxOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgc2hh
ZGUgPSAwLjA7CisgICAgfQorCisgICAgcmVzdWx0LnBvc2l0aW9uID0gcG9zaXRpb247CisgICAg
cmVzdWx0LnNoYWRlID0gc2hhZGU7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmcmFnbWVu
dCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQgc2hhZGUgOiBhdHRyaWJ1dGUoMCkpIDogU1Zf
VGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoc2hhZGUsIHNoYWRlLCBzaGFkZSwgMS4wKTsK
K30KK2A7Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0gYXdh
aXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9IGF3
YWl0IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0g
ZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0
cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVu
dHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21v
ZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBj
b25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFz
dGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07Cisg
ICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAg
ICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQs
IGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisg
ICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworCisgICAgY29uc3QgYXR0cmlidXRl
MCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0Iiwgb2Zmc2V0OiAwfTsKKyAg
ICBjb25zdCBhdHRyaWJ1dGUxID0ge3NoYWRlckxvY2F0aW9uOiAxLCBmb3JtYXQ6ICJmbG9hdCIs
IG9mZnNldDogMTZ9OworICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbYXR0cmlidXRlMCwgYXR0cmli
dXRlMV07CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMjAsIGF0dHJpYnV0ZVNldDogYXR0
cmlidXRlc307CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4
SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IGJpbmRHcm91cExh
eW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywg
dHlwZTogInVuaWZvcm0tYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBk
ZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwor
ICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBb
YmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3Jl
YXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0
IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwg
cHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRo
U3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxp
bmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRl
clBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhC
dWZmZXIwRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQg
KiA1ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1B
UF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyMCA9IGRldmljZS5jcmVhdGVCdWZmZXIo
dmVydGV4QnVmZmVyMERlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjBBcnJheUJ1
ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjAubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjBB
cnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVswXSA9IC0wLjU7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVy
MEZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzNd
ID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbNF0gPSAwLjE7CisKKyAgICB2
ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzVdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxv
YXQzMkFycmF5WzZdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAx
LjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs4XSA9IDEuMDsKKyAgICB2ZXJ0ZXhC
dWZmZXIwRmxvYXQzMkFycmF5WzldID0gMC4xOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJB
cnJheVsxMF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAtMC41
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTJdID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMTNdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMTRdID0gMC4xOworCisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNV0gPSAwLjU7
CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxNl0gPSAwLjU7CisgICAgdmVydGV4QnVm
ZmVyMEZsb2F0MzJBcnJheVsxN10gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVsxOF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxOV0gPSAwLjE7Cisg
ICAgdmVydGV4QnVmZmVyMC51bm1hcCgpOworCisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJEZXNj
cmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgdXNhZ2U6IEdQ
VUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNv
bnN0IHJlc291cmNlQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRl
c2NyaXB0b3IpOworICAgIGNvbnN0IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBy
ZXNvdXJjZUJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJG
bG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIp
OworICAgIHJlc291cmNlQnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICByZXNvdXJjZUJ1
ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc291
cmNlQnVmZmVyLCBzaXplOiA0fTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRp
bmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNj
cmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJp
bmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJp
bmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4
dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1h
dDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3Vy
ZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJl
ID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVy
ZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBj
b21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAg
IGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0
dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdl
dDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiBy
ZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25z
dCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxB
dHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVy
LmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0Vu
Y29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVy
LnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZl
cnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcjBdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNv
ZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOwor
ICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBk
ZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CitpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit3aW5k
b3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>