<?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>195682</bug_id>
          
          <creation_ts>2019-03-13 10:14:33 -0700</creation_ts>
          <short_desc>[WHLSL] Add descriptive error messages</short_desc>
          <delta_ts>2019-07-25 16:24:57 -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>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>200049</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>graouts</cc>
    
    <cc>jonlee</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1516015</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-03-13 10:14:33 -0700</bug_when>
    <thetext>Migrate compiler passes from returning Optional&lt;&gt;s to returning Expected&lt;&gt;s.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1535867</commentid>
    <comment_count>1</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-05-13 16:31:34 -0700</bug_when>
    <thetext>*** Bug 195872 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1535890</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-05-13 17:08:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/50746322&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553419</commentid>
    <comment_count>3</comment_count>
      <attachid>374272</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-07-16 19:38:08 -0700</bug_when>
    <thetext>Created attachment 374272
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553420</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-07-16 19:40:15 -0700</bug_when>
    <thetext>Attachment 374272 did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1554857</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-22 14:23:53 -0700</bug_when>
    <thetext>Spoke with Myles, ima take this over.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1554988</commentid>
    <comment_count>6</comment_count>
      <attachid>374669</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-22 20:18:13 -0700</bug_when>
    <thetext>Created attachment 374669
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555116</commentid>
    <comment_count>7</comment_count>
      <attachid>374700</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-23 12:59:05 -0700</bug_when>
    <thetext>Created attachment 374700
WIP

almost done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555166</commentid>
    <comment_count>8</comment_count>
      <attachid>374714</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-23 15:26:26 -0700</bug_when>
    <thetext>Created attachment 374714
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555172</commentid>
    <comment_count>9</comment_count>
      <attachid>374717</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-23 15:29:01 -0700</bug_when>
    <thetext>Created attachment 374717
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555282</commentid>
    <comment_count>10</comment_count>
      <attachid>374717</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-07-23 19:07:01 -0700</bug_when>
    <thetext>Comment on attachment 374717
patch

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

&gt; Source/WebCore/ChangeLog:13
&gt; +        Passes that can fail no longer return a boolean. Instead, they return Expected&lt;void, Error&gt;.

Not Optional&lt;Error&gt;? Expected&lt;void&gt; seems weird

&gt; Source/WebCore/ChangeLog:15
&gt; +        requires an Error as an argument. So anywhere in Visitor that might fail is

👍</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555322</commentid>
    <comment_count>11</comment_count>
      <attachid>374717</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-23 23:15:50 -0700</bug_when>
    <thetext>Comment on attachment 374717
patch

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

&gt;&gt; Source/WebCore/ChangeLog:13
&gt;&gt; +        Passes that can fail no longer return a boolean. Instead, they return Expected&lt;void, Error&gt;.
&gt; 
&gt; Not Optional&lt;Error&gt;? Expected&lt;void&gt; seems weird

I think Expected is nicer for this. It documents the intent of the API in a clearer way than Optional. I used to think this was a bit weird too, but we use this in JSC for Wasm code and it has worked out nicely there too. That said, I’m not opposed to changing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555539</commentid>
    <comment_count>12</comment_count>
      <attachid>374717</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-24 15:40:53 -0700</bug_when>
    <thetext>Comment on attachment 374717
patch

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

&gt;&gt;&gt; Source/WebCore/ChangeLog:13
&gt;&gt;&gt; +        Passes that can fail no longer return a boolean. Instead, they return Expected&lt;void, Error&gt;.
&gt;&gt; 
&gt;&gt; Not Optional&lt;Error&gt;? Expected&lt;void&gt; seems weird
&gt; 
&gt; I think Expected is nicer for this. It documents the intent of the API in a clearer way than Optional. I used to think this was a bit weird too, but we use this in JSC for Wasm code and it has worked out nicely there too. That said, I’m not opposed to changing it.

One other small nit picky reason I prefer it this way: I like truthy to mean success, and falsey to mean failure. If we switched to Optional, truthy means failure, and falsey means success.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555599</commentid>
    <comment_count>13</comment_count>
      <attachid>374717</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-07-24 17:45:46 -0700</bug_when>
    <thetext>Comment on attachment 374717
patch

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

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLCheckDuplicateFunctions.cpp:130
&gt; +                            return makeUnexpected(Error(&quot;Cannot define custom array ander.&quot;));

Array reference ander*

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLCheckTextureReferences.cpp:90
&gt; +        setError(Error(&quot;Cannot have a pointer to a texture.&quot;, pointerType.codeLocation()));

texture or sampler

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLCheckTextureReferences.cpp:99
&gt; +        setError(Error(&quot;Cannot have an array reference to a texture.&quot;, arrayReferenceType.codeLocation()));

Ditto

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLCheckTextureReferences.cpp:108
&gt; +        setError(Error(&quot;Cannot have an array of textures.&quot;, arrayType.codeLocation()));

Ditto

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLCheckTextureReferences.cpp:121
&gt; +    return textureReferencesChecker.expectedError();

Truthy means no error, so can we call this &quot;success()&quot; or something?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:300
&gt;                      return false;

I think this function should preserve the error. We generate an error in PODChecker but disregard it here.

Also, is there another bug for finding all the Boolean functions and replacing those with returning Errors?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:593
&gt; +        setError(Error(&quot;Entrypoint cannot be an operator.&quot;, functionDefinition.codeLocation()));

&quot;Operator does not match expected signature&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555646</commentid>
    <comment_count>14</comment_count>
      <attachid>374717</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-07-24 19:31:46 -0700</bug_when>
    <thetext>Comment on attachment 374717
patch

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

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:810
&gt; +        setError(Error(&quot;Left hand side of assignment does not match the type of the right hand side.&quot;, readModifyWriteExpression.codeLocation()));

Assignment? Don&apos;t you mean read-modify-write?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:887
&gt; +        setError(Error(&quot;Cannot take the address of a value without a type.&quot;, makeArrayReferenceExpression.codeLocation()));

Cannot make an array reference from a value without a type

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:903
&gt; +            setError(Error(&quot;Cannot take the address of a non lvalue.&quot;, makeArrayReferenceExpression.codeLocation()));

Cannot make an array reference from a non-left-value

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:917
&gt; +        setError(Error(&quot;Cannot take the address of a non lvalue.&quot;, makeArrayReferenceExpression.codeLocation()));

Ditto

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:1102
&gt; +        setError(Error(&quot;Cannot return nothing from a non-void function.&quot;, returnStatement.codeLocation()));

I think this is backwards. It has to return void.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:1434
&gt; +        setError(Error(&quot;Cannot resolve function call to a concrete callee. Make sure you are using compatible types.&quot;, callExpression.codeLocation()));

I think this should be &quot;Could not find any functions with appropriate name&quot;

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:1440
&gt; +        setError(Error(&quot;Cannot resolve function call to a concrete callee. Make sure you are using compatible types.&quot;, callExpression.codeLocation()));

Can we add a FIXME and bug to add more detail here? It would be good to know why all the overrides were rejected.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPrepare.cpp:154
&gt; +Expected&lt;RenderPrepareResult, String&gt; prepare(String&amp; whlslSource, RenderPipelineDescriptor&amp; renderPipelineDescriptor)

I think the API should return an Error object, which can have some fields inside it. The code that actually outputs this stuff (into the inspector) might want to linkify stuff, etc, and serializing everything to a string loses that information.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:428
&gt;          auto callExpression = getterCall(propertyAccessExpression, relevantAnder, previousLeftValue, indexVariable ? &amp;*indexVariable : nullptr);

getterCall() doesn&apos;t actually appear to ever return nullopt :(

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:451
&gt;      auto modificationResult = modification(WTFMove(lastGetterCallExpression));

Similarly, modification() seems to only return nullopt if getterCall() returns nullopt, which seems to never happen.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:471
&gt;          }, indexVariable ? &amp;*indexVariable : nullptr);

setterCall() doesn&apos;t actually appear to ever return nullopt :(

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:498
&gt;          }, indexVariables[indexVariables.size() - 1] ? &amp;*(indexVariables[indexVariables.size() - 1]) : nullptr);

Ditto

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:665
&gt; +        setError(Error(&quot;Unexpected lhs value for read modify write expression.&quot;, readModifyWriteExpression.leftValue().codeLocation()));

Base of read modify write expression is a right-value

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLStatementBehaviorChecker.cpp:234
&gt; +                return makeUnexpected(Error(&quot;void functions must return nothing.&quot;));

Or not return?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLStatementBehaviorChecker.cpp:237
&gt; +                return makeUnexpected(Error(&quot;Non-void functions must return something.&quot;));

in all code paths</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555861</commentid>
    <comment_count>15</comment_count>
      <attachid>374717</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-25 11:39:04 -0700</bug_when>
    <thetext>Comment on attachment 374717
patch

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

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLCheckTextureReferences.cpp:121
&gt;&gt; +    return textureReferencesChecker.expectedError();
&gt; 
&gt; Truthy means no error, so can we call this &quot;success()&quot; or something?

What about just &quot;result()&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555866</commentid>
    <comment_count>16</comment_count>
      <attachid>374717</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-25 12:16:32 -0700</bug_when>
    <thetext>Comment on attachment 374717
patch

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

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:300
&gt;&gt;                      return false;
&gt; 
&gt; I think this function should preserve the error. We generate an error in PODChecker but disregard it here.
&gt; 
&gt; Also, is there another bug for finding all the Boolean functions and replacing those with returning Errors?

filed: https://bugs.webkit.org/show_bug.cgi?id=200132

It&apos;s a bit difficult here since the only caller of this is checker for property access instructions. We&apos;d need to find a nice way to thread the error message through, since it&apos;s not obvious which of the many errors we could see are relevant.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPrepare.cpp:154
&gt;&gt; +Expected&lt;RenderPrepareResult, String&gt; prepare(String&amp; whlslSource, RenderPipelineDescriptor&amp; renderPipelineDescriptor)
&gt; 
&gt; I think the API should return an Error object, which can have some fields inside it. The code that actually outputs this stuff (into the inspector) might want to linkify stuff, etc, and serializing everything to a string loses that information.

We can fix this in the future. Right now, we rely on a helper in the lexer to translate CodeLocation =&gt; line/column. As we need more information in the future, we can easily refactor this.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:428
&gt;&gt;          auto callExpression = getterCall(propertyAccessExpression, relevantAnder, previousLeftValue, indexVariable ? &amp;*indexVariable : nullptr);
&gt; 
&gt; getterCall() doesn&apos;t actually appear to ever return nullopt :(

will remove the Optional here and below.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555869</commentid>
    <comment_count>17</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-25 12:43:06 -0700</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/247834/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555955</commentid>
    <comment_count>18</comment_count>
      <attachid>374717</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-07-25 16:24:57 -0700</bug_when>
    <thetext>Comment on attachment 374717
patch

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

&gt;&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:300
&gt;&gt;&gt;                      return false;
&gt;&gt; 
&gt;&gt; I think this function should preserve the error. We generate an error in PODChecker but disregard it here.
&gt;&gt; 
&gt;&gt; Also, is there another bug for finding all the Boolean functions and replacing those with returning Errors?
&gt; 
&gt; filed: https://bugs.webkit.org/show_bug.cgi?id=200132
&gt; 
&gt; It&apos;s a bit difficult here since the only caller of this is checker for property access instructions. We&apos;d need to find a nice way to thread the error message through, since it&apos;s not obvious which of the many errors we could see are relevant.

The JS implementation concatenated all the constituent errors together to explain in lots of detail what was going wrong.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374272</attachid>
            <date>2019-07-16 19:38:08 -0700</date>
            <delta_ts>2019-07-22 20:18:13 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-195682-20190716193807.patch</filename>
            <type>text/plain</type>
            <size>16553</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ3NTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzZmN2UzNDNjYmEzN2Q2
NTQyMDEzOTRkNzRjODIzMGI4ZTliMTQ4My4uMWU0NWRiZGM3NDhjYjJlMjU2ZDI2ZmJiODc4MDg0
ZmRmZjc4YWE2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE5LTA3LTE2ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBB
ZGQgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTY4MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICog
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xFcnJvci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuaC4KKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpFcnJvcjo6RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkVycm9y
Ojp0b1N0cmluZyBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
YXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmludExpdGVyYWxUb0ludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6dWludExpdGVyYWxUb1VpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OmZsb2F0TGl0ZXJhbFRvRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OnJlY29nbml6ZVNpbXBsZVVuc2lnbmVkSW50ZWdlcik6CisgICAgICAgICogTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJz
ZXI6OkVycm9yOjpFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFy
c2VyOjpFcnJvcjo6ZHVtcCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpwcmVw
YXJlU2hhcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpwcmVwYXJlKToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuaDoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTktMDctMTYgIEp1c3RpbiBGYW4gIDxq
dXN0aW5fZmFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViR1BVXSBDb252ZXJ0IEdQVUNvbXB1
dGVQaXBlbGluZSBMT0cgc3RhdGVtZW50cyB0byBnZW5lcmF0ZSBHUFVFcnJvcnMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMRXJyb3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMRXJyb3IuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lMGE3YTE2ZDBmOWZkYmQ3MmY3ZjhmMDdhZjM3Nzc1ZTJkZDhhMzAyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xFcnJvci5oCkBA
IC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShX
RUJHUFUpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExT
TCB7CisKK3N0cnVjdCBFcnJvciB7CisgICAgRXJyb3IoU3RyaW5nJiYgbWVzc2FnZSwgdW5zaWdu
ZWQgY29kZUxvY2F0aW9uQmVnaW4sIHVuc2lnbmVkIGNvZGVMb2NhdGlvbkVuZCkKKyAgICAgICAg
OiBtZXNzYWdlKFdURk1vdmUobWVzc2FnZSkpCisgICAgICAgICwgY29kZUxvY2F0aW9uQmVnaW4o
Y29kZUxvY2F0aW9uQmVnaW4pCisgICAgICAgICwgY29kZUxvY2F0aW9uRW5kKGNvZGVMb2NhdGlv
bkVuZCkKKyAgICB7CisgICAgfQorCisgICAgRXJyb3IoU3RyaW5nJiYgbWVzc2FnZSkKKyAgICAg
ICAgOiBtZXNzYWdlKFdURk1vdmUobWVzc2FnZSkpCisgICAgeworICAgIH0KKworICAgIFN0cmlu
ZyB0b1N0cmluZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbWFrZVN0cmluZyhjb2Rl
TG9jYXRpb25CZWdpbiwgJzonLCBjb2RlTG9jYXRpb25FbmQsICI6ICIsIG1lc3NhZ2UpOworICAg
IH0KKworICAgIFN0cmluZyBtZXNzYWdlOworICAgIHVuc2lnbmVkIGNvZGVMb2NhdGlvbkJlZ2lu
IHsgMCB9OworICAgIHVuc2lnbmVkIGNvZGVMb2NhdGlvbkVuZCB7IDAgfTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdITFNMCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFBhcnNlci5jcHAKaW5kZXggMjBjYjkzOTEwNGFmMjk3MTYxODk2OGJiNTg5NWM2YjVk
NWFmODczNy4uZGZkYmM5ZDY0ZDhkZWVmMjUwZjJlM2Y1MWUwMjgxMTIwNjA0OWNhNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNw
cApAQCAtMjQxLDcgKzI0MSw3IEBAIHN0YXRpYyBpbnQgZGlnaXRWYWx1ZShVQ2hhciBjaGFyYWN0
ZXIpCiAgICAgcmV0dXJuIGNoYXJhY3RlciAtICdBJyArIDEwOwogfQogCi1zdGF0aWMgRXhwZWN0
ZWQ8aW50LCBQYXJzZXI6OkVycm9yPiBpbnRMaXRlcmFsVG9JbnQoU3RyaW5nVmlldyB0ZXh0KQor
c3RhdGljIEV4cGVjdGVkPGludCwgRXJyb3I+IGludExpdGVyYWxUb0ludChTdHJpbmdWaWV3IHRl
eHQpCiB7CiAgICAgYm9vbCBuZWdhdGUgPSBmYWxzZTsKICAgICBpZiAodGV4dC5zdGFydHNXaXRo
KCItIl9zdHIpKSB7CkBAIC0yNjAsMjEgKzI2MCwyMSBAQCBzdGF0aWMgRXhwZWN0ZWQ8aW50LCBQ
YXJzZXI6OkVycm9yPiBpbnRMaXRlcmFsVG9JbnQoU3RyaW5nVmlldyB0ZXh0KQogICAgICAgICBh
dXRvIHByZXZpb3VzID0gcmVzdWx0OwogICAgICAgICByZXN1bHQgPSByZXN1bHQgKiBiYXNlICsg
ZGlnaXQ7CiAgICAgICAgIGlmIChyZXN1bHQgPCBwcmV2aW91cykKLSAgICAgICAgICAgIHJldHVy
biBVbmV4cGVjdGVkPFBhcnNlcjo6RXJyb3I+KFBhcnNlcjo6RXJyb3IobWFrZVN0cmluZygiaW50
IGxpdGVyYWwgIiwgdGV4dCwgIiBpcyBvdXQgb2YgYm91bmRzIikpKTsKKyAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChFcnJvcihtYWtlU3RyaW5nKCJpbnQgbGl0ZXJhbCAiLCB0ZXh0
LCAiIGlzIG91dCBvZiBib3VuZHMiKSkpOwogICAgIH0KICAgICBpZiAobmVnYXRlKSB7CiAgICAg
ICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGludDY0X3QpID4gc2l6ZW9mKHVuc2lnbmVkKSAmJiBz
aXplb2YoaW50NjRfdCkgPiBzaXplb2YoaW50KSwgIlRoaXMgY29kZSB3b3VsZCBiZSB3cm9uZyBv
dGhlcndpc2UiKTsKICAgICAgICAgaW50NjRfdCBpbnRSZXN1bHQgPSAtc3RhdGljX2Nhc3Q8aW50
NjRfdD4ocmVzdWx0KTsKICAgICAgICAgaWYgKGludFJlc3VsdCA8IHN0YXRpY19jYXN0PGludDY0
X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkpKQotICAgICAgICAgICAgcmV0dXJu
IFVuZXhwZWN0ZWQ8UGFyc2VyOjpFcnJvcj4oUGFyc2VyOjpFcnJvcihtYWtlU3RyaW5nKCJpbnQg
bGl0ZXJhbCAiLCB0ZXh0LCAiIGlzIG91dCBvZiBib3VuZHMiKSkpOworICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKG1ha2VTdHJpbmcoImludCBsaXRlcmFsICIsIHRleHQs
ICIgaXMgb3V0IG9mIGJvdW5kcyIpKSk7CiAgICAgICAgIHJldHVybiB7IHN0YXRpY19jYXN0PGlu
dD4oaW50UmVzdWx0KSB9OwogICAgIH0KICAgICBpZiAocmVzdWx0ID4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQotICAgICAgICByZXR1cm4g
VW5leHBlY3RlZDxQYXJzZXI6OkVycm9yPihQYXJzZXI6OkVycm9yKG1ha2VTdHJpbmcoImludCBs
aXRlcmFsICIsIHRleHQsICIgaXMgb3V0IG9mIGJvdW5kcyIpKSk7CisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChFcnJvcihtYWtlU3RyaW5nKCJpbnQgbGl0ZXJhbCAiLCB0ZXh0LCAiIGlz
IG91dCBvZiBib3VuZHMiKSkpOwogICAgIHJldHVybiB7IHN0YXRpY19jYXN0PGludD4ocmVzdWx0
KSB9OwogfQogCi1zdGF0aWMgRXhwZWN0ZWQ8dW5zaWduZWQsIFBhcnNlcjo6RXJyb3I+IHVpbnRM
aXRlcmFsVG9VaW50KFN0cmluZ1ZpZXcgdGV4dCkKK3N0YXRpYyBFeHBlY3RlZDx1bnNpZ25lZCwg
RXJyb3I+IHVpbnRMaXRlcmFsVG9VaW50KFN0cmluZ1ZpZXcgdGV4dCkKIHsKICAgICB1bnNpZ25l
ZCBiYXNlID0gMTA7CiAgICAgaWYgKHRleHQuc3RhcnRzV2l0aCgiMHgiX3N0cikpIHsKQEAgLTI4
OSwxNyArMjg5LDE3IEBAIHN0YXRpYyBFeHBlY3RlZDx1bnNpZ25lZCwgUGFyc2VyOjpFcnJvcj4g
dWludExpdGVyYWxUb1VpbnQoU3RyaW5nVmlldyB0ZXh0KQogICAgICAgICBhdXRvIHByZXZpb3Vz
ID0gcmVzdWx0OwogICAgICAgICByZXN1bHQgPSByZXN1bHQgKiBiYXNlICsgZGlnaXQ7CiAgICAg
ICAgIGlmIChyZXN1bHQgPCBwcmV2aW91cykKLSAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PFBhcnNlcjo6RXJyb3I+KFBhcnNlcjo6RXJyb3IobWFrZVN0cmluZygidWludCBsaXRlcmFsICIs
IHRleHQsICIgaXMgb3V0IG9mIGJvdW5kcyIpKSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoRXJyb3IobWFrZVN0cmluZygidWludCBsaXRlcmFsICIsIHRleHQsICIgaXMgb3V0
IG9mIGJvdW5kcyIpKSk7CiAgICAgfQogICAgIHJldHVybiB7IHJlc3VsdCB9OwogfQogCi1zdGF0
aWMgRXhwZWN0ZWQ8ZmxvYXQsIFBhcnNlcjo6RXJyb3I+IGZsb2F0TGl0ZXJhbFRvRmxvYXQoU3Ry
aW5nVmlldyB0ZXh0KQorc3RhdGljIEV4cGVjdGVkPGZsb2F0LCBFcnJvcj4gZmxvYXRMaXRlcmFs
VG9GbG9hdChTdHJpbmdWaWV3IHRleHQpCiB7CiAgICAgc2l6ZV90IHBhcnNlZExlbmd0aDsKICAg
ICBhdXRvIHJlc3VsdCA9IHBhcnNlRG91YmxlKHRleHQsIHBhcnNlZExlbmd0aCk7CiAgICAgaWYg
KHBhcnNlZExlbmd0aCAhPSB0ZXh0Lmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gVW5leHBlY3Rl
ZDxQYXJzZXI6OkVycm9yPihQYXJzZXI6OkVycm9yKG1ha2VTdHJpbmcoIkNhbm5vdCBwYXJzZSBm
bG9hdCAiLCB0ZXh0KSkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IobWFr
ZVN0cmluZygiQ2Fubm90IHBhcnNlIGZsb2F0ICIsIHRleHQpKSk7CiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGZsb2F0PihyZXN1bHQpOwogfQogCkBAIC0zNDMsMTggKzM0MywxOCBAQCBhdXRvIFBh
cnNlcjo6Y29uc3VtZU5vbk5lZ2F0aXZlSW50ZWdyYWxMaXRlcmFsKCkgLT4gRXhwZWN0ZWQ8dW5z
aWduZWQsIEVycm9yPgogICAgIHJldHVybiBmYWlsKCJpbnQgbGl0ZXJhbCBpcyBuZWdhdGl2ZSJf
c3RyKTsKIH0KIAotc3RhdGljIEV4cGVjdGVkPHVuc2lnbmVkLCBQYXJzZXI6OkVycm9yPiByZWNv
Z25pemVTaW1wbGVVbnNpZ25lZEludGVnZXIoU3RyaW5nVmlldyBzdHJpbmdWaWV3KQorc3RhdGlj
IEV4cGVjdGVkPHVuc2lnbmVkLCBFcnJvcj4gcmVjb2duaXplU2ltcGxlVW5zaWduZWRJbnRlZ2Vy
KFN0cmluZ1ZpZXcgc3RyaW5nVmlldykKIHsKICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOwogICAg
IGlmIChzdHJpbmdWaWV3Lmxlbmd0aCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8
UGFyc2VyOjpFcnJvcj4oUGFyc2VyOjpFcnJvcihtYWtlU3RyaW5nKCJTaW1wbGUgdW5zaWduZWQg
bGl0ZXJhbCAiLCBzdHJpbmdWaWV3LCAiIGlzIHRvbyBzaG9ydCIpKSk7CisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChFcnJvcihtYWtlU3RyaW5nKCJTaW1wbGUgdW5zaWduZWQgbGl0ZXJh
bCAiLCBzdHJpbmdWaWV3LCAiIGlzIHRvbyBzaG9ydCIpKSk7CiAgICAgZm9yIChhdXRvIGNvZGVQ
b2ludCA6IHN0cmluZ1ZpZXcuY29kZVBvaW50cygpKSB7CiAgICAgICAgIGlmIChjb2RlUG9pbnQg
PCAnMCcgfHwgY29kZVBvaW50ID4gJzknKQotICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8
UGFyc2VyOjpFcnJvcj4oUGFyc2VyOjpFcnJvcihtYWtlU3RyaW5nKCJTaW1wbGUgdW5zaWduZWQg
bGl0ZXJhbCAiLCBzdHJpbmdWaWV3LCAiIGlzbid0IG9mIHRoZSBmb3JtIFswLTldKyIpKSk7Cisg
ICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IobWFrZVN0cmluZygiU2ltcGxl
IHVuc2lnbmVkIGxpdGVyYWwgIiwgc3RyaW5nVmlldywgIiBpc24ndCBvZiB0aGUgZm9ybSBbMC05
XSsiKSkpOwogICAgICAgICBhdXRvIHByZXZpb3VzID0gcmVzdWx0OwogICAgICAgICByZXN1bHQg
PSByZXN1bHQgKiAxMCArIChjb2RlUG9pbnQgLSAnMCcpOwogICAgICAgICBpZiAocmVzdWx0IDwg
cHJldmlvdXMpCi0gICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxQYXJzZXI6OkVycm9yPihQ
YXJzZXI6OkVycm9yKG1ha2VTdHJpbmcoIlNpbXBsZSB1bnNpZ25lZCBsaXRlcmFsICIsIHN0cmlu
Z1ZpZXcsICIgaXMgb3V0IG9mIGJvdW5kcyIpKSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoRXJyb3IobWFrZVN0cmluZygiU2ltcGxlIHVuc2lnbmVkIGxpdGVyYWwgIiwgc3Ry
aW5nVmlldywgIiBpcyBvdXQgb2YgYm91bmRzIikpKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBh
cnNlci5oCmluZGV4IDQwMGNlNjZhOGMxNWMxNDJkNmVlMWJiMGE3NGY5MzFhNDNjYjU1ZjYuLjAz
NzM4M2UxZjMxNmQ1NThiMzc4NWRhOWQxOTNjMWU2Nzk0NWU0NTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaApAQCAtNDYsNiArNDYs
NyBAQAogI2luY2x1ZGUgIldITFNMRWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5oIgogI2lu
Y2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xFbnVt
ZXJhdGlvbk1lbWJlci5oIgorI2luY2x1ZGUgIldITFNMRXJyb3IuaCIKICNpbmNsdWRlICJXSExT
TEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJXSExTTEZhbGx0aHJvdWdoLmgiCiAjaW5jbHVkZSAi
V0hMU0xGbG9hdExpdGVyYWwuaCIKQEAgLTEwNywyMCArMTA4LDYgQEAgcHVibGljOgogICAgICAg
ICBVc2VyCiAgICAgfTsKIAotICAgIHN0cnVjdCBFcnJvciB7Ci0gICAgICAgIEVycm9yKFN0cmlu
ZyYmIGVycm9yKQotICAgICAgICAgICAgOiBlcnJvcihXVEZNb3ZlKGVycm9yKSkKLSAgICAgICAg
ewotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIGVycm9yOwotCi0gICAgICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQucHJp
bnQoZXJyb3IpOwotICAgICAgICB9Ci0gICAgfTsKLQogICAgIE9wdGlvbmFsPEVycm9yPiBwYXJz
ZShQcm9ncmFtJiwgU3RyaW5nVmlldywgTW9kZSk7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAppbmRleCA1
MTRlYzM1NTk0OWRlYWI5ZDUxMjA3MDRkNDAwNzFjYTg0MDVlZmU5Li5iNjljZTMyZGQ0YzdmMmJh
OWU1ZWQzNjZkOWRhMzY2MzFhNTVlNWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKQEAgLTk2LDcgKzk2LDE4IEBAIHN0
YXRpYyBib29sIGR1bXBBU1RBdEVuZElmTmVlZGVkKFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAg
IGlmICghcGFzcyhfX1ZBX0FSR1NfXykpIHsgXAogICAgICAgICAgICAgaWYgKGR1bXBQYXNzRmFp
bHVyZSkgXAogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiZmFpbGVkIHBhc3M6ICIgIyBwYXNz
KTsgXAotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsgXAorICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJmYWlsZWQgcGFzczogIiAjIHBhc3MpKTsgXAorICAg
ICAgICB9IFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIENIRUNLX1BBU1NfRVJST1IocGFz
cywgLi4uKSBcCisgICAgZG8geyBcCisgICAgICAgIGR1bXBBU1RCZXR3ZWVuRWFjaFBhc3NJZk5l
ZWRlZChwcm9ncmFtLCAiQVNUIGJlZm9yZSAiICMgcGFzcyk7IFwKKyAgICAgICAgYXV0byByZXN1
bHQgPSBwYXNzKF9fVkFfQVJHU19fKTsgXAorICAgICAgICBpZiAoIXJlc3VsdCkgeyBcCisgICAg
ICAgICAgICBpZiAoZHVtcFBhc3NGYWlsdXJlKSBcCisgICAgICAgICAgICAgICAgZGF0YUxvZ0xu
KCJmYWlsZWQgcGFzczogIiAjIHBhc3MpOyBcCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQocmVzdWx0LmVycm9yKCkpOyBcCiAgICAgICAgIH0gXAogICAgIH0gd2hpbGUgKDApCiAK
QEAgLTEwNiwxNCArMTE3LDE0IEBAIHN0YXRpYyBib29sIGR1bXBBU1RBdEVuZElmTmVlZGVkKFBy
b2dyYW0mIHByb2dyYW0pCiAgICAgICAgIHBhc3MoX19WQV9BUkdTX18pOyBcCiAgICAgfSB3aGls
ZSAoMCkKIAotc3RhdGljIE9wdGlvbmFsPFByb2dyYW0+IHByZXBhcmVTaGFyZWQoU3RyaW5nJiB3
aGxzbFNvdXJjZSkKK3N0YXRpYyBFeHBlY3RlZDxQcm9ncmFtLCBFcnJvcj4gcHJlcGFyZVNoYXJl
ZChTdHJpbmcmIHdobHNsU291cmNlKQogewogICAgIFByb2dyYW0gcHJvZ3JhbTsKICAgICBQYXJz
ZXIgcGFyc2VyOwogICAgIGlmIChhdXRvIHBhcnNlRmFpbHVyZSA9IHBhcnNlci5wYXJzZShwcm9n
cmFtLCB3aGxzbFNvdXJjZSwgUGFyc2VyOjpNb2RlOjpVc2VyKSkgewogICAgICAgICBpZiAoZHVt
cFBhc3NGYWlsdXJlKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8gcGFyc2UgdGhl
IHByb2dyYW06ICIsICpwYXJzZUZhaWx1cmUpOwotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8gcGFyc2UgdGhlIHByb2dyYW06ICIs
IHBhcnNlRmFpbHVyZS0+dG9TdHJpbmcoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgqcGFyc2VGYWlsdXJlKTsKICAgICB9CiAgICAgaW5jbHVkZVN0YW5kYXJkTGlicmFyeShwcm9n
cmFtLCBwYXJzZXIpOwogCkBAIC0xNDcsMTQgKzE1OCwxNCBAQCBzdGF0aWMgT3B0aW9uYWw8UHJv
Z3JhbT4gcHJlcGFyZVNoYXJlZChTdHJpbmcmIHdobHNsU291cmNlKQogICAgIHJldHVybiBwcm9n
cmFtOwogfQogCi1PcHRpb25hbDxSZW5kZXJQcmVwYXJlUmVzdWx0PiBwcmVwYXJlKFN0cmluZyYg
d2hsc2xTb3VyY2UsIFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYgcmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yKQorRXhwZWN0ZWQ8UmVuZGVyUHJlcGFyZVJlc3VsdCwgRXJyb3I+IHByZXBhcmUoU3Ry
aW5nJiB3aGxzbFNvdXJjZSwgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJiByZW5kZXJQaXBlbGlu
ZURlc2NyaXB0b3IpCiB7CiAgICAgYXV0byBwcm9ncmFtID0gcHJlcGFyZVNoYXJlZCh3aGxzbFNv
dXJjZSk7CiAgICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocHJvZ3JhbS5lcnJvcigpKTsKICAgICBhdXRv
IG1hdGNoZWRTZW1hbnRpY3MgPSBtYXRjaFNlbWFudGljcygqcHJvZ3JhbSwgcmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yKTsKICAgICBpZiAoIW1hdGNoZWRTZW1hbnRpY3MpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiQ291
bGQgbm90IG1hdGNoIHNlbWFudGljcyJfc3RyKSk7CiAKICAgICBhdXRvIGdlbmVyYXRlZENvZGUg
PSBNZXRhbDo6Z2VuZXJhdGVNZXRhbENvZGUoKnByb2dyYW0sIFdURk1vdmUoKm1hdGNoZWRTZW1h
bnRpY3MpLCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IubGF5b3V0KTsKIApAQCAtMTY1LDE3ICsx
NzYsMTcgQEAgT3B0aW9uYWw8UmVuZGVyUHJlcGFyZVJlc3VsdD4gcHJlcGFyZShTdHJpbmcmIHdo
bHNsU291cmNlLCBSZW5kZXJQaXBlbGluZURlc2NyaXAKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1PcHRpb25hbDxDb21wdXRlUHJlcGFyZVJlc3VsdD4gcHJlcGFyZShTdHJpbmcmIHdobHNsU291
cmNlLCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJiBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9y
KQorRXhwZWN0ZWQ8Q29tcHV0ZVByZXBhcmVSZXN1bHQsIEVycm9yPiBwcmVwYXJlKFN0cmluZyYg
d2hsc2xTb3VyY2UsIENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3ImIGNvbXB1dGVQaXBlbGluZURl
c2NyaXB0b3IpCiB7CiAgICAgYXV0byBwcm9ncmFtID0gcHJlcGFyZVNoYXJlZCh3aGxzbFNvdXJj
ZSk7CiAgICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocHJvZ3JhbS5lcnJvcigpKTsKICAgICBhdXRvIG1h
dGNoZWRTZW1hbnRpY3MgPSBtYXRjaFNlbWFudGljcygqcHJvZ3JhbSwgY29tcHV0ZVBpcGVsaW5l
RGVzY3JpcHRvcik7CiAgICAgaWYgKCFtYXRjaGVkU2VtYW50aWNzKQotICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkNvdWxk
IG5vdCBtYXRjaCBzZW1hbnRpY3MiX3N0cikpOwogICAgIGF1dG8gY29tcHV0ZURpbWVuc2lvbnMg
PSBXSExTTDo6Y29tcHV0ZURpbWVuc2lvbnMoKnByb2dyYW0sICptYXRjaGVkU2VtYW50aWNzLT5z
aGFkZXIpOwogICAgIGlmICghY29tcHV0ZURpbWVuc2lvbnMpCi0gICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiQ291bGQgbm90
IG1hdGNoIGNvbXB1dGUgZGltZW5zaW9ucyJfc3RyKSk7CiAKICAgICBhdXRvIGdlbmVyYXRlZENv
ZGUgPSBNZXRhbDo6Z2VuZXJhdGVNZXRhbENvZGUoKnByb2dyYW0sIFdURk1vdmUoKm1hdGNoZWRT
ZW1hbnRpY3MpLCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yLmxheW91dCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmgKaW5kZXgg
ZWIyMDIxYjdjYTJlYzU4ZmJkNGEwNTQ5NGM1NDcwODMxMGU1MGVkNi4uMWUwZDllMTA0MDIwZjg5
MGUyMjZhNTY5MWNjODFiN2MwMDk3MjNhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lm
IEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTEVycm9yLmgiCiAjaW5jbHVkZSAiV0hM
U0xQaXBlbGluZURlc2NyaXB0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IApAQCAtMzQsMTMgKzM1LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdI
TFNMIHsKIAotLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTU2ODIgR2VuZXJhdGUgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZXMgYW5kIHJldHVybiB0
aGVtIGhlcmUuCiBzdHJ1Y3QgUmVuZGVyUHJlcGFyZVJlc3VsdCB7CiAgICAgU3RyaW5nIG1ldGFs
U291cmNlOwogICAgIFN0cmluZyBtYW5nbGVkVmVydGV4RW50cnlQb2ludE5hbWU7CiAgICAgU3Ry
aW5nIG1hbmdsZWRGcmFnbWVudEVudHJ5UG9pbnROYW1lOwogfTsKLU9wdGlvbmFsPFJlbmRlclBy
ZXBhcmVSZXN1bHQ+IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwgUmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yJik7CitFeHBlY3RlZDxSZW5kZXJQcmVwYXJlUmVzdWx0LCBFcnJvcj4gcHJlcGFy
ZShTdHJpbmcmIHdobHNsU291cmNlLCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImKTsKIAogc3Ry
dWN0IENvbXB1dGVEaW1lbnNpb25zIHsKICAgICB1bnNpZ25lZCB3aWR0aDsKQEAgLTUzLDcgKzUz
LDcgQEAgc3RydWN0IENvbXB1dGVQcmVwYXJlUmVzdWx0IHsKICAgICBTdHJpbmcgbWFuZ2xlZEVu
dHJ5UG9pbnROYW1lOwogICAgIENvbXB1dGVEaW1lbnNpb25zIGNvbXB1dGVEaW1lbnNpb25zOwog
fTsKLU9wdGlvbmFsPENvbXB1dGVQcmVwYXJlUmVzdWx0PiBwcmVwYXJlKFN0cmluZyYgd2hsc2xT
b3VyY2UsIENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3ImKTsKK0V4cGVjdGVkPENvbXB1dGVQcmVw
YXJlUmVzdWx0LCBFcnJvcj4gcHJlcGFyZShTdHJpbmcmIHdobHNsU291cmNlLCBDb21wdXRlUGlw
ZWxpbmVEZXNjcmlwdG9yJik7CiAKIH0gLy8gbmFtZXNwYWNlIFdITFNMCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiNDUzZjgx
NTBiOTVjOTU2ZWJiOWIzMzFiMmZhZjg4MTllNjA4ZmQzLi45MDZmNmU1ZGZiZjdhNDU3ZjBjZDVj
MTUxOThhZTBmNjVhOTg3ZmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MzkxLDYgKzYzOTEsNyBAQAogCQkxQ0FGMzQ3RTBB
NkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYlNjcmlwdE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQ0FGMzQ3RjBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0Lm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU2NyaXB0T2JqZWN0Lm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0FGMzQ4MDBBNkM0MDUyMDBBQkUwNkUgLyog
V2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJTY3JpcHRPYmplY3RQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFDQjVGRTg4MjJERUJDOEIwMDk0NDBFMiAvKiBXSExTTEVycm9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNCNjlCMzIyMURF
RDQwQjAwNkU4NDZBIC8qIFdITFNMUmVzb2x2YWJsZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hM
U0xSZXNvbHZhYmxlVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0I2OUIz
NDIxREVENjNBMDA2RTg0NkEgLyogV0hMU0xGbG9hdExpdGVyYWxUeXBlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdITFNMRmxvYXRMaXRlcmFsVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQ0I2OUIzNTIxREVENjQ5MDA2RTg0NkEgLyogV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTI1NDk0LDYgKzI1NDk1LDcgQEAKIAkJCQkxQzI4MUM2RTIyQjg3Qjk4
MDA2OTFDMDAgLyogV0hMU0xDaGVja1RleHR1cmVSZWZlcmVuY2VzLmggKi8sCiAJCQkJMUM4NkNB
NEIyMkFBMTlGRjAwMUJGOTYxIC8qIFdITFNMQ29tcHV0ZURpbWVuc2lvbnMuY3BwICovLAogCQkJ
CTFDODZDQTRDMjJBQTE5RkYwMDFCRjk2MSAvKiBXSExTTENvbXB1dGVEaW1lbnNpb25zLmggKi8s
CisJCQkJMUNCNUZFODgyMkRFQkM4QjAwOTQ0MEUyIC8qIFdITFNMRXJyb3IuaCAqLywKIAkJCQkx
Q0EwQzJFNDIxRUVEMTJBMDBBMTE4NjAgLyogV0hMU0xGdW5jdGlvblN0YWdlQ2hlY2tlci5jcHAg
Ki8sCiAJCQkJMUNBMEMyRTUyMUVFRDEyQTAwQTExODYwIC8qIFdITFNMRnVuY3Rpb25TdGFnZUNo
ZWNrZXIuaCAqLywKIAkJCQkxQzg0MEI5OTIxRUM0MDA4MDBEMDUwMEQgLyogV0hMU0xHYXRoZXJF
bnRyeVBvaW50SXRlbXMuY3BwICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374669</attachid>
            <date>2019-07-22 20:18:13 -0700</date>
            <delta_ts>2019-07-23 12:59:05 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>125143</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQXV0b0luaXRp
YWxpemVWYXJpYWJsZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMQXV0b0luaXRpYWxpemVWYXJpYWJsZXMuY3BwCShyZXZpc2lvbiAy
NDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEF1dG9J
bml0aWFsaXplVmFyaWFibGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBw
cml2YXRlOgogICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdU
eXBlPj4gYXJndW1lbnRUeXBlczsKICAgICAgICAgYXV0byogZnVuY3Rpb24gPSByZXNvbHZlRnVu
Y3Rpb25PdmVybG9hZChtX2Nhc3RGdW5jdGlvbnMsIGFyZ3VtZW50VHlwZXMsIHR5cGUpOwogICAg
ICAgICBpZiAoIWZ1bmN0aW9uKSB7Ci0gICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAg
ICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5vdCBmaW5kIHRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yIGZv
ciB2YXJpYWJsZS4iLCB2YXJpYWJsZURlY2xhcmF0aW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1
bmN0aW9uKCpmdW5jdGlvbik7CkBAIC04OCwxMSArODgsMTEgQEAgcHJpdmF0ZToKICAgICBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYg
bV9jYXN0RnVuY3Rpb25zOwogfTsKIAotYm9vbCBhdXRvSW5pdGlhbGl6ZVZhcmlhYmxlcyhQcm9n
cmFtJiBwcm9ncmFtKQorRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IGF1dG9Jbml0aWFsaXplVmFyaWFi
bGVzKFByb2dyYW0mIHByb2dyYW0pCiB7CiAgICAgQXV0b0luaXRpYWxpemUgYXV0b0luaXRpYWxp
emUocHJvZ3JhbS5uYW1lQ29udGV4dCgpKTsKICAgICBhdXRvSW5pdGlhbGl6ZS5WaXNpdG9yOjp2
aXNpdChwcm9ncmFtKTsKLSAgICByZXR1cm4gIWF1dG9Jbml0aWFsaXplLmVycm9yKCk7CisgICAg
cmV0dXJuIGF1dG9Jbml0aWFsaXplLmdldEVycm9yKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdI
TFNMCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEF1dG9J
bml0aWFsaXplVmFyaWFibGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xBdXRvSW5pdGlhbGl6ZVZhcmlhYmxlcy5oCShyZXZpc2lvbiAy
NDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEF1dG9J
bml0aWFsaXplVmFyaWFibGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEzICsyNywxNiBAQAog
CiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMRXJyb3IuaCIKKyNpbmNsdWRl
IDx3dGYvRXhwZWN0ZWQuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hM
U0wgewogCiBjbGFzcyBQcm9ncmFtOwogCi1ib29sIGF1dG9Jbml0aWFsaXplVmFyaWFibGVzKFBy
b2dyYW0mKTsKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBhdXRvSW5pdGlhbGl6ZVZhcmlhYmxlcyhQ
cm9ncmFtJik7CiAKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9u
cy5jcHAJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTUsOSArMTE1LDkgQEAgcHJpdmF0ZToKICAgICBjb25zdCBBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24qIG1fZnVuY3Rpb24geyBudWxscHRyIH07CiB9OwogCi1ib29sIGNoZWNrRHVwbGljYXRl
RnVuY3Rpb25zKGNvbnN0IFByb2dyYW0mIHByb2dyYW0pCitFeHBlY3RlZDx2b2lkLCBFcnJvcj4g
Y2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMoY29uc3QgUHJvZ3JhbSYgcHJvZ3JhbSkKIHsKLSAgICBh
dXRvIHBhc3Nlc1N0YXRpY0NoZWNrcyA9IFsmXSAoY29uc3QgQVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uJiBmdW5jdGlvbikgeworICAgIGF1dG8gcGFzc2VzU3RhdGljQ2hlY2tzID0gWyZdIChjb25z
dCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1bmN0aW9uKSAtPiBFeHBlY3RlZDx2b2lkLCBF
cnJvcj4gewogICAgICAgICBpZiAoZnVuY3Rpb24ubmFtZSgpID09ICJvcGVyYXRvciZbXSIgJiYg
ZnVuY3Rpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyCiAgICAgICAgICAgICAmJiBpczxBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+
KCpmdW5jdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSkpKSB7CiAgICAgICAgICAgICBhdXRv
JiB0eXBlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbi5w
YXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CkBAIC0xMjcsNDQgKzEyNyw0NSBAQCBib29sIGNoZWNr
RHVwbGljYXRlRnVuY3Rpb25zKGNvbnN0IFByb2dyCiAgICAgICAgICAgICAgICAgICAgIGlmIChp
czxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnJlc29sdmVkVHlwZSkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqcmVzb2x2ZWRUeXBlKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ1aW50IikKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJDYW5ub3QgZGVmaW5lIGN1
c3RvbSBhcnJheSBhbmRlci4iKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoZnVuY3Rpb24ubmFtZSgp
ID09ICJvcGVyYXRvci5sZW5ndGgiICYmIGZ1bmN0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0g
MQogICAgICAgICAgICAgJiYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihzdGF0aWNfY2Fz
dDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlw
ZSgpKSkKICAgICAgICAgICAgIHx8IGlzPEFTVDo6QXJyYXlUeXBlPihzdGF0aWNfY2FzdDxjb25z
dCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKSkp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKEVycm9yKCJDYW5ub3QgZGVmaW5lIG9wZXJhdG9yLmxlbmd0aCBmb3IgYW4gYXJyYXku
IikpOwogICAgICAgICBlbHNlIGlmIChmdW5jdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yPT0iCiAg
ICAgICAgICAgICAmJiBmdW5jdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIKICAgICAgICAg
ICAgICYmIGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5h
bWVkVHlwZSY+KCpmdW5jdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSkpCiAgICAgICAgICAg
ICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1l
ZFR5cGUmPigqZnVuY3Rpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpKQogICAgICAgICAgICAg
JiYgbWF0Y2hlcygqZnVuY3Rpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCksICpmdW5jdGlvbi5w
YXJhbWV0ZXJzKClbMV0tPnR5cGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkNhbm5vdCBkZWZpbmUgb3BlcmF0
b3I9PSBvbiB0d28gcmVmZXJlbmNlIHR5cGVzLiIpKTsKICAgICAgICAgZWxzZSBpZiAoZnVuY3Rp
b24uaXNDYXN0KCkgJiYgZnVuY3Rpb24ucGFyYW1ldGVycygpLmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgYXV0byYgdW5pZnlOb2RlID0gZnVuY3Rpb24udHlwZSgpLnVuaWZ5Tm9kZSgpOwogICAg
ICAgICAgICAgaWYgKGlzPEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpICYmIGlzPEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uPihkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKSkp
IHsKICAgICAgICAgICAgICAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2Fz
dDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVu
aWZ5Tm9kZSkpOwogICAgICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNP
cGFxdWVUeXBlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJDYW5ub3QgZGVmaW5lIGEg
Y2FzdCBvbiBhbiBvcGFxdWUgdHlwZS4iKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAot
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9OwogCiAgICAg
SGFzaFNldDxEdXBsaWNhdGVGdW5jdGlvbktleSwgRHVwbGljYXRlRnVuY3Rpb25LZXk6Okhhc2gs
IER1cGxpY2F0ZUZ1bmN0aW9uS2V5OjpUcmFpdHM+IGZ1bmN0aW9uczsKIAotICAgIGF1dG8gYWRk
ID0gWyZdIChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1bmN0aW9uKSB7CisgICAg
YXV0byBhZGQgPSBbJl0gKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgZnVuY3Rpb24p
IC0+IEV4cGVjdGVkPHZvaWQsIEVycm9yPiB7CiAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gZnVu
Y3Rpb25zLmFkZChEdXBsaWNhdGVGdW5jdGlvbktleSB7IGZ1bmN0aW9uIH0pOwogICAgICAgICBp
ZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJGb3VuZCBkdXBsaWNhdGUgZnVu
Y3Rpb24iKSk7CiAgICAgICAgIHJldHVybiBwYXNzZXNTdGF0aWNDaGVja3MoZnVuY3Rpb24pOwog
ICAgIH07CiAKICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZnVu
Y3Rpb25EZWZpbml0aW9ucygpKSB7Ci0gICAgICAgIGlmICghYWRkKGZ1bmN0aW9uRGVmaW5pdGlv
bi5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8gYWRkUmVz
dWx0ID0gYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5nZXQoKSk7CisgICAgICAgIGlmICghYWRkUmVz
dWx0KQorICAgICAgICAgICAgcmV0dXJuIGFkZFJlc3VsdDsKICAgICB9CiAKICAgICBmb3IgKGF1
dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb25zKCkpIHsKQEAgLTE4MCwxMCArMTgxLDEwIEBAIGJvb2wgY2hlY2tEdXBsaWNhdGVG
dW5jdGlvbnMoY29uc3QgUHJvZ3IKICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE5ODg2MQogICAgICAgICAvLyBBU1NFUlQocGFzc2VzU3RhdGljQ2hl
Y2tzKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uZ2V0KCkpKTsKICAgICAgICAgaWYgKGZ1bmN0
aW9ucy5jb250YWlucyhEdXBsaWNhdGVGdW5jdGlvbktleSB7IG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24uZ2V0KCkgfSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkR1cGxpY2F0ZSBuYXRpdmUgZnVuY3Rpb24uIikp
OwogICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdITFNMCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5o
CShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEz
ICsyNywxNSBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMRXJyb3Iu
aCIKICNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCi1ib29sIGNoZWNr
RHVwbGljYXRlRnVuY3Rpb25zKGNvbnN0IFByb2dyYW0mKTsKK0V4cGVjdGVkPHZvaWQsIEVycm9y
PiBjaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyhjb25zdCBQcm9ncmFtJik7CiAKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja1RleHR1cmVSZWZl
cmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTENoZWNrVGV4dHVyZVJlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAyNDc3MDApCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrVGV4dHVyZVJl
ZmVyZW5jZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCwyOCArODQsMjggQEAgYm9vbCBUZXh0
dXJlUmVmZXJlbmNlc0NoZWNrZXI6OmNvbnRhaW5zVAogdm9pZCBUZXh0dXJlUmVmZXJlbmNlc0No
ZWNrZXI6OnZpc2l0KEFTVDo6UG9pbnRlclR5cGUmIHBvaW50ZXJUeXBlKQogewogICAgIFZpc2l0
b3I6OnZpc2l0KHBvaW50ZXJUeXBlKTsKLSAgICBpZiAoZXJyb3IoKSkKKyAgICBpZiAoaGFzRXJy
b3IoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChjb250YWluc1RleHR1cmVPclNhbXBsZXIo
cG9pbnRlclR5cGUuZWxlbWVudFR5cGUoKSkpCi0gICAgICAgIHNldEVycm9yKCk7CisgICAgICAg
IHNldEVycm9yKEVycm9yKCJDYW5ub3QgaGF2ZSBhIHBvaW50ZXIgdG8gYSB0ZXh0dXJlLiIsIHBv
aW50ZXJUeXBlLmNvZGVMb2NhdGlvbigpKSk7CiB9CiAKIHZvaWQgVGV4dHVyZVJlZmVyZW5jZXND
aGVja2VyOjp2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYgYXJyYXlSZWZlcmVuY2VUeXBl
KQogewogICAgIFZpc2l0b3I6OnZpc2l0KGFycmF5UmVmZXJlbmNlVHlwZSk7Ci0gICAgaWYgKGVy
cm9yKCkpCisgICAgaWYgKGhhc0Vycm9yKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoY29u
dGFpbnNUZXh0dXJlT3JTYW1wbGVyKGFycmF5UmVmZXJlbmNlVHlwZS5lbGVtZW50VHlwZSgpKSkK
LSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5vdCBoYXZl
IGFuIGFycmF5IHJlZmVyZW5jZSB0byBhIHRleHR1cmUuIiwgYXJyYXlSZWZlcmVuY2VUeXBlLmNv
ZGVMb2NhdGlvbigpKSk7CiB9CiAKIHZvaWQgVGV4dHVyZVJlZmVyZW5jZXNDaGVja2VyOjp2aXNp
dChBU1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBlKQogewogICAgIFZpc2l0b3I6OnZpc2l0KGFycmF5
VHlwZSk7Ci0gICAgaWYgKGVycm9yKCkpCisgICAgaWYgKGhhc0Vycm9yKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICBpZiAoY29udGFpbnNUZXh0dXJlT3JTYW1wbGVyKGFycmF5VHlwZS50eXBlKCkp
KQotICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBzZXRFcnJvcihFcnJvcigiQ2Fubm90IGhh
dmUgYW4gYXJyYXkgb2YgdGV4dHVyZXMuIiwgYXJyYXlUeXBlLmNvZGVMb2NhdGlvbigpKSk7CiB9
CiAKIHZvaWQgVGV4dHVyZVJlZmVyZW5jZXNDaGVja2VyOjp2aXNpdChBU1Q6OkV4cHJlc3Npb24m
IGV4cHJlc3Npb24pCkBAIC0xMTQsMTEgKzExNCwxMSBAQCB2b2lkIFRleHR1cmVSZWZlcmVuY2Vz
Q2hlY2tlcjo6dmlzaXQoQVNUCiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGV4cHJlc3Npb24ucmVz
b2x2ZWRUeXBlKCkpOwogfQogCi1ib29sIGNoZWNrVGV4dHVyZVJlZmVyZW5jZXMoUHJvZ3JhbSYg
cHJvZ3JhbSkKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBjaGVja1RleHR1cmVSZWZlcmVuY2VzKFBy
b2dyYW0mIHByb2dyYW0pCiB7CiAgICAgVGV4dHVyZVJlZmVyZW5jZXNDaGVja2VyIHRleHR1cmVS
ZWZlcmVuY2VzQ2hlY2tlcjsKICAgICB0ZXh0dXJlUmVmZXJlbmNlc0NoZWNrZXIuY2hlY2tFcnJv
ckFuZFZpc2l0KHByb2dyYW0pOwotICAgIHJldHVybiAhdGV4dHVyZVJlZmVyZW5jZXNDaGVja2Vy
LmVycm9yKCk7CisgICAgcmV0dXJuIHRleHR1cmVSZWZlcmVuY2VzQ2hlY2tlci5nZXRFcnJvcigp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXSExTTApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja1RleHR1cmVSZWZlcmVuY2VzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja1RleHR1cmVS
ZWZlcmVuY2VzLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMQ2hlY2tUZXh0dXJlUmVmZXJlbmNlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNywxMyArMjcsMTYgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJX
SExTTEVycm9yLmgiCisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAogY2xhc3MgUHJvZ3JhbTsKIAotYm9vbCBjaGVj
a1RleHR1cmVSZWZlcmVuY2VzKFByb2dyYW0mKTsKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBjaGVj
a1RleHR1cmVSZWZlcmVuY2VzKFByb2dyYW0mKTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAJKHJldmlz
aW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
Q2hlY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgcHVibGljOgogICAg
ICAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc051bWJlcigpCiAgICAgICAgICAgICAm
JiAhbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzVmVjdG9yKCkKICAgICAgICAgICAgICYmICFuYXRp
dmVUeXBlRGVjbGFyYXRpb24uaXNNYXRyaXgoKSkKLSAgICAgICAgICAgIHNldEVycm9yKCk7Cisg
ICAgICAgICAgICBzZXRFcnJvcihFcnJvcigiVXNlIG9mIG5hdGl2ZSB0eXBlIGlzIG5vdCBhIFBP
RCBpbiBlbnRyeXBvaW50IHNlbWFudGljLiIsIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5jb2RlTG9j
YXRpb24oKSkpOwogICAgIH0KIAogICAgIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0
aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKSBvdmVycmlkZQpAQCAtMTAyLDE0ICsxMDIsMTQgQEAg
cHVibGljOgogICAgICAgICBWaXNpdG9yOjp2aXNpdChhcnJheVR5cGUpOwogICAgIH0KIAotICAg
IHZvaWQgdmlzaXQoQVNUOjpQb2ludGVyVHlwZSYpIG92ZXJyaWRlCisgICAgdm9pZCB2aXNpdChB
U1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlwZSkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHNl
dEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJJbGxlZ2FsIHVzZSBvZiBwb2ludGVy
IGluIGVudHJ5cG9pbnQgc2VtYW50aWMuIiwgcG9pbnRlclR5cGUuY29kZUxvY2F0aW9uKCkpKTsK
ICAgICB9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJikgb3ZlcnJp
ZGUKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJiBhcnJheVJlZmVyZW5j
ZVR5cGUpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBzZXRF
cnJvcihFcnJvcigiSWxsZWdhbCB1c2Ugb2YgYXJyYXkgcmVmZXJlbmNlIGluIGVudHJ5cG9pbnQg
c2VtYW50aWMuIiwgYXJyYXlSZWZlcmVuY2VUeXBlLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgfQog
CiAgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpIG92ZXJy
aWRlCkBAIC0xMTgsNyArMTE4LDcgQEAgcHVibGljOgogICAgIH0KIH07CiAKLXN0YXRpYyBBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gcmVzb2x2ZVdpdGhPcGVyYXRvckFuZGVySW5kZXhl
cihBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbiwgQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGZp
cnN0QXJndW1lbnQsIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCitzdGF0aWMgQVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJlc29sdmVXaXRoT3BlcmF0b3JBbmRlckluZGV4ZXIo
Q29kZUxvY2F0aW9uIGxvY2F0aW9uLCBBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYgZmlyc3RBcmd1
bWVudCwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykKIHsKICAgICBjb25zdCBib29sIGlz
T3BlcmF0b3IgPSB0cnVlOwogICAgIGF1dG8gcmV0dXJuVHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNU
OjpQb2ludGVyVHlwZT4obG9jYXRpb24sIGZpcnN0QXJndW1lbnQuYWRkcmVzc1NwYWNlKCksIGZp
cnN0QXJndW1lbnQuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKQEAgLTEyOCw3ICsxMjgsNyBAQCBz
dGF0aWMgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJlCiAgICAgcmV0dXJuIEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRp
b24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5
cGUpLCBTdHJpbmcoIm9wZXJhdG9yJltdIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCks
IFdURk1vdmUocGFyYW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKIH0KIAotc3RhdGlj
IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0aE9wZXJhdG9yTGVuZ3Ro
KEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uLCBBU1Q6OlVubmFtZWRUeXBlJiBmaXJzdEFyZ3Vt
ZW50LCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQorc3RhdGljIEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0aE9wZXJhdG9yTGVuZ3RoKENvZGVMb2NhdGlvbiBs
b2NhdGlvbiwgQVNUOjpVbm5hbWVkVHlwZSYgZmlyc3RBcmd1bWVudCwgY29uc3QgSW50cmluc2lj
cyYgaW50cmluc2ljcykKIHsKICAgICBjb25zdCBib29sIGlzT3BlcmF0b3IgPSB0cnVlOwogICAg
IGF1dG8gcmV0dXJuVHlwZSA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChsb2NhdGlvbiwgaW50
cmluc2ljcy51aW50VHlwZSgpKTsKQEAgLTEzNyw3ICsxMzcsNyBAQCBzdGF0aWMgQVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJlCiAgICAgcmV0dXJuIEFTVDo6TmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmli
dXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5cGUpLCBTdHJpbmcoIm9w
ZXJhdG9yLmxlbmd0aCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CiB9CiAKLXN0YXRpYyBBU1Q6Ok5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24gcmVzb2x2ZVdpdGhSZWZlcmVuY2VDb21wYXJhdG9yKEFTVDo6
Q29kZUxvY2F0aW9uIGxvY2F0aW9uLCBSZXNvbHZpbmdUeXBlJiBmaXJzdEFyZ3VtZW50LCBSZXNv
bHZpbmdUeXBlJiBzZWNvbmRBcmd1bWVudCwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykK
K3N0YXRpYyBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gcmVzb2x2ZVdpdGhSZWZlcmVu
Y2VDb21wYXJhdG9yKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgUmVzb2x2aW5nVHlwZSYgZmlyc3RB
cmd1bWVudCwgUmVzb2x2aW5nVHlwZSYgc2Vjb25kQXJndW1lbnQsIGNvbnN0IEludHJpbnNpY3Mm
IGludHJpbnNpY3MpCiB7CiAgICAgY29uc3QgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKICAgICBh
dXRvIHJldHVyblR5cGUgPSBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9jYXRpb24sIGludHJp
bnNpY3MuYm9vbFR5cGUoKSk7CkBAIC0xNjUsNyArMTY1LDcgQEAgZW51bSBjbGFzcyBBY2NlcHRh
YmlsaXR5IHsKICAgICBObwogfTsKIAotc3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbj4gcmVzb2x2ZUJ5SW5zdGFudGlhdGlvbihjb25zdCBTdHJpbmcmIG5hbWUs
IEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uLCBjb25zdCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIHR5cGVzLCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5z
aWNzKQorc3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4gcmVz
b2x2ZUJ5SW5zdGFudGlhdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsIENvZGVMb2NhdGlvbiBsb2Nh
dGlvbiwgY29uc3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+
JiB0eXBlcywgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykKIHsKICAgICBpZiAobmFtZSA9
PSAib3BlcmF0b3ImW10iICYmIHR5cGVzLnNpemUoKSA9PSAyKSB7CiAgICAgICAgIGF1dG8qIGZp
cnN0QXJndW1lbnRBcnJheVJlZiA9IHR5cGVzWzBdLmdldCgpLnZpc2l0KFdURjo6bWFrZVZpc2l0
b3IoW10oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gQVNUOjpB
cnJheVJlZmVyZW5jZVR5cGUqIHsKQEAgLTIxNyw3ICsyMTcsNyBAQCBzdGF0aWMgT3B0aW9uYWw8
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAot
c3RhdGljIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uKFByb2dyYW0m
IHByb2dyYW0sIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbj4sIDE+KiBwb3NzaWJsZU92ZXJsb2FkcywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8UmVzb2x2aW5nVHlwZT4+JiB0eXBlcywgY29uc3QgU3RyaW5nJiBuYW1lLCBBU1Q6OkNv
ZGVMb2NhdGlvbiBsb2NhdGlvbiwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcywgQVNUOjpO
YW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlID0gbnVsbHB0cikKK3N0YXRpYyBBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbihQcm9ncmFtJiBwcm9ncmFtLCBWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiogcG9zc2li
bGVPdmVybG9hZHMsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+
PiYgdHlwZXMsIGNvbnN0IFN0cmluZyYgbmFtZSwgQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBjb25z
dCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBBU1Q6Ok5hbWVkVHlwZSogY2FzdFJldHVyblR5cGUg
PSBudWxscHRyKQogewogICAgIGlmIChwb3NzaWJsZU92ZXJsb2FkcykgewogICAgICAgICBpZiAo
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBmdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJs
b2FkKCpwb3NzaWJsZU92ZXJsb2FkcywgdHlwZXMsIGNhc3RSZXR1cm5UeXBlKSkKQEAgLTI5Niw3
ICsyOTYsNyBAQCBzdGF0aWMgYm9vbCBjaGVja1NlbWFudGljcyhWZWN0b3I8RW50cnlQCiAgICAg
ICAgICAgICAgICAgICAgIHBvZENoZWNrZXIuY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFT
VDo6QXJyYXlUeXBlPigqaXRlbS51bm5hbWVkVHlwZSkudHlwZSgpKTsKICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlm
IChwb2RDaGVja2VyLmVycm9yKCkpCisgICAgICAgICAgICAgICAgaWYgKHBvZENoZWNrZXIuaGFz
RXJyb3IoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC00NjAsNyArNDYwLDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCB2aXNpdChQcm9ncmFtJikgb3ZlcnJpZGU7CiAKLSAgICBib29sIGFzc2lnblR5
cGVzKCk7CisgICAgRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IGFzc2lnblR5cGVzKCk7CiAKIHByaXZh
dGU6CiAgICAgYm9vbCBjaGVja1NoYWRlclR5cGUoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRp
b24mKTsKQEAgLTUzOCw3ICs1MzgsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KFByb2dyYW0mIHBy
b2dyYW0pCiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb25zKClbaV0pOwogfQogCi1ib29sIENoZWNrZXI6OmFzc2lnblR5cGVzKCkKK0V4
cGVjdGVkPHZvaWQsIEVycm9yPiBDaGVja2VyOjphc3NpZ25UeXBlcygpCiB7CiAgICAgZm9yIChh
dXRvJiBrZXlWYWx1ZVBhaXIgOiBtX3R5cGVNYXApIHsKICAgICAgICAgYXV0byBzdWNjZXNzID0g
a2V5VmFsdWVQYWlyLnZhbHVlLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKQEAgLTU1MywxMCArNTUz
LDEwIEBAIGJvb2wgQ2hlY2tlcjo6YXNzaWduVHlwZXMoKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0pKTsKICAgICAgICAgaWYgKCFzdWNjZXNzKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJDb3Vs
ZCBub3QgcmVzb2x2ZSB0aGUgdHlwZSBvZiBhIGNvbnN0YW50LiIpKTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiBib29sIENoZWNrZXI6OmNoZWNrU2hh
ZGVyVHlwZShjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9u
KQpAQCAtNTc2LDIxICs1NzYsMjEgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkZ1bmN0aW9u
RGVmaW5pdAogICAgIG1fY3VycmVudEZ1bmN0aW9uID0gJmZ1bmN0aW9uRGVmaW5pdGlvbjsKICAg
ICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKICAgICAgICAgaWYg
KCFjaGVja1NoYWRlclR5cGUoZnVuY3Rpb25EZWZpbml0aW9uKSkgewotICAgICAgICAgICAgc2V0
RXJyb3IoKTsKKyAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJEdXBsaWNhdGUgZW50cnlwb2lu
dCBmdW5jdGlvbi4iLCBmdW5jdGlvbkRlZmluaXRpb24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBhdXRvIGVudHJ5UG9pbnRJdGVtcyA9
IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhtX2ludHJpbnNpY3MsIGZ1bmN0aW9uRGVmaW5pdGlvbik7
CiAgICAgICAgIGlmICghZW50cnlQb2ludEl0ZW1zKSB7Ci0gICAgICAgICAgICBzZXRFcnJvcigp
OworICAgICAgICAgICAgc2V0RXJyb3IoZW50cnlQb2ludEl0ZW1zLmVycm9yKCkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICghY2hlY2tTZW1hbnRpY3MoZW50
cnlQb2ludEl0ZW1zLT5pbnB1dHMsIGVudHJ5UG9pbnRJdGVtcy0+b3V0cHV0cywgZnVuY3Rpb25E
ZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCksIG1faW50cmluc2ljcykpIHsKLSAgICAgICAgICAg
IHNldEVycm9yKCk7CisgICAgICAgICAgICBzZXRFcnJvcihFcnJvcigiQmFkIHNlbWFudGljcyBm
b3IgZW50cnlwb2ludC4iLCBmdW5jdGlvbkRlZmluaXRpb24uY29kZUxvY2F0aW9uKCkpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoIWNoZWNrT3BlcmF0
b3JPdmVybG9hZChmdW5jdGlvbkRlZmluaXRpb24sIG1faW50cmluc2ljcywgbV9wcm9ncmFtLm5h
bWVDb250ZXh0KCkpKSB7Ci0gICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVy
cm9yKCJFbnRyeXBvaW50IGNhbm5vdCBiZSBhbiBvcGVyYXRvci4iLCBmdW5jdGlvbkRlZmluaXRp
b24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjU2LDcg
KzY1Niw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmkKICAgICAg
ICAgcmV0dXJuICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CiAgICAgfSkoKTsKICAgICBpZiAoIWJh
c2VUeXBlKSB7Ci0gICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJJ
bnZhbGlkIGJhc2UgdHlwZSBmb3IgZW51bS4iLCBlbnVtZXJhdGlvbkRlZmluaXRpb24uY29kZUxv
Y2F0aW9uKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjY2LDEyICs2NjYsMTIg
QEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaQogICAgICAgICBpbnQ2
NF90IHZhbHVlID0gbWVtYmVyLmdldCgpLnZhbHVlKCk7CiAgICAgICAgIGlmIChpc1NpZ25lZCkg
ewogICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludDY0X3Q+KHN0YXRpY19jYXN0PGludDMy
X3Q+KHZhbHVlKSkgIT0gdmFsdWUpIHsKLSAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAg
ICAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJJbnZhbGlkIGVudW1lcmF0aW9uIHZhbHVlLiIs
IG1lbWJlci5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxp
bnQ2NF90PihzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUpKSAhPSB2YWx1ZSkgewotICAgICAg
ICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIklu
dmFsaWQgZW51bWVyYXRpb24gdmFsdWUuIiwgbWVtYmVyLmNvZGVMb2NhdGlvbigpKSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC02ODIsNyAr
NjgyLDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaQogICAgICAg
ICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBlbnVtZXJhdGlvbk1lbWJlcnMuc2l6ZSgpOyAr
K2opIHsKICAgICAgICAgICAgIGF1dG8gb3RoZXJWYWx1ZSA9IGVudW1lcmF0aW9uTWVtYmVyc1tq
XS5nZXQoKS52YWx1ZSgpOwogICAgICAgICAgICAgaWYgKHZhbHVlID09IG90aGVyVmFsdWUpIHsK
LSAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgIHNldEVycm9yKEVy
cm9yKCJDYW5ub3QgZGVjbGFyZSBkdXBsaWNhdGUgZW51bWVyYXRpb24gdmFsdWVzLiIsIGVudW1l
cmF0aW9uTWVtYmVyc1tqXS5nZXQoKS5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNjk2LDcgKzY5Niw3IEBAIHZv
aWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmkKICAgICAgICAgfQogICAgIH0K
ICAgICBpZiAoIWZvdW5kWmVybykgewotICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBzZXRF
cnJvcihFcnJvcigiZW51bSBkZWZpbml0aW9uIG11c3QgY29udGFpbiBhIHplcm8gdmFsdWUuIiwg
ZW51bWVyYXRpb25EZWZpbml0aW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiB9CkBAIC03MTIsNyArNzEyLDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlR5
cGVSZWZlcmVuY2UmIAogYXV0byBDaGVja2VyOjpyZWN1cnNlQW5kR2V0SW5mbyhBU1Q6OkV4cHJl
c3Npb24mIGV4cHJlc3Npb24sIGJvb2wgcmVxdWlyZXNMZWZ0VmFsdWUpIC0+IE9wdGlvbmFsPFJl
Y3Vyc2VJbmZvPgogewogICAgIFZpc2l0b3I6OnZpc2l0KGV4cHJlc3Npb24pOwotICAgIGlmIChl
cnJvcigpKQorICAgIGlmIChoYXNFcnJvcigpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgIHJldHVybiBnZXRJbmZvKGV4cHJlc3Npb24sIHJlcXVpcmVzTGVmdFZhbHVlKTsKIH0K
QEAgLTcyNCw3ICs3MjQsNyBAQCBhdXRvIENoZWNrZXI6OmdldEluZm8oQVNUOjpFeHByZXNzaW9u
JiBlCiAKICAgICBjb25zdCBhdXRvJiB0eXBlQW5ub3RhdGlvbiA9IGV4cHJlc3Npb24udHlwZUFu
bm90YXRpb24oKTsKICAgICBpZiAocmVxdWlyZXNMZWZ0VmFsdWUgJiYgdHlwZUFubm90YXRpb24u
aXNSaWdodFZhbHVlKCkpIHsKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgc2V0RXJyb3Io
RXJyb3IoIlVuZXhwZWN0ZWQgcnZhbHVlLiIsIGV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCkpKTsK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAgICAgcmV0dXJuIHt7ICp0eXBl
SXRlcmF0b3ItPnZhbHVlLCB0eXBlQW5ub3RhdGlvbiB9fTsKQEAgLTc0MSw3ICs3NDEsNyBAQCB2
b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhCiAgICAgICAgIGlmICghaW5p
dGlhbGl6ZXJJbmZvKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoIW1hdGNoQW5k
Q29tbWl0KGluaXRpYWxpemVySW5mby0+cmVzb2x2aW5nVHlwZSwgbGhzVHlwZSkpIHsKLSAgICAg
ICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICBzZXRFcnJvcihFcnJvcigiRGVjbGFyZWQg
dmFyaWFibGUgdHlwZSBkb2VzIG5vdCBtYXRjaCBpdHMgaW5pdGlhbGl6ZXIncyB0eXBlLiIsIHZh
cmlhYmxlRGVjbGFyYXRpb24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgIH0KQEAgLTc4NSw3ICs3ODUsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0
KEFTVDo6QXNzaWdubWVudEV4cHJlCiAKICAgICBhdXRvIHJlc3VsdFR5cGUgPSBtYXRjaEFuZENv
bW1pdChsZWZ0SW5mby0+cmVzb2x2aW5nVHlwZSwgcmlnaHRJbmZvLT5yZXNvbHZpbmdUeXBlKTsK
ICAgICBpZiAoIXJlc3VsdFR5cGUpIHsKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgc2V0
RXJyb3IoRXJyb3IoIkxlZnQgaGFuZCBzaWRlIG9mIGFzc2lnbm1lbnQgZG9lcyBub3QgbWF0Y2gg
dGhlIHR5cGUgb2YgdGhlIHJpZ2h0IGhhbmQgc2lkZS4iLCBhc3NpZ25tZW50RXhwcmVzc2lvbi5j
b2RlTG9jYXRpb24oKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04MDcsNyArODA3
LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZQogICAgIGlmIChP
cHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hdGNoZWRUeXBlID0gbWF0Y2hB
bmRDb21taXQobGVmdFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSwgbmV3VmFsdWVJbmZvLT5yZXNv
bHZpbmdUeXBlKSkKICAgICAgICAgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZSgp
LnNldFR5cGUoV1RGTW92ZShtYXRjaGVkVHlwZS52YWx1ZSgpKSk7CiAgICAgZWxzZSB7Ci0gICAg
ICAgIHNldEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJMZWZ0IGhhbmQgc2lkZSBv
ZiBhc3NpZ25tZW50IGRvZXMgbm90IG1hdGNoIHRoZSB0eXBlIG9mIHRoZSByaWdodCBoYW5kIHNp
ZGUuIiwgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC04NDgsNyArODQ4LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNp
dChBU1Q6OkRlcmVmZXJlbmNlRXhwcgogICAgICAgICByZXR1cm4gJmRvd25jYXN0PEFTVDo6UG9p
bnRlclR5cGU+KHVubmFtZWRVbmlmeVR5cGUpOwogICAgIH0pKHVubmFtZWRUeXBlKTsKICAgICBp
ZiAoIXBvaW50ZXJUeXBlKSB7Ci0gICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHNldEVycm9y
KEVycm9yKCJDYW5ub3QgZGVyZWZlcmVuY2UgYSBub24tcG9pbnRlciB0eXBlLiIsIGRlcmVmZXJl
bmNlRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC0xMjE0LDcgKzEyMTQsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6Rm9yTG9vcCYg
Zm9yTG9vCiAgICAgfSwgWyZdKFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9u
KSB7CiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uKTsKICAgICB9KSwgZm9y
TG9vcC5pbml0aWFsaXphdGlvbigpKTsKLSAgICBpZiAoZXJyb3IoKSkKKyAgICBpZiAoaGFzRXJy
b3IoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChmb3JMb29wLmNvbmRpdGlvbigpKSB7CiAg
ICAgICAgIGlmICghcmVjdXJzZUFuZFJlcXVpcmVCb29sVHlwZSgqZm9yTG9vcC5jb25kaXRpb24o
KSkpCkBAIC0xMzgzLDcgKzEzODMsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6Q29tbWFF
eHByZXNzaW9uCiB7CiAgICAgQVNTRVJUKGNvbW1hRXhwcmVzc2lvbi5saXN0KCkuc2l6ZSgpID4g
MCk7CiAgICAgVmlzaXRvcjo6dmlzaXQoY29tbWFFeHByZXNzaW9uKTsKLSAgICBpZiAoZXJyb3Io
KSkKKyAgICBpZiAoaGFzRXJyb3IoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGF1dG8gbGFzdElu
Zm8gPSBnZXRJbmZvKGNvbW1hRXhwcmVzc2lvbi5saXN0KCkubGFzdCgpKTsKICAgICBmb3J3YXJk
VHlwZShjb21tYUV4cHJlc3Npb24sIGxhc3RJbmZvLT5yZXNvbHZpbmdUeXBlKTsKQEAgLTE0NTMs
MTIgKzE0NTMsMTIgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJgog
ICAgIGFzc2lnblR5cGUoY2FsbEV4cHJlc3Npb24sIGZ1bmN0aW9uLT50eXBlKCkuY2xvbmUoKSk7
CiB9CiAKLWJvb2wgY2hlY2soUHJvZ3JhbSYgcHJvZ3JhbSkKK0V4cGVjdGVkPHZvaWQsIEVycm9y
PiBjaGVjayhQcm9ncmFtJiBwcm9ncmFtKQogewogICAgIENoZWNrZXIgY2hlY2tlcihwcm9ncmFt
LmludHJpbnNpY3MoKSwgcHJvZ3JhbSk7CiAgICAgY2hlY2tlci5jaGVja0Vycm9yQW5kVmlzaXQo
cHJvZ3JhbSk7Ci0gICAgaWYgKGNoZWNrZXIuZXJyb3IoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChjaGVja2VyLmhhc0Vycm9yKCkpCisgICAgICAgIHJldHVybiBjaGVja2VyLmdl
dEVycm9yKCk7CiAgICAgcmV0dXJuIGNoZWNrZXIuYXNzaWduVHlwZXMoKTsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2Vy
LmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMQ2hlY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMyArMjcsMTYgQEAKIAog
I2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTEVycm9yLmgiCisjaW5jbHVkZSA8
d3RmL0V4cGVjdGVkLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNM
IHsKIAogY2xhc3MgUHJvZ3JhbTsKIAotYm9vbCBjaGVjayhQcm9ncmFtJik7CitFeHBlY3RlZDx2
b2lkLCBFcnJvcj4gY2hlY2soUHJvZ3JhbSYpOwogCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ29kZUxvY2F0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDb2RlTG9jYXRpb24uaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TENvZGVMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworc3RydWN0IFRva2VuOworCitjbGFzcyBDb2Rl
TG9jYXRpb24geworcHVibGljOgorICAgIENvZGVMb2NhdGlvbigpID0gZGVmYXVsdDsKKyAgICBD
b2RlTG9jYXRpb24odW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKKyAg
ICAgICAgOiBtX3N0YXJ0T2Zmc2V0KHN0YXJ0T2Zmc2V0KQorICAgICAgICAsIG1fZW5kT2Zmc2V0
KGVuZE9mZnNldCkKKyAgICB7IH0KKyAgICBDb2RlTG9jYXRpb24oY29uc3QgVG9rZW4mKTsKKyAg
ICBDb2RlTG9jYXRpb24oY29uc3QgQ29kZUxvY2F0aW9uJiBsb2NhdGlvbjEsIGNvbnN0IENvZGVM
b2NhdGlvbiYgbG9jYXRpb24yKQorICAgICAgICA6IG1fc3RhcnRPZmZzZXQobG9jYXRpb24xLnN0
YXJ0T2Zmc2V0KCkpCisgICAgICAgICwgbV9lbmRPZmZzZXQobG9jYXRpb24yLmVuZE9mZnNldCgp
KQorICAgIHsgfQorCisgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X3N0YXJ0T2Zmc2V0OyB9CisgICAgdW5zaWduZWQgZW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9lbmRPZmZzZXQ7IH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3N0YXJ0T2Zmc2V0IHsg
MCB9OworICAgIHVuc2lnbmVkIG1fZW5kT2Zmc2V0IHsgMCB9OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV0hMU0wKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkdQVSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ29t
cHV0ZURpbWVuc2lvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMQ29tcHV0ZURpbWVuc2lvbnMuY3BwCShyZXZpc2lvbiAyNDc3MDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENvbXB1dGVEaW1l
bnNpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBPcHRpb25hbDxDb21w
dXRlRGltZW5zaW9ucz4gY29tcHV0ZURpbWVuCiB7CiAgICAgQ29tcHV0ZURpbWVuc2lvbnNWaXNp
dG9yIGNvbXB1dGVEaW1lbnNpb25zKGVudHJ5UG9pbnQpOwogICAgIGNvbXB1dGVEaW1lbnNpb25z
LlZpc2l0b3I6OnZpc2l0KHByb2dyYW0pOwotICAgIGlmIChjb21wdXRlRGltZW5zaW9ucy5lcnJv
cigpKQorICAgIGlmIChjb21wdXRlRGltZW5zaW9ucy5oYXNFcnJvcigpKQogICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgIHJldHVybiBjb21wdXRlRGltZW5zaW9ucy5jb21wdXRlRGlt
ZW5zaW9ucygpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xFcnJvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMRXJyb3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTEVycm9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKwor
I2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
Q29uY2F0ZW5hdGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJl
cnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBFcnJvciB7CitwdWJsaWM6CisgICAg
RXJyb3IoU3RyaW5nJiYgbWVzc2FnZSwgQ29kZUxvY2F0aW9uIGNvZGVMb2NhdGlvbikKKyAgICAg
ICAgOiBtX21lc3NhZ2UoV1RGTW92ZShtZXNzYWdlKSkKKyAgICAgICAgLCBtX2xvY2F0aW9uKGNv
ZGVMb2NhdGlvbikKKyAgICB7CisgICAgfQorCisgICAgRXJyb3IoU3RyaW5nJiYgbWVzc2FnZSkK
KyAgICAgICAgOiBtX21lc3NhZ2UoV1RGTW92ZShtZXNzYWdlKSkKKyAgICB7CisgICAgfQorCisg
ICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIE9PUFM6IHRoaXMg
aXNuJ3QgbGluZS9jb2x1bW4hCisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKG1fbG9jYXRpb24u
c3RhcnRPZmZzZXQoKSwgJzonLCBtX2xvY2F0aW9uLmVuZE9mZnNldCgpLCAiOiAiLCBtX21lc3Nh
Z2UpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9tZXNzYWdlOworICAgIENvZGVM
b2NhdGlvbiBtX2xvY2F0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV0hMU0wKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMRnVuY3Rpb25TdGFnZUNoZWNrZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMRnVuY3Rpb25TdGFnZUNoZWNrZXIuY3BwCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTIgKzUwLDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHZp
c2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKSBvdmVycmlkZQogICAgIHsK
ICAgICAgICAgaWYgKCgmY2FsbEV4cHJlc3Npb24uZnVuY3Rpb24oKSA9PSBtX2ludHJpbnNpY3Mu
ZGR4KCkgfHwgJmNhbGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkgPT0gbV9pbnRyaW5zaWNzLmRkeSgp
KSAmJiBtX2VudHJ5UG9pbnRUeXBlICE9IEFTVDo6RW50cnlQb2ludFR5cGU6OkZyYWdtZW50KSB7
Ci0gICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkNh
bm5vdCB1c2UgZGR4IG9yIGRkeSBpbiBhIG5vbi1mcmFnbWVudCBzaGFkZXIuIiwgY2FsbEV4cHJl
c3Npb24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICBpZiAoKCZjYWxsRXhwcmVzc2lvbi5mdW5jdGlvbigpID09IG1faW50cmluc2ljcy5h
bGxNZW1vcnlCYXJyaWVyKCkgfHwgJmNhbGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkgPT0gbV9pbnRy
aW5zaWNzLmRldmljZU1lbW9yeUJhcnJpZXIoKSB8fCAmY2FsbEV4cHJlc3Npb24uZnVuY3Rpb24o
KSA9PSBtX2ludHJpbnNpY3MuZ3JvdXBNZW1vcnlCYXJyaWVyKCkpCiAgICAgICAgICAgICAmJiBt
X2VudHJ5UG9pbnRUeXBlICE9IEFTVDo6RW50cnlQb2ludFR5cGU6OkNvbXB1dGUpIHsKLSAgICAg
ICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICBzZXRFcnJvcihFcnJvcigiQ2Fubm90IHVz
ZSBtZW1vcnkgYmFycmllciBpbiBhIG5vbi1jb21wdXRlIHNoYWRlci4iLCBjYWxsRXhwcmVzc2lv
bi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIFZpc2l0b3I6OnZpc2l0KGNhbGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkpOwpAQCAtNjUsMTcg
KzY1LDE3IEBAIHB1YmxpYzoKICAgICBjb25zdCBJbnRyaW5zaWNzJiBtX2ludHJpbnNpY3M7CiB9
OwogCi1ib29sIGNoZWNrRnVuY3Rpb25TdGFnZXMoUHJvZ3JhbSYgcHJvZ3JhbSkKK0V4cGVjdGVk
PHZvaWQsIEVycm9yPiBjaGVja0Z1bmN0aW9uU3RhZ2VzKFByb2dyYW0mIHByb2dyYW0pCiB7CiAg
ICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5p
dGlvbnMoKSkgewogICAgICAgICBpZiAoIWZ1bmN0aW9uRGVmaW5pdGlvbi0+ZW50cnlQb2ludFR5
cGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBGdW5jdGlvblN0YWdlQ2hlY2tl
ciBmdW5jdGlvblN0YWdlQ2hlY2tlcigqZnVuY3Rpb25EZWZpbml0aW9uLT5lbnRyeVBvaW50VHlw
ZSgpLCBwcm9ncmFtLmludHJpbnNpY3MoKSk7CiAgICAgICAgIGZ1bmN0aW9uU3RhZ2VDaGVja2Vy
LlZpc2l0b3I6OnZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbik7Ci0gICAgICAgIGlmIChmdW5jdGlv
blN0YWdlQ2hlY2tlci5lcnJvcigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBpZiAoZnVuY3Rpb25TdGFnZUNoZWNrZXIuaGFzRXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChFcnJvcigiT09QUyIpKTsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIHsgfTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xGdW5jdGlvblN0YWdlQ2hlY2tlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMRnVuY3Rpb25TdGFnZUNoZWNr
ZXIuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xGdW5jdGlvblN0YWdlQ2hlY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywx
MyArMjcsMTYgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTEVycm9y
LmgiCisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
bmFtZXNwYWNlIFdITFNMIHsKIAogY2xhc3MgUHJvZ3JhbTsKIAotYm9vbCBjaGVja0Z1bmN0aW9u
U3RhZ2VzKFByb2dyYW0mKTsKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBjaGVja0Z1bmN0aW9uU3Rh
Z2VzKFByb2dyYW0mKTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRl
bXMuY3BwCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY1LDEwICs2NSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fZW50cnlQ
b2ludEl0ZW1zKTsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZp
bml0aW9uJikKKyAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVt
ZXJhdGlvbkRlZmluaXRpb24pCiAgICAgewogICAgICAgICBpZiAoIW1fY3VycmVudFNlbWFudGlj
KSB7Ci0gICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3Io
Ik9PUFMiLCBlbnVtZXJhdGlvbkRlZmluaXRpb24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQo
RW50cnlQb2ludEl0ZW0obV90eXBlUmVmZXJlbmNlcy5sYXN0KCkuZ2V0KCksICptX2N1cnJlbnRT
ZW1hbnRpYywgbV9wYXRoKSk7CkBAIC03NywxMSArNzcsMTEgQEAgcHVibGljOgogICAgIHZvaWQg
dmlzaXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikK
ICAgICB7CiAgICAgICAgIGlmICghbV9jdXJyZW50U2VtYW50aWMpIHsKLSAgICAgICAgICAgIHNl
dEVycm9yKCk7CisgICAgICAgICAgICBzZXRFcnJvcihFcnJvcigiT09QUyIsIG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIGlmIChtYXRjaGVzKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiwgbV9pbnRyaW5z
aWNzLnZvaWRUeXBlKCkpKSB7Ci0gICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAg
c2V0RXJyb3IoRXJyb3IoIk9PUFMiLCBuYXRpdmVUeXBlRGVjbGFyYXRpb24uY29kZUxvY2F0aW9u
KCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC05MSw3ICs5MSw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0
dXJlRGVmaW5pdGlvbikKICAgICB7CiAgICAgICAgIGlmIChtX2N1cnJlbnRTZW1hbnRpYykgewot
ICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJPT1BT
Iiwgc3RydWN0dXJlRGVmaW5pdGlvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKQEAgLTEyMSw3ICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB2
aXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlwZSkKICAgICB7CiAgICAgICAgIGlmICgh
bV9jdXJyZW50U2VtYW50aWMpIHsKLSAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAg
ICBzZXRFcnJvcihFcnJvcigiT09QUyIsIHBvaW50ZXJUeXBlLmNvZGVMb2NhdGlvbigpKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbV9lbnRyeVBvaW50SXRlbXMu
YXBwZW5kKEVudHJ5UG9pbnRJdGVtKHBvaW50ZXJUeXBlLCAqbV9jdXJyZW50U2VtYW50aWMsIG1f
cGF0aCkpOwpAQCAtMTM5LDcgKzEzOSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHZpc2l0KEFTVDo6
QXJyYXlUeXBlJiBhcnJheVR5cGUpCiAgICAgewogICAgICAgICBpZiAoIW1fY3VycmVudFNlbWFu
dGljKSB7Ci0gICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgc2V0RXJyb3IoRXJy
b3IoIk9PUFMiLCBhcnJheVR5cGUuY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQb2lu
dEl0ZW0oYXJyYXlUeXBlLCAqbV9jdXJyZW50U2VtYW50aWMsIG1fcGF0aCkpOwpAQCAtMTY0LDIx
ICsxNjQsMjEgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8RW50cnlQb2ludEl0ZW0+IG1fZW50cnlQ
b2ludEl0ZW1zOwogfTsKIAotT3B0aW9uYWw8RW50cnlQb2ludEl0ZW1zPiBnYXRoZXJFbnRyeVBv
aW50SXRlbXMoY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcywgQVNUOjpGdW5jdGlvbkRlZmlu
aXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKK0V4cGVjdGVkPEVudHJ5UG9pbnRJdGVtcywgRXJy
b3I+IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQogewogICAgIEFTU0VS
VChmdW5jdGlvbkRlZmluaXRpb24uZW50cnlQb2ludFR5cGUoKSk7CiAgICAgR2F0aGVyZXIgaW5w
dXRHYXRoZXJlcihpbnRyaW5zaWNzKTsKICAgICBmb3IgKGF1dG8mIHBhcmFtZXRlciA6IGZ1bmN0
aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkpIHsKICAgICAgICAgaW5wdXRHYXRoZXJlci5yZXNl
dCgpOwogICAgICAgICBpbnB1dEdhdGhlcmVyLmNoZWNrRXJyb3JBbmRWaXNpdChwYXJhbWV0ZXIp
OwotICAgICAgICBpZiAoaW5wdXRHYXRoZXJlci5lcnJvcigpKQotICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICAgICAgaWYgKGlucHV0R2F0aGVyZXIuaGFzRXJyb3IoKSkKKyAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChpbnB1dEdhdGhlcmVyLmdldEVycm9yKCku
ZXJyb3IoKSk7CiAgICAgfQogICAgIEdhdGhlcmVyIG91dHB1dEdhdGhlcmVyKGludHJpbnNpY3Ms
IGZ1bmN0aW9uRGVmaW5pdGlvbi5zZW1hbnRpYygpKTsKICAgICBpZiAoKmZ1bmN0aW9uRGVmaW5p
dGlvbi5lbnRyeVBvaW50VHlwZSgpICE9IEFTVDo6RW50cnlQb2ludFR5cGU6OkNvbXB1dGUpCiAg
ICAgICAgIG91dHB1dEdhdGhlcmVyLmNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRp
b24udHlwZSgpKTsKLSAgICBpZiAob3V0cHV0R2F0aGVyZXIuZXJyb3IoKSkKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpZiAob3V0cHV0R2F0aGVyZXIuaGFzRXJyb3IoKSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKG91dHB1dEdhdGhlcmVyLmdldEVycm9yKCkuZXJy
b3IoKSk7CiAKICAgICByZXR1cm4ge3sgaW5wdXRHYXRoZXJlci50YWtlRW50cnlQb2ludEl0ZW1z
KCksIG91dHB1dEdhdGhlcmVyLnRha2VFbnRyeVBvaW50SXRlbXMoKSB9fTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmgJKHJl
dmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMTGV4ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxF
KFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0NvbmNhdGVuYXRlLmg+CkBAIC0zOCwzNyArMzksMTAgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCi1zdHJ1Y3QgVG9rZW47Ci0KLW5hbWVzcGFjZSBB
U1QgewotCi1jbGFzcyBDb2RlTG9jYXRpb24gewotcHVibGljOgotICAgIENvZGVMb2NhdGlvbigp
ID0gZGVmYXVsdDsKLSAgICBDb2RlTG9jYXRpb24odW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2ln
bmVkIGVuZE9mZnNldCkKLSAgICAgICAgOiBtX3N0YXJ0T2Zmc2V0KHN0YXJ0T2Zmc2V0KQotICAg
ICAgICAsIG1fZW5kT2Zmc2V0KGVuZE9mZnNldCkKLSAgICB7IH0KLSAgICBpbmxpbmUgQ29kZUxv
Y2F0aW9uKGNvbnN0IFRva2VuJik7Ci0gICAgQ29kZUxvY2F0aW9uKGNvbnN0IENvZGVMb2NhdGlv
biYgbG9jYXRpb24xLCBjb25zdCBDb2RlTG9jYXRpb24mIGxvY2F0aW9uMikKLSAgICAgICAgOiBt
X3N0YXJ0T2Zmc2V0KGxvY2F0aW9uMS5zdGFydE9mZnNldCgpKQotICAgICAgICAsIG1fZW5kT2Zm
c2V0KGxvY2F0aW9uMi5lbmRPZmZzZXQoKSkKLSAgICB7IH0KLQotICAgIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydE9mZnNldDsgfQotICAgIHVuc2lnbmVkIGVu
ZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kT2Zmc2V0OyB9Ci0KLXByaXZhdGU6Ci0gICAg
dW5zaWduZWQgbV9zdGFydE9mZnNldCB7IDAgfTsKLSAgICB1bnNpZ25lZCBtX2VuZE9mZnNldCB7
IDAgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEFTVAotCiBjbGFzcyBMZXhlcjsKIAogc3RydWN0
IFRva2VuIHsKLSAgICBBU1Q6OkNvZGVMb2NhdGlvbiBjb2RlTG9jYXRpb247CisgICAgQ29kZUxv
Y2F0aW9uIGNvZGVMb2NhdGlvbjsKICAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKICAg
ICAgICAgSW50TGl0ZXJhbCwKICAgICAgICAgVWludExpdGVyYWwsCkBAIC0xODksNyArMTYzLDcg
QEAgc3RydWN0IFRva2VuIHsKICAgICB9CiB9OwogCi1BU1Q6OkNvZGVMb2NhdGlvbjo6Q29kZUxv
Y2F0aW9uKGNvbnN0IFRva2VuJiB0b2tlbikKK2lubGluZSBDb2RlTG9jYXRpb246OkNvZGVMb2Nh
dGlvbihjb25zdCBUb2tlbiYgdG9rZW4pCiAgICAgOiBtX3N0YXJ0T2Zmc2V0KHRva2VuLmNvZGVM
b2NhdGlvbi5zdGFydE9mZnNldCgpKQogICAgICwgbV9lbmRPZmZzZXQodG9rZW4uY29kZUxvY2F0
aW9uLmVuZE9mZnNldCgpKQogeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAy
NDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVS
ZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDI3ICs2MiwyNyBAQCBOYW1lUmVzb2x2
ZXI6Ok5hbWVSZXNvbHZlcihOYW1lUmVzb2x2ZXImCiAKIE5hbWVSZXNvbHZlcjo6fk5hbWVSZXNv
bHZlcigpCiB7Ci0gICAgaWYgKGVycm9yKCkgJiYgbV9wYXJlbnROYW1lUmVzb2x2ZXIpCi0gICAg
ICAgIG1fcGFyZW50TmFtZVJlc29sdmVyLT5zZXRFcnJvcigpOworICAgIGlmIChoYXNFcnJvcigp
ICYmIG1fcGFyZW50TmFtZVJlc29sdmVyKQorICAgICAgICBtX3BhcmVudE5hbWVSZXNvbHZlci0+
c2V0RXJyb3IoZ2V0RXJyb3IoKS5lcnJvcigpKTsKIH0KIAogdm9pZCBOYW1lUmVzb2x2ZXI6OnZp
c2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkKIHsKICAgICBTY29wZWRTZXRB
ZGRlcjxBU1Q6OlR5cGVSZWZlcmVuY2UqPiBhZGRlcihtX3R5cGVSZWZlcmVuY2VzLCAmdHlwZVJl
ZmVyZW5jZSk7CiAgICAgaWYgKCFhZGRlci5pc05ld0VudHJ5KCkpIHsKLSAgICAgICAgc2V0RXJy
b3IoKTsKKyAgICAgICAgc2V0RXJyb3IoRXJyb3IoIk9PUFMiLCB0eXBlUmVmZXJlbmNlLmNvZGVM
b2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBWaXNpdG9yOjp2aXNp
dCh0eXBlUmVmZXJlbmNlKTsKLSAgICBpZiAoZXJyb3IoKSkKKyAgICBpZiAoaGFzRXJyb3IoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIGlmICh0eXBlUmVmZXJlbmNlLm1heWJlUmVzb2x2ZWRUeXBl
KCkpIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4
MTYxIFNob3VsZG4ndCB3ZSBrbm93IGJ5IG5vdyB3aGV0aGVyIHRoZSB0eXBlIGhhcyBiZWVuIHJl
c29sdmVkIG9yIG5vdD8KICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byogY2FuZGlkYXRlcyA9
IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXModHlwZVJlZmVyZW5jZS5uYW1lKCkpOwogICAgIGlmIChj
YW5kaWRhdGVzID09IG51bGxwdHIpIHsKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgc2V0
RXJyb3IoRXJyb3IoIkNhbm5vdCBmaW5kIHR5cGUgcmVmZXJlbmNlLiIsIHR5cGVSZWZlcmVuY2Uu
Y29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBmb3IgKGF1dG8m
IGNhbmRpZGF0ZSA6ICpjYW5kaWRhdGVzKQpAQCAtOTAsNyArOTAsNyBAQCB2b2lkIE5hbWVSZXNv
bHZlcjo6dmlzaXQoQVNUOjpUeXBlUmVmZXJlCiAgICAgaWYgKGF1dG8gcmVzdWx0ID0gcmVzb2x2
ZVR5cGVPdmVybG9hZEltcGwoKmNhbmRpZGF0ZXMsIHR5cGVSZWZlcmVuY2UudHlwZUFyZ3VtZW50
cygpKSkKICAgICAgICAgdHlwZVJlZmVyZW5jZS5zZXRSZXNvbHZlZFR5cGUoKnJlc3VsdCk7CiAg
ICAgZWxzZSB7Ci0gICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJD
YW5ub3QgcmVzb2x2ZSB0eXBlIGFyZ3VtZW50cy4iLCB0eXBlUmVmZXJlbmNlLmNvZGVMb2NhdGlv
bigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiB9CkBAIC0xMDAsNyArMTAwLDcgQEAgdm9p
ZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZQogICAgIE5hbWVDb250ZXh0IG5l
d05hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKICAgICBOYW1lUmVzb2x2ZXIgbmV3TmFtZVJl
c29sdmVyKCp0aGlzLCBuZXdOYW1lQ29udGV4dCk7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1
bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpOwotICAgIGlmIChlcnJvcigpKQorICAgIGlmIChoYXNF
cnJvcigpKQogICAgICAgICByZXR1cm47CiAgICAgZm9yIChhdXRvJiBwYXJhbWV0ZXIgOiBmdW5j
dGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpKQogICAgICAgICBuZXdOYW1lUmVzb2x2ZXIuY2hl
Y2tFcnJvckFuZFZpc2l0KHBhcmFtZXRlcik7CkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBOYW1l
UmVzb2x2ZXI6OnZpc2l0KEFTVDo6QmxvY2smIGJsbwogdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0
KEFTVDo6SWZTdGF0ZW1lbnQmIGlmU3RhdGVtZW50KQogewogICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChpZlN0YXRlbWVudC5jb25kaXRpb25hbCgpKTsKLSAgICBpZiAoZXJyb3IoKSkKKyAgICBpZiAo
aGFzRXJyb3IoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgewpAQCAtMTI1LDcgKzEyNSw3IEBA
IHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OklmU3RhdGVtZW4KICAgICAgICAgTmFtZVJl
c29sdmVyIG5ld05hbWVSZXNvbHZlcigqdGhpcywgbmFtZUNvbnRleHQpOwogICAgICAgICBuZXdO
YW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KGlmU3RhdGVtZW50LmJvZHkoKSk7CiAgICAg
fQotICAgIGlmIChlcnJvcigpKQorICAgIGlmIChoYXNFcnJvcigpKQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSkgewpAQCAtMTM4LDcgKzEzOCw3IEBA
IHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OklmU3RhdGVtZW4KIHZvaWQgTmFtZVJlc29s
dmVyOjp2aXNpdChBU1Q6OldoaWxlTG9vcCYgd2hpbGVMb29wKQogewogICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCh3aGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7Ci0gICAgaWYgKGVycm9yKCkpCisgICAg
aWYgKGhhc0Vycm9yKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIE5hbWVDb250ZXh0IG5hbWVD
b250ZXh0KCZtX25hbWVDb250ZXh0KTsKQEAgLTE2Nyw3ICsxNjcsNyBAQCB2b2lkIE5hbWVSZXNv
bHZlcjo6dmlzaXQoQVNUOjpGb3JMb29wJiBmCiB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQogewogICAgIGlmICgh
bV9uYW1lQ29udGV4dC5hZGQodmFyaWFibGVEZWNsYXJhdGlvbikpIHsKLSAgICAgICAgc2V0RXJy
b3IoKTsKKyAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5vdCBkZWNsYXJlIGR1cGxpY2F0ZSB2
YXJpYWJsZXMuIiwgdmFyaWFibGVEZWNsYXJhdGlvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIFZpc2l0b3I6OnZpc2l0KHZhcmlhYmxlRGVjbGFyYXRpb24p
OwpAQCAtMTgxLDcgKzE4MSw3IEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlZhcmlh
YmxlUmUKICAgICBpZiAoYXV0byogdmFyaWFibGUgPSBtX25hbWVDb250ZXh0LmdldFZhcmlhYmxl
KHZhcmlhYmxlUmVmZXJlbmNlLm5hbWUoKSkpCiAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLnNl
dFZhcmlhYmxlKCp2YXJpYWJsZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHNldEVycm9yKCk7Cisg
ICAgICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3QgZmluZCB0aGUgdmFyaWFibGUgZGVjbGFyYXRp
b24uIiwgdmFyaWFibGVSZWZlcmVuY2UuY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIH0KQEAgLTIwMSw3ICsyMDEsNyBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQo
QVNUOjpEb3RFeHByZXNzCiAgICAgICAgICAgICAgICAgICAgIEFTVDo6cmVwbGFjZVdpdGg8QVNU
OjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWw+KGRvdEV4cHJlc3Npb24sIFdURk1vdmUoZW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsKSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAg
ICBzZXRFcnJvcihFcnJvcigiTm8gZW51bWVyYXRpb24gbWVtYmVyIG1hdGNoZXMuIiwgZG90RXhw
cmVzc2lvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgTmFtZVJlc29sdmVy
Ojp2aXNpdChBU1Q6OkVudW1lcmF0aW8KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBzZXRF
cnJvcigpOworICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3QgcmVzb2x2ZSBlbnVtZXJhdGlvbiBt
ZW1iZXIgbGl0ZXJhbC4iLCBlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuY29kZUxvY2F0aW9uKCkp
KTsKIH0KIAogdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKQEAgLTIzOSw0NCArMjM5LDQ0IEBA
IHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6Ok5hdGl2ZUZ1bmMKIAogLy8gRklYTUU6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjcgTWFrZSBzdXJlIGFs
bCB0aGUgbmFtZXMgaGF2ZSBiZWVuIHJlc29sdmVkLgogCi1ib29sIHJlc29sdmVOYW1lc0luVHlw
ZXMoUHJvZ3JhbSYgcHJvZ3JhbSwgTmFtZVJlc29sdmVyJiBuYW1lUmVzb2x2ZXIpCitFeHBlY3Rl
ZDx2b2lkLCBFcnJvcj4gcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiBwcm9ncmFtLCBOYW1l
UmVzb2x2ZXImIG5hbWVSZXNvbHZlcikKIHsKICAgICBmb3IgKGF1dG8mIHR5cGVEZWZpbml0aW9u
IDogcHJvZ3JhbS50eXBlRGVmaW5pdGlvbnMoKSkgewogICAgICAgICBuYW1lUmVzb2x2ZXIuY2hl
Y2tFcnJvckFuZFZpc2l0KHR5cGVEZWZpbml0aW9uKTsKLSAgICAgICAgaWYgKG5hbWVSZXNvbHZl
ci5lcnJvcigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobmFtZVJl
c29sdmVyLmhhc0Vycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gbmFtZVJlc29sdmVyLmdldEVy
cm9yKCk7CiAgICAgfQogICAgIGZvciAoYXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA6IHByb2dy
YW0uc3RydWN0dXJlRGVmaW5pdGlvbnMoKSkgewogICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tF
cnJvckFuZFZpc2l0KHN0cnVjdHVyZURlZmluaXRpb24pOwotICAgICAgICBpZiAobmFtZVJlc29s
dmVyLmVycm9yKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChuYW1l
UmVzb2x2ZXIuaGFzRXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBuYW1lUmVzb2x2ZXIuZ2V0
RXJyb3IoKTsKICAgICB9CiAgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gOiBw
cm9ncmFtLmVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSkgewogICAgICAgICBuYW1lUmVzb2x2ZXIu
Y2hlY2tFcnJvckFuZFZpc2l0KGVudW1lcmF0aW9uRGVmaW5pdGlvbik7Ci0gICAgICAgIGlmIChu
YW1lUmVzb2x2ZXIuZXJyb3IoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
aWYgKG5hbWVSZXNvbHZlci5oYXNFcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIG5hbWVSZXNv
bHZlci5nZXRFcnJvcigpOwogICAgIH0KICAgICBmb3IgKGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiA6IHByb2dyYW0ubmF0aXZlVHlwZURlY2xhcmF0aW9ucygpKSB7CiAgICAgICAgIG5hbWVS
ZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKLSAgICAg
ICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAobmFtZVJlc29sdmVyLmhhc0Vycm9yKCkpCisgICAgICAgICAgICByZXR1cm4g
bmFtZVJlc29sdmVyLmdldEVycm9yKCk7CiAgICAgfQotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiB7IH07CiB9CiAKLWJvb2wgcmVzb2x2ZVR5cGVOYW1lc0luRnVuY3Rpb25zKFByb2dyYW0m
IHByb2dyYW0sIE5hbWVSZXNvbHZlciYgbmFtZVJlc29sdmVyKQorRXhwZWN0ZWQ8dm9pZCwgRXJy
b3I+IHJlc29sdmVUeXBlTmFtZXNJbkZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtLCBOYW1lUmVz
b2x2ZXImIG5hbWVSZXNvbHZlcikKIHsKICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlv
biA6IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKSB7CiAgICAgICAgIG5hbWVSZXNvbHZl
ci5jaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKLSAgICAgICAgaWYgKG5h
bWVSZXNvbHZlci5lcnJvcigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBp
ZiAobmFtZVJlc29sdmVyLmhhc0Vycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gbmFtZVJlc29s
dmVyLmdldEVycm9yKCk7CiAgICAgfQogICAgIGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSkgewogICAgICAg
ICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24pOwotICAgICAgICBpZiAobmFtZVJlc29sdmVyLmVycm9yKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuaGFzRXJyb3IoKSkKKyAgICAgICAg
ICAgIHJldHVybiBuYW1lUmVzb2x2ZXIuZ2V0RXJyb3IoKTsKICAgICB9Ci0gICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV0hMU0wKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1l
UmVzb2x2ZXIuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCAr
MjcsMTAgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTEVycm9yLmgi
CiAjaW5jbHVkZSAiV0hMU0xOYW1lQ29udGV4dC5oIgogI2luY2x1ZGUgIldITFNMVmlzaXRvci5o
IgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTYzLDggKzY1LDggQEAgcHJpdmF0ZToKICAgICBOYW1l
UmVzb2x2ZXIqIG1fcGFyZW50TmFtZVJlc29sdmVyIHsgbnVsbHB0ciB9OwogfTsKIAotYm9vbCBy
ZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mLCBOYW1lUmVzb2x2ZXImKTsKLWJvb2wgcmVzb2x2
ZVR5cGVOYW1lc0luRnVuY3Rpb25zKFByb2dyYW0mLCBOYW1lUmVzb2x2ZXImKTsKK0V4cGVjdGVk
PHZvaWQsIEVycm9yPiByZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mLCBOYW1lUmVzb2x2ZXIm
KTsKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiByZXNvbHZlVHlwZU5hbWVzSW5GdW5jdGlvbnMoUHJv
Z3JhbSYsIE5hbWVSZXNvbHZlciYpOwogCiB9IC8vIG5hbWVzcGFjZSBXSExTTAogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIu
Y3BwCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgbmFt
ZXNwYWNlIFdITFNMIHsKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG5hbWUuZXJy
b3IoKSk7CiAKIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTk1NjgyIFJldHVybiBhIGJldHRlciBlcnJvciBjb2RlIGZyb20gdGhpcywgYW5kIHJlcG9y
dCBpdCB0byBKYXZhU2NyaXB0LgotYXV0byBQYXJzZXI6OnBhcnNlKFByb2dyYW0mIHByb2dyYW0s
IFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBPcHRpb25hbDxFcnJvcj4KK2F1
dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiBwcm9ncmFtLCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcs
IE1vZGUgbW9kZSkgLT4gRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+CiB7CiAgICAgbV9sZXhlciA9IExl
eGVyKHN0cmluZ1ZpZXcpOwogICAgIG1fbW9kZSA9IG1vZGU7CkBAIC02OCw2MCArNjgsNjMgQEAg
YXV0byBQYXJzZXI6OnBhcnNlKFByb2dyYW0mIHByb2dyYW0sIFN0cgogICAgICAgICBhdXRvIHRv
a2VuID0gbV9sZXhlci5wZWVrKCk7CiAgICAgICAgIHN3aXRjaCAodG9rZW4udHlwZSkgewogICAg
ICAgICBjYXNlIFRva2VuOjpUeXBlOjpJbnZhbGlkOgotICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICAgICAgICAgIC8vIE9PUFM6IFJlYWxseT8KKyAgICAgICAgICAgIHJldHVy
biB7IH07CiAgICAgICAgIGNhc2UgVG9rZW46OlR5cGU6OlNlbWljb2xvbjoKICAgICAgICAgICAg
IG1fbGV4ZXIuY29uc3VtZVRva2VuKCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
Y2FzZSBUb2tlbjo6VHlwZTo6VHlwZWRlZjogewogICAgICAgICAgICAgYXV0byB0eXBlRGVmaW5p
dGlvbiA9IHBhcnNlVHlwZURlZmluaXRpb24oKTsKICAgICAgICAgICAgIGlmICghdHlwZURlZmlu
aXRpb24pCi0gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVEZWZpbml0aW9uLmVycm9yKCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHR5cGVEZWZpbml0aW9uLmVycm9y
KCkpOwogICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqdHlwZURlZmluaXRpb24p
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgVG9rZW46
OlR5cGU6OlN0cnVjdDogewogICAgICAgICAgICAgYXV0byBzdHJ1Y3R1cmVEZWZpbml0aW9uID0g
cGFyc2VTdHJ1Y3R1cmVEZWZpbml0aW9uKCk7CiAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZURl
ZmluaXRpb24pCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZURlZmluaXRpb24uZXJy
b3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoc3RydWN0dXJlRGVm
aW5pdGlvbi5lcnJvcigpKTsKICAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKnN0
cnVjdHVyZURlZmluaXRpb24pKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgVG9rZW46OlR5cGU6OkVudW06IHsKICAgICAgICAgICAgIGF1dG8gZW51bWVy
YXRpb25EZWZpbml0aW9uID0gcGFyc2VFbnVtZXJhdGlvbkRlZmluaXRpb24oKTsKICAgICAgICAg
ICAgIGlmICghZW51bWVyYXRpb25EZWZpbml0aW9uKQotICAgICAgICAgICAgICAgIHJldHVybiBl
bnVtZXJhdGlvbkRlZmluaXRpb24uZXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoZW51bWVyYXRpb25EZWZpbml0aW9uLmVycm9yKCkpOwogICAgICAgICAgICAg
cHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqZW51bWVyYXRpb25EZWZpbml0aW9uKSk7CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpOYXRp
dmU6IHsKICAgICAgICAgICAgIEFTU0VSVChtX21vZGUgPT0gTW9kZTo6U3RhbmRhcmRMaWJyYXJ5
KTsKICAgICAgICAgICAgIGF1dG8gZnVydGhlclRva2VuID0gcGVla0Z1cnRoZXIoKTsKLSAgICAg
ICAgICAgIGlmICghZnVydGhlclRva2VuKQotICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgICAgICAgICBpZiAoIWZ1cnRoZXJUb2tlbikgeworICAgICAgICAgICAgICAg
IC8vIE9PUFM6IHRoaXMgc2hvdWxkIGJlIGFuIGFzc2VydCwgbm8/CisgICAgICAgICAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChmdXJ0aGVyVG9rZW4t
PnR5cGUgPT0gVG9rZW46OlR5cGU6OlR5cGVkZWYpIHsKICAgICAgICAgICAgICAgICBhdXRvIG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbiA9IHBhcnNlTmF0aXZlVHlwZURlY2xhcmF0aW9uKCk7CiAgICAg
ICAgICAgICAgICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24pCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBuYXRpdmVUeXBlRGVjbGFyYXRpb24uZXJyb3IoKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5lcnJvcigp
KTsKICAgICAgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpuYXRpdmVUeXBlRGVj
bGFyYXRpb24pKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGF1dG8gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA9IHBhcnNlTmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbigpOwogICAgICAgICAgICAgaWYgKCFuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uKQotICAgICAgICAgICAgICAgIHJldHVybiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LmVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24uZXJyb3IoKSk7CiAgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChX
VEZNb3ZlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICAgICBhdXRvIGZ1bmN0
aW9uRGVmaW5pdGlvbiA9IHBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKCk7CiAgICAgICAgICAgICBp
ZiAoIWZ1bmN0aW9uRGVmaW5pdGlvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb25E
ZWZpbml0aW9uLmVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGZ1bmN0aW9uRGVmaW5pdGlvbi5lcnJvcigpKTsKICAgICAgICAgICAgIHByb2dyYW0uYXBwZW5k
KFdURk1vdmUoKmZ1bmN0aW9uRGVmaW5pdGlvbikpOwogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBQYXJzZXI6OmZhaWwoY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBUcnlUb1BlZWsgdHJ5VG9QZWVrKSAtPiBVbmV4cGVjdGVkPEVycm9yPgpAQCAtMjQxLDcg
KzI0NCw3IEBAIHN0YXRpYyBpbnQgZGlnaXRWYWx1ZShVQ2hhciBjaGFyYWN0ZXIpCiAgICAgcmV0
dXJuIGNoYXJhY3RlciAtICdBJyArIDEwOwogfQogCi1zdGF0aWMgRXhwZWN0ZWQ8aW50LCBQYXJz
ZXI6OkVycm9yPiBpbnRMaXRlcmFsVG9JbnQoU3RyaW5nVmlldyB0ZXh0KQorc3RhdGljIEV4cGVj
dGVkPGludCwgRXJyb3I+IGludExpdGVyYWxUb0ludChTdHJpbmdWaWV3IHRleHQpCiB7CiAgICAg
Ym9vbCBuZWdhdGUgPSBmYWxzZTsKICAgICBpZiAodGV4dC5zdGFydHNXaXRoKCItIl9zdHIpKSB7
CkBAIC0yNjAsMjEgKzI2MywyMSBAQCBzdGF0aWMgRXhwZWN0ZWQ8aW50LCBQYXJzZXI6OkVycm9y
PiBpbnRMCiAgICAgICAgIGF1dG8gcHJldmlvdXMgPSByZXN1bHQ7CiAgICAgICAgIHJlc3VsdCA9
IHJlc3VsdCAqIGJhc2UgKyBkaWdpdDsKICAgICAgICAgaWYgKHJlc3VsdCA8IHByZXZpb3VzKQot
ICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UGFyc2VyOjpFcnJvcj4oUGFyc2VyOjpFcnJv
cihtYWtlU3RyaW5nKCJpbnQgbGl0ZXJhbCAiLCB0ZXh0LCAiIGlzIG91dCBvZiBib3VuZHMiKSkp
OworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKG1ha2VTdHJpbmcoImlu
dCBsaXRlcmFsICIsIHRleHQsICIgaXMgb3V0IG9mIGJvdW5kcyIpKSk7CiAgICAgfQogICAgIGlm
IChuZWdhdGUpIHsKICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoaW50NjRfdCkgPiBzaXpl
b2YodW5zaWduZWQpICYmIHNpemVvZihpbnQ2NF90KSA+IHNpemVvZihpbnQpLCAiVGhpcyBjb2Rl
IHdvdWxkIGJlIHdyb25nIG90aGVyd2lzZSIpOwogICAgICAgICBpbnQ2NF90IGludFJlc3VsdCA9
IC1zdGF0aWNfY2FzdDxpbnQ2NF90PihyZXN1bHQpOwogICAgICAgICBpZiAoaW50UmVzdWx0IDwg
c3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSkpCi0g
ICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxQYXJzZXI6OkVycm9yPihQYXJzZXI6OkVycm9y
KG1ha2VTdHJpbmcoImludCBsaXRlcmFsICIsIHRleHQsICIgaXMgb3V0IG9mIGJvdW5kcyIpKSk7
CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IobWFrZVN0cmluZygiaW50
IGxpdGVyYWwgIiwgdGV4dCwgIiBpcyBvdXQgb2YgYm91bmRzIikpKTsKICAgICAgICAgcmV0dXJu
IHsgc3RhdGljX2Nhc3Q8aW50PihpbnRSZXN1bHQpIH07CiAgICAgfQogICAgIGlmIChyZXN1bHQg
PiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkp
Ci0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPFBhcnNlcjo6RXJyb3I+KFBhcnNlcjo6RXJyb3Io
bWFrZVN0cmluZygiaW50IGxpdGVyYWwgIiwgdGV4dCwgIiBpcyBvdXQgb2YgYm91bmRzIikpKTsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKG1ha2VTdHJpbmcoImludCBsaXRl
cmFsICIsIHRleHQsICIgaXMgb3V0IG9mIGJvdW5kcyIpKSk7CiAgICAgcmV0dXJuIHsgc3RhdGlj
X2Nhc3Q8aW50PihyZXN1bHQpIH07CiB9CiAKLXN0YXRpYyBFeHBlY3RlZDx1bnNpZ25lZCwgUGFy
c2VyOjpFcnJvcj4gdWludExpdGVyYWxUb1VpbnQoU3RyaW5nVmlldyB0ZXh0KQorc3RhdGljIEV4
cGVjdGVkPHVuc2lnbmVkLCBFcnJvcj4gdWludExpdGVyYWxUb1VpbnQoU3RyaW5nVmlldyB0ZXh0
KQogewogICAgIHVuc2lnbmVkIGJhc2UgPSAxMDsKICAgICBpZiAodGV4dC5zdGFydHNXaXRoKCIw
eCJfc3RyKSkgewpAQCAtMjg5LDE3ICsyOTIsMTcgQEAgc3RhdGljIEV4cGVjdGVkPHVuc2lnbmVk
LCBQYXJzZXI6OkVycm9yPgogICAgICAgICBhdXRvIHByZXZpb3VzID0gcmVzdWx0OwogICAgICAg
ICByZXN1bHQgPSByZXN1bHQgKiBiYXNlICsgZGlnaXQ7CiAgICAgICAgIGlmIChyZXN1bHQgPCBw
cmV2aW91cykKLSAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPFBhcnNlcjo6RXJyb3I+KFBh
cnNlcjo6RXJyb3IobWFrZVN0cmluZygidWludCBsaXRlcmFsICIsIHRleHQsICIgaXMgb3V0IG9m
IGJvdW5kcyIpKSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IobWFr
ZVN0cmluZygidWludCBsaXRlcmFsICIsIHRleHQsICIgaXMgb3V0IG9mIGJvdW5kcyIpKSk7CiAg
ICAgfQogICAgIHJldHVybiB7IHJlc3VsdCB9OwogfQogCi1zdGF0aWMgRXhwZWN0ZWQ8ZmxvYXQs
IFBhcnNlcjo6RXJyb3I+IGZsb2F0TGl0ZXJhbFRvRmxvYXQoU3RyaW5nVmlldyB0ZXh0KQorc3Rh
dGljIEV4cGVjdGVkPGZsb2F0LCBFcnJvcj4gZmxvYXRMaXRlcmFsVG9GbG9hdChTdHJpbmdWaWV3
IHRleHQpCiB7CiAgICAgc2l6ZV90IHBhcnNlZExlbmd0aDsKICAgICBhdXRvIHJlc3VsdCA9IHBh
cnNlRG91YmxlKHRleHQsIHBhcnNlZExlbmd0aCk7CiAgICAgaWYgKHBhcnNlZExlbmd0aCAhPSB0
ZXh0Lmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxQYXJzZXI6OkVycm9yPihQ
YXJzZXI6OkVycm9yKG1ha2VTdHJpbmcoIkNhbm5vdCBwYXJzZSBmbG9hdCAiLCB0ZXh0KSkpOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IobWFrZVN0cmluZygiQ2Fubm90IHBh
cnNlIGZsb2F0ICIsIHRleHQpKSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihyZXN1
bHQpOwogfQogCkBAIC0zNDMsMTggKzM0NiwxOCBAQCBhdXRvIFBhcnNlcjo6Y29uc3VtZU5vbk5l
Z2F0aXZlSW50ZWdyYWxMCiAgICAgcmV0dXJuIGZhaWwoImludCBsaXRlcmFsIGlzIG5lZ2F0aXZl
Il9zdHIpOwogfQogCi1zdGF0aWMgRXhwZWN0ZWQ8dW5zaWduZWQsIFBhcnNlcjo6RXJyb3I+IHJl
Y29nbml6ZVNpbXBsZVVuc2lnbmVkSW50ZWdlcihTdHJpbmdWaWV3IHN0cmluZ1ZpZXcpCitzdGF0
aWMgRXhwZWN0ZWQ8dW5zaWduZWQsIEVycm9yPiByZWNvZ25pemVTaW1wbGVVbnNpZ25lZEludGVn
ZXIoU3RyaW5nVmlldyBzdHJpbmdWaWV3KQogewogICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CiAg
ICAgaWYgKHN0cmluZ1ZpZXcubGVuZ3RoKCkgPCAxKQotICAgICAgICByZXR1cm4gVW5leHBlY3Rl
ZDxQYXJzZXI6OkVycm9yPihQYXJzZXI6OkVycm9yKG1ha2VTdHJpbmcoIlNpbXBsZSB1bnNpZ25l
ZCBsaXRlcmFsICIsIHN0cmluZ1ZpZXcsICIgaXMgdG9vIHNob3J0IikpKTsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKG1ha2VTdHJpbmcoIlNpbXBsZSB1bnNpZ25lZCBsaXRl
cmFsICIsIHN0cmluZ1ZpZXcsICIgaXMgdG9vIHNob3J0IikpKTsKICAgICBmb3IgKGF1dG8gY29k
ZVBvaW50IDogc3RyaW5nVmlldy5jb2RlUG9pbnRzKCkpIHsKICAgICAgICAgaWYgKGNvZGVQb2lu
dCA8ICcwJyB8fCBjb2RlUG9pbnQgPiAnOScpCi0gICAgICAgICAgICByZXR1cm4gVW5leHBlY3Rl
ZDxQYXJzZXI6OkVycm9yPihQYXJzZXI6OkVycm9yKG1ha2VTdHJpbmcoIlNpbXBsZSB1bnNpZ25l
ZCBsaXRlcmFsICIsIHN0cmluZ1ZpZXcsICIgaXNuJ3Qgb2YgdGhlIGZvcm0gWzAtOV0rIikpKTsK
KyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcihtYWtlU3RyaW5nKCJTaW1w
bGUgdW5zaWduZWQgbGl0ZXJhbCAiLCBzdHJpbmdWaWV3LCAiIGlzbid0IG9mIHRoZSBmb3JtIFsw
LTldKyIpKSk7CiAgICAgICAgIGF1dG8gcHJldmlvdXMgPSByZXN1bHQ7CiAgICAgICAgIHJlc3Vs
dCA9IHJlc3VsdCAqIDEwICsgKGNvZGVQb2ludCAtICcwJyk7CiAgICAgICAgIGlmIChyZXN1bHQg
PCBwcmV2aW91cykKLSAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPFBhcnNlcjo6RXJyb3I+
KFBhcnNlcjo6RXJyb3IobWFrZVN0cmluZygiU2ltcGxlIHVuc2lnbmVkIGxpdGVyYWwgIiwgc3Ry
aW5nVmlldywgIiBpcyBvdXQgb2YgYm91bmRzIikpKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChFcnJvcihtYWtlU3RyaW5nKCJTaW1wbGUgdW5zaWduZWQgbGl0ZXJhbCAiLCBz
dHJpbmdWaWV3LCAiIGlzIG91dCBvZiBib3VuZHMiKSkpOwogICAgIH0KICAgICByZXR1cm4gcmVz
dWx0OwogfQpAQCAtNDE1LDcgKzQxOCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVR5cGVBcmd1bWVu
dCgpIC0+IEV4cGUKICAgICAgICAgcmV0dXJuIEFTVDo6VHlwZUFyZ3VtZW50KFdURk1vdmUoKmNv
bnN0YW50RXhwcmVzc2lvbikpOwogICAgIH0KICAgICBDT05TVU1FX1RZUEUocmVzdWx0LCBJZGVu
dGlmaWVyKTsKLSAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbigqcmVzdWx0KTsKKyAgICBD
b2RlTG9jYXRpb24gbG9jYXRpb24oKnJlc3VsdCk7CiAgICAgcmV0dXJuIEFTVDo6VHlwZUFyZ3Vt
ZW50KG1ha2VVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPihsb2NhdGlvbiwgcmVzdWx0LT5z
dHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCksIEFTVDo6VHlwZUFyZ3VtZW50cygpKSk7CiB9
CiAKQEAgLTUzNCw3ICs1MzcsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VUeXBlKCkgLT4gRXhwZWN0
ZWQ8VW5pCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBhdXRvIGNvbnN0
cnVjdFR5cGVGcm9tU3VmZml4QWJicmV2aWF0ZWQgPSBbJl0oY29uc3QgVHlwZVN1ZmZpeEFiYnJl
dmlhdGVkJiB0eXBlU3VmZml4QWJicmV2aWF0ZWQsIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
PiYmIHByZXZpb3VzKSAtPiBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4gewotICAgICAgICAg
ICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24oKmFkZHJlc3NTcGFjZVRva2VuLCB0eXBlU3Vm
Zml4QWJicmV2aWF0ZWQubG9jYXRpb24pOworICAgICAgICAgICAgQ29kZUxvY2F0aW9uIGxvY2F0
aW9uKCphZGRyZXNzU3BhY2VUb2tlbiwgdHlwZVN1ZmZpeEFiYnJldmlhdGVkLmxvY2F0aW9uKTsK
ICAgICAgICAgICAgIHN3aXRjaCAodHlwZVN1ZmZpeEFiYnJldmlhdGVkLnRva2VuLnR5cGUpIHsK
ICAgICAgICAgICAgIGNhc2UgVG9rZW46OlR5cGU6OlN0YXI6CiAgICAgICAgICAgICAgICAgcmV0
dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihsb2NhdGlvbiwgYWRkcmVzc1Nw
YWNlLCBXVEZNb3ZlKHByZXZpb3VzKSkgfTsKQEAgLTU2NSw3ICs1NjgsNyBAQCBhdXRvIFBhcnNl
cjo6cGFyc2VUeXBlKCkgLT4gRXhwZWN0ZWQ8VW5pCiAgICAgfQogCiAgICAgYXV0byBjb25zdHJ1
Y3RUeXBlRnJvbVN1ZmZpeE5vbkFiYnJldmlhdGVkID0gWyZdKGNvbnN0IFR5cGVTdWZmaXhOb25B
YmJyZXZpYXRlZCYgdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLCBVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4mJiBwcmV2aW91cykgLT4gVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+IHsKLSAg
ICAgICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24oKm5hbWUsIHR5cGVTdWZmaXhOb25BYmJy
ZXZpYXRlZC5sb2NhdGlvbik7CisgICAgICAgIENvZGVMb2NhdGlvbiBsb2NhdGlvbigqbmFtZSwg
dHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLmxvY2F0aW9uKTsKICAgICAgICAgc3dpdGNoICh0eXBl
U3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4udHlwZSkgewogICAgICAgICBjYXNlIFRva2VuOjpU
eXBlOjpTdGFyOgogICAgICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50
ZXJUeXBlPihsb2NhdGlvbiwgKnR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC5hZGRyZXNzU3BhY2Us
IFdURk1vdmUocHJldmlvdXMpKSB9OwpAQCAtMTE4Niw3ICsxMTg5LDcgQEAgYXV0byBQYXJzZXI6
OnBhcnNlRm9yTG9vcCgpIC0+IEV4cGVjdGVkPAogICAgICAgICB9CiAKICAgICAgICAgUEFSU0Uo
Ym9keSwgU3RhdGVtZW50KTsKLSAgICAgICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24ob3Jp
Z2luLT5jb2RlTG9jYXRpb24sICAoKmJvZHkpLT5jb2RlTG9jYXRpb24oKSk7CisgICAgICAgIENv
ZGVMb2NhdGlvbiBsb2NhdGlvbihvcmlnaW4tPmNvZGVMb2NhdGlvbiwgICgqYm9keSktPmNvZGVM
b2NhdGlvbigpKTsKICAgICAgICAgcmV0dXJuIEFTVDo6Rm9yTG9vcChsb2NhdGlvbiwgV1RGTW92
ZShpbml0aWFsaXphdGlvbiksIFdURk1vdmUoY29uZGl0aW9uKSwgV1RGTW92ZShpbmNyZW1lbnQp
LCBXVEZNb3ZlKCpib2R5KSk7CiAgICAgfTsKIApAQCAtMTIxMSw3ICsxMjE0LDcgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlV2hpbGVMb29wKCkgLT4gRXhwZWN0ZQogICAgIENPTlNVTUVfVFlQRShyaWdo
dFBhcmVudGhlc2lzLCBSaWdodFBhcmVudGhlc2lzKTsKICAgICBQQVJTRShib2R5LCBTdGF0ZW1l
bnQpOwogCi0gICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24ob3JpZ2luLT5jb2RlTG9jYXRp
b24sICAoKmJvZHkpLT5jb2RlTG9jYXRpb24oKSk7CisgICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9u
KG9yaWdpbi0+Y29kZUxvY2F0aW9uLCAgKCpib2R5KS0+Y29kZUxvY2F0aW9uKCkpOwogICAgIHJl
dHVybiBBU1Q6OldoaWxlTG9vcChsb2NhdGlvbiwgV1RGTW92ZSgqY29uZGl0aW9uYWwpLCBXVEZN
b3ZlKCpib2R5KSk7CiB9CiAKQEAgLTEzODksNyArMTM5Miw3IEBAIGF1dG8gUGFyc2VyOjpwYXJz
ZUVmZmVjdGZ1bEV4cHJlc3Npb24oKSAKICAgICBpZiAoZXhwcmVzc2lvbnMuc2l6ZSgpID09IDEp
CiAgICAgICAgIHJldHVybiBXVEZNb3ZlKGV4cHJlc3Npb25zWzBdKTsKICAgICB1bnNpZ25lZCBl
bmRPZmZzZXQgPSBtX2xleGVyLnBlZWsoKS5zdGFydE9mZnNldCgpOwotICAgIEFTVDo6Q29kZUxv
Y2F0aW9uIGxvY2F0aW9uKG9yaWdpbi0+c3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KTsKKyAgICBD
b2RlTG9jYXRpb24gbG9jYXRpb24ob3JpZ2luLT5zdGFydE9mZnNldCgpLCBlbmRPZmZzZXQpOwog
ICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpDb21tYUV4cHJlc3Npb24+KGxvY2F0aW9u
LCBXVEZNb3ZlKGV4cHJlc3Npb25zKSkgfTsKIH0KIApAQCAtMTQzMywxNCArMTQzNiwxNCBAQCBh
dXRvIFBhcnNlcjo6cGFyc2VMaW1pdGVkU3VmZml4T3BlcmF0b3IoCiAgICAgICAgIGF1dG8gaWRl
bnRpZmllciA9IGNvbnN1bWVUeXBlKFRva2VuOjpUeXBlOjpJZGVudGlmaWVyKTsKICAgICAgICAg
aWYgKCFpZGVudGlmaWVyKQogICAgICAgICAgICAgcmV0dXJuIFN1ZmZpeEV4cHJlc3Npb24oV1RG
TW92ZShwcmV2aW91cyksIGZhbHNlKTsKLSAgICAgICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRp
b24ocHJldmlvdXMtPmNvZGVMb2NhdGlvbigpLCAqaWRlbnRpZmllcik7CisgICAgICAgIENvZGVM
b2NhdGlvbiBsb2NhdGlvbihwcmV2aW91cy0+Y29kZUxvY2F0aW9uKCksICppZGVudGlmaWVyKTsK
ICAgICAgICAgcmV0dXJuIFN1ZmZpeEV4cHJlc3Npb24obWFrZVVuaXF1ZVJlZjxBU1Q6OkRvdEV4
cHJlc3Npb24+KGxvY2F0aW9uLCBXVEZNb3ZlKHByZXZpb3VzKSwgaWRlbnRpZmllci0+c3RyaW5n
VmlldyhtX2xleGVyKS50b1N0cmluZygpKSwgdHJ1ZSk7CiAgICAgfQogICAgIGNhc2UgVG9rZW46
OlR5cGU6OkFycm93OiB7CiAgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IGNvbnN1bWVUeXBlKFRv
a2VuOjpUeXBlOjpJZGVudGlmaWVyKTsKICAgICAgICAgaWYgKCFpZGVudGlmaWVyKQogICAgICAg
ICAgICAgcmV0dXJuIFN1ZmZpeEV4cHJlc3Npb24oV1RGTW92ZShwcmV2aW91cyksIGZhbHNlKTsK
LSAgICAgICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2NhdGlv
bigpLCAqaWRlbnRpZmllcik7CisgICAgICAgIENvZGVMb2NhdGlvbiBsb2NhdGlvbihwcmV2aW91
cy0+Y29kZUxvY2F0aW9uKCksICppZGVudGlmaWVyKTsKICAgICAgICAgcmV0dXJuIFN1ZmZpeEV4
cHJlc3Npb24obWFrZVVuaXF1ZVJlZjxBU1Q6OkRvdEV4cHJlc3Npb24+KGxvY2F0aW9uLCBtYWtl
VW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihsb2NhdGlvbiwgV1RGTW92ZShw
cmV2aW91cykpLCBpZGVudGlmaWVyLT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCkpLCB0
cnVlKTsKICAgICB9CiAgICAgZGVmYXVsdDogewpAQCAtMTQ0OSw3ICsxNDUyLDcgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlTGltaXRlZFN1ZmZpeE9wZXJhdG9yKAogICAgICAgICBpZiAoIWV4cHJlc3Np
b24pCiAgICAgICAgICAgICByZXR1cm4gU3VmZml4RXhwcmVzc2lvbihXVEZNb3ZlKHByZXZpb3Vz
KSwgZmFsc2UpOwogICAgICAgICBpZiAoYXV0byByaWdodFNxdWFyZUJyYWNrZXQgPSBjb25zdW1l
VHlwZShUb2tlbjo6VHlwZTo6UmlnaHRTcXVhcmVCcmFja2V0KSkgewotICAgICAgICAgICAgQVNU
OjpDb2RlTG9jYXRpb24gbG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2NhdGlvbigpLCAqcmlnaHRT
cXVhcmVCcmFja2V0KTsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbiBsb2NhdGlvbihwcmV2aW91
cy0+Y29kZUxvY2F0aW9uKCksICpyaWdodFNxdWFyZUJyYWNrZXQpOwogICAgICAgICAgICAgcmV0
dXJuIFN1ZmZpeEV4cHJlc3Npb24obWFrZVVuaXF1ZVJlZjxBU1Q6OkluZGV4RXhwcmVzc2lvbj4o
bG9jYXRpb24sIFdURk1vdmUocHJldmlvdXMpLCBXVEZNb3ZlKCpleHByZXNzaW9uKSksIHRydWUp
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKFdURk1vdmUocHJl
dmlvdXMpLCBmYWxzZSk7CkBAIC0xNDczLDE0ICsxNDc2LDE0IEBAIGF1dG8gUGFyc2VyOjpwYXJz
ZVN1ZmZpeE9wZXJhdG9yKFVuaXF1ZVIKICAgICAgICAgYXV0byBpZGVudGlmaWVyID0gY29uc3Vt
ZVR5cGUoVG9rZW46OlR5cGU6OklkZW50aWZpZXIpOwogICAgICAgICBpZiAoIWlkZW50aWZpZXIp
CiAgICAgICAgICAgICByZXR1cm4gU3VmZml4RXhwcmVzc2lvbihXVEZNb3ZlKHByZXZpb3VzKSwg
ZmFsc2UpOwotICAgICAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbihwcmV2aW91cy0+Y29k
ZUxvY2F0aW9uKCksICppZGVudGlmaWVyKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9u
KHByZXZpb3VzLT5jb2RlTG9jYXRpb24oKSwgKmlkZW50aWZpZXIpOwogICAgICAgICByZXR1cm4g
U3VmZml4RXhwcmVzc2lvbihtYWtlVW5pcXVlUmVmPEFTVDo6RG90RXhwcmVzc2lvbj4obG9jYXRp
b24sIFdURk1vdmUocHJldmlvdXMpLCBpZGVudGlmaWVyLT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRv
U3RyaW5nKCkpLCB0cnVlKTsKICAgICB9CiAgICAgY2FzZSBUb2tlbjo6VHlwZTo6QXJyb3c6IHsK
ICAgICAgICAgYXV0byBpZGVudGlmaWVyID0gY29uc3VtZVR5cGUoVG9rZW46OlR5cGU6OklkZW50
aWZpZXIpOwogICAgICAgICBpZiAoIWlkZW50aWZpZXIpCiAgICAgICAgICAgICByZXR1cm4gU3Vm
Zml4RXhwcmVzc2lvbihXVEZNb3ZlKHByZXZpb3VzKSwgZmFsc2UpOwotICAgICAgICBBU1Q6OkNv
ZGVMb2NhdGlvbiBsb2NhdGlvbihwcmV2aW91cy0+Y29kZUxvY2F0aW9uKCksICppZGVudGlmaWVy
KTsKKyAgICAgICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9uKHByZXZpb3VzLT5jb2RlTG9jYXRpb24o
KSwgKmlkZW50aWZpZXIpOwogICAgICAgICByZXR1cm4gU3VmZml4RXhwcmVzc2lvbihtYWtlVW5p
cXVlUmVmPEFTVDo6RG90RXhwcmVzc2lvbj4obG9jYXRpb24sIG1ha2VVbmlxdWVSZWY8QVNUOjpE
ZXJlZmVyZW5jZUV4cHJlc3Npb24+KFdURk1vdmUoKnN1ZmZpeCksIFdURk1vdmUocHJldmlvdXMp
KSwgaWRlbnRpZmllci0+c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpKSwgdHJ1ZSk7CiAg
ICAgfQogICAgIGNhc2UgVG9rZW46OlR5cGU6OkxlZnRTcXVhcmVCcmFja2V0OiB7CkBAIC0xNDg4
LDEzICsxNDkxLDEzIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVN1ZmZpeE9wZXJhdG9yKFVuaXF1ZVIK
ICAgICAgICAgaWYgKCFleHByZXNzaW9uKQogICAgICAgICAgICAgcmV0dXJuIFN1ZmZpeEV4cHJl
c3Npb24oV1RGTW92ZShwcmV2aW91cyksIGZhbHNlKTsKICAgICAgICAgaWYgKGF1dG8gcmlnaHRT
cXVhcmVCcmFja2V0ID0gY29uc3VtZVR5cGUoVG9rZW46OlR5cGU6OlJpZ2h0U3F1YXJlQnJhY2tl
dCkpIHsKLSAgICAgICAgICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uKHByZXZpb3VzLT5j
b2RlTG9jYXRpb24oKSwgKnJpZ2h0U3F1YXJlQnJhY2tldCk7CisgICAgICAgICAgICBDb2RlTG9j
YXRpb24gbG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2NhdGlvbigpLCAqcmlnaHRTcXVhcmVCcmFj
a2V0KTsKICAgICAgICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKG1ha2VVbmlxdWVSZWY8
QVNUOjpJbmRleEV4cHJlc3Npb24+KGxvY2F0aW9uLCBXVEZNb3ZlKHByZXZpb3VzKSwgV1RGTW92
ZSgqZXhwcmVzc2lvbikpLCB0cnVlKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gU3VmZml4
RXhwcmVzc2lvbihXVEZNb3ZlKHByZXZpb3VzKSwgZmFsc2UpOwogICAgIH0KICAgICBjYXNlIFRv
a2VuOjpUeXBlOjpQbHVzUGx1czogewotICAgICAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlv
bihwcmV2aW91cy0+Y29kZUxvY2F0aW9uKCksICpzdWZmaXgpOworICAgICAgICBDb2RlTG9jYXRp
b24gbG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2NhdGlvbigpLCAqc3VmZml4KTsKICAgICAgICAg
YXV0byByZXN1bHQgPSBBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb246OmNyZWF0ZShsb2Nh
dGlvbiwgV1RGTW92ZShwcmV2aW91cykpOwogICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6
RXhwcmVzc2lvbj4+IGNhbGxBcmd1bWVudHM7CiAgICAgICAgIGNhbGxBcmd1bWVudHMuYXBwZW5k
KHJlc3VsdC0+b2xkVmFyaWFibGVSZWZlcmVuY2UoKSk7CkBAIC0xNTA0LDcgKzE1MDcsNyBAQCBh
dXRvIFBhcnNlcjo6cGFyc2VTdWZmaXhPcGVyYXRvcihVbmlxdWVSCiAgICAgfQogICAgIGRlZmF1
bHQ6IHsKICAgICAgICAgQVNTRVJUKHN1ZmZpeC0+dHlwZSA9PSBUb2tlbjo6VHlwZTo6TWludXNN
aW51cyk7Ci0gICAgICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uKHByZXZpb3VzLT5jb2Rl
TG9jYXRpb24oKSwgKnN1ZmZpeCk7CisgICAgICAgIENvZGVMb2NhdGlvbiBsb2NhdGlvbihwcmV2
aW91cy0+Y29kZUxvY2F0aW9uKCksICpzdWZmaXgpOwogICAgICAgICBhdXRvIHJlc3VsdCA9IEFT
VDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6Y3JlYXRlKGxvY2F0aW9uLCBXVEZNb3ZlKHBy
ZXZpb3VzKSk7CiAgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gY2Fs
bEFyZ3VtZW50czsKICAgICAgICAgY2FsbEFyZ3VtZW50cy5hcHBlbmQocmVzdWx0LT5vbGRWYXJp
YWJsZVJlZmVyZW5jZSgpKTsKQEAgLTE1MzAsNyArMTUzMyw3IEBAIGF1dG8gUGFyc2VyOjpwYXJz
ZUV4cHJlc3Npb24oKSAtPiBFeHBlY3QKICAgICBpZiAoZXhwcmVzc2lvbnMuc2l6ZSgpID09IDEp
CiAgICAgICAgIHJldHVybiBXVEZNb3ZlKGV4cHJlc3Npb25zWzBdKTsKICAgICBhdXRvIGVuZE9m
ZnNldCA9IG1fbGV4ZXIucGVlaygpLnN0YXJ0T2Zmc2V0KCk7Ci0gICAgQVNUOjpDb2RlTG9jYXRp
b24gbG9jYXRpb24oc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisgICAgQ29kZUxvY2F0aW9uIGxv
Y2F0aW9uKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwogICAgIHJldHVybiB7IG1ha2VVbmlxdWVS
ZWY8QVNUOjpDb21tYUV4cHJlc3Npb24+KGxvY2F0aW9uLCBXVEZNb3ZlKGV4cHJlc3Npb25zKSkg
fTsKIH0KIApAQCAtMTU0MSwxMSArMTU0NCwxMSBAQCBhdXRvIFBhcnNlcjo6Y29tcGxldGVUZXJu
YXJ5Q29uZGl0aW9uYWwoCiAgICAgQ09OU1VNRV9UWVBFKGNvbG9uLCBDb2xvbik7CiAgICAgUEFS
U0UoZWxzZUV4cHJlc3Npb24sIFBvc3NpYmxlVGVybmFyeUNvbmRpdGlvbmFsKTsKIAotICAgIEFT
VDo6Q29kZUxvY2F0aW9uIHByZWRpY2F0ZUxvY2F0aW9uID0gcHJlZGljYXRlLT5jb2RlTG9jYXRp
b24oKTsKKyAgICBDb2RlTG9jYXRpb24gcHJlZGljYXRlTG9jYXRpb24gPSBwcmVkaWNhdGUtPmNv
ZGVMb2NhdGlvbigpOwogICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gY2Fz
dEFyZ3VtZW50czsKICAgICBjYXN0QXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKHByZWRpY2F0ZSkp
OwogICAgIGF1dG8gYm9vbENhc3QgPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+
KHByZWRpY2F0ZUxvY2F0aW9uLCAiYm9vbCJfc3RyLCBXVEZNb3ZlKGNhc3RBcmd1bWVudHMpKTsK
LSAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbihwcmVkaWNhdGVMb2NhdGlvbiwgKCplbHNl
RXhwcmVzc2lvbiktPmNvZGVMb2NhdGlvbigpKTsKKyAgICBDb2RlTG9jYXRpb24gbG9jYXRpb24o
cHJlZGljYXRlTG9jYXRpb24sICgqZWxzZUV4cHJlc3Npb24pLT5jb2RlTG9jYXRpb24oKSk7CiAg
ICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OlRlcm5hcnlFeHByZXNzaW9uPihsb2NhdGlv
biwgV1RGTW92ZShib29sQ2FzdCksIFdURk1vdmUoKmJvZHlFeHByZXNzaW9uKSwgV1RGTW92ZSgq
ZWxzZUV4cHJlc3Npb24pKSB9OwogfQogCkBAIC0xNTY3LDcgKzE1NzAsNyBAQCBhdXRvIFBhcnNl
cjo6Y29tcGxldGVBc3NpZ25tZW50KFVuaXF1ZVJlCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PEVycm9yPihhc3NpZ25tZW50T3BlcmF0b3IuZXJyb3IoKSk7CiAKICAgICBQQVJTRShyaWdodCwg
UG9zc2libGVUZXJuYXJ5Q29uZGl0aW9uYWwpOwotICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0
aW9uID0geyBsZWZ0LT5jb2RlTG9jYXRpb24oKSwgKCpyaWdodCktPmNvZGVMb2NhdGlvbigpIH07
CisgICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9uID0geyBsZWZ0LT5jb2RlTG9jYXRpb24oKSwgKCpy
aWdodCktPmNvZGVMb2NhdGlvbigpIH07CiAKICAgICBpZiAoYXNzaWdubWVudE9wZXJhdG9yLT50
eXBlID09IFRva2VuOjpUeXBlOjpFcXVhbHNTaWduKQogICAgICAgICByZXR1cm4geyBtYWtlVW5p
cXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KGxvY2F0aW9uLCBXVEZNb3ZlKGxlZnQp
LCBXVEZNb3ZlKCpyaWdodCkpfTsKQEAgLTE2NzYsNyArMTY3OSw3IEBAIGF1dG8gUGFyc2VyOjpj
b21wbGV0ZVBvc3NpYmxlTG9naWNhbEJpbmEKICAgICAgICAgVG9rZW46OlR5cGU6OkFuZAogICAg
ICAgICA+KCkpIHsKICAgICAgICAgUEFSU0UobmV4dCwgUG9zc2libGVSZWxhdGlvbmFsQmluYXJ5
T3BlcmF0aW9uKTsKLSAgICAgICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24ocHJldmlvdXMt
PmNvZGVMb2NhdGlvbigpLCAoKm5leHQpLT5jb2RlTG9jYXRpb24oKSk7CisgICAgICAgIENvZGVM
b2NhdGlvbiBsb2NhdGlvbihwcmV2aW91cy0+Y29kZUxvY2F0aW9uKCksICgqbmV4dCktPmNvZGVM
b2NhdGlvbigpKTsKIAogICAgICAgICBzd2l0Y2ggKGxvZ2ljYWxCaW5hcnlPcGVyYXRpb24tPnR5
cGUpIHsKICAgICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6T3JPcjoKQEAgLTE3MzAsNyArMTczMyw3
IEBAIGF1dG8gUGFyc2VyOjpjb21wbGV0ZVBvc3NpYmxlUmVsYXRpb25hbEIKICAgICAgICAgVG9r
ZW46OlR5cGU6Ok5vdEVxdWFsCiAgICAgICAgID4oKSkgewogICAgICAgICBQQVJTRShuZXh0LCBQ
b3NzaWJsZVNoaWZ0KTsKLSAgICAgICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24ocHJldmlv
dXMtPmNvZGVMb2NhdGlvbigpLCAoKm5leHQpLT5jb2RlTG9jYXRpb24oKSk7CisgICAgICAgIENv
ZGVMb2NhdGlvbiBsb2NhdGlvbihwcmV2aW91cy0+Y29kZUxvY2F0aW9uKCksICgqbmV4dCktPmNv
ZGVMb2NhdGlvbigpKTsKIAogICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lv
bj4+IGNhbGxBcmd1bWVudHM7CiAgICAgICAgIGNhbGxBcmd1bWVudHMuYXBwZW5kKFdURk1vdmUo
cHJldmlvdXMpKTsKQEAgLTE3ODIsNyArMTc4NSw3IEBAIGF1dG8gUGFyc2VyOjpjb21wbGV0ZVBv
c3NpYmxlU2hpZnQoVW5pcXUKICAgICAgICAgVG9rZW46OlR5cGU6OlJpZ2h0U2hpZnQKICAgICAg
ICAgPigpKSB7CiAgICAgICAgIFBBUlNFKG5leHQsIFBvc3NpYmxlQWRkKTsKLSAgICAgICAgQVNU
OjpDb2RlTG9jYXRpb24gbG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2NhdGlvbigpLCAoKm5leHQp
LT5jb2RlTG9jYXRpb24oKSk7CisgICAgICAgIENvZGVMb2NhdGlvbiBsb2NhdGlvbihwcmV2aW91
cy0+Y29kZUxvY2F0aW9uKCksICgqbmV4dCktPmNvZGVMb2NhdGlvbigpKTsKIAogICAgICAgICBW
ZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGNhbGxBcmd1bWVudHM7CiAgICAgICAg
IGNhbGxBcmd1bWVudHMuYXBwZW5kKFdURk1vdmUocHJldmlvdXMpKTsKQEAgLTE4MTcsNyArMTgy
MCw3IEBAIGF1dG8gUGFyc2VyOjpjb21wbGV0ZVBvc3NpYmxlQWRkKFVuaXF1ZVIKICAgICAgICAg
VG9rZW46OlR5cGU6Ok1pbnVzCiAgICAgICAgID4oKSkgewogICAgICAgICBQQVJTRShuZXh0LCBQ
b3NzaWJsZU11bHRpcGx5KTsKLSAgICAgICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24ocHJl
dmlvdXMtPmNvZGVMb2NhdGlvbigpLCAoKm5leHQpLT5jb2RlTG9jYXRpb24oKSk7CisgICAgICAg
IENvZGVMb2NhdGlvbiBsb2NhdGlvbihwcmV2aW91cy0+Y29kZUxvY2F0aW9uKCksICgqbmV4dCkt
PmNvZGVMb2NhdGlvbigpKTsKIAogICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4+IGNhbGxBcmd1bWVudHM7CiAgICAgICAgIGNhbGxBcmd1bWVudHMuYXBwZW5kKFdURk1v
dmUocHJldmlvdXMpKTsKQEAgLTE4NTMsNyArMTg1Niw3IEBAIGF1dG8gUGFyc2VyOjpjb21wbGV0
ZVBvc3NpYmxlTXVsdGlwbHkoVW4KICAgICAgICAgVG9rZW46OlR5cGU6Ok1vZAogICAgICAgICA+
KCkpIHsKICAgICAgICAgUEFSU0UobmV4dCwgUG9zc2libGVQcmVmaXgpOwotICAgICAgICBBU1Q6
OkNvZGVMb2NhdGlvbiBsb2NhdGlvbihwcmV2aW91cy0+Y29kZUxvY2F0aW9uKCksICgqbmV4dCkt
PmNvZGVMb2NhdGlvbigpKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9uKHByZXZpb3Vz
LT5jb2RlTG9jYXRpb24oKSwgKCpuZXh0KS0+Y29kZUxvY2F0aW9uKCkpOwogCiAgICAgICAgIFZl
Y3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gY2FsbEFyZ3VtZW50czsKICAgICAgICAg
Y2FsbEFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZShwcmV2aW91cykpOwpAQCAtMTg5Myw3ICsxODk2
LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlUG9zc2libGVQcmVmaXgoYm9vbCAqaQogICAgICAgICBU
b2tlbjo6VHlwZTo6U3RhcgogICAgID4oKSkgewogICAgICAgICBQQVJTRShuZXh0LCBQb3NzaWJs
ZVByZWZpeCk7Ci0gICAgICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uKCpwcmVmaXgsICgq
bmV4dCktPmNvZGVMb2NhdGlvbigpKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9uKCpw
cmVmaXgsICgqbmV4dCktPmNvZGVMb2NhdGlvbigpKTsKIAogICAgICAgICBzd2l0Y2ggKHByZWZp
eC0+dHlwZSkgewogICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpQbHVzUGx1czogewpAQCAtMjAx
MSw3ICsyMDE0LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlQ2FsbEV4cHJlc3Npb24oKSAtPiBFeAog
ICAgIH0KIAogICAgIENPTlNVTUVfVFlQRShyaWdodFBhcmVudGhlc2lzLCBSaWdodFBhcmVudGhl
c2lzKTsKLSAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbigqbmFtZSwgKnJpZ2h0UGFyZW50
aGVzaXMpOworICAgIENvZGVMb2NhdGlvbiBsb2NhdGlvbigqbmFtZSwgKnJpZ2h0UGFyZW50aGVz
aXMpOwogCiAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihs
b2NhdGlvbiwgV1RGTW92ZShjYWxsTmFtZSksIFdURk1vdmUoYXJndW1lbnRzKSkgfTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJz
ZXIuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQAogI2lu
Y2x1ZGUgIldITFNMRWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5oIgogI2luY2x1ZGUgIldI
TFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbk1l
bWJlci5oIgorI2luY2x1ZGUgIldITFNMRXJyb3IuaCIKICNpbmNsdWRlICJXSExTTEV4cHJlc3Np
b24uaCIKICNpbmNsdWRlICJXSExTTEZhbGx0aHJvdWdoLmgiCiAjaW5jbHVkZSAiV0hMU0xGbG9h
dExpdGVyYWwuaCIKQEAgLTEwNiwyMSArMTA3LDcgQEAgcHVibGljOgogICAgICAgICBVc2VyCiAg
ICAgfTsKIAotICAgIHN0cnVjdCBFcnJvciB7Ci0gICAgICAgIEVycm9yKFN0cmluZyYmIGVycm9y
KQotICAgICAgICAgICAgOiBlcnJvcihXVEZNb3ZlKGVycm9yKSkKLSAgICAgICAgewotICAgICAg
ICB9Ci0KLSAgICAgICAgU3RyaW5nIGVycm9yOwotCi0gICAgICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQucHJpbnQoZXJyb3Ip
OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIE9wdGlvbmFsPEVycm9yPiBwYXJzZShQcm9ncmFt
JiwgU3RyaW5nVmlldywgTW9kZSk7CisgICAgRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IHBhcnNlKFBy
b2dyYW0mLCBTdHJpbmdWaWV3LCBNb2RlKTsKIAogcHJpdmF0ZToKICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIG5vdCBuZWVkIHRoaXMKQEAgLTE1OCwxMyArMTQ1LDEzIEBAIHByaXZhdGU6CiAgICAg
RXhwZWN0ZWQ8QVNUOjpUeXBlQXJndW1lbnQsIEVycm9yPiBwYXJzZVR5cGVBcmd1bWVudCgpOwog
ICAgIEV4cGVjdGVkPEFTVDo6VHlwZUFyZ3VtZW50cywgRXJyb3I+IHBhcnNlVHlwZUFyZ3VtZW50
cygpOwogICAgIHN0cnVjdCBUeXBlU3VmZml4QWJicmV2aWF0ZWQgewotICAgICAgICBBU1Q6OkNv
ZGVMb2NhdGlvbiBsb2NhdGlvbjsKKyAgICAgICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9uOwogICAg
ICAgICBUb2tlbiB0b2tlbjsKICAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IG51bUVsZW1lbnRz
OwogICAgIH07CiAgICAgRXhwZWN0ZWQ8VHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBFcnJvcj4gcGFy
c2VUeXBlU3VmZml4QWJicmV2aWF0ZWQoKTsKICAgICBzdHJ1Y3QgVHlwZVN1ZmZpeE5vbkFiYnJl
dmlhdGVkIHsKLSAgICAgICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb247CisgICAgICAgIENv
ZGVMb2NhdGlvbiBsb2NhdGlvbjsKICAgICAgICAgVG9rZW4gdG9rZW47CiAgICAgICAgIE9wdGlv
bmFsPEFTVDo6QWRkcmVzc1NwYWNlPiBhZGRyZXNzU3BhY2U7CiAgICAgICAgIE9wdGlvbmFsPHVu
c2lnbmVkPiBudW1FbGVtZW50czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUHJlcGFyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAkocmV2aXNpb24gMjQ3NzAwKQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTUsMTAgKzk1LDExIEBAIHN0YXRpYyBib29sIGR1bXBBU1RBdEVuZElm
TmVlZGVkKFByb2dyYW0KICNkZWZpbmUgQ0hFQ0tfUEFTUyhwYXNzLCAuLi4pIFwKICAgICBkbyB7
IFwKICAgICAgICAgZHVtcEFTVEJldHdlZW5FYWNoUGFzc0lmTmVlZGVkKHByb2dyYW0sICJBU1Qg
YmVmb3JlICIgIyBwYXNzKTsgXAotICAgICAgICBpZiAoIXBhc3MoX19WQV9BUkdTX18pKSB7IFwK
KyAgICAgICAgYXV0byByZXN1bHQgPSBwYXNzKF9fVkFfQVJHU19fKTsgXAorICAgICAgICBpZiAo
IXJlc3VsdCkgeyBcCiAgICAgICAgICAgICBpZiAoZHVtcFBhc3NGYWlsdXJlKSBcCi0gICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgcGFzczogIiAjIHBhc3MpOyBcCi0gICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OyBcCisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWls
ZWQgcGFzczogIiAjIHBhc3MsICIgIiwgcmVzdWx0LmVycm9yKCkudG9TdHJpbmcoKSk7IFwKKyAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChyZXN1bHQuZXJyb3IoKSk7IFwKICAgICAg
ICAgfSBcCiAgICAgfSB3aGlsZSAoMCkKIApAQCAtMTA4LDE0ICsxMDksMTUgQEAgc3RhdGljIGJv
b2wgZHVtcEFTVEF0RW5kSWZOZWVkZWQoUHJvZ3JhbQogICAgICAgICBwYXNzKF9fVkFfQVJHU19f
KTsgXAogICAgIH0gd2hpbGUgKDApCiAKLXN0YXRpYyBPcHRpb25hbDxQcm9ncmFtPiBwcmVwYXJl
U2hhcmVkKFN0cmluZyYgd2hsc2xTb3VyY2UpCitzdGF0aWMgRXhwZWN0ZWQ8UHJvZ3JhbSwgRXJy
b3I+IHByZXBhcmVTaGFyZWQoU3RyaW5nJiB3aGxzbFNvdXJjZSkKIHsKICAgICBQcm9ncmFtIHBy
b2dyYW07CiAgICAgUGFyc2VyIHBhcnNlcjsKLSAgICBpZiAoYXV0byBwYXJzZUZhaWx1cmUgPSBw
YXJzZXIucGFyc2UocHJvZ3JhbSwgd2hsc2xTb3VyY2UsIFBhcnNlcjo6TW9kZTo6VXNlcikpIHsK
KyAgICBhdXRvIHBhcnNlUmVzdWx0ID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHdobHNsU291cmNl
LCBQYXJzZXI6Ok1vZGU6OlVzZXIpOworICAgIGlmICghcGFyc2VSZXN1bHQpIHsKICAgICAgICAg
aWYgKGR1bXBQYXNzRmFpbHVyZSkKLSAgICAgICAgICAgIGRhdGFMb2dMbigiZmFpbGVkIHRvIHBh
cnNlIHRoZSBwcm9ncmFtOiAiLCAqcGFyc2VGYWlsdXJlKTsKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiZmFpbGVkIHRvIHBhcnNlIHRoZSBwcm9n
cmFtOiAiLCBwYXJzZVJlc3VsdC5lcnJvcigpLnRvU3RyaW5nKCkpOworICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQocGFyc2VSZXN1bHQuZXJyb3IoKSk7CiAgICAgfQogICAgIGluY2x1ZGVT
dGFuZGFyZExpYnJhcnkocHJvZ3JhbSwgcGFyc2VyLCBwYXJzZUZ1bGxTdGFuZGFyZExpYnJhcnkp
OwogCkBAIC0xNDksMTQgKzE1MSwxNCBAQCBzdGF0aWMgT3B0aW9uYWw8UHJvZ3JhbT4gcHJlcGFy
ZVNoYXJlZChTCiAgICAgcmV0dXJuIHByb2dyYW07CiB9CiAKLU9wdGlvbmFsPFJlbmRlclByZXBh
cmVSZXN1bHQ+IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwgUmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yJiByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpCitFeHBlY3RlZDxSZW5kZXJQcmVwYXJl
UmVzdWx0LCBFcnJvcj4gcHJlcGFyZShTdHJpbmcmIHdobHNsU291cmNlLCBSZW5kZXJQaXBlbGlu
ZURlc2NyaXB0b3ImIHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcikKIHsKICAgICBhdXRvIHByb2dy
YW0gPSBwcmVwYXJlU2hhcmVkKHdobHNsU291cmNlKTsKICAgICBpZiAoIXByb2dyYW0pCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChw
cm9ncmFtLmVycm9yKCkpOwogICAgIGF1dG8gbWF0Y2hlZFNlbWFudGljcyA9IG1hdGNoU2VtYW50
aWNzKCpwcm9ncmFtLCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwogICAgIGlmICghbWF0Y2hl
ZFNlbWFudGljcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKEVycm9yKCJDb3VsZCBub3QgbWF0Y2ggc2VtYW50aWNzIl9zdHIpKTsK
IAogICAgIGF1dG8gZ2VuZXJhdGVkQ29kZSA9IE1ldGFsOjpnZW5lcmF0ZU1ldGFsQ29kZSgqcHJv
Z3JhbSwgV1RGTW92ZSgqbWF0Y2hlZFNlbWFudGljcyksIHJlbmRlclBpcGVsaW5lRGVzY3JpcHRv
ci5sYXlvdXQpOwogCkBAIC0xNjcsMTcgKzE2OSwxNyBAQCBPcHRpb25hbDxSZW5kZXJQcmVwYXJl
UmVzdWx0PiBwcmVwYXJlKFN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotT3B0aW9uYWw8Q29t
cHV0ZVByZXBhcmVSZXN1bHQ+IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwgQ29tcHV0ZVBp
cGVsaW5lRGVzY3JpcHRvciYgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcikKK0V4cGVjdGVkPENv
bXB1dGVQcmVwYXJlUmVzdWx0LCBFcnJvcj4gcHJlcGFyZShTdHJpbmcmIHdobHNsU291cmNlLCBD
b21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJiBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKQogewog
ICAgIGF1dG8gcHJvZ3JhbSA9IHByZXBhcmVTaGFyZWQod2hsc2xTb3VyY2UpOwogICAgIGlmICgh
cHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKHByb2dyYW0uZXJyb3IoKSk7CiAgICAgYXV0byBtYXRjaGVkU2VtYW50aWNz
ID0gbWF0Y2hTZW1hbnRpY3MoKnByb2dyYW0sIGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOwog
ICAgIGlmICghbWF0Y2hlZFNlbWFudGljcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJDb3VsZCBub3QgbWF0Y2ggc2Vt
YW50aWNzIl9zdHIpKTsKICAgICBhdXRvIGNvbXB1dGVEaW1lbnNpb25zID0gV0hMU0w6OmNvbXB1
dGVEaW1lbnNpb25zKCpwcm9ncmFtLCAqbWF0Y2hlZFNlbWFudGljcy0+c2hhZGVyKTsKICAgICBp
ZiAoIWNvbXB1dGVEaW1lbnNpb25zKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkNvdWxkIG5vdCBtYXRjaCBjb21wdXRl
IGRpbWVuc2lvbnMiX3N0cikpOwogCiAgICAgYXV0byBnZW5lcmF0ZWRDb2RlID0gTWV0YWw6Omdl
bmVyYXRlTWV0YWxDb2RlKCpwcm9ncmFtLCBXVEZNb3ZlKCptYXRjaGVkU2VtYW50aWNzKSwgY29t
cHV0ZVBpcGVsaW5lRGVzY3JpcHRvci5sYXlvdXQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuaAkocmV2aXNpb24gMjQ3
NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUp
CiAKKyNpbmNsdWRlICJXSExTTEVycm9yLmgiCiAjaW5jbHVkZSAiV0hMU0xQaXBlbGluZURlc2Ny
aXB0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMzQsMTMgKzM1
LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAotLy8gRklY
TUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU2ODIgR2VuZXJh
dGUgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZXMgYW5kIHJldHVybiB0aGVtIGhlcmUuCiBzdHJ1
Y3QgUmVuZGVyUHJlcGFyZVJlc3VsdCB7CiAgICAgU3RyaW5nIG1ldGFsU291cmNlOwogICAgIFN0
cmluZyBtYW5nbGVkVmVydGV4RW50cnlQb2ludE5hbWU7CiAgICAgU3RyaW5nIG1hbmdsZWRGcmFn
bWVudEVudHJ5UG9pbnROYW1lOwogfTsKLU9wdGlvbmFsPFJlbmRlclByZXBhcmVSZXN1bHQ+IHBy
ZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJik7CitF
eHBlY3RlZDxSZW5kZXJQcmVwYXJlUmVzdWx0LCBFcnJvcj4gcHJlcGFyZShTdHJpbmcmIHdobHNs
U291cmNlLCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImKTsKIAogc3RydWN0IENvbXB1dGVEaW1l
bnNpb25zIHsKICAgICB1bnNpZ25lZCB3aWR0aDsKQEAgLTUzLDcgKzUzLDcgQEAgc3RydWN0IENv
bXB1dGVQcmVwYXJlUmVzdWx0IHsKICAgICBTdHJpbmcgbWFuZ2xlZEVudHJ5UG9pbnROYW1lOwog
ICAgIENvbXB1dGVEaW1lbnNpb25zIGNvbXB1dGVEaW1lbnNpb25zOwogfTsKLU9wdGlvbmFsPENv
bXB1dGVQcmVwYXJlUmVzdWx0PiBwcmVwYXJlKFN0cmluZyYgd2hsc2xTb3VyY2UsIENvbXB1dGVQ
aXBlbGluZURlc2NyaXB0b3ImKTsKK0V4cGVjdGVkPENvbXB1dGVQcmVwYXJlUmVzdWx0LCBFcnJv
cj4gcHJlcGFyZShTdHJpbmcmIHdobHNsU291cmNlLCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9y
Jik7CiAKIH0gLy8gbmFtZXNwYWNlIFdITFNMCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVy
LmNwcAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUwLDcg
KzU1MCw3IEBAIHZvaWQgUHJvcGVydHlSZXNvbHZlcjo6dmlzaXQoQVNUOjpBc3NpZ24KIHZvaWQg
UHJvcGVydHlSZXNvbHZlcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJiBy
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKQogewogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlRXhwcmVzc2lvbigpKTsKLSAgICBpZiAoZXJy
b3IoKSkKKyAgICBpZiAoaGFzRXJyb3IoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBs
b2NhdGlvbiA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2lvbkNoZWNr
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUmVjdXJzaW9uQ2hlY2tlci5jcHAJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaW9uQ2hlY2tlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1fc3RhcnRlZFZpc2l0aW5nLmFkZCgmZnVuY3Rpb25EZWZpbml0aW9uKTsKICAg
ICAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgc2V0RXJyb3Io
KTsKKyAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3QgdXNlIHJlY3Vyc2lvbiBpbiB0
aGUgY2FsbCBncmFwaC4iLCBmdW5jdGlvbkRlZmluaXRpb24uY29kZUxvY2F0aW9uKCkpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC03NywxMSArNzcsMTEgQEAgcHJpdmF0
ZToKICAgICBIYXNoU2V0PEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uKj4gbV9maW5pc2hlZFZpc2l0
aW5nOwogfTsKIAotYm9vbCBjaGVja1JlY3Vyc2lvbihQcm9ncmFtJiBwcm9ncmFtKQorRXhwZWN0
ZWQ8dm9pZCwgRXJyb3I+IGNoZWNrUmVjdXJzaW9uKFByb2dyYW0mIHByb2dyYW0pCiB7CiAgICAg
UmVjdXJzaW9uQ2hlY2tlciByZWN1cnNpb25DaGVja2VyOwogICAgIHJlY3Vyc2lvbkNoZWNrZXIu
VmlzaXRvcjo6dmlzaXQocHJvZ3JhbSk7Ci0gICAgcmV0dXJuICFyZWN1cnNpb25DaGVja2VyLmVy
cm9yKCk7CisgICAgcmV0dXJuIHJlY3Vyc2lvbkNoZWNrZXIuZ2V0RXJyb3IoKTsKIH0KIAogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpb25D
aGVja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xSZWN1cnNpb25DaGVja2VyLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaW9uQ2hlY2tlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNywxMyArMjcsMTYgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNp
bmNsdWRlICJXSExTTEVycm9yLmgiCisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAogY2xhc3MgUHJvZ3JhbTsKIAot
Ym9vbCBjaGVja1JlY3Vyc2lvbihQcm9ncmFtJik7CitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gY2hl
Y2tSZWN1cnNpb24oUHJvZ3JhbSYpOwogCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlw
ZUNoZWNrZXIuY3BwCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAyLDE0ICsxMDIsMTQgQEAgdm9pZCBSZWN1cnNpdmVUeXBlQ2hlY2tlcjo6dmlzaXQo
QVNUOjpSZQogewogfQogCi1ib29sIGNoZWNrUmVjdXJzaXZlVHlwZXMoUHJvZ3JhbSYgcHJvZ3Jh
bSkKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBjaGVja1JlY3Vyc2l2ZVR5cGVzKFByb2dyYW0mIHBy
b2dyYW0pCiB7CiAgICAgUmVjdXJzaXZlVHlwZUNoZWNrZXIgcmVjdXJzaXZlVHlwZUNoZWNrZXI7
CiAgICAgZm9yIChhdXRvJiB0eXBlRGVmaW5pdGlvbiA6IHByb2dyYW0udHlwZURlZmluaXRpb25z
KCkpCiAgICAgICAgIHJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdCh0eXBl
RGVmaW5pdGlvbik7CiAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3Jh
bS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygpKQogICAgICAgICByZWN1cnNpdmVUeXBlQ2hlY2tlci5j
aGVja0Vycm9yQW5kVmlzaXQoc3RydWN0dXJlRGVmaW5pdGlvbik7Ci0gICAgcmV0dXJuICFyZWN1
cnNpdmVUeXBlQ2hlY2tlci5lcnJvcigpOworICAgIHJldHVybiByZWN1cnNpdmVUeXBlQ2hlY2tl
ci5nZXRFcnJvcigpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXSExTTApJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVj
dXJzaXZlVHlwZUNoZWNrZXIuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVk
ZSAiV0hMU0xFcnJvci5oIgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTM0LDcgKzM2LDcgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogY2xhc3Mg
UHJvZ3JhbTsKIAotYm9vbCBjaGVja1JlY3Vyc2l2ZVR5cGVzKFByb2dyYW0mKTsKK0V4cGVjdGVk
PHZvaWQsIEVycm9yPiBjaGVja1JlY3Vyc2l2ZVR5cGVzKFByb2dyYW0mKTsKIAogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFy
eVV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnlVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyNDc3
MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJk
TGlicmFyeVV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDggKzc5LDkgQEAgdm9p
ZCBpbmNsdWRlU3RhbmRhcmRMaWJyYXJ5KFByb2dyYW0mIHBybwogewogICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxTdHJpbmc+IHN0YW5kYXJkTGlicmFyeShkZWNvbXByZXNzQW5kRGVjb2RlU3Rh
bmRhcmRMaWJyYXJ5KCkpOwogICAgIGlmIChwYXJzZUZ1bGxTdGFuZGFyZExpYnJhcnkpIHsKLSAg
ICAgICAgaWYgKGF1dG8gcGFyc2VGYWlsdXJlID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHN0YW5k
YXJkTGlicmFyeS5nZXQoKSwgUGFyc2VyOjpNb2RlOjpTdGFuZGFyZExpYnJhcnkpKSB7Ci0gICAg
ICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwYXJzZSB0aGUgKGZ1bGwpIHN0YW5kYXJkIGxp
YnJhcnk6ICIsICpwYXJzZUZhaWx1cmUpOworICAgICAgICBhdXRvIHBhcnNlUmVzdWx0ID0gcGFy
c2VyLnBhcnNlKHByb2dyYW0sIHN0YW5kYXJkTGlicmFyeS5nZXQoKSwgUGFyc2VyOjpNb2RlOjpT
dGFuZGFyZExpYnJhcnkpOworICAgICAgICBpZiAoIXBhcnNlUmVzdWx0KSB7CisgICAgICAgICAg
ICBkYXRhTG9nTG4oImZhaWxlZCB0byBwYXJzZSB0aGUgKGZ1bGwpIHN0YW5kYXJkIGxpYnJhcnk6
ICIsIHBhcnNlUmVzdWx0LmVycm9yKCkudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CkBAIC04OSw4ICs5MCw4
IEBAIHZvaWQgaW5jbHVkZVN0YW5kYXJkTGlicmFyeShQcm9ncmFtJiBwcm8KICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIFN1YnN0cmluZ0xvY2F0aW9uPj4gc3RhbmRh
cmRMaWJyYXJ5RnVuY3Rpb25NYXAoY29tcHV0ZVN0YW5kYXJkTGlicmFyeUZ1bmN0aW9uTWFwKCkp
OwogCiAgICAgYXV0byBzdHJpbmdWaWV3ID0gU3RyaW5nVmlldyhzdGFuZGFyZExpYnJhcnkuZ2V0
KCkpLnN1YnN0cmluZygwLCBmaXJzdEZ1bmN0aW9uT2Zmc2V0SW5TdGFuZGFyZExpYnJhcnkoKSk7
Ci0gICAgYXV0byBwYXJzZUZhaWx1cmUgPSBwYXJzZXIucGFyc2UocHJvZ3JhbSwgc3RyaW5nVmll
dywgUGFyc2VyOjpNb2RlOjpTdGFuZGFyZExpYnJhcnkpOwotICAgIEFTU0VSVF9VTlVTRUQocGFy
c2VGYWlsdXJlLCAhcGFyc2VGYWlsdXJlKTsKKyAgICBhdXRvIHBhcnNlUmVzdWx0ID0gcGFyc2Vy
LnBhcnNlKHByb2dyYW0sIHN0cmluZ1ZpZXcsIFBhcnNlcjo6TW9kZTo6U3RhbmRhcmRMaWJyYXJ5
KTsKKyAgICBBU1NFUlRfVU5VU0VEKHBhcnNlUmVzdWx0LCBwYXJzZVJlc3VsdCk7CiAKICAgICBO
YW1lRmluZGVyIG5hbWVGaW5kZXI7CiAgICAgbmFtZUZpbmRlci5WaXNpdG9yOjp2aXNpdChwcm9n
cmFtKTsKQEAgLTEwOSw4ICsxMTAsOSBAQCB2b2lkIGluY2x1ZGVTdGFuZGFyZExpYnJhcnkoUHJv
Z3JhbSYgcHJvCiAgICAgICAgICAgICBpZiAoaXRlcmF0b3IgPT0gc3RhbmRhcmRMaWJyYXJ5RnVu
Y3Rpb25NYXAuZ2V0KCkuZW5kKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICBhdXRvIHN0cmluZ1ZpZXcgPSBTdHJpbmdWaWV3KHN0YW5kYXJkTGlicmFyeS5nZXQoKSku
c3Vic3RyaW5nKGl0ZXJhdG9yLT52YWx1ZS5zdGFydCwgaXRlcmF0b3ItPnZhbHVlLmVuZCAtIGl0
ZXJhdG9yLT52YWx1ZS5zdGFydCk7Ci0gICAgICAgICAgICBpZiAoYXV0byBwYXJzZUZhaWx1cmUg
PSBwYXJzZXIucGFyc2UocHJvZ3JhbSwgc3RyaW5nVmlldywgUGFyc2VyOjpNb2RlOjpTdGFuZGFy
ZExpYnJhcnkpKSB7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8gcGFyc2Ug
dGhlIChwYXJ0aWFsKSBzdGFuZGFyZCBsaWJyYXJ5OiAiLCAqcGFyc2VGYWlsdXJlKTsKKyAgICAg
ICAgICAgIGF1dG8gcGFyc2VSZXN1bHQgPSBwYXJzZXIucGFyc2UocHJvZ3JhbSwgc3RyaW5nVmll
dywgUGFyc2VyOjpNb2RlOjpTdGFuZGFyZExpYnJhcnkpOworICAgICAgICAgICAgaWYgKCFwYXJz
ZVJlc3VsdCkgeworICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiZmFpbGVkIHRvIHBhcnNlIHRo
ZSAocGFydGlhbCkgc3RhbmRhcmQgbGlicmFyeTogIiwgcGFyc2VSZXN1bHQuZXJyb3IoKS50b1N0
cmluZygpKTsKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGF0ZW1l
bnRCZWhhdmlvckNoZWNrZXIuY3BwCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHZpc2l0
KEFTVDo6RG9XaGlsZUxvb3AmIGRvV2hpbGVMb29wKSBvdmVycmlkZQogICAgIHsKICAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGRvV2hpbGVMb29wLmJvZHkoKSk7Ci0gICAgICAgIGlmIChlcnJv
cigpKQorICAgICAgICBpZiAoaGFzRXJyb3IoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgYXV0byBiID0gbV9zdGFjay50YWtlTGFzdCgpOwogICAgICAgICBiLnJlbW92ZShCZWhhdmlv
cjo6QnJlYWspOwpAQCAtMTA3LDcgKzEwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIHNvIHdl
IGNhbiBqdXN0IGlnbm9yZSB0aGUgaW5pdGlhbGl6YXRpb24uCiAKICAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGZvckxvb3AuYm9keSgpKTsKLSAgICAgICAgaWYgKGVycm9yKCkpCisgICAgICAg
IGlmIChoYXNFcnJvcigpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBhdXRvIGIgPSBt
X3N0YWNrLnRha2VMYXN0KCk7CiAgICAgICAgIGIucmVtb3ZlKEJlaGF2aW9yOjpCcmVhayk7CkBA
IC0xMTksNyArMTE5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHZpc2l0KEFTVDo6V2hpbGVMb29w
JiB3aGlsZUxvb3ApIG92ZXJyaWRlCiAgICAgewogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
d2hpbGVMb29wLmJvZHkoKSk7Ci0gICAgICAgIGlmIChlcnJvcigpKQorICAgICAgICBpZiAoaGFz
RXJyb3IoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYXV0byBiID0gbV9zdGFjay50
YWtlTGFzdCgpOwogICAgICAgICBiLnJlbW92ZShCZWhhdmlvcjo6QnJlYWspOwpAQCAtMTQzLDEz
ICsxNDMsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgT3B0aW9uU2V0PEJlaGF2aW9yPiByZWR1Y3Rp
b24gPSB7IH07CiAgICAgICAgIGZvciAoYXV0byYgc3dpdGNoQ2FzZSA6IHN3aXRjaFN0YXRlbWVu
dC5zd2l0Y2hDYXNlcygpKSB7CiAgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3dpdGNo
Q2FzZSk7Ci0gICAgICAgICAgICBpZiAoZXJyb3IoKSkKKyAgICAgICAgICAgIGlmIChoYXNFcnJv
cigpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGF1dG8gYiA9IG1fc3Rh
Y2sudGFrZUxhc3QoKTsKICAgICAgICAgICAgIHJlZHVjdGlvbiA9IHJlZHVjdGlvbiB8IGI7CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKHJlZHVjdGlvbi5jb250YWlucyhCZWhhdmlvcjo6Tm90aGlu
ZykpIHsKLSAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICBzZXRFcnJvcihFcnJv
cigiU3dpdGNoIHN0YXRlbWVudCBtdXN0IGVuZCBpbiBhIGJyZWFrL2ZhbGx0aHJvdWdoL3JldHVy
biIsIHN3aXRjaFN0YXRlbWVudC5sb2NhdGlvbikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIHJlZHVjdGlvbi5yZW1vdmUoQmVoYXZpb3I6OkJyZWFrKTsKQEAgLTE2
MSwxMyArMTYxLDEzIEBAIHByaXZhdGU6CiAgICAgdm9pZCB2aXNpdChBU1Q6OklmU3RhdGVtZW50
JiBpZlN0YXRlbWVudCkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChpZlN0YXRlbWVudC5ib2R5KCkpOwotICAgICAgICBpZiAoZXJyb3IoKSkKKyAgICAgICAgaWYg
KGhhc0Vycm9yKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGF1dG8gYiA9IG1fc3Rh
Y2sudGFrZUxhc3QoKTsKICAgICAgICAgT3B0aW9uU2V0PEJlaGF2aW9yPiBiUHJpbWU7CiAgICAg
ICAgIGlmIChpZlN0YXRlbWVudC5lbHNlQm9keSgpKSB7CiAgICAgICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoKmlmU3RhdGVtZW50LmVsc2VCb2R5KCkpOwotICAgICAgICAgICAgaWYgKGVycm9y
KCkpCisgICAgICAgICAgICBpZiAoaGFzRXJyb3IoKSkKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICBiUHJpbWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CiAgICAgICAgIH0gZWxz
ZQpAQCAtMTkwLDIyICsxOTAsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgT3B0aW9uU2V0PEJlaGF2
aW9yPiByZWR1Y3Rpb24gPSB7IH07CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxv
Y2suc3RhdGVtZW50cygpLnNpemUoKSAtIDE7ICsraSkgewogICAgICAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGJsb2NrLnN0YXRlbWVudHMoKVtpXSk7Ci0gICAgICAgICAgICBpZiAoZXJyb3Io
KSkKKyAgICAgICAgICAgIGlmIChoYXNFcnJvcigpKQogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIGF1dG8gYiA9IG1fc3RhY2sudGFrZUxhc3QoKTsKICAgICAgICAgICAgIGlm
ICghYi5jb250YWlucyhCZWhhdmlvcjo6Tm90aGluZykpIHsKLSAgICAgICAgICAgICAgICBzZXRF
cnJvcigpOworICAgICAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJTdGF0ZW1lbnQgaW5zaWRl
IGFuIGlubmVyIGJsb2NrIG11c3QgYmUgcmVhY2hhYmxlLiIsIGJsb2NrLnN0YXRlbWVudHMoKVtp
XS5sb2NhdGlvbikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGIucmVtb3ZlKEJlaGF2aW9yOjpOb3RoaW5nKTsKICAgICAgICAgICAgIGlmIChi
LmNvbnRhaW5zKEJlaGF2aW9yOjpGYWxsdGhyb3VnaCkpIHsKLSAgICAgICAgICAgICAgICBzZXRF
cnJvcigpOworICAgICAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJGYWxsdGhyb3VnaCBtdXN0
IGJlIHRoZSBsYXN0IHN0YXRlbWVudCBpbiBhIGJsb2NrLiIsIGJsb2NrLnN0YXRlbWVudHMoKVtp
XS5sb2NhdGlvbikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHJlZHVjdGlvbiA9IHJlZHVjdGlvbiB8IGI7CiAgICAgICAgIH0KICAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGJsb2NrLnN0YXRlbWVudHMoKVtibG9jay5zdGF0ZW1lbnRzKCku
c2l6ZSgpIC0gMV0pOwotICAgICAgICBpZiAoZXJyb3IoKSkKKyAgICAgICAgaWYgKGhhc0Vycm9y
KCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGF1dG8gYiA9IG1fc3RhY2sudGFrZUxh
c3QoKTsKICAgICAgICAgbV9zdGFjay5hcHBlbmQocmVkdWN0aW9uIHwgYik7CkBAIC0yMTksMjUg
KzIxOSwyNSBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxPcHRpb25TZXQ8QmVoYXZpb3I+PiBtX3N0
YWNrOwogfTsKIAotYm9vbCBjaGVja1N0YXRlbWVudEJlaGF2aW9yKFByb2dyYW0mIHByb2dyYW0p
CitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gY2hlY2tTdGF0ZW1lbnRCZWhhdmlvcihQcm9ncmFtJiBw
cm9ncmFtKQogewogICAgIFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlciBzdGF0ZW1lbnRCZWhhdmlv
ckNoZWNrZXI7CiAgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1
bmN0aW9uRGVmaW5pdGlvbnMoKSkgewogICAgICAgICBzdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXIu
VmlzaXRvcjo6dmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKLSAgICAgICAgaWYgKHN0YXRlbWVu
dEJlaGF2aW9yQ2hlY2tlci5lcnJvcigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpZiAoc3RhdGVtZW50QmVoYXZpb3JDaGVja2VyLmhhc0Vycm9yKCkpCisgICAgICAgICAg
ICByZXR1cm4gc3RhdGVtZW50QmVoYXZpb3JDaGVja2VyLmdldEVycm9yKCk7CiAgICAgICAgIGF1
dG8gYmVoYXZpb3IgPSBzdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXIudGFrZUZ1bmN0aW9uQmVoYXZp
b3IoKTsKICAgICAgICAgaWYgKG1hdGNoZXMoZnVuY3Rpb25EZWZpbml0aW9uLT50eXBlKCksIHBy
b2dyYW0uaW50cmluc2ljcygpLnZvaWRUeXBlKCkpKSB7CiAgICAgICAgICAgICBiZWhhdmlvci5y
ZW1vdmUoU3RhdGVtZW50QmVoYXZpb3JDaGVja2VyOjpCZWhhdmlvcjo6UmV0dXJuKTsKICAgICAg
ICAgICAgIGJlaGF2aW9yLnJlbW92ZShTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXI6OkJlaGF2aW9y
OjpOb3RoaW5nKTsKICAgICAgICAgICAgIGlmIChiZWhhdmlvciAhPSBPcHRpb25TZXQ8U3RhdGVt
ZW50QmVoYXZpb3JDaGVja2VyOjpCZWhhdmlvcj4oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJ2b2lk
IGZ1bmN0aW9ucyBtdXN0IHJldHVybiBub3RoaW5nLiIpKTsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGlmIChiZWhhdmlvciAhPSBTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXI6OkJlaGF2
aW9yOjpSZXR1cm4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiTm9uLXZvaWQgZnVuY3Rpb25zIG11c3Qg
cmV0dXJuIHNvbWV0aGluZy4iKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIHsgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV0hMU0wKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhdGVtZW50QmVoYXZpb3JDaGVj
a2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXIuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGF0ZW1lbnRCZWhhdmlvckNo
ZWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTMgKzI3LDE2IEBACiAKICNpZiBFTkFCTEUo
V0VCR1BVKQogCisjaW5jbHVkZSAiV0hMU0xFcnJvci5oIgorI2luY2x1ZGUgPHd0Zi9FeHBlY3Rl
ZC5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7CiAKIGNsYXNz
IFByb2dyYW07CiAKLWJvb2wgY2hlY2tTdGF0ZW1lbnRCZWhhdmlvcihQcm9ncmFtJik7CitFeHBl
Y3RlZDx2b2lkLCBFcnJvcj4gY2hlY2tTdGF0ZW1lbnRCZWhhdmlvcihQcm9ncmFtJik7CiAKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVz
aXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5j
cHAJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Niw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8QVNUOjpBcnJheVR5cGU+PiBtX2FycmF5VHlwZXM7CiB9OwogCi1ib29sIHN5bnRoZXNp
emVBcnJheU9wZXJhdG9yTGVuZ3RoKFByb2dyYW0mIHByb2dyYW0pCitFeHBlY3RlZDx2b2lkLCBF
cnJvcj4gc3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgoUHJvZ3JhbSYgcHJvZ3JhbSkKIHsK
ICAgICBGaW5kQXJyYXlUeXBlcyBmaW5kQXJyYXlUeXBlczsKICAgICBmaW5kQXJyYXlUeXBlcy5j
aGVja0Vycm9yQW5kVmlzaXQocHJvZ3JhbSk7CkBAIC03MSw5ICs3MSw5IEBAIGJvb2wgc3ludGhl
c2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgoUHJvZ3IKICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQo
V1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CiAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFT
VDo6VHlwZVJlZmVyZW5jZTo6d3JhcChsb2NhdGlvbiwgcHJvZ3JhbS5pbnRyaW5zaWNzKCkudWlu
dFR5cGUoKSksICJvcGVyYXRvci5sZW5ndGgiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVs
bHB0ciwgaXNPcGVyYXRvcikpOwogICAgICAgICBpZiAoIXByb2dyYW0uYXBwZW5kKFdURk1vdmUo
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJDYW5ub3Qgc3ludGhlc2l6
ZSBvcGVyYXRvci5sZW5ndGggZm9yIGFycmF5IHR5cGUuIikpOwogICAgIH0KLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXSExTTApJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlP
cGVyYXRvckxlbmd0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaAkocmV2aXNpb24g
MjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50
aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMyArMjcs
MTYgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTEVycm9yLmgiCisj
aW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNw
YWNlIFdITFNMIHsKIAogY2xhc3MgUHJvZ3JhbTsKIAotYm9vbCBzeW50aGVzaXplQXJyYXlPcGVy
YXRvckxlbmd0aChQcm9ncmFtJik7CitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gc3ludGhlc2l6ZUFy
cmF5T3BlcmF0b3JMZW5ndGgoUHJvZ3JhbSYpOwogCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50
aGVzaXplQ29uc3RydWN0b3JzLmNwcAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+PiBtX25hbWVkVHlwZXM7CiB9Owog
Ci1ib29sIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKK0V4cGVjdGVk
PHZvaWQsIEVycm9yPiBzeW50aGVzaXplQ29uc3RydWN0b3JzKFByb2dyYW0mIHByb2dyYW0pCiB7
CiAgICAgRmluZEFsbFR5cGVzIGZpbmRBbGxUeXBlczsKICAgICBmaW5kQWxsVHlwZXMuY2hlY2tF
cnJvckFuZFZpc2l0KHByb2dyYW0pOwpAQCAtMTU4LDE1ICsxNTgsMTcgQEAgYm9vbCBzeW50aGVz
aXplQ29uc3RydWN0b3JzKFByb2dyYW0mIHBybwogICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9
IHVubmFtZWRUeXBlS2V5LnVubmFtZWRUeXBlKCk7CiAgICAgICAgIGF1dG8gbG9jYXRpb24gPSB1
bm5hbWVkVHlwZS5jb2RlTG9jYXRpb24oKTsKIAotICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFy
YXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4obG9jYXRpb24s
IEFTVDo6UXVhbGlmaWVycygpLCB1bm5hbWVkVHlwZS5jbG9uZSgpLCBTdHJpbmcoKSwgbnVsbHB0
ciwgbnVsbHB0cik7Ci0gICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVy
czsKLSAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9u
KSk7Ci0gICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0
b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2Nr
KCksIFdURjo6bnVsbG9wdCwgdW5uYW1lZFR5cGUuY2xvbmUoKSwgIm9wZXJhdG9yIGNhc3QiX3N0
ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVsbHB0ciwgaXNPcGVyYXRvcikpOwotICAgICAgICBw
cm9ncmFtLmFwcGVuZChXVEZNb3ZlKGNvcHlDb25zdHJ1Y3RvcikpOworICAgICAgICB7CisgICAg
ICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCB1bm5hbWVkVHlw
ZS5jbG9uZSgpLCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgICAgICBBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAgICBwYXJhbWV0ZXJz
LmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgIEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwg
dW5uYW1lZFR5cGUuY2xvbmUoKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShwYXJhbWV0
ZXJzKSwgbnVsbHB0ciwgaXNPcGVyYXRvcikpOworICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQo
V1RGTW92ZShjb3B5Q29uc3RydWN0b3IpKTsKKyAgICAgICAgfQogCiAgICAgICAgIEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBkZWZhdWx0Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwg
dW5uYW1lZFR5cGUuY2xvbmUoKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgQVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9ucygpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CiAgICAgICAgIGlmICghcHJvZ3Jh
bS5hcHBlbmQoV1RGTW92ZShkZWZhdWx0Q29uc3RydWN0b3IpKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiQ291bGQg
bm90IHN5bnRoZXNpemUgZGVmYXVsdCBjb25zdHJ1Y3RvciIpKTsKICAgICB9CiAKICAgICBmb3Ig
KGF1dG8mIG5hbWVkVHlwZSA6IG5hbWVkVHlwZXMpIHsKQEAgLTE5MCw5ICsxOTIsOSBAQCBib29s
IHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMoUHJvZ3JhbSYgcHJvCiAgICAgICAgIH0KICAgICAgICAg
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGRlZmF1bHRDb25zdHJ1Y3RvcihBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpu
dWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9jYXRpb24sIG5hbWVkVHlwZS5nZXQo
KSksICJvcGVyYXRvciBjYXN0Il9zdHIsIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMoKSwgbnVs
bHB0ciwgaXNPcGVyYXRvcikpOwogICAgICAgICBpZiAoIXByb2dyYW0uYXBwZW5kKFdURk1vdmUo
ZGVmYXVsdENvbnN0cnVjdG9yKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkNvdWxkIG5vdCBzeW50aGVzaXplIGRl
ZmF1bHQgY29uc3RydWN0b3IiKSk7CiAgICAgfQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biB7IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdITFNMCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVDb25zdHJ1Y3RvcnMuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDEzICsyNywxNiBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1
ZGUgIldITFNMRXJyb3IuaCIKKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCiBjbGFzcyBQcm9ncmFtOwogCi1ib29s
IHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMoUHJvZ3JhbSYpOworRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+
IHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMoUHJvZ3JhbSYpOwogCiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVu
Y3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDI0
NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhl
c2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7CiAKLWJvb2wgc3lu
dGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0pCitFeHBlY3RlZDx2
b2lkLCBFcnJvcj4gc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2dyYW0mIHByb2dy
YW0pCiB7CiAgICAgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKICAgICBmb3IgKGF1dG8mIGVudW1l
cmF0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKSB7CkBA
IC00OSw3ICs0OSw3IEBAIGJvb2wgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2cK
ICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlv
bjIpKTsKICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNU
OjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3Jh
cChsb2NhdGlvbiwgcHJvZ3JhbS5pbnRyaW5zaWNzKCkuYm9vbFR5cGUoKSksICJvcGVyYXRvcj09
Il9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKICAgICAg
ICAgICAgIGlmICghcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiQ2Fubm90IGNyZWF0ZSBvcGVyYXRvcj09IGZvciBl
bnVtIHR5cGUuIikpOwogICAgICAgICB9CiAKICAgICAgICAgewpAQCAtNTgsNyArNTgsNyBAQCBi
b29sIHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9nCiAgICAgICAgICAgICBwYXJh
bWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgICAg
IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9jaygp
LCBXVEY6Om51bGxvcHQsIGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+dHlwZSgpLmNsb25lKCksICJv
cGVyYXRvci52YWx1ZSJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBudWxscHRyLCBpc09wZXJh
dG9yKSk7CiAgICAgICAgICAgICBpZiAoIXByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbikpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkNhbm5vdCBjcmVhdGUgb3Bl
cmF0b3IudmFsdWUgZm9yIGVudW0gdHlwZS4iKSk7CiAgICAgICAgIH0KIAogICAgICAgICB7CkBA
IC02Nyw3ICs2Nyw3IEBAIGJvb2wgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2cK
ICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlv
bikpOwogICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6
OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50
eXBlKCkuY2xvbmUoKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwg
bnVsbHB0ciwgaXNPcGVyYXRvcikpOwogICAgICAgICAgICAgaWYgKCFwcm9ncmFtLmFwcGVuZChX
VEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJD
YW5ub3QgY3JlYXRlIGNvcHkgY29uc3RydWN0b3IgZm9yIGVudW0gdHlwZS4iKSk7CiAgICAgICAg
IH0KIAogICAgICAgICB7CkBAIC03NiwxMCArNzYsMTAgQEAgYm9vbCBzeW50aGVzaXplRW51bWVy
YXRpb25GdW5jdGlvbnMoUHJvZwogICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92
ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CiAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0aW9u
LCBlbnVtZXJhdGlvbkRlZmluaXRpb24pKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShw
YXJhbWV0ZXJzKSwgbnVsbHB0ciwgaXNPcGVyYXRvcikpOwogICAgICAgICAgICAgaWYgKCFwcm9n
cmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKEVycm9yKCJDYW5ub3QgY3JlYXRlICdvcGVyYXRvciBjYXN0JyBmb3IgZW51bSB0eXBlLiIp
KTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9Owog
fQogCiB9IC8vIG5hbWVzcGFjZSBXSExTTApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMyArMjcsMTYgQEAKIAogI2lmIEVOQUJMRShX
RUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTEVycm9yLmgiCisjaW5jbHVkZSA8d3RmL0V4cGVjdGVk
Lmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAogY2xhc3Mg
UHJvZ3JhbTsKIAotYm9vbCBzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMoUHJvZ3JhbSYp
OworRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQ
cm9ncmFtJik7CiAKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1
cmVBY2Nlc3NvcnMuY3BwCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFt
ZXNwYWNlIFdITFNMIHsKIAotYm9vbCBzeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzKFByb2dy
YW0mIHByb2dyYW0pCitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gc3ludGhlc2l6ZVN0cnVjdHVyZUFj
Y2Vzc29ycyhQcm9ncmFtJiBwcm9ncmFtKQogewogICAgIGJvb2wgaXNPcGVyYXRvciA9IHRydWU7
CiAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVE
ZWZpbml0aW9ucygpKSB7CkBAIC01OCwxMCArNTgsMTAgQEAgYm9vbCBzeW50aGVzaXplU3RydWN0
dXJlQWNjZXNzb3JzKFByb2dyYQogICAgICAgICAgICAgICAgIHx8ICFwcm9ncmFtLmFwcGVuZChj
cmVhdGVBbmRlcihBU1Q6OkFkZHJlc3NTcGFjZTo6RGV2aWNlKSkKICAgICAgICAgICAgICAgICB8
fCAhcHJvZ3JhbS5hcHBlbmQoY3JlYXRlQW5kZXIoQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZGdy
b3VwKSkKICAgICAgICAgICAgICAgICB8fCAhcHJvZ3JhbS5hcHBlbmQoY3JlYXRlQW5kZXIoQVNU
OjpBZGRyZXNzU3BhY2U6OlRocmVhZCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkNhbiBub3QgY3Jl
YXRlIGFuZGVyIikpOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiB7IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdITFNMCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJl
QWNjZXNzb3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEzICsyNywxNiBAQAogCiAjaWYgRU5B
QkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMRXJyb3IuaCIKKyNpbmNsdWRlIDx3dGYvRXhw
ZWN0ZWQuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCiBj
bGFzcyBQcm9ncmFtOwogCi1ib29sIHN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMoUHJvZ3Jh
bSYpOworRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IHN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMo
UHJvZ3JhbSYpOwogCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMVmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsOSArMjcsMTEgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJX
SExTTEVycm9yLmgiCiAjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5oIgogI2luY2x1
ZGUgIldITFNMU2VtYW50aWMuaCIKICNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgorI2lu
Y2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE3OCwx
MSArMTgwLDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpUZXJuYXJ5
RXhwcmVzc2lvbiYpOwogICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJl
bmNlJik7CiAKLSAgICBib29sIGVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvcjsgfQorICAg
IGJvb2wgaGFzRXJyb3IoKSBjb25zdCB7IHJldHVybiAhbV9lcnJvcjsgfQorICAgIEV4cGVjdGVk
PHZvaWQsIEVycm9yPiBnZXRFcnJvcigpIHsgcmV0dXJuIG1fZXJyb3I7IH0KIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KFQmIHgpCiAgICAgewotICAg
ICAgICBpZiAoIW1fZXJyb3IpCisgICAgICAgIGlmICghaGFzRXJyb3IoKSkKICAgICAgICAgICAg
IHZpc2l0KHgpOwogICAgIH0KIApAQCAtMTkwLDExICsxOTMsMTEgQEAgcHJvdGVjdGVkOgogICAg
IHZvaWQgc2V0RXJyb3IoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFtX2Vycm9yKTsKLSAgICAg
ICAgbV9lcnJvciA9IHRydWU7CisgICAgICAgIG1fZXJyb3IgPSBtYWtlVW5leHBlY3RlZChFcnJv
cigiT09QUyIpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBtX2Vycm9yIHsgZmFsc2Ug
fTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU2
ODIgTWlncmF0ZSB0aGlzIHRvIGJlIHNvbWUgc29ydCBvZiBkZXNjcmlwdGl2ZSBzdHJpbmcuCisg
ICAgRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IG1fZXJyb3I7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
SExTTApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
QXJyYXlSZWZlcmVuY2VUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgJKHJldmlzaW9uIDI0
NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFy
cmF5UmVmZXJlbmNlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNp
ZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldI
TFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xSZWZlcmVuY2VUeXBlLmgiCiAjaW5j
bHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlU
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMQXJyYXlUeXBlLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hM
U0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hM
U0xUeXBlQXJndW1lbnQuaCIKICNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgiCiAjaW5jbHVk
ZSA8d3RmL1VuaXF1ZVJlZi5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBc3NpZ25tZW50RXhwcmVz
c2lvbi5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw3ICsyOCw2IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMRXhw
cmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVl
UmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJhc2VGdW5jdGlvbkF0dHJpYnV0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJhc2VG
dW5jdGlvbkF0dHJpYnV0ZS5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCYXNlRnVuY3Rpb25BdHRyaWJ1dGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2lu
Y2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEJhc2VTZW1hbnRpYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJhc2VTZW1hbnRpYy5oCShyZXZpc2lv
biAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xCYXNlU2VtYW50aWMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsOCBAQAogCiAjaWYg
RU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVk
ZSAiV0hMU0xFbnRyeVBvaW50VHlwZS5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCbG9jay5o
CShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNp
ZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldI
TFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEJvb2xlYW5MaXRlcmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQm9vbGVhbkxpdGVyYWwuaAkocmV2aXNp
b24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMQm9vbGVhbkxpdGVyYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2lm
IEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKLSNpbmNsdWRl
ICJXSExTTExleGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnJlYWsuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCcmVhay5oCShy
ZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xCcmVhay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBF
TkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNM
Q29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQnVpbHRJblNlbWFudGljLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmgJKHJldmlzaW9uIDI0
NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1
aWx0SW5TZW1hbnRpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgRU5B
QkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMQmFzZVNlbWFudGljLmgiCi0jaW5jbHVkZSAi
V0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENhbGxFeHByZXNzaW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ2Fs
bEV4cHJlc3Npb24uaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ2FsbEV4cHJlc3Npb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCiAjaW5jbHVk
ZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgog
I2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29tbWFFeHByZXNz
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMQ29tbWFFeHByZXNzaW9uLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbW1hRXhwcmVzc2lvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2lu
Y2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNs
dWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb250aW51ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TENvbnRpbnVlLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnRpbnVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcg
KzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTExleGVyLmgi
CisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJXSExTTFN0YXRlbWVu
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xEZXJlZmVyZW5jZUV4cHJlc3Npb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xEZXJlZmVy
ZW5jZUV4cHJlc3Npb24uaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRGVyZWZlcmVuY2VFeHByZXNzaW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVk
ZSAiV0hMU0xFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUg
PHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG9XaGlsZUxvb3AuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xEb1do
aWxlTG9vcC5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xEb1doaWxlTG9vcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw2IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lv
bi5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFN0YXRlbWVudC5o
IgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvdEV4cHJlc3Np
b24uaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsy
Nyw2IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgog
I2luY2x1ZGUgIldITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSA8d3Rm
L1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFZmZlY3Rm
dWxFeHByZXNzaW9uU3RhdGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5o
CShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xF
eHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNMU3Rh
dGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25EZWZpbml0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDggQEAKIAogI2lmIEVOQUJMRShXRUJH
UFUpCiAKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMRW51
bWVyYXRpb25NZW1iZXIuaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hM
U0xOYW1lZFR5cGUuaCIKICNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgiCiAjaW5jbHVkZSA8
bWVtb3J5PgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRW51bWVyYXRpb25NZW1iZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oCShyZXZpc2lvbiAy
NDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xF
bnVtZXJhdGlvbk1lbWJlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAKICNp
ZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKICNpbmNs
dWRlICJXSExTTENvbnN0YW50RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIK
ICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVt
ZXJhdGlvbk1lbWJlckxpdGVyYWwuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25NZW1iZXJMaXRlcmFs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUp
CiAKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24u
aCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhw
cmVzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEV4cHJlc3Npb24uaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUg
IldITFNMQWRkcmVzc1NwYWNlLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUg
IldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlwZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZhbGx0aHJvdWdo
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMRmFsbHRocm91Z2guaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmFsbHRocm91Z2guaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldI
TFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldI
TFNMU3RhdGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0
TGl0ZXJhbC5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjks
NyArMjksNiBAQAogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hM
U0xGbG9hdExpdGVyYWxUeXBlLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEZvckxvb3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGb3JMb29wLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZvckxvb3AuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNs
dWRlICJXSExTTEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVk
ZSAiV0hMU0xTdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb25z
U3RhdGVtZW50LmgiCiAjaW5jbHVkZSA8bWVtb3J5PgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0
aW9uRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw5ICsyNyw5IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVk
ZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJXSExTTEVudHJ5UG9pbnRUeXBlLmgi
CiAjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIldITFNMTGV4
ZXIuaCIKICNpbmNsdWRlICJXSExTTFNlbWFudGljLmgiCiAjaW5jbHVkZSAiV0hMU0xVbm5hbWVk
VHlwZS5oIgogI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMR2xvYmFsVmFyaWFibGVS
ZWZlcmVuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xHbG9iYWxWYXJpYWJsZVJlZmVyZW5jZS5oCShyZXZpc2lvbiAyNDc3MDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xHbG9iYWxW
YXJpYWJsZVJlZmVyZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAKICNp
ZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldI
TFNMU3RydWN0dXJlRWxlbWVudC5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSWZTdGF0ZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xJZlN0YXRlbWVudC5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJZlN0YXRlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldI
TFNMRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExT
TFN0YXRlbWVudC5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVm
Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJ
bmRleEV4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Npb24uaAkocmV2aXNpb24gMjQ3NzAwKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhFeHBy
ZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShX
RUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9j
YXRpb24uaCIKICNpbmNsdWRlICJXSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oIgogI2lu
Y2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5o
CShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2
IEBACiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJXSExTTEludGVn
ZXJMaXRlcmFsVHlwZS5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xMb2dpY2FsRXhwcmVzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTExvZ2ljYWxFeHByZXNzaW9uLmgJKHJldmlzaW9u
IDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TExvZ2ljYWxFeHByZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNp
ZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCi0jaW5jbHVk
ZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMTG9naWNhbE5vdEV4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oCShy
ZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsy
OCw2IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5o
IgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2lmIEVOQUJMRShXRUJH
UFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTExleGVy
LmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlUG9p
bnRlckV4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaAkocmV2aXNpb24gMjQ3
NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFr
ZVBvaW50ZXJFeHByZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNp
ZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCi0jaW5jbHVk
ZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMTmFtZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZWRUeXBlLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hbWVkVHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0j
aW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAj
aW5jbHVkZSAiV0hMU0xUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oCShyZXZpc2lvbiAy
NDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xO
YXRpdmVUeXBlRGVjbGFyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAog
CiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRl
ICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMTmFtZWRUeXBlLmgiCiAjaW5j
bHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKICNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2Uu
aCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51
bGxMaXRlcmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMTnVsbExpdGVyYWwuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTnVsbExpdGVyYWwuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNs
dWRlICJXSExTTEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVk
ZSAiV0hMU0xOdWxsTGl0ZXJhbFR5cGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xQb2ludGVyVHlwZS5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQb2ludGVyVHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hM
U0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hM
U0xSZWZlcmVuY2VUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Np
b24uaCIKICNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJX
SExTTExleGVyLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xRdWFsaWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xRdWFsaWZpZXIuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUXVhbGlmaWVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNs
dWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKICNpbmNs
dWRlICJXSExTTFR5cGUuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbi5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5j
bHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1
ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMVmFyaWFibGVS
ZWZlcmVuY2UuaCIKICNpbmNsdWRlIDxtZW1vcnk+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNlVHlw
ZS5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4
LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xBZGRyZXNzU3BhY2Uu
aCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24u
aCIKICNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJl
Zi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJl
c291cmNlU2VtYW50aWMuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldI
TFNMQmFzZVNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldI
TFNMQ29kZUxvY2F0aW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmV0dXJuLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmV0dXJu
LmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFJldHVybi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAj
aWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgotI2luY2x1
ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFN0YXRlbWVudC5oIgogI2luY2x1ZGUg
PG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2Vt
YW50aWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuaAkocmV2aXNpb24gMjQ3
NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3Bl
Y2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4
LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xCYXNlU2VtYW50aWMu
aCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24u
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGFnZUluT3V0
U2VtYW50aWMuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhZ2VJbk91dFNlbWFudGljLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDggKzI3LDggQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExT
TENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMQmFzZVNlbWFudGljLmgiCi0jaW5jbHVk
ZSAiV0hMU0xMZXhlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YXRlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YXRl
bWVudC5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xTdGF0ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcs
NyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNp
bmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMU3RhdGVtZW50TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YXRlbWVudExpc3QuaAkocmV2
aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMU3RhdGVtZW50TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAK
ICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUg
IldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZURlZmluaXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0
aW9uLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZURlZmluaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMTGV4
ZXIuaCIKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMTmFt
ZWRUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVFbGVtZW50LmgiCiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMU3RydWN0dXJlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZUVsZW1lbnQuaAkocmV2aXNp
b24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMU3RydWN0dXJlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAK
ICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUg
IldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xRdWFsaWZpZXIuaCIKICNpbmNs
dWRlICJXSExTTFNlbWFudGljLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBlLmgiCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTd2l0Y2hDYXNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
U3dpdGNoQ2FzZS5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTd2l0Y2hDYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDggKzI4LDggQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xCbG9jay5o
IgorI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xDb25zdGFu
dEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xT
dGF0ZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KIApJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3dpdGNoU3RhdGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
U3dpdGNoU3RhdGVtZW50LmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN3aXRjaFN0YXRlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldI
TFNMRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExT
TFN0YXRlbWVudC5oIgogI2luY2x1ZGUgIldITFNMU3dpdGNoQ2FzZS5oIgogI2luY2x1ZGUgPHd0
Zi9VbmlxdWVSZWYuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFRlcm5hcnlFeHByZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVGVybmFyeUV4cHJlc3Npb24uaAkocmV2
aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMVGVybmFyeUV4cHJlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBA
QAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKLSNp
bmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuaAkocmV2aXNpb24gMjQ3
NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlw
ZUFyZ3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpZiBFTkFCTEUo
V0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaCIKLSNpbmNsdWRl
ICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRl
IDx3dGYvVW5pcXVlUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVEZWZpbml0aW9uLmgJKHJldmlzaW9uIDI0
NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5
cGVEZWZpbml0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVO
QUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xD
b2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJXSExTTE5hbWVkVHlwZS5oIgogI2luY2x1ZGUgIldI
TFNMVW5uYW1lZFR5cGUuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVHlwZVJlZmVyZW5jZS5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJX
SExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJX
SExTTE5hbWVkVHlwZS5oIgogI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCiAjaW5jbHVk
ZSAiV0hMU0xVbm5hbWVkVHlwZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMVW5uYW1lZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbm5hbWVkVHlwZS5oCShyZXZpc2lv
biAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xVbm5hbWVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBF
TkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNM
Q29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL1Vu
aXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaAkocmV2aXNpb24gMjQ3NzAwKQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgRU5BQkxF
KFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNM
TGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0
aW9uLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNyArMjgsNiBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJl
c3Npb24uaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xRdWFsaWZp
ZXIuaCIKICNpbmNsdWRlICJXSExTTFNlbWFudGljLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBlLmgi
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJp
YWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVt
ZW50LmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNsdWRl
ICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRl
ICJXSExTTFN0YXRlbWVudC5oIgogI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5o
IgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVSZWZl
cmVuY2UuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVSZWZlcmVuY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNyArMjgsNiBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJl
c3Npb24uaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xWYXJpYWJs
ZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFdoaWxlTG9vcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFdoaWxlTG9vcC5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xXaGlsZUxvb3AuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNyArMjgsNiBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJl
c3Npb24uaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTdGF0ZW1l
bnQuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI0Nzcw
MCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtNjM5MSw2ICs2MzkxLDcgQEAKIAkJMUNBRjM0N0UwQTZDNDA1MjAw
QUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJTY3JpcHRPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNB
RjM0N0YwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdC5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlNjcmlwdE9iamVjdC5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBRjM0ODAwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlw
dE9iamVjdFByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU2Ny
aXB0T2JqZWN0UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0I1RkU4
ODIyREVCQzhCMDA5NDQwRTIgLyogV0hMU0xFcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEVy
cm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQjY5QjMyMjFERUQ0MEIwMDZF
ODQ2QSAvKiBXSExTTFJlc29sdmFibGVUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUmVzb2x2
YWJsZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNCNjlCMzQyMURFRDYz
QTAwNkU4NDZBIC8qIFdITFNMRmxvYXRMaXRlcmFsVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExT
TEZsb2F0TGl0ZXJhbFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNCNjlC
MzUyMURFRDY0OTAwNkU4NDZBIC8qIFdITFNMSW50ZWdlckxpdGVyYWxUeXBlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdITFNMSW50ZWdlckxpdGVyYWxUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC04MzIzLDYgKzgzMjQsNyBAQAogCQk1MUZCNjdEQTFBRTZCNUU0MDBEMDZDNUEgLyog
Q29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTIxMzFFNUExQzRGMTU2MTAwMzNGODAyIC8qIFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTIxNTg2MkMyMjkzNzdCNzAwNTkyNUVGIC8qIFdITFNMQVNULmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdI
TFNMQVNULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyMkJBQjk2MjJFNkEzNjIw
MEM1NENFOSAvKiBXSExTTENvZGVMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTENvZGVM
b2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjJEQTNEMzIyOUUxRDM5
MDA0MkQxNTEgLyogV0hMU0xHbG9iYWxWYXJpYWJsZVJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXSExTTEdsb2JhbFZhcmlhYmxlUmVmZXJlbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUyMkUxQTE3MjI5N0Q2RDQwMEU1RDM2QSAvKiBXSExTTFByZXNlcnZlVmFyaWFibGVM
aWZldGltZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xQcmVzZXJ2ZVZhcmlhYmxlTGlm
ZXRpbWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTIyRTFBMTkyMjk3RDZE
NDAwRTVEMzZBIC8qIFdITFNMUHJlc2VydmVWYXJpYWJsZUxpZmV0aW1lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXSExTTFByZXNlcnZlVmFyaWFibGVMaWZldGltZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTI1NTE4LDggKzI1NTIwLDEwIEBACiAJCQkJMUM4NDBCOTcyMUVDNDAwNzAw
RDA1MDBEIC8qIFdITFNMQ2hlY2tlci5oICovLAogCQkJCTFDMjgxQzZEMjJCODdCOTgwMDY5MUMw
MCAvKiBXSExTTENoZWNrVGV4dHVyZVJlZmVyZW5jZXMuY3BwICovLAogCQkJCTFDMjgxQzZFMjJC
ODdCOTgwMDY5MUMwMCAvKiBXSExTTENoZWNrVGV4dHVyZVJlZmVyZW5jZXMuaCAqLywKKwkJCQk1
MjJCQUI5NjIyRTZBMzYyMDBDNTRDRTkgLyogV0hMU0xDb2RlTG9jYXRpb24uaCAqLywKIAkJCQkx
Qzg2Q0E0QjIyQUExOUZGMDAxQkY5NjEgLyogV0hMU0xDb21wdXRlRGltZW5zaW9ucy5jcHAgKi8s
CiAJCQkJMUM4NkNBNEMyMkFBMTlGRjAwMUJGOTYxIC8qIFdITFNMQ29tcHV0ZURpbWVuc2lvbnMu
aCAqLywKKwkJCQkxQ0I1RkU4ODIyREVCQzhCMDA5NDQwRTIgLyogV0hMU0xFcnJvci5oICovLAog
CQkJCTFDQTBDMkU0MjFFRUQxMkEwMEExMTg2MCAvKiBXSExTTEZ1bmN0aW9uU3RhZ2VDaGVja2Vy
LmNwcCAqLywKIAkJCQkxQ0EwQzJFNTIxRUVEMTJBMDBBMTE4NjAgLyogV0hMU0xGdW5jdGlvblN0
YWdlQ2hlY2tlci5oICovLAogCQkJCTFDODQwQjk5MjFFQzQwMDgwMEQwNTAwRCAvKiBXSExTTEdh
dGhlckVudHJ5UG9pbnRJdGVtcy5jcHAgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374700</attachid>
            <date>2019-07-23 12:59:05 -0700</date>
            <delta_ts>2019-07-23 15:26:26 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>140632</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQXV0b0luaXRp
YWxpemVWYXJpYWJsZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMQXV0b0luaXRpYWxpemVWYXJpYWJsZXMuY3BwCShyZXZpc2lvbiAy
NDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEF1dG9J
bml0aWFsaXplVmFyaWFibGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBw
cml2YXRlOgogICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdU
eXBlPj4gYXJndW1lbnRUeXBlczsKICAgICAgICAgYXV0byogZnVuY3Rpb24gPSByZXNvbHZlRnVu
Y3Rpb25PdmVybG9hZChtX2Nhc3RGdW5jdGlvbnMsIGFyZ3VtZW50VHlwZXMsIHR5cGUpOwogICAg
ICAgICBpZiAoIWZ1bmN0aW9uKSB7Ci0gICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAg
ICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5vdCBmaW5kIHRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yIGZv
ciB2YXJpYWJsZS4iLCB2YXJpYWJsZURlY2xhcmF0aW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1
bmN0aW9uKCpmdW5jdGlvbik7CkBAIC04OCwxMSArODgsMTEgQEAgcHJpdmF0ZToKICAgICBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYg
bV9jYXN0RnVuY3Rpb25zOwogfTsKIAotYm9vbCBhdXRvSW5pdGlhbGl6ZVZhcmlhYmxlcyhQcm9n
cmFtJiBwcm9ncmFtKQorRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IGF1dG9Jbml0aWFsaXplVmFyaWFi
bGVzKFByb2dyYW0mIHByb2dyYW0pCiB7CiAgICAgQXV0b0luaXRpYWxpemUgYXV0b0luaXRpYWxp
emUocHJvZ3JhbS5uYW1lQ29udGV4dCgpKTsKICAgICBhdXRvSW5pdGlhbGl6ZS5WaXNpdG9yOjp2
aXNpdChwcm9ncmFtKTsKLSAgICByZXR1cm4gIWF1dG9Jbml0aWFsaXplLmVycm9yKCk7CisgICAg
cmV0dXJuIGF1dG9Jbml0aWFsaXplLmdldEVycm9yKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdI
TFNMCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEF1dG9J
bml0aWFsaXplVmFyaWFibGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xBdXRvSW5pdGlhbGl6ZVZhcmlhYmxlcy5oCShyZXZpc2lvbiAy
NDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEF1dG9J
bml0aWFsaXplVmFyaWFibGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEzICsyNywxNiBAQAog
CiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMRXJyb3IuaCIKKyNpbmNsdWRl
IDx3dGYvRXhwZWN0ZWQuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hM
U0wgewogCiBjbGFzcyBQcm9ncmFtOwogCi1ib29sIGF1dG9Jbml0aWFsaXplVmFyaWFibGVzKFBy
b2dyYW0mKTsKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBhdXRvSW5pdGlhbGl6ZVZhcmlhYmxlcyhQ
cm9ncmFtJik7CiAKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9u
cy5jcHAJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTUsOSArMTE1LDkgQEAgcHJpdmF0ZToKICAgICBjb25zdCBBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24qIG1fZnVuY3Rpb24geyBudWxscHRyIH07CiB9OwogCi1ib29sIGNoZWNrRHVwbGljYXRl
RnVuY3Rpb25zKGNvbnN0IFByb2dyYW0mIHByb2dyYW0pCitFeHBlY3RlZDx2b2lkLCBFcnJvcj4g
Y2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMoY29uc3QgUHJvZ3JhbSYgcHJvZ3JhbSkKIHsKLSAgICBh
dXRvIHBhc3Nlc1N0YXRpY0NoZWNrcyA9IFsmXSAoY29uc3QgQVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uJiBmdW5jdGlvbikgeworICAgIGF1dG8gcGFzc2VzU3RhdGljQ2hlY2tzID0gWyZdIChjb25z
dCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1bmN0aW9uKSAtPiBFeHBlY3RlZDx2b2lkLCBF
cnJvcj4gewogICAgICAgICBpZiAoZnVuY3Rpb24ubmFtZSgpID09ICJvcGVyYXRvciZbXSIgJiYg
ZnVuY3Rpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyCiAgICAgICAgICAgICAmJiBpczxBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+
KCpmdW5jdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSkpKSB7CiAgICAgICAgICAgICBhdXRv
JiB0eXBlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbi5w
YXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CkBAIC0xMjcsNDQgKzEyNyw0NSBAQCBib29sIGNoZWNr
RHVwbGljYXRlRnVuY3Rpb25zKGNvbnN0IFByb2dyCiAgICAgICAgICAgICAgICAgICAgIGlmIChp
czxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnJlc29sdmVkVHlwZSkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqcmVzb2x2ZWRUeXBlKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ1aW50IikKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJDYW5ub3QgZGVmaW5lIGN1
c3RvbSBhcnJheSBhbmRlci4iKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoZnVuY3Rpb24ubmFtZSgp
ID09ICJvcGVyYXRvci5sZW5ndGgiICYmIGZ1bmN0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0g
MQogICAgICAgICAgICAgJiYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihzdGF0aWNfY2Fz
dDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlw
ZSgpKSkKICAgICAgICAgICAgIHx8IGlzPEFTVDo6QXJyYXlUeXBlPihzdGF0aWNfY2FzdDxjb25z
dCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKSkp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKEVycm9yKCJDYW5ub3QgZGVmaW5lIG9wZXJhdG9yLmxlbmd0aCBmb3IgYW4gYXJyYXku
IikpOwogICAgICAgICBlbHNlIGlmIChmdW5jdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yPT0iCiAg
ICAgICAgICAgICAmJiBmdW5jdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIKICAgICAgICAg
ICAgICYmIGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5h
bWVkVHlwZSY+KCpmdW5jdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSkpCiAgICAgICAgICAg
ICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1l
ZFR5cGUmPigqZnVuY3Rpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpKQogICAgICAgICAgICAg
JiYgbWF0Y2hlcygqZnVuY3Rpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCksICpmdW5jdGlvbi5w
YXJhbWV0ZXJzKClbMV0tPnR5cGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkNhbm5vdCBkZWZpbmUgb3BlcmF0
b3I9PSBvbiB0d28gcmVmZXJlbmNlIHR5cGVzLiIpKTsKICAgICAgICAgZWxzZSBpZiAoZnVuY3Rp
b24uaXNDYXN0KCkgJiYgZnVuY3Rpb24ucGFyYW1ldGVycygpLmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgYXV0byYgdW5pZnlOb2RlID0gZnVuY3Rpb24udHlwZSgpLnVuaWZ5Tm9kZSgpOwogICAg
ICAgICAgICAgaWYgKGlzPEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpICYmIGlzPEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uPihkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKSkp
IHsKICAgICAgICAgICAgICAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2Fz
dDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVu
aWZ5Tm9kZSkpOwogICAgICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNP
cGFxdWVUeXBlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJDYW5ub3QgZGVmaW5lIGEg
Y2FzdCBvbiBhbiBvcGFxdWUgdHlwZS4iKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAot
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9OwogCiAgICAg
SGFzaFNldDxEdXBsaWNhdGVGdW5jdGlvbktleSwgRHVwbGljYXRlRnVuY3Rpb25LZXk6Okhhc2gs
IER1cGxpY2F0ZUZ1bmN0aW9uS2V5OjpUcmFpdHM+IGZ1bmN0aW9uczsKIAotICAgIGF1dG8gYWRk
ID0gWyZdIChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1bmN0aW9uKSB7CisgICAg
YXV0byBhZGQgPSBbJl0gKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgZnVuY3Rpb24p
IC0+IEV4cGVjdGVkPHZvaWQsIEVycm9yPiB7CiAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gZnVu
Y3Rpb25zLmFkZChEdXBsaWNhdGVGdW5jdGlvbktleSB7IGZ1bmN0aW9uIH0pOwogICAgICAgICBp
ZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJGb3VuZCBkdXBsaWNhdGUgZnVu
Y3Rpb24iKSk7CiAgICAgICAgIHJldHVybiBwYXNzZXNTdGF0aWNDaGVja3MoZnVuY3Rpb24pOwog
ICAgIH07CiAKICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZnVu
Y3Rpb25EZWZpbml0aW9ucygpKSB7Ci0gICAgICAgIGlmICghYWRkKGZ1bmN0aW9uRGVmaW5pdGlv
bi5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8gYWRkUmVz
dWx0ID0gYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5nZXQoKSk7CisgICAgICAgIGlmICghYWRkUmVz
dWx0KQorICAgICAgICAgICAgcmV0dXJuIGFkZFJlc3VsdDsKICAgICB9CiAKICAgICBmb3IgKGF1
dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb25zKCkpIHsKQEAgLTE4MCwxMCArMTgxLDEwIEBAIGJvb2wgY2hlY2tEdXBsaWNhdGVG
dW5jdGlvbnMoY29uc3QgUHJvZ3IKICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE5ODg2MQogICAgICAgICAvLyBBU1NFUlQocGFzc2VzU3RhdGljQ2hl
Y2tzKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uZ2V0KCkpKTsKICAgICAgICAgaWYgKGZ1bmN0
aW9ucy5jb250YWlucyhEdXBsaWNhdGVGdW5jdGlvbktleSB7IG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24uZ2V0KCkgfSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkR1cGxpY2F0ZSBuYXRpdmUgZnVuY3Rpb24uIikp
OwogICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdITFNMCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5o
CShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEz
ICsyNywxNSBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMRXJyb3Iu
aCIKICNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCi1ib29sIGNoZWNr
RHVwbGljYXRlRnVuY3Rpb25zKGNvbnN0IFByb2dyYW0mKTsKK0V4cGVjdGVkPHZvaWQsIEVycm9y
PiBjaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyhjb25zdCBQcm9ncmFtJik7CiAKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja1RleHR1cmVSZWZl
cmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTENoZWNrVGV4dHVyZVJlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAyNDc3MDApCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrVGV4dHVyZVJl
ZmVyZW5jZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCwyOCArODQsMjggQEAgYm9vbCBUZXh0
dXJlUmVmZXJlbmNlc0NoZWNrZXI6OmNvbnRhaW5zVAogdm9pZCBUZXh0dXJlUmVmZXJlbmNlc0No
ZWNrZXI6OnZpc2l0KEFTVDo6UG9pbnRlclR5cGUmIHBvaW50ZXJUeXBlKQogewogICAgIFZpc2l0
b3I6OnZpc2l0KHBvaW50ZXJUeXBlKTsKLSAgICBpZiAoZXJyb3IoKSkKKyAgICBpZiAoaGFzRXJy
b3IoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChjb250YWluc1RleHR1cmVPclNhbXBsZXIo
cG9pbnRlclR5cGUuZWxlbWVudFR5cGUoKSkpCi0gICAgICAgIHNldEVycm9yKCk7CisgICAgICAg
IHNldEVycm9yKEVycm9yKCJDYW5ub3QgaGF2ZSBhIHBvaW50ZXIgdG8gYSB0ZXh0dXJlLiIsIHBv
aW50ZXJUeXBlLmNvZGVMb2NhdGlvbigpKSk7CiB9CiAKIHZvaWQgVGV4dHVyZVJlZmVyZW5jZXND
aGVja2VyOjp2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYgYXJyYXlSZWZlcmVuY2VUeXBl
KQogewogICAgIFZpc2l0b3I6OnZpc2l0KGFycmF5UmVmZXJlbmNlVHlwZSk7Ci0gICAgaWYgKGVy
cm9yKCkpCisgICAgaWYgKGhhc0Vycm9yKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoY29u
dGFpbnNUZXh0dXJlT3JTYW1wbGVyKGFycmF5UmVmZXJlbmNlVHlwZS5lbGVtZW50VHlwZSgpKSkK
LSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5vdCBoYXZl
IGFuIGFycmF5IHJlZmVyZW5jZSB0byBhIHRleHR1cmUuIiwgYXJyYXlSZWZlcmVuY2VUeXBlLmNv
ZGVMb2NhdGlvbigpKSk7CiB9CiAKIHZvaWQgVGV4dHVyZVJlZmVyZW5jZXNDaGVja2VyOjp2aXNp
dChBU1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBlKQogewogICAgIFZpc2l0b3I6OnZpc2l0KGFycmF5
VHlwZSk7Ci0gICAgaWYgKGVycm9yKCkpCisgICAgaWYgKGhhc0Vycm9yKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICBpZiAoY29udGFpbnNUZXh0dXJlT3JTYW1wbGVyKGFycmF5VHlwZS50eXBlKCkp
KQotICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBzZXRFcnJvcihFcnJvcigiQ2Fubm90IGhh
dmUgYW4gYXJyYXkgb2YgdGV4dHVyZXMuIiwgYXJyYXlUeXBlLmNvZGVMb2NhdGlvbigpKSk7CiB9
CiAKIHZvaWQgVGV4dHVyZVJlZmVyZW5jZXNDaGVja2VyOjp2aXNpdChBU1Q6OkV4cHJlc3Npb24m
IGV4cHJlc3Npb24pCkBAIC0xMTQsMTEgKzExNCwxMSBAQCB2b2lkIFRleHR1cmVSZWZlcmVuY2Vz
Q2hlY2tlcjo6dmlzaXQoQVNUCiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGV4cHJlc3Npb24ucmVz
b2x2ZWRUeXBlKCkpOwogfQogCi1ib29sIGNoZWNrVGV4dHVyZVJlZmVyZW5jZXMoUHJvZ3JhbSYg
cHJvZ3JhbSkKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBjaGVja1RleHR1cmVSZWZlcmVuY2VzKFBy
b2dyYW0mIHByb2dyYW0pCiB7CiAgICAgVGV4dHVyZVJlZmVyZW5jZXNDaGVja2VyIHRleHR1cmVS
ZWZlcmVuY2VzQ2hlY2tlcjsKICAgICB0ZXh0dXJlUmVmZXJlbmNlc0NoZWNrZXIuY2hlY2tFcnJv
ckFuZFZpc2l0KHByb2dyYW0pOwotICAgIHJldHVybiAhdGV4dHVyZVJlZmVyZW5jZXNDaGVja2Vy
LmVycm9yKCk7CisgICAgcmV0dXJuIHRleHR1cmVSZWZlcmVuY2VzQ2hlY2tlci5nZXRFcnJvcigp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXSExTTApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja1RleHR1cmVSZWZlcmVuY2VzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja1RleHR1cmVS
ZWZlcmVuY2VzLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMQ2hlY2tUZXh0dXJlUmVmZXJlbmNlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNywxMyArMjcsMTYgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJX
SExTTEVycm9yLmgiCisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAogY2xhc3MgUHJvZ3JhbTsKIAotYm9vbCBjaGVj
a1RleHR1cmVSZWZlcmVuY2VzKFByb2dyYW0mKTsKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBjaGVj
a1RleHR1cmVSZWZlcmVuY2VzKFByb2dyYW0mKTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAJKHJldmlz
aW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
Q2hlY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgcHVibGljOgogICAg
ICAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc051bWJlcigpCiAgICAgICAgICAgICAm
JiAhbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzVmVjdG9yKCkKICAgICAgICAgICAgICYmICFuYXRp
dmVUeXBlRGVjbGFyYXRpb24uaXNNYXRyaXgoKSkKLSAgICAgICAgICAgIHNldEVycm9yKCk7Cisg
ICAgICAgICAgICBzZXRFcnJvcihFcnJvcigiVXNlIG9mIG5hdGl2ZSB0eXBlIGlzIG5vdCBhIFBP
RCBpbiBlbnRyeXBvaW50IHNlbWFudGljLiIsIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5jb2RlTG9j
YXRpb24oKSkpOwogICAgIH0KIAogICAgIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0
aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKSBvdmVycmlkZQpAQCAtMTAyLDE0ICsxMDIsMTQgQEAg
cHVibGljOgogICAgICAgICBWaXNpdG9yOjp2aXNpdChhcnJheVR5cGUpOwogICAgIH0KIAotICAg
IHZvaWQgdmlzaXQoQVNUOjpQb2ludGVyVHlwZSYpIG92ZXJyaWRlCisgICAgdm9pZCB2aXNpdChB
U1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlwZSkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHNl
dEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJJbGxlZ2FsIHVzZSBvZiBwb2ludGVy
IGluIGVudHJ5cG9pbnQgc2VtYW50aWMuIiwgcG9pbnRlclR5cGUuY29kZUxvY2F0aW9uKCkpKTsK
ICAgICB9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJikgb3ZlcnJp
ZGUKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJiBhcnJheVJlZmVyZW5j
ZVR5cGUpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBzZXRF
cnJvcihFcnJvcigiSWxsZWdhbCB1c2Ugb2YgYXJyYXkgcmVmZXJlbmNlIGluIGVudHJ5cG9pbnQg
c2VtYW50aWMuIiwgYXJyYXlSZWZlcmVuY2VUeXBlLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgfQog
CiAgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpIG92ZXJy
aWRlCkBAIC0xMTgsNyArMTE4LDcgQEAgcHVibGljOgogICAgIH0KIH07CiAKLXN0YXRpYyBBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gcmVzb2x2ZVdpdGhPcGVyYXRvckFuZGVySW5kZXhl
cihBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbiwgQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGZp
cnN0QXJndW1lbnQsIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCitzdGF0aWMgQVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJlc29sdmVXaXRoT3BlcmF0b3JBbmRlckluZGV4ZXIo
Q29kZUxvY2F0aW9uIGxvY2F0aW9uLCBBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYgZmlyc3RBcmd1
bWVudCwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykKIHsKICAgICBjb25zdCBib29sIGlz
T3BlcmF0b3IgPSB0cnVlOwogICAgIGF1dG8gcmV0dXJuVHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNU
OjpQb2ludGVyVHlwZT4obG9jYXRpb24sIGZpcnN0QXJndW1lbnQuYWRkcmVzc1NwYWNlKCksIGZp
cnN0QXJndW1lbnQuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKQEAgLTEyOCw3ICsxMjgsNyBAQCBz
dGF0aWMgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJlCiAgICAgcmV0dXJuIEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRp
b24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5
cGUpLCBTdHJpbmcoIm9wZXJhdG9yJltdIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCks
IFdURk1vdmUocGFyYW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKIH0KIAotc3RhdGlj
IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0aE9wZXJhdG9yTGVuZ3Ro
KEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uLCBBU1Q6OlVubmFtZWRUeXBlJiBmaXJzdEFyZ3Vt
ZW50LCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQorc3RhdGljIEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0aE9wZXJhdG9yTGVuZ3RoKENvZGVMb2NhdGlvbiBs
b2NhdGlvbiwgQVNUOjpVbm5hbWVkVHlwZSYgZmlyc3RBcmd1bWVudCwgY29uc3QgSW50cmluc2lj
cyYgaW50cmluc2ljcykKIHsKICAgICBjb25zdCBib29sIGlzT3BlcmF0b3IgPSB0cnVlOwogICAg
IGF1dG8gcmV0dXJuVHlwZSA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChsb2NhdGlvbiwgaW50
cmluc2ljcy51aW50VHlwZSgpKTsKQEAgLTEzNyw3ICsxMzcsNyBAQCBzdGF0aWMgQVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJlCiAgICAgcmV0dXJuIEFTVDo6TmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmli
dXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5cGUpLCBTdHJpbmcoIm9w
ZXJhdG9yLmxlbmd0aCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CiB9CiAKLXN0YXRpYyBBU1Q6Ok5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24gcmVzb2x2ZVdpdGhSZWZlcmVuY2VDb21wYXJhdG9yKEFTVDo6
Q29kZUxvY2F0aW9uIGxvY2F0aW9uLCBSZXNvbHZpbmdUeXBlJiBmaXJzdEFyZ3VtZW50LCBSZXNv
bHZpbmdUeXBlJiBzZWNvbmRBcmd1bWVudCwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykK
K3N0YXRpYyBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gcmVzb2x2ZVdpdGhSZWZlcmVu
Y2VDb21wYXJhdG9yKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgUmVzb2x2aW5nVHlwZSYgZmlyc3RB
cmd1bWVudCwgUmVzb2x2aW5nVHlwZSYgc2Vjb25kQXJndW1lbnQsIGNvbnN0IEludHJpbnNpY3Mm
IGludHJpbnNpY3MpCiB7CiAgICAgY29uc3QgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKICAgICBh
dXRvIHJldHVyblR5cGUgPSBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9jYXRpb24sIGludHJp
bnNpY3MuYm9vbFR5cGUoKSk7CkBAIC0xNjUsNyArMTY1LDcgQEAgZW51bSBjbGFzcyBBY2NlcHRh
YmlsaXR5IHsKICAgICBObwogfTsKIAotc3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbj4gcmVzb2x2ZUJ5SW5zdGFudGlhdGlvbihjb25zdCBTdHJpbmcmIG5hbWUs
IEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uLCBjb25zdCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIHR5cGVzLCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5z
aWNzKQorc3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4gcmVz
b2x2ZUJ5SW5zdGFudGlhdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsIENvZGVMb2NhdGlvbiBsb2Nh
dGlvbiwgY29uc3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+
JiB0eXBlcywgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykKIHsKICAgICBpZiAobmFtZSA9
PSAib3BlcmF0b3ImW10iICYmIHR5cGVzLnNpemUoKSA9PSAyKSB7CiAgICAgICAgIGF1dG8qIGZp
cnN0QXJndW1lbnRBcnJheVJlZiA9IHR5cGVzWzBdLmdldCgpLnZpc2l0KFdURjo6bWFrZVZpc2l0
b3IoW10oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gQVNUOjpB
cnJheVJlZmVyZW5jZVR5cGUqIHsKQEAgLTIxNyw3ICsyMTcsNyBAQCBzdGF0aWMgT3B0aW9uYWw8
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAot
c3RhdGljIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uKFByb2dyYW0m
IHByb2dyYW0sIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbj4sIDE+KiBwb3NzaWJsZU92ZXJsb2FkcywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8UmVzb2x2aW5nVHlwZT4+JiB0eXBlcywgY29uc3QgU3RyaW5nJiBuYW1lLCBBU1Q6OkNv
ZGVMb2NhdGlvbiBsb2NhdGlvbiwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcywgQVNUOjpO
YW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlID0gbnVsbHB0cikKK3N0YXRpYyBBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbihQcm9ncmFtJiBwcm9ncmFtLCBWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiogcG9zc2li
bGVPdmVybG9hZHMsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+
PiYgdHlwZXMsIGNvbnN0IFN0cmluZyYgbmFtZSwgQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBjb25z
dCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBBU1Q6Ok5hbWVkVHlwZSogY2FzdFJldHVyblR5cGUg
PSBudWxscHRyKQogewogICAgIGlmIChwb3NzaWJsZU92ZXJsb2FkcykgewogICAgICAgICBpZiAo
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBmdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJs
b2FkKCpwb3NzaWJsZU92ZXJsb2FkcywgdHlwZXMsIGNhc3RSZXR1cm5UeXBlKSkKQEAgLTI5Niw3
ICsyOTYsNyBAQCBzdGF0aWMgYm9vbCBjaGVja1NlbWFudGljcyhWZWN0b3I8RW50cnlQCiAgICAg
ICAgICAgICAgICAgICAgIHBvZENoZWNrZXIuY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFT
VDo6QXJyYXlUeXBlPigqaXRlbS51bm5hbWVkVHlwZSkudHlwZSgpKTsKICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlm
IChwb2RDaGVja2VyLmVycm9yKCkpCisgICAgICAgICAgICAgICAgaWYgKHBvZENoZWNrZXIuaGFz
RXJyb3IoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC00NjAsNyArNDYwLDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCB2aXNpdChQcm9ncmFtJikgb3ZlcnJpZGU7CiAKLSAgICBib29sIGFzc2lnblR5
cGVzKCk7CisgICAgRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IGFzc2lnblR5cGVzKCk7CiAKIHByaXZh
dGU6CiAgICAgYm9vbCBjaGVja1NoYWRlclR5cGUoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRp
b24mKTsKQEAgLTUzOCw3ICs1MzgsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KFByb2dyYW0mIHBy
b2dyYW0pCiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb25zKClbaV0pOwogfQogCi1ib29sIENoZWNrZXI6OmFzc2lnblR5cGVzKCkKK0V4
cGVjdGVkPHZvaWQsIEVycm9yPiBDaGVja2VyOjphc3NpZ25UeXBlcygpCiB7CiAgICAgZm9yIChh
dXRvJiBrZXlWYWx1ZVBhaXIgOiBtX3R5cGVNYXApIHsKICAgICAgICAgYXV0byBzdWNjZXNzID0g
a2V5VmFsdWVQYWlyLnZhbHVlLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKQEAgLTU1MywxMCArNTUz
LDEwIEBAIGJvb2wgQ2hlY2tlcjo6YXNzaWduVHlwZXMoKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0pKTsKICAgICAgICAgaWYgKCFzdWNjZXNzKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJDb3Vs
ZCBub3QgcmVzb2x2ZSB0aGUgdHlwZSBvZiBhIGNvbnN0YW50LiIpKTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiBib29sIENoZWNrZXI6OmNoZWNrU2hh
ZGVyVHlwZShjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9u
KQpAQCAtNTc2LDIxICs1NzYsMjEgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkZ1bmN0aW9u
RGVmaW5pdAogICAgIG1fY3VycmVudEZ1bmN0aW9uID0gJmZ1bmN0aW9uRGVmaW5pdGlvbjsKICAg
ICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKICAgICAgICAgaWYg
KCFjaGVja1NoYWRlclR5cGUoZnVuY3Rpb25EZWZpbml0aW9uKSkgewotICAgICAgICAgICAgc2V0
RXJyb3IoKTsKKyAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJEdXBsaWNhdGUgZW50cnlwb2lu
dCBmdW5jdGlvbi4iLCBmdW5jdGlvbkRlZmluaXRpb24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBhdXRvIGVudHJ5UG9pbnRJdGVtcyA9
IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhtX2ludHJpbnNpY3MsIGZ1bmN0aW9uRGVmaW5pdGlvbik7
CiAgICAgICAgIGlmICghZW50cnlQb2ludEl0ZW1zKSB7Ci0gICAgICAgICAgICBzZXRFcnJvcigp
OworICAgICAgICAgICAgc2V0RXJyb3IoZW50cnlQb2ludEl0ZW1zLmVycm9yKCkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICghY2hlY2tTZW1hbnRpY3MoZW50
cnlQb2ludEl0ZW1zLT5pbnB1dHMsIGVudHJ5UG9pbnRJdGVtcy0+b3V0cHV0cywgZnVuY3Rpb25E
ZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCksIG1faW50cmluc2ljcykpIHsKLSAgICAgICAgICAg
IHNldEVycm9yKCk7CisgICAgICAgICAgICBzZXRFcnJvcihFcnJvcigiQmFkIHNlbWFudGljcyBm
b3IgZW50cnlwb2ludC4iLCBmdW5jdGlvbkRlZmluaXRpb24uY29kZUxvY2F0aW9uKCkpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoIWNoZWNrT3BlcmF0
b3JPdmVybG9hZChmdW5jdGlvbkRlZmluaXRpb24sIG1faW50cmluc2ljcywgbV9wcm9ncmFtLm5h
bWVDb250ZXh0KCkpKSB7Ci0gICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVy
cm9yKCJFbnRyeXBvaW50IGNhbm5vdCBiZSBhbiBvcGVyYXRvci4iLCBmdW5jdGlvbkRlZmluaXRp
b24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjU2LDcg
KzY1Niw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmkKICAgICAg
ICAgcmV0dXJuICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CiAgICAgfSkoKTsKICAgICBpZiAoIWJh
c2VUeXBlKSB7Ci0gICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJJ
bnZhbGlkIGJhc2UgdHlwZSBmb3IgZW51bS4iLCBlbnVtZXJhdGlvbkRlZmluaXRpb24uY29kZUxv
Y2F0aW9uKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjY2LDEyICs2NjYsMTIg
QEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaQogICAgICAgICBpbnQ2
NF90IHZhbHVlID0gbWVtYmVyLmdldCgpLnZhbHVlKCk7CiAgICAgICAgIGlmIChpc1NpZ25lZCkg
ewogICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludDY0X3Q+KHN0YXRpY19jYXN0PGludDMy
X3Q+KHZhbHVlKSkgIT0gdmFsdWUpIHsKLSAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAg
ICAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJJbnZhbGlkIGVudW1lcmF0aW9uIHZhbHVlLiIs
IG1lbWJlci5nZXQoKS5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChzdGF0aWNf
Y2FzdDxpbnQ2NF90PihzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUpKSAhPSB2YWx1ZSkgewot
ICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgc2V0RXJyb3IoRXJy
b3IoIkludmFsaWQgZW51bWVyYXRpb24gdmFsdWUuIiwgbWVtYmVyLmdldCgpLmNvZGVMb2NhdGlv
bigpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9
CkBAIC02ODIsNyArNjgyLDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9u
RGVmaQogICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBlbnVtZXJhdGlvbk1lbWJl
cnMuc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgIGF1dG8gb3RoZXJWYWx1ZSA9IGVudW1lcmF0
aW9uTWVtYmVyc1tqXS5nZXQoKS52YWx1ZSgpOwogICAgICAgICAgICAgaWYgKHZhbHVlID09IG90
aGVyVmFsdWUpIHsKLSAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAg
IHNldEVycm9yKEVycm9yKCJDYW5ub3QgZGVjbGFyZSBkdXBsaWNhdGUgZW51bWVyYXRpb24gdmFs
dWVzLiIsIGVudW1lcmF0aW9uTWVtYmVyc1tqXS5nZXQoKS5jb2RlTG9jYXRpb24oKSkpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNjk2LDcg
KzY5Niw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmkKICAgICAg
ICAgfQogICAgIH0KICAgICBpZiAoIWZvdW5kWmVybykgewotICAgICAgICBzZXRFcnJvcigpOwor
ICAgICAgICBzZXRFcnJvcihFcnJvcigiZW51bSBkZWZpbml0aW9uIG11c3QgY29udGFpbiBhIHpl
cm8gdmFsdWUuIiwgZW51bWVyYXRpb25EZWZpbml0aW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiB9CkBAIC03MTIsNyArNzEyLDcgQEAgdm9pZCBDaGVja2VyOjp2
aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIAogYXV0byBDaGVja2VyOjpyZWN1cnNlQW5kR2V0SW5m
byhBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIGJvb2wgcmVxdWlyZXNMZWZ0VmFsdWUpIC0+
IE9wdGlvbmFsPFJlY3Vyc2VJbmZvPgogewogICAgIFZpc2l0b3I6OnZpc2l0KGV4cHJlc3Npb24p
OwotICAgIGlmIChlcnJvcigpKQorICAgIGlmIChoYXNFcnJvcigpKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgIHJldHVybiBnZXRJbmZvKGV4cHJlc3Npb24sIHJlcXVpcmVzTGVm
dFZhbHVlKTsKIH0KQEAgLTcyNCw3ICs3MjQsNyBAQCBhdXRvIENoZWNrZXI6OmdldEluZm8oQVNU
OjpFeHByZXNzaW9uJiBlCiAKICAgICBjb25zdCBhdXRvJiB0eXBlQW5ub3RhdGlvbiA9IGV4cHJl
c3Npb24udHlwZUFubm90YXRpb24oKTsKICAgICBpZiAocmVxdWlyZXNMZWZ0VmFsdWUgJiYgdHlw
ZUFubm90YXRpb24uaXNSaWdodFZhbHVlKCkpIHsKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAg
ICAgc2V0RXJyb3IoRXJyb3IoIlVuZXhwZWN0ZWQgcnZhbHVlLiIsIGV4cHJlc3Npb24uY29kZUxv
Y2F0aW9uKCkpKTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAgICAgcmV0
dXJuIHt7ICp0eXBlSXRlcmF0b3ItPnZhbHVlLCB0eXBlQW5ub3RhdGlvbiB9fTsKQEAgLTc0MSw3
ICs3NDEsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhCiAgICAg
ICAgIGlmICghaW5pdGlhbGl6ZXJJbmZvKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBp
ZiAoIW1hdGNoQW5kQ29tbWl0KGluaXRpYWxpemVySW5mby0+cmVzb2x2aW5nVHlwZSwgbGhzVHlw
ZSkpIHsKLSAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICBzZXRFcnJvcihFcnJv
cigiRGVjbGFyZWQgdmFyaWFibGUgdHlwZSBkb2VzIG5vdCBtYXRjaCBpdHMgaW5pdGlhbGl6ZXIn
cyB0eXBlLiIsIHZhcmlhYmxlRGVjbGFyYXRpb24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTc4NSw3ICs3ODUsNyBAQCB2b2lkIENo
ZWNrZXI6OnZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlCiAKICAgICBhdXRvIHJlc3VsdFR5cGUg
PSBtYXRjaEFuZENvbW1pdChsZWZ0SW5mby0+cmVzb2x2aW5nVHlwZSwgcmlnaHRJbmZvLT5yZXNv
bHZpbmdUeXBlKTsKICAgICBpZiAoIXJlc3VsdFR5cGUpIHsKLSAgICAgICAgc2V0RXJyb3IoKTsK
KyAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkxlZnQgaGFuZCBzaWRlIG9mIGFzc2lnbm1lbnQgZG9l
cyBub3QgbWF0Y2ggdGhlIHR5cGUgb2YgdGhlIHJpZ2h0IGhhbmQgc2lkZS4iLCBhc3NpZ25tZW50
RXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC04MDcsNyArODA3LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0
ZQogICAgIGlmIChPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hdGNoZWRU
eXBlID0gbWF0Y2hBbmRDb21taXQobGVmdFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSwgbmV3VmFs
dWVJbmZvLT5yZXNvbHZpbmdUeXBlKSkKICAgICAgICAgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bi5uZXdWYWx1ZSgpLnNldFR5cGUoV1RGTW92ZShtYXRjaGVkVHlwZS52YWx1ZSgpKSk7CiAgICAg
ZWxzZSB7Ci0gICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJMZWZ0
IGhhbmQgc2lkZSBvZiBhc3NpZ25tZW50IGRvZXMgbm90IG1hdGNoIHRoZSB0eXBlIG9mIHRoZSBy
aWdodCBoYW5kIHNpZGUuIiwgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24o
KSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04NDgsNyArODQ4LDcgQEAgdm9pZCBD
aGVja2VyOjp2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcgogICAgICAgICByZXR1cm4gJmRvd25j
YXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRVbmlmeVR5cGUpOwogICAgIH0pKHVubmFtZWRU
eXBlKTsKICAgICBpZiAoIXBvaW50ZXJUeXBlKSB7Ci0gICAgICAgIHNldEVycm9yKCk7CisgICAg
ICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3QgZGVyZWZlcmVuY2UgYSBub24tcG9pbnRlciB0eXBl
LiIsIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC04NjMsMTMgKzg2MywxMyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFT
VDo6TWFrZVBvaW50ZXJFeHByCiAKICAgICBhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBsZWZ0VmFs
dWVJbmZvLT50eXBlQW5ub3RhdGlvbi5sZWZ0QWRkcmVzc1NwYWNlKCk7CiAgICAgaWYgKCFsZWZ0
QWRkcmVzc1NwYWNlKSB7Ci0gICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVy
cm9yKCJDYW5ub3QgdGFrZSB0aGUgYWRkcmVzcyBvZiBhIG5vbiBsdmFsdWUuIiwgbWFrZVBvaW50
ZXJFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBhdXRvKiBsZWZ0VmFsdWVUeXBlID0gZ2V0VW5uYW1lZFR5cGUobGVmdFZhbHVlSW5mby0+
cmVzb2x2aW5nVHlwZSk7CiAgICAgaWYgKCFsZWZ0VmFsdWVUeXBlKSB7Ci0gICAgICAgIHNldEVy
cm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3QgdGFrZSB0aGUgYWRkcmVzcyBv
ZiBhIHZhbHVlIHdpdGhvdXQgYSB0eXBlLiIsIG1ha2VQb2ludGVyRXhwcmVzc2lvbi5jb2RlTG9j
YXRpb24oKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04ODQsNyArODg0LDcgQEAg
dm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZQogCiAgICAgYXV0byogbGVm
dFZhbHVlVHlwZSA9IGdldFVubmFtZWRUeXBlKGxlZnRWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUp
OwogICAgIGlmICghbGVmdFZhbHVlVHlwZSkgewotICAgICAgICBzZXRFcnJvcigpOworICAgICAg
ICBzZXRFcnJvcihFcnJvcigiQ2Fubm90IHRha2UgdGhlIGFkZHJlc3Mgb2YgYSB2YWx1ZSB3aXRo
b3V0IGEgdHlwZS4iLCBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigp
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTkwMCw3ICs5MDAsNyBAQCB2b2lkIENo
ZWNrZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlCiAKICAgICAgICAgYXV0byBsZWZ0QWRk
cmVzc1NwYWNlID0gbGVmdFZhbHVlSW5mby0+dHlwZUFubm90YXRpb24ubGVmdEFkZHJlc3NTcGFj
ZSgpOwogICAgICAgICBpZiAoIWxlZnRBZGRyZXNzU3BhY2UpIHsKLSAgICAgICAgICAgIHNldEVy
cm9yKCk7CisgICAgICAgICAgICBzZXRFcnJvcihFcnJvcigiQ2Fubm90IHRha2UgdGhlIGFkZHJl
c3Mgb2YgYSBub24gbHZhbHVlLiIsIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uY29kZUxv
Y2F0aW9uKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC05MTQsNyAr
OTE0LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZQogCiAgICAg
YXV0byBsZWZ0QWRkcmVzc1NwYWNlID0gbGVmdFZhbHVlSW5mby0+dHlwZUFubm90YXRpb24ubGVm
dEFkZHJlc3NTcGFjZSgpOwogICAgIGlmICghbGVmdEFkZHJlc3NTcGFjZSkgewotICAgICAgICBz
ZXRFcnJvcigpOworICAgICAgICBzZXRFcnJvcihFcnJvcigiQ2Fubm90IHRha2UgdGhlIGFkZHJl
c3Mgb2YgYSBub24gbHZhbHVlLiIsIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uY29kZUxv
Y2F0aW9uKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTUwLDcgKzk1MCw3IEBA
IHZvaWQgQ2hlY2tlcjo6ZmluaXNoVmlzaXRpbmcoQVNUOjpQcm9wZXIKICAgICAgICAgcmV0dXJu
OwogICAgIGF1dG8gYmFzZVVubmFtZWRUeXBlID0gY29tbWl0KGJhc2VJbmZvLT5yZXNvbHZpbmdU
eXBlKTsKICAgICBpZiAoIWJhc2VVbm5hbWVkVHlwZSkgewotICAgICAgICBzZXRFcnJvcigpOwor
ICAgICAgICBzZXRFcnJvcihFcnJvcigiQ2Fubm90IHJlc29sdmUgdGhlIHR5cGUgb2YgdGhlIGJh
c2Ugb2YgYSBwcm9wZXJ0eSBhY2Nlc3MgZXhwcmVzc2lvbi4iLCBwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTk5
LDMyICs5OTksMzIgQEAgdm9pZCBDaGVja2VyOjpmaW5pc2hWaXNpdGluZyhBU1Q6OlByb3Blcgog
ICAgIH0KIAogICAgIGlmIChsZWZ0QWRkcmVzc1NwYWNlICYmICFhbmRlckZ1bmN0aW9uICYmICFn
ZXR0ZXJGdW5jdGlvbikgewotICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBzZXRFcnJvcihF
cnJvcigiUHJvcGVydHkgYWNjZXNzIGluc3RydWN0aW9uIG11c3QgZWl0aGVyIGhhdmUgYW4gYW5k
ZXIgb3IgYSBnZXR0ZXIuIiwgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigp
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoIWxlZnRBZGRyZXNzU3BhY2Ug
JiYgIXRocmVhZEFuZGVyRnVuY3Rpb24gJiYgIWdldHRlckZ1bmN0aW9uKSB7Ci0gICAgICAgIHNl
dEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJQcm9wZXJ0eSBhY2Nlc3MgaW5zdHJ1
Y3Rpb24gbXVzdCBlaXRoZXIgaGF2ZSBhIHRocmVhZCBhbmRlciBvciBhIGdldHRlci4iLCBwcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlmICh0aHJlYWRBbmRlckZ1bmN0aW9uICYmIGdldHRlckZ1bmN0aW9uKSB7
Ci0gICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3QgaGF2
ZSBib3RoIGEgdGhyZWFkIGFuZGVyIGFuZCBhIGdldHRlci4iLCBwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlm
IChhbmRlckZ1bmN0aW9uICYmIHRocmVhZEFuZGVyRnVuY3Rpb24gJiYgIW1hdGNoZXMoKmFuZGVy
UmV0dXJuVHlwZSwgKnRocmVhZEFuZGVyUmV0dXJuVHlwZSkpIHsKLSAgICAgICAgc2V0RXJyb3Io
KTsKKyAgICAgICAgc2V0RXJyb3IoRXJyb3IoIlJldHVybiB0eXBlIG9mIGFuZGVyIG11c3QgbWF0
Y2ggdGhlIHJldHVybiB0eXBlIG9mIHRoZSB0aHJlYWQgYW5kZXIuIiwgcHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoZ2V0dGVyRnVuY3Rpb24gJiYgYW5kZXJGdW5jdGlvbiAmJiAhbWF0Y2hlcygqZ2V0dGVy
UmV0dXJuVHlwZSwgKmFuZGVyUmV0dXJuVHlwZSkpIHsKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAg
ICAgICAgc2V0RXJyb3IoRXJyb3IoIlJldHVybiB0eXBlIG9mIGFuZGVyIG11c3QgbWF0Y2ggdGhl
IHJldHVybiB0eXBlIG9mIHRoZSBnZXR0ZXIuIiwgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmNv
ZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoZ2V0dGVy
RnVuY3Rpb24gJiYgdGhyZWFkQW5kZXJGdW5jdGlvbiAmJiAhbWF0Y2hlcygqZ2V0dGVyUmV0dXJu
VHlwZSwgKnRocmVhZEFuZGVyUmV0dXJuVHlwZSkpIHsKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAg
ICAgICAgc2V0RXJyb3IoRXJyb3IoIlJldHVybiB0eXBlIG9mIHRoZSB0aHJlYWQgYW5kZXIgbXVz
dCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIGdldHRlci4iLCBwcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
MTA0Niw3ICsxMDQ2LDcgQEAgdm9pZCBDaGVja2VyOjpmaW5pc2hWaXNpdGluZyhBU1Q6OlByb3Bl
cgogICAgIH0KIAogICAgIGlmIChzZXR0ZXJGdW5jdGlvbiAmJiAhZ2V0dGVyRnVuY3Rpb24pIHsK
LSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5vdCBkZWZp
bmUgYSBzZXR0ZXIgZnVuY3Rpb24gd2l0aG91dCBhIGNvcnJlc3BvbmRpbmcgZ2V0dGVyLiIsIHBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC0xMDk0LDEyICsxMDk0LDEyIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNU
OjpSZXR1cm4mIHJldHVyblMKICAgICAgICAgaWYgKCF2YWx1ZUluZm8pCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGlmICghbWF0Y2hBbmRDb21taXQodmFsdWVJbmZvLT5yZXNvbHZpbmdU
eXBlLCBtX2N1cnJlbnRGdW5jdGlvbi0+dHlwZSgpKSkKLSAgICAgICAgICAgIHNldEVycm9yKCk7
CisgICAgICAgICAgICBzZXRFcnJvcihFcnJvcigiVHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlIG11
c3QgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIHRoZSBmdW5jdGlvbi4iLCByZXR1cm5TdGF0ZW1l
bnQuY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICgh
bWF0Y2hlcyhtX2N1cnJlbnRGdW5jdGlvbi0+dHlwZSgpLCBtX2ludHJpbnNpY3Mudm9pZFR5cGUo
KSkpCi0gICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3Qg
cmV0dXJuIG5vdGhpbmcgZnJvbSBhIG5vbi12b2lkIGZ1bmN0aW9uLiIsIHJldHVyblN0YXRlbWVu
dC5jb2RlTG9jYXRpb24oKSkpOwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6UG9pbnRl
clR5cGUmKQpAQCAtMTE2Myw3ICsxMTYzLDcgQEAgYm9vbCBDaGVja2VyOjpyZWN1cnNlQW5kUmVx
dWlyZUJvb2xUeXBlKAogICAgIGlmICghZXhwcmVzc2lvbkluZm8pCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBpZiAoIWlzQm9vbFR5cGUoZXhwcmVzc2lvbkluZm8tPnJlc29sdmluZ1R5cGUp
KSB7Ci0gICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJFeHBlY3Rl
ZCBib29sIHR5cGUgZnJvbSBleHByZXNzaW9uLiIsIGV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCkp
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEy
MTQsNyArMTIxNCw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpGb3JMb29wJiBmb3JMb28K
ICAgICB9LCBbJl0oVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mIGV4cHJlc3Npb24pIHsKICAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGV4cHJlc3Npb24pOwogICAgIH0pLCBmb3JMb29wLmlu
aXRpYWxpemF0aW9uKCkpOwotICAgIGlmIChlcnJvcigpKQorICAgIGlmIChoYXNFcnJvcigpKQog
ICAgICAgICByZXR1cm47CiAgICAgaWYgKGZvckxvb3AuY29uZGl0aW9uKCkpIHsKICAgICAgICAg
aWYgKCFyZWN1cnNlQW5kUmVxdWlyZUJvb2xUeXBlKCpmb3JMb29wLmNvbmRpdGlvbigpKSkKQEAg
LTEyNDQsNyArMTI0NCw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1l
bnQKICAgICAgICAgcmV0dXJuICZ2YWx1ZU5hbWVkVW5pZnlOb2RlOwogICAgIH0pKCk7CiAgICAg
aWYgKCF2YWx1ZVR5cGUpIHsKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgc2V0RXJyb3Io
RXJyb3IoIkludmFsaWQgdHlwZSBmb3IgdGhlIGV4cHJlc3Npb24gY29uZGl0aW9uIG9mIHRoZSBz
d2l0Y2ggc3RhdGVtZW50LiIsIHN3aXRjaFN0YXRlbWVudC5jb2RlTG9jYXRpb24oKSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMjcwLDcgKzEyNzAsNyBAQCB2b2lkIENoZWNrZXI6
OnZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50CiAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcygq
dmFsdWVUeXBlLCAqZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uRGVmaW5pdGlv
bigpKTsKICAgICAgICAgfSkpOwogICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgICAg
IHNldEVycm9yKCk7CisgICAgICAgICAgICBzZXRFcnJvcihFcnJvcigiSW52YWxpZCB0eXBlIGZv
ciBzd2l0Y2ggY2FzZS4iLCBzd2l0Y2hDYXNlLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjg0LDcgKzEyODQsNyBAQCB2b2lkIENo
ZWNrZXI6OnZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50CiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAKICAgICAgICAgICAgIGlmICghc3RhdGljX2Nhc3Q8Ym9vbD4oZmlyc3RDYXNlLnZhbHVl
KCkpKSB7Ci0gICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICBzZXRF
cnJvcihFcnJvcigiQ2Fubm90IGRlZmluZSBtdWx0aXBsZSBkZWZhdWx0IGNhc2VzIGluIHN3aXRj
aCBzdGF0ZW1lbnQuIiwgc2Vjb25kQ2FzZS5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIApAQCAtMTMxNiw3ICsxMzE2LDcgQEAgdm9pZCBD
aGVja2VyOjp2aXNpdChBU1Q6OlN3aXRjaFN0YXRlbWVudAogICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7Ci0g
ICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICBzZXRFcnJvcihFcnJv
cigiQ2Fubm90IGRlZmluZSBkdXBsaWNhdGUgY2FzZSBzdGF0ZW1lbnRzIGluIGEgc3dpdGNoLiIs
IHNlY29uZENhc2UuY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEzNTYsNyArMTM1Niw3IEBAIHZvaWQgQ2hlY2tl
cjo6dmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmICghc3VjY2VzcykgewotICAgICAg
ICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIlN3
aXRjaCBjYXNlcyBtdXN0IGJlIGV4aGF1c3RpdmUgb3IgeW91IG11c3QgZGVmaW5lIGEgZGVmYXVs
dCBjYXNlLiIsIHN3aXRjaFN0YXRlbWVudC5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKQEAgLTEzNzEsNyAr
MTM3MSw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25NZW1iZXIgOiBkb3du
Y2FzdDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4oKnZhbHVlVHlwZSkuZW51bWVyYXRpb25N
ZW1iZXJzKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlcy5jb250YWlucygmZW51bWVy
YXRpb25NZW1iZXIuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldEVycm9yKCk7Cisg
ICAgICAgICAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJTd2l0Y2ggY2FzZXMgb3ZlciBhbiBl
bnVtIG11c3QgYmUgZXhoYXVzdGl2ZSBvciB5b3UgbXVzdCBkZWZpbmUgYSBkZWZhdWx0IGNhc2Uu
Iiwgc3dpdGNoU3RhdGVtZW50LmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xMzgzLDcgKzEz
ODMsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6Q29tbWFFeHByZXNzaW9uCiB7CiAgICAg
QVNTRVJUKGNvbW1hRXhwcmVzc2lvbi5saXN0KCkuc2l6ZSgpID4gMCk7CiAgICAgVmlzaXRvcjo6
dmlzaXQoY29tbWFFeHByZXNzaW9uKTsKLSAgICBpZiAoZXJyb3IoKSkKKyAgICBpZiAoaGFzRXJy
b3IoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGF1dG8gbGFzdEluZm8gPSBnZXRJbmZvKGNvbW1h
RXhwcmVzc2lvbi5saXN0KCkubGFzdCgpKTsKICAgICBmb3J3YXJkVHlwZShjb21tYUV4cHJlc3Np
b24sIGxhc3RJbmZvLT5yZXNvbHZpbmdUeXBlKTsKQEAgLTE0MDAsNyArMTQwMCw3IEBAIHZvaWQg
Q2hlY2tlcjo6dmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2kKICAgICAKICAgICBhdXRvIHJlc3Vs
dFR5cGUgPSBtYXRjaEFuZENvbW1pdChib2R5SW5mby0+cmVzb2x2aW5nVHlwZSwgZWxzZUluZm8t
PnJlc29sdmluZ1R5cGUpOwogICAgIGlmICghcmVzdWx0VHlwZSkgewotICAgICAgICBzZXRFcnJv
cigpOworICAgICAgICBzZXRFcnJvcihFcnJvcigibGhzIGFuZCByaHMgb2YgYSB0ZXJuYXJ5IGV4
cHJlc3Npb24gbXVzdCBtYXRjaC4iLCB0ZXJuYXJ5RXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xNDMxLDE5ICsxNDMxLDE5IEBAIHZvaWQg
Q2hlY2tlcjo6dmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYKICAgICAgICAgfQogICAgIH0KICAg
ICBpZiAoIWZ1bmN0aW9ucykgewotICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBzZXRFcnJv
cihFcnJvcigiQ2Fubm90IHJlc29sdmUgZnVuY3Rpb24gY2FsbCB0byBhIGNvbmNyZXRlIGNhbGxl
ZS4iLCBjYWxsRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgYXV0byogZnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb24obV9wcm9ncmFtLCBm
dW5jdGlvbnMsIHR5cGVzLCBjYWxsRXhwcmVzc2lvbi5uYW1lKCksIGNhbGxFeHByZXNzaW9uLmNv
ZGVMb2NhdGlvbigpLCBtX2ludHJpbnNpY3MsIGNhbGxFeHByZXNzaW9uLmNhc3RSZXR1cm5UeXBl
KCkpOwogICAgIGlmICghZnVuY3Rpb24pIHsKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAg
c2V0RXJyb3IoRXJyb3IoIkNhbm5vdCByZXNvbHZlIGZ1bmN0aW9uIGNhbGwgdG8gYSBjb25jcmV0
ZSBjYWxsZWUuIiwgY2FsbEV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb24tPnBhcmFt
ZXRlcnMoKS5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAoIW1hdGNoQW5kQ29tbWl0KHR5cGVz
W2ldLmdldCgpLCAqZnVuY3Rpb24tPnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpKSkgewotICAgICAg
ICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHNldEVycm9yKEVycm9yKG1ha2VTdHJpbmco
IkludmFsaWQgdHlwZSBmb3IgcGFyYW1ldGVyIG51bWJlciAiLCBpICsgMSwgIiBpbiBmdW5jdGlv
biBjYWxsLiIpLCBjYWxsRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMTQ1MywxMiArMTQ1MywxMiBAQCB2b2lkIENo
ZWNrZXI6OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mCiAgICAgYXNzaWduVHlwZShjYWxsRXhw
cmVzc2lvbiwgZnVuY3Rpb24tPnR5cGUoKS5jbG9uZSgpKTsKIH0KIAotYm9vbCBjaGVjayhQcm9n
cmFtJiBwcm9ncmFtKQorRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IGNoZWNrKFByb2dyYW0mIHByb2dy
YW0pCiB7CiAgICAgQ2hlY2tlciBjaGVja2VyKHByb2dyYW0uaW50cmluc2ljcygpLCBwcm9ncmFt
KTsKICAgICBjaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdChwcm9ncmFtKTsKLSAgICBpZiAoY2hl
Y2tlci5lcnJvcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGNoZWNrZXIuaGFz
RXJyb3IoKSkKKyAgICAgICAgcmV0dXJuIGNoZWNrZXIuZ2V0RXJyb3IoKTsKICAgICByZXR1cm4g
Y2hlY2tlci5hc3NpZ25UeXBlcygpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuaAkocmV2aXNpb24gMjQ3NzAwKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDEzICsyNywxNiBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAor
I2luY2x1ZGUgIldITFNMRXJyb3IuaCIKKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCiBjbGFzcyBQcm9ncmFtOwog
Ci1ib29sIGNoZWNrKFByb2dyYW0mKTsKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBjaGVjayhQcm9n
cmFtJik7CiAKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xDb2RlTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTENvZGVMb2NhdGlvbi5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ29kZUxvY2F0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hM
U0wgeworCitzdHJ1Y3QgVG9rZW47CisKK2NsYXNzIENvZGVMb2NhdGlvbiB7CitwdWJsaWM6Cisg
ICAgQ29kZUxvY2F0aW9uKCkgPSBkZWZhdWx0OworICAgIENvZGVMb2NhdGlvbih1bnNpZ25lZCBz
dGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQorICAgICAgICA6IG1fc3RhcnRPZmZzZXQo
c3RhcnRPZmZzZXQpCisgICAgICAgICwgbV9lbmRPZmZzZXQoZW5kT2Zmc2V0KQorICAgIHsgfQor
ICAgIENvZGVMb2NhdGlvbihjb25zdCBUb2tlbiYpOworICAgIENvZGVMb2NhdGlvbihjb25zdCBD
b2RlTG9jYXRpb24mIGxvY2F0aW9uMSwgY29uc3QgQ29kZUxvY2F0aW9uJiBsb2NhdGlvbjIpCisg
ICAgICAgIDogbV9zdGFydE9mZnNldChsb2NhdGlvbjEuc3RhcnRPZmZzZXQoKSkKKyAgICAgICAg
LCBtX2VuZE9mZnNldChsb2NhdGlvbjIuZW5kT2Zmc2V0KCkpCisgICAgeyB9CisKKyAgICB1bnNp
Z25lZCBzdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRPZmZzZXQ7IH0KKyAgICB1
bnNpZ25lZCBlbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2VuZE9mZnNldDsgfQorCitwcml2
YXRlOgorICAgIHVuc2lnbmVkIG1fc3RhcnRPZmZzZXQgeyAwIH07CisgICAgdW5zaWduZWQgbV9l
bmRPZmZzZXQgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXSExTTAorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDb21wdXRlRGltZW5zaW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDb21w
dXRlRGltZW5zaW9ucy5jcHAJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ29tcHV0ZURpbWVuc2lvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NSw3ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICB9KSwgZnVuY3Rpb25BdHRyaWJ1dGUpOwogICAgICAgICAgICAgaWYg
KCFzdWNjZXNzKSB7Ci0gICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAg
ICBzZXRFcnJvcihFcnJvcigiQ2Fubm90IGRlY2xhcmUgbXVsdGlwbGUgbnVtdGhyZWFkIGF0dHJp
YnV0ZXMuIiwgZnVuY3Rpb25EZWNsYXJhdGlvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNzksNyArNzksNyBA
QCBPcHRpb25hbDxDb21wdXRlRGltZW5zaW9ucz4gY29tcHV0ZURpbWVuCiB7CiAgICAgQ29tcHV0
ZURpbWVuc2lvbnNWaXNpdG9yIGNvbXB1dGVEaW1lbnNpb25zKGVudHJ5UG9pbnQpOwogICAgIGNv
bXB1dGVEaW1lbnNpb25zLlZpc2l0b3I6OnZpc2l0KHByb2dyYW0pOwotICAgIGlmIChjb21wdXRl
RGltZW5zaW9ucy5lcnJvcigpKQorICAgIGlmIChjb21wdXRlRGltZW5zaW9ucy5oYXNFcnJvcigp
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHJldHVybiBjb21wdXRlRGltZW5z
aW9ucy5jb21wdXRlRGltZW5zaW9ucygpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xFcnJvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMRXJyb3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEVycm9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdD
b25jYXRlbmF0ZU51bWJlcnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBFcnJvciB7
CitwdWJsaWM6CisgICAgRXJyb3IoU3RyaW5nJiYgbWVzc2FnZSwgQ29kZUxvY2F0aW9uIGNvZGVM
b2NhdGlvbikKKyAgICAgICAgOiBtX21lc3NhZ2UoV1RGTW92ZShtZXNzYWdlKSkKKyAgICAgICAg
LCBtX2xvY2F0aW9uKGNvZGVMb2NhdGlvbikKKyAgICB7CisgICAgfQorCisgICAgRXJyb3IoU3Ry
aW5nJiYgbWVzc2FnZSkKKyAgICAgICAgOiBtX21lc3NhZ2UoV1RGTW92ZShtZXNzYWdlKSkKKyAg
ICB7CisgICAgfQorCisgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QKKyAgICB7CisgICAgICAg
IC8vIE9PUFM6IHRoaXMgaXNuJ3QgbGluZS9jb2x1bW4hCisgICAgICAgIHJldHVybiBtYWtlU3Ry
aW5nKG1fbG9jYXRpb24uc3RhcnRPZmZzZXQoKSwgJzonLCBtX2xvY2F0aW9uLmVuZE9mZnNldCgp
LCAiOiAiLCBtX21lc3NhZ2UpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9tZXNz
YWdlOworICAgIENvZGVMb2NhdGlvbiBtX2xvY2F0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V0hMU0wKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQ
VSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMRnVuY3Rp
b25TdGFnZUNoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMRnVuY3Rpb25TdGFnZUNoZWNrZXIuY3BwCShyZXZpc2lvbiAyNDc3
MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEZ1bmN0aW9u
U3RhZ2VDaGVja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTIgKzUwLDEyIEBAIHB1Ymxp
YzoKICAgICB2b2lkIHZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKSBv
dmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKCgmY2FsbEV4cHJlc3Npb24uZnVuY3Rpb24oKSA9
PSBtX2ludHJpbnNpY3MuZGR4KCkgfHwgJmNhbGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkgPT0gbV9p
bnRyaW5zaWNzLmRkeSgpKSAmJiBtX2VudHJ5UG9pbnRUeXBlICE9IEFTVDo6RW50cnlQb2ludFR5
cGU6OkZyYWdtZW50KSB7Ci0gICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgc2V0
RXJyb3IoRXJyb3IoIkNhbm5vdCB1c2UgZGR4IG9yIGRkeSBpbiBhIG5vbi1mcmFnbWVudCBzaGFk
ZXIuIiwgY2FsbEV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICBpZiAoKCZjYWxsRXhwcmVzc2lvbi5mdW5jdGlvbigpID09
IG1faW50cmluc2ljcy5hbGxNZW1vcnlCYXJyaWVyKCkgfHwgJmNhbGxFeHByZXNzaW9uLmZ1bmN0
aW9uKCkgPT0gbV9pbnRyaW5zaWNzLmRldmljZU1lbW9yeUJhcnJpZXIoKSB8fCAmY2FsbEV4cHJl
c3Npb24uZnVuY3Rpb24oKSA9PSBtX2ludHJpbnNpY3MuZ3JvdXBNZW1vcnlCYXJyaWVyKCkpCiAg
ICAgICAgICAgICAmJiBtX2VudHJ5UG9pbnRUeXBlICE9IEFTVDo6RW50cnlQb2ludFR5cGU6OkNv
bXB1dGUpIHsKLSAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICBzZXRFcnJvcihF
cnJvcigiQ2Fubm90IHVzZSBtZW1vcnkgYmFycmllciBpbiBhIG5vbi1jb21wdXRlIHNoYWRlci4i
LCBjYWxsRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIFZpc2l0b3I6OnZpc2l0KGNhbGxFeHByZXNzaW9uLmZ1bmN0aW9u
KCkpOwpAQCAtNjUsMTcgKzY1LDE3IEBAIHB1YmxpYzoKICAgICBjb25zdCBJbnRyaW5zaWNzJiBt
X2ludHJpbnNpY3M7CiB9OwogCi1ib29sIGNoZWNrRnVuY3Rpb25TdGFnZXMoUHJvZ3JhbSYgcHJv
Z3JhbSkKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBjaGVja0Z1bmN0aW9uU3RhZ2VzKFByb2dyYW0m
IHByb2dyYW0pCiB7CiAgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFt
LmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkgewogICAgICAgICBpZiAoIWZ1bmN0aW9uRGVmaW5pdGlv
bi0+ZW50cnlQb2ludFR5cGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBGdW5j
dGlvblN0YWdlQ2hlY2tlciBmdW5jdGlvblN0YWdlQ2hlY2tlcigqZnVuY3Rpb25EZWZpbml0aW9u
LT5lbnRyeVBvaW50VHlwZSgpLCBwcm9ncmFtLmludHJpbnNpY3MoKSk7CiAgICAgICAgIGZ1bmN0
aW9uU3RhZ2VDaGVja2VyLlZpc2l0b3I6OnZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbik7Ci0gICAg
ICAgIGlmIChmdW5jdGlvblN0YWdlQ2hlY2tlci5lcnJvcigpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBpZiAoZnVuY3Rpb25TdGFnZUNoZWNrZXIuaGFzRXJyb3IoKSkKKyAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChmdW5jdGlvblN0YWdlQ2hlY2tlci5nZXRF
cnJvcigpLmVycm9yKCkpOwogICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9
OwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xGdW5jdGlvblN0YWdlQ2hlY2tlci5oCShyZXZpc2lvbiAy
NDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEZ1bmN0
aW9uU3RhZ2VDaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEzICsyNywxNiBAQAogCiAj
aWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMRXJyb3IuaCIKKyNpbmNsdWRlIDx3
dGYvRXhwZWN0ZWQuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wg
ewogCiBjbGFzcyBQcm9ncmFtOwogCi1ib29sIGNoZWNrRnVuY3Rpb25TdGFnZXMoUHJvZ3JhbSYp
OworRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IGNoZWNrRnVuY3Rpb25TdGFnZXMoUHJvZ3JhbSYpOwog
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0
aGVyRW50cnlQb2ludEl0ZW1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAJKHJldmlzaW9u
IDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0
aGVyRW50cnlQb2ludEl0ZW1zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZXNldCgpCiAgICAgewogICAgICAgICBtX2N1cnJlbnRTZW1hbnRp
YyA9IG51bGxwdHI7CisgICAgICAgIG1fY3VycmVudFZhcmlhYmxlTG9jYXRpb24gPSB7IH07CiAg
ICAgfQogCiAgICAgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiB0YWtlRW50cnlQb2ludEl0ZW1zKCkK
QEAgLTY4LDcgKzY5LDcgQEAgcHVibGljOgogICAgIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlv
bkRlZmluaXRpb24mKQogICAgIHsKICAgICAgICAgaWYgKCFtX2N1cnJlbnRTZW1hbnRpYykgewot
ICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJFeHBl
Y3RlZCBzZW1hbnRpYyBmb3IgZW50cnlwb2ludCBhcmd1bWVudC4iLCBtX2N1cnJlbnRWYXJpYWJs
ZUxvY2F0aW9uKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbV9l
bnRyeVBvaW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKG1fdHlwZVJlZmVyZW5jZXMubGFz
dCgpLmdldCgpLCAqbV9jdXJyZW50U2VtYW50aWMsIG1fcGF0aCkpOwpAQCAtNzcsMTEgKzc4LDEx
IEBAIHB1YmxpYzoKICAgICB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBu
YXRpdmVUeXBlRGVjbGFyYXRpb24pCiAgICAgewogICAgICAgICBpZiAoIW1fY3VycmVudFNlbWFu
dGljKSB7Ci0gICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgc2V0RXJyb3IoRXJy
b3IoIkV4cGVjdGVkIHNlbWFudGljIGZvciBlbnRyeXBvaW50IGFyZ3VtZW50LiIsIG1fY3VycmVu
dFZhcmlhYmxlTG9jYXRpb24pKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICBpZiAobWF0Y2hlcyhuYXRpdmVUeXBlRGVjbGFyYXRpb24sIG1faW50cmluc2ljcy52b2lk
VHlwZSgpKSkgewotICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHNldEVycm9y
KEVycm9yKCJVbmV4cGVjdGVkIHZvaWQgdHlwZSBmb3IgZW50cnlwb2ludCBhcmd1bWVudC4iLCBt
X2N1cnJlbnRWYXJpYWJsZUxvY2F0aW9uKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIApAQCAtOTEsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB2aXNpdChBU1Q6OlN0cnVj
dHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pCiAgICAgewogICAgICAgICBpZiAo
bV9jdXJyZW50U2VtYW50aWMpIHsKLSAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAg
ICBzZXRFcnJvcihFcnJvcigiVW5leHBlY3RlZCBzZW1hbnRpYyBmb3Igc3RydWN0IGVudHJ5cG9p
bnQgYXJndW1lbnQuIiwgbV9jdXJyZW50VmFyaWFibGVMb2NhdGlvbikpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKQEAgLTEyMSw3ICsxMjIsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlwZSkKICAgICB7CiAgICAgICAgIGlm
ICghbV9jdXJyZW50U2VtYW50aWMpIHsKLSAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAg
ICAgICBzZXRFcnJvcihFcnJvcigiRXhwZWN0ZWQgc2VtYW50aWMgZm9yIGVudHJ5cG9pbnQgYXJn
dW1lbnQuIiwgbV9jdXJyZW50VmFyaWFibGVMb2NhdGlvbikpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50
SXRlbShwb2ludGVyVHlwZSwgKm1fY3VycmVudFNlbWFudGljLCBtX3BhdGgpKTsKQEAgLTEzMCw3
ICsxMzEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlw
ZSYgYXJyYXlSZWZlcmVuY2VUeXBlKQogICAgIHsKICAgICAgICAgaWYgKCFtX2N1cnJlbnRTZW1h
bnRpYykgewotICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHNldEVycm9yKEVy
cm9yKCJFeHBlY3RlZCBzZW1hbnRpYyBmb3IgZW50cnlwb2ludCBhcmd1bWVudC4iLCBtX2N1cnJl
bnRWYXJpYWJsZUxvY2F0aW9uKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgbV9lbnRyeVBvaW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKGFycmF5UmVmZXJl
bmNlVHlwZSwgKm1fY3VycmVudFNlbWFudGljLCBtX3BhdGgpKTsKQEAgLTEzOSw3ICsxNDAsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBlKQogICAg
IHsKICAgICAgICAgaWYgKCFtX2N1cnJlbnRTZW1hbnRpYykgewotICAgICAgICAgICAgc2V0RXJy
b3IoKTsKKyAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJFeHBlY3RlZCBzZW1hbnRpYyBmb3Ig
ZW50cnlwb2ludCBhcmd1bWVudC4iLCBtX2N1cnJlbnRWYXJpYWJsZUxvY2F0aW9uKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbV9lbnRyeVBvaW50SXRlbXMuYXBw
ZW5kKEVudHJ5UG9pbnRJdGVtKGFycmF5VHlwZSwgKm1fY3VycmVudFNlbWFudGljLCBtX3BhdGgp
KTsKQEAgLTE0OCw2ICsxNDksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAgewogICAgICAgICBBU1NF
UlQoIW1fY3VycmVudFNlbWFudGljKTsKKyAgICAgICAgbV9jdXJyZW50VmFyaWFibGVMb2NhdGlv
biA9IHZhcmlhYmxlRGVjbGFyYXRpb24uY29kZUxvY2F0aW9uKCk7CiAgICAgICAgIGlmICh2YXJp
YWJsZURlY2xhcmF0aW9uLnNlbWFudGljKCkpCiAgICAgICAgICAgICBtX2N1cnJlbnRTZW1hbnRp
YyA9IHZhcmlhYmxlRGVjbGFyYXRpb24uc2VtYW50aWMoKTsKICAgICAgICAgQVNTRVJUKHZhcmlh
YmxlRGVjbGFyYXRpb24udHlwZSgpKTsKQEAgLTE2MCwyNSArMTYyLDI2IEBAIHByaXZhdGU6CiAg
ICAgVmVjdG9yPFN0cmluZz4gbV9wYXRoOwogICAgIGNvbnN0IEludHJpbnNpY3MmIG1faW50cmlu
c2ljczsKICAgICBBU1Q6OlNlbWFudGljKiBtX2N1cnJlbnRTZW1hbnRpYyB7IG51bGxwdHIgfTsK
KyAgICBDb2RlTG9jYXRpb24gbV9jdXJyZW50VmFyaWFibGVMb2NhdGlvbjsKICAgICBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlR5cGVSZWZlcmVuY2U+PiBtX3R5cGVSZWZlcmVu
Y2VzOwogICAgIFZlY3RvcjxFbnRyeVBvaW50SXRlbT4gbV9lbnRyeVBvaW50SXRlbXM7CiB9Owog
Ci1PcHRpb25hbDxFbnRyeVBvaW50SXRlbXM+IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhjb25zdCBJ
bnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25E
ZWZpbml0aW9uKQorRXhwZWN0ZWQ8RW50cnlQb2ludEl0ZW1zLCBFcnJvcj4gZ2F0aGVyRW50cnlQ
b2ludEl0ZW1zKGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MsIEFTVDo6RnVuY3Rpb25EZWZp
bml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCiB7CiAgICAgQVNTRVJUKGZ1bmN0aW9uRGVmaW5p
dGlvbi5lbnRyeVBvaW50VHlwZSgpKTsKICAgICBHYXRoZXJlciBpbnB1dEdhdGhlcmVyKGludHJp
bnNpY3MpOwogICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDogZnVuY3Rpb25EZWZpbml0aW9uLnBh
cmFtZXRlcnMoKSkgewogICAgICAgICBpbnB1dEdhdGhlcmVyLnJlc2V0KCk7CiAgICAgICAgIGlu
cHV0R2F0aGVyZXIuY2hlY2tFcnJvckFuZFZpc2l0KHBhcmFtZXRlcik7Ci0gICAgICAgIGlmIChp
bnB1dEdhdGhlcmVyLmVycm9yKCkpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgICAgICBpZiAoaW5wdXRHYXRoZXJlci5oYXNFcnJvcigpKQorICAgICAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKGlucHV0R2F0aGVyZXIuZ2V0RXJyb3IoKS5lcnJvcigpKTsKICAgICB9
CiAgICAgR2F0aGVyZXIgb3V0cHV0R2F0aGVyZXIoaW50cmluc2ljcywgZnVuY3Rpb25EZWZpbml0
aW9uLnNlbWFudGljKCkpOwogICAgIGlmICgqZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRU
eXBlKCkgIT0gQVNUOjpFbnRyeVBvaW50VHlwZTo6Q29tcHV0ZSkKICAgICAgICAgb3V0cHV0R2F0
aGVyZXIuY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpOwotICAg
IGlmIChvdXRwdXRHYXRoZXJlci5lcnJvcigpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIGlmIChvdXRwdXRHYXRoZXJlci5oYXNFcnJvcigpKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQob3V0cHV0R2F0aGVyZXIuZ2V0RXJyb3IoKS5lcnJvcigpKTsKIAogICAgIHJl
dHVybiB7eyBpbnB1dEdhdGhlcmVyLnRha2VFbnRyeVBvaW50SXRlbXMoKSwgb3V0cHV0R2F0aGVy
ZXIudGFrZUVudHJ5UG9pbnRJdGVtcygpIH19OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5
UG9pbnRJdGVtcy5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAiV0hM
U0xFcnJvci5oIgogI2luY2x1ZGUgIldITFNMU2VtYW50aWMuaCIKICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC02Miw3ICs2Myw3IEBA
IHN0cnVjdCBFbnRyeVBvaW50SXRlbXMgewogICAgIFZlY3RvcjxFbnRyeVBvaW50SXRlbT4gb3V0
cHV0czsKIH07CiAKLU9wdGlvbmFsPEVudHJ5UG9pbnRJdGVtcz4gZ2F0aGVyRW50cnlQb2ludEl0
ZW1zKGNvbnN0IEludHJpbnNpY3MmLCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpOworRXhwZWN0
ZWQ8RW50cnlQb2ludEl0ZW1zLCBFcnJvcj4gZ2F0aGVyRW50cnlQb2ludEl0ZW1zKGNvbnN0IElu
dHJpbnNpY3MmLCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpOwogCiB9IC8vIG5hbWVzcGFjZSBX
SExTTAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExl
eGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xMZXhlci5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTExleGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcg
QEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5o
IgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgpAQCAtMzgsMzcgKzM5LDEwIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAotc3RydWN0IFRva2Vu
OwotCi1uYW1lc3BhY2UgQVNUIHsKLQotY2xhc3MgQ29kZUxvY2F0aW9uIHsKLXB1YmxpYzoKLSAg
ICBDb2RlTG9jYXRpb24oKSA9IGRlZmF1bHQ7Ci0gICAgQ29kZUxvY2F0aW9uKHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCi0gICAgICAgIDogbV9zdGFydE9mZnNldChz
dGFydE9mZnNldCkKLSAgICAgICAgLCBtX2VuZE9mZnNldChlbmRPZmZzZXQpCi0gICAgeyB9Ci0g
ICAgaW5saW5lIENvZGVMb2NhdGlvbihjb25zdCBUb2tlbiYpOwotICAgIENvZGVMb2NhdGlvbihj
b25zdCBDb2RlTG9jYXRpb24mIGxvY2F0aW9uMSwgY29uc3QgQ29kZUxvY2F0aW9uJiBsb2NhdGlv
bjIpCi0gICAgICAgIDogbV9zdGFydE9mZnNldChsb2NhdGlvbjEuc3RhcnRPZmZzZXQoKSkKLSAg
ICAgICAgLCBtX2VuZE9mZnNldChsb2NhdGlvbjIuZW5kT2Zmc2V0KCkpCi0gICAgeyB9Ci0KLSAg
ICB1bnNpZ25lZCBzdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRPZmZzZXQ7IH0K
LSAgICB1bnNpZ25lZCBlbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2VuZE9mZnNldDsgfQot
Ci1wcml2YXRlOgotICAgIHVuc2lnbmVkIG1fc3RhcnRPZmZzZXQgeyAwIH07Ci0gICAgdW5zaWdu
ZWQgbV9lbmRPZmZzZXQgeyAwIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBBU1QKLQogY2xhc3Mg
TGV4ZXI7CiAKIHN0cnVjdCBUb2tlbiB7Ci0gICAgQVNUOjpDb2RlTG9jYXRpb24gY29kZUxvY2F0
aW9uOworICAgIENvZGVMb2NhdGlvbiBjb2RlTG9jYXRpb247CiAgICAgZW51bSBjbGFzcyBUeXBl
IDogdWludDhfdCB7CiAgICAgICAgIEludExpdGVyYWwsCiAgICAgICAgIFVpbnRMaXRlcmFsLApA
QCAtMTg5LDcgKzE2Myw3IEBAIHN0cnVjdCBUb2tlbiB7CiAgICAgfQogfTsKIAotQVNUOjpDb2Rl
TG9jYXRpb246OkNvZGVMb2NhdGlvbihjb25zdCBUb2tlbiYgdG9rZW4pCitpbmxpbmUgQ29kZUxv
Y2F0aW9uOjpDb2RlTG9jYXRpb24oY29uc3QgVG9rZW4mIHRva2VuKQogICAgIDogbV9zdGFydE9m
ZnNldCh0b2tlbi5jb2RlTG9jYXRpb24uc3RhcnRPZmZzZXQoKSkKICAgICAsIG1fZW5kT2Zmc2V0
KHRva2VuLmNvZGVMb2NhdGlvbi5lbmRPZmZzZXQoKSkKIHsgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVy
LmNwcAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MiwyNyArNjIs
MjcgQEAgTmFtZVJlc29sdmVyOjpOYW1lUmVzb2x2ZXIoTmFtZVJlc29sdmVyJgogCiBOYW1lUmVz
b2x2ZXI6On5OYW1lUmVzb2x2ZXIoKQogewotICAgIGlmIChlcnJvcigpICYmIG1fcGFyZW50TmFt
ZVJlc29sdmVyKQotICAgICAgICBtX3BhcmVudE5hbWVSZXNvbHZlci0+c2V0RXJyb3IoKTsKKyAg
ICBpZiAoaGFzRXJyb3IoKSAmJiBtX3BhcmVudE5hbWVSZXNvbHZlcikKKyAgICAgICAgbV9wYXJl
bnROYW1lUmVzb2x2ZXItPnNldEVycm9yKGdldEVycm9yKCkuZXJyb3IoKSk7CiB9CiAKIHZvaWQg
TmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpCiB7
CiAgICAgU2NvcGVkU2V0QWRkZXI8QVNUOjpUeXBlUmVmZXJlbmNlKj4gYWRkZXIobV90eXBlUmVm
ZXJlbmNlcywgJnR5cGVSZWZlcmVuY2UpOwogICAgIGlmICghYWRkZXIuaXNOZXdFbnRyeSgpKSB7
Ci0gICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJPT1BTIiwgdHlw
ZVJlZmVyZW5jZS5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgVmlzaXRvcjo6dmlzaXQodHlwZVJlZmVyZW5jZSk7Ci0gICAgaWYgKGVycm9yKCkpCisgICAg
aWYgKGhhc0Vycm9yKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAodHlwZVJlZmVyZW5jZS5t
YXliZVJlc29sdmVkVHlwZSgpKSAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5ODE2MSBTaG91bGRuJ3Qgd2Uga25vdyBieSBub3cgd2hldGhlciB0aGUg
dHlwZSBoYXMgYmVlbiByZXNvbHZlZCBvciBub3Q/CiAgICAgICAgIHJldHVybjsKIAogICAgIGF1
dG8qIGNhbmRpZGF0ZXMgPSBtX25hbWVDb250ZXh0LmdldFR5cGVzKHR5cGVSZWZlcmVuY2UubmFt
ZSgpKTsKICAgICBpZiAoY2FuZGlkYXRlcyA9PSBudWxscHRyKSB7Ci0gICAgICAgIHNldEVycm9y
KCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3QgZmluZCB0eXBlIHJlZmVyZW5jZS4i
LCB0eXBlUmVmZXJlbmNlLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgZm9yIChhdXRvJiBjYW5kaWRhdGUgOiAqY2FuZGlkYXRlcykKQEAgLTkwLDcgKzkwLDcg
QEAgdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6VHlwZVJlZmVyZQogICAgIGlmIChhdXRv
IHJlc3VsdCA9IHJlc29sdmVUeXBlT3ZlcmxvYWRJbXBsKCpjYW5kaWRhdGVzLCB0eXBlUmVmZXJl
bmNlLnR5cGVBcmd1bWVudHMoKSkpCiAgICAgICAgIHR5cGVSZWZlcmVuY2Uuc2V0UmVzb2x2ZWRU
eXBlKCpyZXN1bHQpOwogICAgIGVsc2UgewotICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBz
ZXRFcnJvcihFcnJvcigiQ2Fubm90IHJlc29sdmUgdHlwZSBhcmd1bWVudHMuIiwgdHlwZVJlZmVy
ZW5jZS5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogfQpAQCAtMTAw
LDcgKzEwMCw3IEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGUKICAg
ICBOYW1lQ29udGV4dCBuZXdOYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CiAgICAgTmFtZVJl
c29sdmVyIG5ld05hbWVSZXNvbHZlcigqdGhpcywgbmV3TmFtZUNvbnRleHQpOwogICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpKTsKLSAgICBpZiAoZXJyb3Io
KSkKKyAgICBpZiAoaGFzRXJyb3IoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGZvciAoYXV0byYg
cGFyYW1ldGVyIDogZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKSkKICAgICAgICAgbmV3
TmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChwYXJhbWV0ZXIpOwpAQCAtMTE3LDcgKzEx
Nyw3IEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkJsb2NrJiBibG8KIHZvaWQgTmFt
ZVJlc29sdmVyOjp2aXNpdChBU1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkKIHsKICAgICBj
aGVja0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuY29uZGl0aW9uYWwoKSk7Ci0gICAgaWYgKGVy
cm9yKCkpCisgICAgaWYgKGhhc0Vycm9yKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHsKQEAg
LTEyNSw3ICsxMjUsNyBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpJZlN0YXRlbWVu
CiAgICAgICAgIE5hbWVSZXNvbHZlciBuZXdOYW1lUmVzb2x2ZXIoKnRoaXMsIG5hbWVDb250ZXh0
KTsKICAgICAgICAgbmV3TmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVu
dC5ib2R5KCkpOwogICAgIH0KLSAgICBpZiAoZXJyb3IoKSkKKyAgICBpZiAoaGFzRXJyb3IoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlmU3RhdGVtZW50LmVsc2VCb2R5KCkpIHsKQEAg
LTEzOCw3ICsxMzgsNyBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpJZlN0YXRlbWVu
CiB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxlTG9vcCkKIHsK
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOwotICAgIGlm
IChlcnJvcigpKQorICAgIGlmIChoYXNFcnJvcigpKQogICAgICAgICByZXR1cm47CiAKICAgICBO
YW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CkBAIC0xNjcsNyArMTY3LDcg
QEAgdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6Rm9yTG9vcCYgZgogdm9pZCBOYW1lUmVz
b2x2ZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlv
bikKIHsKICAgICBpZiAoIW1fbmFtZUNvbnRleHQuYWRkKHZhcmlhYmxlRGVjbGFyYXRpb24pKSB7
Ci0gICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3QgZGVj
bGFyZSBkdXBsaWNhdGUgdmFyaWFibGVzLiIsIHZhcmlhYmxlRGVjbGFyYXRpb24uY29kZUxvY2F0
aW9uKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBWaXNpdG9yOjp2aXNpdCh2YXJp
YWJsZURlY2xhcmF0aW9uKTsKQEAgLTE4MSw3ICsxODEsNyBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6
dmlzaXQoQVNUOjpWYXJpYWJsZVJlCiAgICAgaWYgKGF1dG8qIHZhcmlhYmxlID0gbV9uYW1lQ29u
dGV4dC5nZXRWYXJpYWJsZSh2YXJpYWJsZVJlZmVyZW5jZS5uYW1lKCkpKQogICAgICAgICB2YXJp
YWJsZVJlZmVyZW5jZS5zZXRWYXJpYWJsZSgqdmFyaWFibGUpOwogICAgIGVsc2UgewotICAgICAg
ICBzZXRFcnJvcigpOworICAgICAgICBzZXRFcnJvcihFcnJvcigiQ2Fubm90IGZpbmQgdGhlIHZh
cmlhYmxlIGRlY2xhcmF0aW9uLiIsIHZhcmlhYmxlUmVmZXJlbmNlLmNvZGVMb2NhdGlvbigpKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiB9CkBAIC0yMDEsNyArMjAxLDcgQEAgdm9pZCBOYW1l
UmVzb2x2ZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVzcwogICAgICAgICAgICAgICAgICAgICBBU1Q6
OnJlcGxhY2VXaXRoPEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsPihkb3RFeHByZXNzaW9u
LCBXVEZNb3ZlKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNldEVycm9yKCk7
CisgICAgICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIk5vIGVudW1lcmF0aW9uIG1lbWJlciBt
YXRjaGVzLiIsIGRvdEV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIyNyw3ICsyMjcsNyBAQCB2
b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvCiAgICAgICAgIH0KICAgICB9
CiAgICAgCi0gICAgc2V0RXJyb3IoKTsKKyAgICBzZXRFcnJvcihFcnJvcigiQ2Fubm90IHJlc29s
dmUgZW51bWVyYXRpb24gbWVtYmVyIGxpdGVyYWwuIiwgZW51bWVyYXRpb25NZW1iZXJMaXRlcmFs
LmNvZGVMb2NhdGlvbigpKSk7CiB9CiAKIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6Ok5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCkBAIC0y
MzksNDQgKzIzOSw0NCBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpOYXRpdmVGdW5j
CiAKIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4
MTY3IE1ha2Ugc3VyZSBhbGwgdGhlIG5hbWVzIGhhdmUgYmVlbiByZXNvbHZlZC4KIAotYm9vbCBy
ZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mIHByb2dyYW0sIE5hbWVSZXNvbHZlciYgbmFtZVJl
c29sdmVyKQorRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IHJlc29sdmVOYW1lc0luVHlwZXMoUHJvZ3Jh
bSYgcHJvZ3JhbSwgTmFtZVJlc29sdmVyJiBuYW1lUmVzb2x2ZXIpCiB7CiAgICAgZm9yIChhdXRv
JiB0eXBlRGVmaW5pdGlvbiA6IHByb2dyYW0udHlwZURlZmluaXRpb25zKCkpIHsKICAgICAgICAg
bmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlRGVmaW5pdGlvbik7Ci0gICAgICAg
IGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaWYgKG5hbWVSZXNvbHZlci5oYXNFcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIG5h
bWVSZXNvbHZlci5nZXRFcnJvcigpOwogICAgIH0KICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZURl
ZmluaXRpb24gOiBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25zKCkpIHsKICAgICAgICAgbmFt
ZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKLSAgICAg
ICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAobmFtZVJlc29sdmVyLmhhc0Vycm9yKCkpCisgICAgICAgICAgICByZXR1cm4g
bmFtZVJlc29sdmVyLmdldEVycm9yKCk7CiAgICAgfQogICAgIGZvciAoYXV0byYgZW51bWVyYXRp
b25EZWZpbml0aW9uIDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkpIHsKICAgICAg
ICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChlbnVtZXJhdGlvbkRlZmluaXRpb24p
OwotICAgICAgICBpZiAobmFtZVJlc29sdmVyLmVycm9yKCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuaGFzRXJyb3IoKSkKKyAgICAgICAgICAg
IHJldHVybiBuYW1lUmVzb2x2ZXIuZ2V0RXJyb3IoKTsKICAgICB9CiAgICAgZm9yIChhdXRvJiBu
YXRpdmVUeXBlRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKSkg
ewogICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbik7Ci0gICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5oYXNFcnJvcigpKQorICAg
ICAgICAgICAgcmV0dXJuIG5hbWVSZXNvbHZlci5nZXRFcnJvcigpOwogICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIHJlc29sdmVUeXBlTmFtZXNJbkZ1
bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtLCBOYW1lUmVzb2x2ZXImIG5hbWVSZXNvbHZlcikKK0V4
cGVjdGVkPHZvaWQsIEVycm9yPiByZXNvbHZlVHlwZU5hbWVzSW5GdW5jdGlvbnMoUHJvZ3JhbSYg
cHJvZ3JhbSwgTmFtZVJlc29sdmVyJiBuYW1lUmVzb2x2ZXIpCiB7CiAgICAgZm9yIChhdXRvJiBm
dW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkgewogICAg
ICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbik7
Ci0gICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5oYXNFcnJvcigpKQorICAgICAgICAgICAg
cmV0dXJuIG5hbWVSZXNvbHZlci5nZXRFcnJvcigpOwogICAgIH0KICAgICBmb3IgKGF1dG8mIG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b25zKCkpIHsKICAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uKTsKLSAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobmFtZVJlc29sdmVyLmhhc0Vy
cm9yKCkpCisgICAgICAgICAgICByZXR1cm4gbmFtZVJlc29sdmVyLmdldEVycm9yKCk7CiAgICAg
fQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdITFNMCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5h
bWVSZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDggKzI3LDEwIEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVk
ZSAiV0hMU0xFcnJvci5oIgogI2luY2x1ZGUgIldITFNMTmFtZUNvbnRleHQuaCIKICNpbmNsdWRl
ICJXSExTTFZpc2l0b3IuaCIKKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02Myw4ICs2NSw4IEBAIHBy
aXZhdGU6CiAgICAgTmFtZVJlc29sdmVyKiBtX3BhcmVudE5hbWVSZXNvbHZlciB7IG51bGxwdHIg
fTsKIH07CiAKLWJvb2wgcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiwgTmFtZVJlc29sdmVy
Jik7Ci1ib29sIHJlc29sdmVUeXBlTmFtZXNJbkZ1bmN0aW9ucyhQcm9ncmFtJiwgTmFtZVJlc29s
dmVyJik7CitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFt
JiwgTmFtZVJlc29sdmVyJik7CitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gcmVzb2x2ZVR5cGVOYW1l
c0luRnVuY3Rpb25zKFByb2dyYW0mLCBOYW1lUmVzb2x2ZXImKTsKIAogfSAvLyBuYW1lc3BhY2Ug
V0hMU0wKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUGFyc2VyLmNwcAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
OSw3ICs1OSw3IEBAIG5hbWVzcGFjZSBXSExTTCB7CiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PEVycm9yPihuYW1lLmVycm9yKCkpOwogCiAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5NTY4MiBSZXR1cm4gYSBiZXR0ZXIgZXJyb3IgY29kZSBmcm9t
IHRoaXMsIGFuZCByZXBvcnQgaXQgdG8gSmF2YVNjcmlwdC4KLWF1dG8gUGFyc2VyOjpwYXJzZShQ
cm9ncmFtJiBwcm9ncmFtLCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0
aW9uYWw8RXJyb3I+CithdXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYgcHJvZ3JhbSwgU3RyaW5n
VmlldyBzdHJpbmdWaWV3LCBNb2RlIG1vZGUpIC0+IEV4cGVjdGVkPHZvaWQsIEVycm9yPgogewog
ICAgIG1fbGV4ZXIgPSBMZXhlcihzdHJpbmdWaWV3KTsKICAgICBtX21vZGUgPSBtb2RlOwpAQCAt
NjgsNjAgKzY4LDYzIEBAIGF1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiBwcm9ncmFtLCBTdHIK
ICAgICAgICAgYXV0byB0b2tlbiA9IG1fbGV4ZXIucGVlaygpOwogICAgICAgICBzd2l0Y2ggKHRv
a2VuLnR5cGUpIHsKICAgICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6SW52YWxpZDoKLSAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAvLyBPT1BTOiBSZWFsbHk/Cisg
ICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpTZW1pY29s
b246CiAgICAgICAgICAgICBtX2xleGVyLmNvbnN1bWVUb2tlbigpOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIGNhc2UgVG9rZW46OlR5cGU6OlR5cGVkZWY6IHsKICAgICAgICAgICAg
IGF1dG8gdHlwZURlZmluaXRpb24gPSBwYXJzZVR5cGVEZWZpbml0aW9uKCk7CiAgICAgICAgICAg
ICBpZiAoIXR5cGVEZWZpbml0aW9uKQotICAgICAgICAgICAgICAgIHJldHVybiB0eXBlRGVmaW5p
dGlvbi5lcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCh0eXBl
RGVmaW5pdGlvbi5lcnJvcigpKTsKICAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUo
KnR5cGVEZWZpbml0aW9uKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIFRva2VuOjpUeXBlOjpTdHJ1Y3Q6IHsKICAgICAgICAgICAgIGF1dG8gc3RydWN0
dXJlRGVmaW5pdGlvbiA9IHBhcnNlU3RydWN0dXJlRGVmaW5pdGlvbigpOwogICAgICAgICAgICAg
aWYgKCFzdHJ1Y3R1cmVEZWZpbml0aW9uKQotICAgICAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1
cmVEZWZpbml0aW9uLmVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKHN0cnVjdHVyZURlZmluaXRpb24uZXJyb3IoKSk7CiAgICAgICAgICAgICBwcm9ncmFtLmFw
cGVuZChXVEZNb3ZlKCpzdHJ1Y3R1cmVEZWZpbml0aW9uKSk7CiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQogICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpFbnVtOiB7CiAgICAgICAg
ICAgICBhdXRvIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA9IHBhcnNlRW51bWVyYXRpb25EZWZpbml0
aW9uKCk7CiAgICAgICAgICAgICBpZiAoIWVudW1lcmF0aW9uRGVmaW5pdGlvbikKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZW51bWVyYXRpb25EZWZpbml0aW9uLmVycm9yKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVudW1lcmF0aW9uRGVmaW5pdGlvbi5lcnJvcigp
KTsKICAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKmVudW1lcmF0aW9uRGVmaW5p
dGlvbikpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBU
b2tlbjo6VHlwZTo6TmF0aXZlOiB7CiAgICAgICAgICAgICBBU1NFUlQobV9tb2RlID09IE1vZGU6
OlN0YW5kYXJkTGlicmFyeSk7CiAgICAgICAgICAgICBhdXRvIGZ1cnRoZXJUb2tlbiA9IHBlZWtG
dXJ0aGVyKCk7Ci0gICAgICAgICAgICBpZiAoIWZ1cnRoZXJUb2tlbikKLSAgICAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgaWYgKCFmdXJ0aGVyVG9rZW4pIHsK
KyAgICAgICAgICAgICAgICAvLyBPT1BTOiB0aGlzIHNob3VsZCBiZSBhbiBhc3NlcnQsIG5vPwor
ICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBp
ZiAoZnVydGhlclRva2VuLT50eXBlID09IFRva2VuOjpUeXBlOjpUeXBlZGVmKSB7CiAgICAgICAg
ICAgICAgICAgYXV0byBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBwYXJzZU5hdGl2ZVR5cGVEZWNs
YXJhdGlvbigpOwogICAgICAgICAgICAgICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0aW9uKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmF0aXZlVHlwZURlY2xhcmF0aW9uLmVycm9yKCk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChuYXRpdmVUeXBlRGVj
bGFyYXRpb24uZXJyb3IoKSk7CiAgICAgICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92
ZSgqbmF0aXZlVHlwZURlY2xhcmF0aW9uKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBhdXRvIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24g
PSBwYXJzZU5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oKTsKICAgICAgICAgICAgIGlmICghbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5lcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmVycm9yKCkpOwogICAgICAgICAgICAg
cHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOwogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDogewogICAgICAg
ICAgICAgYXV0byBmdW5jdGlvbkRlZmluaXRpb24gPSBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbigp
OwogICAgICAgICAgICAgaWYgKCFmdW5jdGlvbkRlZmluaXRpb24pCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uRGVmaW5pdGlvbi5lcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChmdW5jdGlvbkRlZmluaXRpb24uZXJyb3IoKSk7CiAgICAgICAgICAg
ICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpmdW5jdGlvbkRlZmluaXRpb24pKTsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIHJldHVybiB7IH07CiB9CiAKIGF1dG8gUGFyc2VyOjpmYWlsKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgVHJ5VG9QZWVrIHRyeVRvUGVlaykgLT4gVW5leHBlY3RlZDxF
cnJvcj4KQEAgLTI0MSw3ICsyNDQsNyBAQCBzdGF0aWMgaW50IGRpZ2l0VmFsdWUoVUNoYXIgY2hh
cmFjdGVyKQogICAgIHJldHVybiBjaGFyYWN0ZXIgLSAnQScgKyAxMDsKIH0KIAotc3RhdGljIEV4
cGVjdGVkPGludCwgUGFyc2VyOjpFcnJvcj4gaW50TGl0ZXJhbFRvSW50KFN0cmluZ1ZpZXcgdGV4
dCkKK3N0YXRpYyBFeHBlY3RlZDxpbnQsIEVycm9yPiBpbnRMaXRlcmFsVG9JbnQoU3RyaW5nVmll
dyB0ZXh0KQogewogICAgIGJvb2wgbmVnYXRlID0gZmFsc2U7CiAgICAgaWYgKHRleHQuc3RhcnRz
V2l0aCgiLSJfc3RyKSkgewpAQCAtMjYwLDIxICsyNjMsMjEgQEAgc3RhdGljIEV4cGVjdGVkPGlu
dCwgUGFyc2VyOjpFcnJvcj4gaW50TAogICAgICAgICBhdXRvIHByZXZpb3VzID0gcmVzdWx0Owog
ICAgICAgICByZXN1bHQgPSByZXN1bHQgKiBiYXNlICsgZGlnaXQ7CiAgICAgICAgIGlmIChyZXN1
bHQgPCBwcmV2aW91cykKLSAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPFBhcnNlcjo6RXJy
b3I+KFBhcnNlcjo6RXJyb3IobWFrZVN0cmluZygiaW50IGxpdGVyYWwgIiwgdGV4dCwgIiBpcyBv
dXQgb2YgYm91bmRzIikpKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJv
cihtYWtlU3RyaW5nKCJpbnQgbGl0ZXJhbCAiLCB0ZXh0LCAiIGlzIG91dCBvZiBib3VuZHMiKSkp
OwogICAgIH0KICAgICBpZiAobmVnYXRlKSB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9m
KGludDY0X3QpID4gc2l6ZW9mKHVuc2lnbmVkKSAmJiBzaXplb2YoaW50NjRfdCkgPiBzaXplb2Yo
aW50KSwgIlRoaXMgY29kZSB3b3VsZCBiZSB3cm9uZyBvdGhlcndpc2UiKTsKICAgICAgICAgaW50
NjRfdCBpbnRSZXN1bHQgPSAtc3RhdGljX2Nhc3Q8aW50NjRfdD4ocmVzdWx0KTsKICAgICAgICAg
aWYgKGludFJlc3VsdCA8IHN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWluKCkpKQotICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UGFyc2VyOjpFcnJv
cj4oUGFyc2VyOjpFcnJvcihtYWtlU3RyaW5nKCJpbnQgbGl0ZXJhbCAiLCB0ZXh0LCAiIGlzIG91
dCBvZiBib3VuZHMiKSkpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9y
KG1ha2VTdHJpbmcoImludCBsaXRlcmFsICIsIHRleHQsICIgaXMgb3V0IG9mIGJvdW5kcyIpKSk7
CiAgICAgICAgIHJldHVybiB7IHN0YXRpY19jYXN0PGludD4oaW50UmVzdWx0KSB9OwogICAgIH0K
ICAgICBpZiAocmVzdWx0ID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6bWF4KCkpKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxQYXJzZXI6OkVycm9y
PihQYXJzZXI6OkVycm9yKG1ha2VTdHJpbmcoImludCBsaXRlcmFsICIsIHRleHQsICIgaXMgb3V0
IG9mIGJvdW5kcyIpKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcihtYWtl
U3RyaW5nKCJpbnQgbGl0ZXJhbCAiLCB0ZXh0LCAiIGlzIG91dCBvZiBib3VuZHMiKSkpOwogICAg
IHJldHVybiB7IHN0YXRpY19jYXN0PGludD4ocmVzdWx0KSB9OwogfQogCi1zdGF0aWMgRXhwZWN0
ZWQ8dW5zaWduZWQsIFBhcnNlcjo6RXJyb3I+IHVpbnRMaXRlcmFsVG9VaW50KFN0cmluZ1ZpZXcg
dGV4dCkKK3N0YXRpYyBFeHBlY3RlZDx1bnNpZ25lZCwgRXJyb3I+IHVpbnRMaXRlcmFsVG9VaW50
KFN0cmluZ1ZpZXcgdGV4dCkKIHsKICAgICB1bnNpZ25lZCBiYXNlID0gMTA7CiAgICAgaWYgKHRl
eHQuc3RhcnRzV2l0aCgiMHgiX3N0cikpIHsKQEAgLTI4OSwxNyArMjkyLDE3IEBAIHN0YXRpYyBF
eHBlY3RlZDx1bnNpZ25lZCwgUGFyc2VyOjpFcnJvcj4KICAgICAgICAgYXV0byBwcmV2aW91cyA9
IHJlc3VsdDsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogYmFzZSArIGRpZ2l0OwogICAgICAg
ICBpZiAocmVzdWx0IDwgcHJldmlvdXMpCi0gICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxQ
YXJzZXI6OkVycm9yPihQYXJzZXI6OkVycm9yKG1ha2VTdHJpbmcoInVpbnQgbGl0ZXJhbCAiLCB0
ZXh0LCAiIGlzIG91dCBvZiBib3VuZHMiKSkpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKEVycm9yKG1ha2VTdHJpbmcoInVpbnQgbGl0ZXJhbCAiLCB0ZXh0LCAiIGlzIG91dCBv
ZiBib3VuZHMiKSkpOwogICAgIH0KICAgICByZXR1cm4geyByZXN1bHQgfTsKIH0KIAotc3RhdGlj
IEV4cGVjdGVkPGZsb2F0LCBQYXJzZXI6OkVycm9yPiBmbG9hdExpdGVyYWxUb0Zsb2F0KFN0cmlu
Z1ZpZXcgdGV4dCkKK3N0YXRpYyBFeHBlY3RlZDxmbG9hdCwgRXJyb3I+IGZsb2F0TGl0ZXJhbFRv
RmxvYXQoU3RyaW5nVmlldyB0ZXh0KQogewogICAgIHNpemVfdCBwYXJzZWRMZW5ndGg7CiAgICAg
YXV0byByZXN1bHQgPSBwYXJzZURvdWJsZSh0ZXh0LCBwYXJzZWRMZW5ndGgpOwogICAgIGlmIChw
YXJzZWRMZW5ndGggIT0gdGV4dC5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8
UGFyc2VyOjpFcnJvcj4oUGFyc2VyOjpFcnJvcihtYWtlU3RyaW5nKCJDYW5ub3QgcGFyc2UgZmxv
YXQgIiwgdGV4dCkpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKG1ha2VT
dHJpbmcoIkNhbm5vdCBwYXJzZSBmbG9hdCAiLCB0ZXh0KSkpOwogICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4ocmVzdWx0KTsKIH0KIApAQCAtMzQzLDE4ICszNDYsMTggQEAgYXV0byBQYXJz
ZXI6OmNvbnN1bWVOb25OZWdhdGl2ZUludGVncmFsTAogICAgIHJldHVybiBmYWlsKCJpbnQgbGl0
ZXJhbCBpcyBuZWdhdGl2ZSJfc3RyKTsKIH0KIAotc3RhdGljIEV4cGVjdGVkPHVuc2lnbmVkLCBQ
YXJzZXI6OkVycm9yPiByZWNvZ25pemVTaW1wbGVVbnNpZ25lZEludGVnZXIoU3RyaW5nVmlldyBz
dHJpbmdWaWV3KQorc3RhdGljIEV4cGVjdGVkPHVuc2lnbmVkLCBFcnJvcj4gcmVjb2duaXplU2lt
cGxlVW5zaWduZWRJbnRlZ2VyKFN0cmluZ1ZpZXcgc3RyaW5nVmlldykKIHsKICAgICB1bnNpZ25l
ZCByZXN1bHQgPSAwOwogICAgIGlmIChzdHJpbmdWaWV3Lmxlbmd0aCgpIDwgMSkKLSAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8UGFyc2VyOjpFcnJvcj4oUGFyc2VyOjpFcnJvcihtYWtlU3RyaW5n
KCJTaW1wbGUgdW5zaWduZWQgbGl0ZXJhbCAiLCBzdHJpbmdWaWV3LCAiIGlzIHRvbyBzaG9ydCIp
KSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcihtYWtlU3RyaW5nKCJTaW1w
bGUgdW5zaWduZWQgbGl0ZXJhbCAiLCBzdHJpbmdWaWV3LCAiIGlzIHRvbyBzaG9ydCIpKSk7CiAg
ICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHN0cmluZ1ZpZXcuY29kZVBvaW50cygpKSB7CiAgICAg
ICAgIGlmIChjb2RlUG9pbnQgPCAnMCcgfHwgY29kZVBvaW50ID4gJzknKQotICAgICAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8UGFyc2VyOjpFcnJvcj4oUGFyc2VyOjpFcnJvcihtYWtlU3RyaW5n
KCJTaW1wbGUgdW5zaWduZWQgbGl0ZXJhbCAiLCBzdHJpbmdWaWV3LCAiIGlzbid0IG9mIHRoZSBm
b3JtIFswLTldKyIpKSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3Io
bWFrZVN0cmluZygiU2ltcGxlIHVuc2lnbmVkIGxpdGVyYWwgIiwgc3RyaW5nVmlldywgIiBpc24n
dCBvZiB0aGUgZm9ybSBbMC05XSsiKSkpOwogICAgICAgICBhdXRvIHByZXZpb3VzID0gcmVzdWx0
OwogICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAxMCArIChjb2RlUG9pbnQgLSAnMCcpOwogICAg
ICAgICBpZiAocmVzdWx0IDwgcHJldmlvdXMpCi0gICAgICAgICAgICByZXR1cm4gVW5leHBlY3Rl
ZDxQYXJzZXI6OkVycm9yPihQYXJzZXI6OkVycm9yKG1ha2VTdHJpbmcoIlNpbXBsZSB1bnNpZ25l
ZCBsaXRlcmFsICIsIHN0cmluZ1ZpZXcsICIgaXMgb3V0IG9mIGJvdW5kcyIpKSk7CisgICAgICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IobWFrZVN0cmluZygiU2ltcGxlIHVuc2ln
bmVkIGxpdGVyYWwgIiwgc3RyaW5nVmlldywgIiBpcyBvdXQgb2YgYm91bmRzIikpKTsKICAgICB9
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQxNSw3ICs0MTgsNyBAQCBhdXRvIFBhcnNlcjo6
cGFyc2VUeXBlQXJndW1lbnQoKSAtPiBFeHBlCiAgICAgICAgIHJldHVybiBBU1Q6OlR5cGVBcmd1
bWVudChXVEZNb3ZlKCpjb25zdGFudEV4cHJlc3Npb24pKTsKICAgICB9CiAgICAgQ09OU1VNRV9U
WVBFKHJlc3VsdCwgSWRlbnRpZmllcik7Ci0gICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24o
KnJlc3VsdCk7CisgICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9uKCpyZXN1bHQpOwogICAgIHJldHVy
biBBU1Q6OlR5cGVBcmd1bWVudChtYWtlVW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4obG9j
YXRpb24sIHJlc3VsdC0+c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpLCBBU1Q6OlR5cGVB
cmd1bWVudHMoKSkpOwogfQogCkBAIC01MzQsNyArNTM3LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNl
VHlwZSgpIC0+IEV4cGVjdGVkPFVuaQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeEFiYnJldmlhdGVkID0gWyZdKGNvbnN0
IFR5cGVTdWZmaXhBYmJyZXZpYXRlZCYgdHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4mJiBwcmV2aW91cykgLT4gVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+IHsKLSAgICAgICAgICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uKCphZGRyZXNzU3Bh
Y2VUb2tlbiwgdHlwZVN1ZmZpeEFiYnJldmlhdGVkLmxvY2F0aW9uKTsKKyAgICAgICAgICAgIENv
ZGVMb2NhdGlvbiBsb2NhdGlvbigqYWRkcmVzc1NwYWNlVG9rZW4sIHR5cGVTdWZmaXhBYmJyZXZp
YXRlZC5sb2NhdGlvbik7CiAgICAgICAgICAgICBzd2l0Y2ggKHR5cGVTdWZmaXhBYmJyZXZpYXRl
ZC50b2tlbi50eXBlKSB7CiAgICAgICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpTdGFyOgogICAg
ICAgICAgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4obG9j
YXRpb24sIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpIH07CkBAIC01NjUsNyArNTY4
LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlVHlwZSgpIC0+IEV4cGVjdGVkPFVuaQogICAgIH0KIAog
ICAgIGF1dG8gY29uc3RydWN0VHlwZUZyb21TdWZmaXhOb25BYmJyZXZpYXRlZCA9IFsmXShjb25z
dCBUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQmIHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCwgVW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYgcHJldmlvdXMpIC0+IFVuaXF1ZVJlZjxBU1Q6OlVu
bmFtZWRUeXBlPiB7Ci0gICAgICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uKCpuYW1lLCB0
eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQubG9jYXRpb24pOworICAgICAgICBDb2RlTG9jYXRpb24g
bG9jYXRpb24oKm5hbWUsIHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC5sb2NhdGlvbik7CiAgICAg
ICAgIHN3aXRjaCAodHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLnRva2VuLnR5cGUpIHsKICAgICAg
ICAgY2FzZSBUb2tlbjo6VHlwZTo6U3RhcjoKICAgICAgICAgICAgIHJldHVybiB7IG1ha2VVbmlx
dWVSZWY8QVNUOjpQb2ludGVyVHlwZT4obG9jYXRpb24sICp0eXBlU3VmZml4Tm9uQWJicmV2aWF0
ZWQuYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSkgfTsKQEAgLTExODYsNyArMTE4OSw3
IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUZvckxvb3AoKSAtPiBFeHBlY3RlZDwKICAgICAgICAgfQog
CiAgICAgICAgIFBBUlNFKGJvZHksIFN0YXRlbWVudCk7Ci0gICAgICAgIEFTVDo6Q29kZUxvY2F0
aW9uIGxvY2F0aW9uKG9yaWdpbi0+Y29kZUxvY2F0aW9uLCAgKCpib2R5KS0+Y29kZUxvY2F0aW9u
KCkpOworICAgICAgICBDb2RlTG9jYXRpb24gbG9jYXRpb24ob3JpZ2luLT5jb2RlTG9jYXRpb24s
ICAoKmJvZHkpLT5jb2RlTG9jYXRpb24oKSk7CiAgICAgICAgIHJldHVybiBBU1Q6OkZvckxvb3Ao
bG9jYXRpb24sIFdURk1vdmUoaW5pdGlhbGl6YXRpb24pLCBXVEZNb3ZlKGNvbmRpdGlvbiksIFdU
Rk1vdmUoaW5jcmVtZW50KSwgV1RGTW92ZSgqYm9keSkpOwogICAgIH07CiAKQEAgLTEyMTEsNyAr
MTIxNCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVdoaWxlTG9vcCgpIC0+IEV4cGVjdGUKICAgICBD
T05TVU1FX1RZUEUocmlnaHRQYXJlbnRoZXNpcywgUmlnaHRQYXJlbnRoZXNpcyk7CiAgICAgUEFS
U0UoYm9keSwgU3RhdGVtZW50KTsKIAotICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uKG9y
aWdpbi0+Y29kZUxvY2F0aW9uLCAgKCpib2R5KS0+Y29kZUxvY2F0aW9uKCkpOworICAgIENvZGVM
b2NhdGlvbiBsb2NhdGlvbihvcmlnaW4tPmNvZGVMb2NhdGlvbiwgICgqYm9keSktPmNvZGVMb2Nh
dGlvbigpKTsKICAgICByZXR1cm4gQVNUOjpXaGlsZUxvb3AobG9jYXRpb24sIFdURk1vdmUoKmNv
bmRpdGlvbmFsKSwgV1RGTW92ZSgqYm9keSkpOwogfQogCkBAIC0xMzg5LDcgKzEzOTIsNyBAQCBh
dXRvIFBhcnNlcjo6cGFyc2VFZmZlY3RmdWxFeHByZXNzaW9uKCkgCiAgICAgaWYgKGV4cHJlc3Np
b25zLnNpemUoKSA9PSAxKQogICAgICAgICByZXR1cm4gV1RGTW92ZShleHByZXNzaW9uc1swXSk7
CiAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gbV9sZXhlci5wZWVrKCkuc3RhcnRPZmZzZXQoKTsK
LSAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbihvcmlnaW4tPnN0YXJ0T2Zmc2V0KCksIGVu
ZE9mZnNldCk7CisgICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9uKG9yaWdpbi0+c3RhcnRPZmZzZXQo
KSwgZW5kT2Zmc2V0KTsKICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6Q29tbWFFeHBy
ZXNzaW9uPihsb2NhdGlvbiwgV1RGTW92ZShleHByZXNzaW9ucykpIH07CiB9CiAKQEAgLTE0MzMs
MTQgKzE0MzYsMTQgQEAgYXV0byBQYXJzZXI6OnBhcnNlTGltaXRlZFN1ZmZpeE9wZXJhdG9yKAog
ICAgICAgICBhdXRvIGlkZW50aWZpZXIgPSBjb25zdW1lVHlwZShUb2tlbjo6VHlwZTo6SWRlbnRp
Zmllcik7CiAgICAgICAgIGlmICghaWRlbnRpZmllcikKICAgICAgICAgICAgIHJldHVybiBTdWZm
aXhFeHByZXNzaW9uKFdURk1vdmUocHJldmlvdXMpLCBmYWxzZSk7Ci0gICAgICAgIEFTVDo6Q29k
ZUxvY2F0aW9uIGxvY2F0aW9uKHByZXZpb3VzLT5jb2RlTG9jYXRpb24oKSwgKmlkZW50aWZpZXIp
OworICAgICAgICBDb2RlTG9jYXRpb24gbG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2NhdGlvbigp
LCAqaWRlbnRpZmllcik7CiAgICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKG1ha2VVbmlx
dWVSZWY8QVNUOjpEb3RFeHByZXNzaW9uPihsb2NhdGlvbiwgV1RGTW92ZShwcmV2aW91cyksIGlk
ZW50aWZpZXItPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSksIHRydWUpOwogICAgIH0K
ICAgICBjYXNlIFRva2VuOjpUeXBlOjpBcnJvdzogewogICAgICAgICBhdXRvIGlkZW50aWZpZXIg
PSBjb25zdW1lVHlwZShUb2tlbjo6VHlwZTo6SWRlbnRpZmllcik7CiAgICAgICAgIGlmICghaWRl
bnRpZmllcikKICAgICAgICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKFdURk1vdmUocHJl
dmlvdXMpLCBmYWxzZSk7Ci0gICAgICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uKHByZXZp
b3VzLT5jb2RlTG9jYXRpb24oKSwgKmlkZW50aWZpZXIpOworICAgICAgICBDb2RlTG9jYXRpb24g
bG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2NhdGlvbigpLCAqaWRlbnRpZmllcik7CiAgICAgICAg
IHJldHVybiBTdWZmaXhFeHByZXNzaW9uKG1ha2VVbmlxdWVSZWY8QVNUOjpEb3RFeHByZXNzaW9u
Pihsb2NhdGlvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4obG9j
YXRpb24sIFdURk1vdmUocHJldmlvdXMpKSwgaWRlbnRpZmllci0+c3RyaW5nVmlldyhtX2xleGVy
KS50b1N0cmluZygpKSwgdHJ1ZSk7CiAgICAgfQogICAgIGRlZmF1bHQ6IHsKQEAgLTE0NDksNyAr
MTQ1Miw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUxpbWl0ZWRTdWZmaXhPcGVyYXRvcigKICAgICAg
ICAgaWYgKCFleHByZXNzaW9uKQogICAgICAgICAgICAgcmV0dXJuIFN1ZmZpeEV4cHJlc3Npb24o
V1RGTW92ZShwcmV2aW91cyksIGZhbHNlKTsKICAgICAgICAgaWYgKGF1dG8gcmlnaHRTcXVhcmVC
cmFja2V0ID0gY29uc3VtZVR5cGUoVG9rZW46OlR5cGU6OlJpZ2h0U3F1YXJlQnJhY2tldCkpIHsK
LSAgICAgICAgICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uKHByZXZpb3VzLT5jb2RlTG9j
YXRpb24oKSwgKnJpZ2h0U3F1YXJlQnJhY2tldCk7CisgICAgICAgICAgICBDb2RlTG9jYXRpb24g
bG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2NhdGlvbigpLCAqcmlnaHRTcXVhcmVCcmFja2V0KTsK
ICAgICAgICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKG1ha2VVbmlxdWVSZWY8QVNUOjpJ
bmRleEV4cHJlc3Npb24+KGxvY2F0aW9uLCBXVEZNb3ZlKHByZXZpb3VzKSwgV1RGTW92ZSgqZXhw
cmVzc2lvbikpLCB0cnVlKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gU3VmZml4RXhwcmVz
c2lvbihXVEZNb3ZlKHByZXZpb3VzKSwgZmFsc2UpOwpAQCAtMTQ3MywxNCArMTQ3NiwxNCBAQCBh
dXRvIFBhcnNlcjo6cGFyc2VTdWZmaXhPcGVyYXRvcihVbmlxdWVSCiAgICAgICAgIGF1dG8gaWRl
bnRpZmllciA9IGNvbnN1bWVUeXBlKFRva2VuOjpUeXBlOjpJZGVudGlmaWVyKTsKICAgICAgICAg
aWYgKCFpZGVudGlmaWVyKQogICAgICAgICAgICAgcmV0dXJuIFN1ZmZpeEV4cHJlc3Npb24oV1RG
TW92ZShwcmV2aW91cyksIGZhbHNlKTsKLSAgICAgICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRp
b24ocHJldmlvdXMtPmNvZGVMb2NhdGlvbigpLCAqaWRlbnRpZmllcik7CisgICAgICAgIENvZGVM
b2NhdGlvbiBsb2NhdGlvbihwcmV2aW91cy0+Y29kZUxvY2F0aW9uKCksICppZGVudGlmaWVyKTsK
ICAgICAgICAgcmV0dXJuIFN1ZmZpeEV4cHJlc3Npb24obWFrZVVuaXF1ZVJlZjxBU1Q6OkRvdEV4
cHJlc3Npb24+KGxvY2F0aW9uLCBXVEZNb3ZlKHByZXZpb3VzKSwgaWRlbnRpZmllci0+c3RyaW5n
VmlldyhtX2xleGVyKS50b1N0cmluZygpKSwgdHJ1ZSk7CiAgICAgfQogICAgIGNhc2UgVG9rZW46
OlR5cGU6OkFycm93OiB7CiAgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IGNvbnN1bWVUeXBlKFRv
a2VuOjpUeXBlOjpJZGVudGlmaWVyKTsKICAgICAgICAgaWYgKCFpZGVudGlmaWVyKQogICAgICAg
ICAgICAgcmV0dXJuIFN1ZmZpeEV4cHJlc3Npb24oV1RGTW92ZShwcmV2aW91cyksIGZhbHNlKTsK
LSAgICAgICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2NhdGlv
bigpLCAqaWRlbnRpZmllcik7CisgICAgICAgIENvZGVMb2NhdGlvbiBsb2NhdGlvbihwcmV2aW91
cy0+Y29kZUxvY2F0aW9uKCksICppZGVudGlmaWVyKTsKICAgICAgICAgcmV0dXJuIFN1ZmZpeEV4
cHJlc3Npb24obWFrZVVuaXF1ZVJlZjxBU1Q6OkRvdEV4cHJlc3Npb24+KGxvY2F0aW9uLCBtYWtl
VW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihXVEZNb3ZlKCpzdWZmaXgpLCBX
VEZNb3ZlKHByZXZpb3VzKSksIGlkZW50aWZpZXItPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJp
bmcoKSksIHRydWUpOwogICAgIH0KICAgICBjYXNlIFRva2VuOjpUeXBlOjpMZWZ0U3F1YXJlQnJh
Y2tldDogewpAQCAtMTQ4OCwxMyArMTQ5MSwxMyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VTdWZmaXhP
cGVyYXRvcihVbmlxdWVSCiAgICAgICAgIGlmICghZXhwcmVzc2lvbikKICAgICAgICAgICAgIHJl
dHVybiBTdWZmaXhFeHByZXNzaW9uKFdURk1vdmUocHJldmlvdXMpLCBmYWxzZSk7CiAgICAgICAg
IGlmIChhdXRvIHJpZ2h0U3F1YXJlQnJhY2tldCA9IGNvbnN1bWVUeXBlKFRva2VuOjpUeXBlOjpS
aWdodFNxdWFyZUJyYWNrZXQpKSB7Ci0gICAgICAgICAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2Nh
dGlvbihwcmV2aW91cy0+Y29kZUxvY2F0aW9uKCksICpyaWdodFNxdWFyZUJyYWNrZXQpOworICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9uKHByZXZpb3VzLT5jb2RlTG9jYXRpb24oKSwg
KnJpZ2h0U3F1YXJlQnJhY2tldCk7CiAgICAgICAgICAgICByZXR1cm4gU3VmZml4RXhwcmVzc2lv
bihtYWtlVW5pcXVlUmVmPEFTVDo6SW5kZXhFeHByZXNzaW9uPihsb2NhdGlvbiwgV1RGTW92ZShw
cmV2aW91cyksIFdURk1vdmUoKmV4cHJlc3Npb24pKSwgdHJ1ZSk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIFN1ZmZpeEV4cHJlc3Npb24oV1RGTW92ZShwcmV2aW91cyksIGZhbHNlKTsKICAg
ICB9CiAgICAgY2FzZSBUb2tlbjo6VHlwZTo6UGx1c1BsdXM6IHsKLSAgICAgICAgQVNUOjpDb2Rl
TG9jYXRpb24gbG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2NhdGlvbigpLCAqc3VmZml4KTsKKyAg
ICAgICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9uKHByZXZpb3VzLT5jb2RlTG9jYXRpb24oKSwgKnN1
ZmZpeCk7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uOjpjcmVhdGUobG9jYXRpb24sIFdURk1vdmUocHJldmlvdXMpKTsKICAgICAgICAgVmVjdG9y
PFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBjYWxsQXJndW1lbnRzOwogICAgICAgICBjYWxs
QXJndW1lbnRzLmFwcGVuZChyZXN1bHQtPm9sZFZhcmlhYmxlUmVmZXJlbmNlKCkpOwpAQCAtMTUw
NCw3ICsxNTA3LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlU3VmZml4T3BlcmF0b3IoVW5pcXVlUgog
ICAgIH0KICAgICBkZWZhdWx0OiB7CiAgICAgICAgIEFTU0VSVChzdWZmaXgtPnR5cGUgPT0gVG9r
ZW46OlR5cGU6Ok1pbnVzTWludXMpOwotICAgICAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlv
bihwcmV2aW91cy0+Y29kZUxvY2F0aW9uKCksICpzdWZmaXgpOworICAgICAgICBDb2RlTG9jYXRp
b24gbG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2NhdGlvbigpLCAqc3VmZml4KTsKICAgICAgICAg
YXV0byByZXN1bHQgPSBBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb246OmNyZWF0ZShsb2Nh
dGlvbiwgV1RGTW92ZShwcmV2aW91cykpOwogICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6
RXhwcmVzc2lvbj4+IGNhbGxBcmd1bWVudHM7CiAgICAgICAgIGNhbGxBcmd1bWVudHMuYXBwZW5k
KHJlc3VsdC0+b2xkVmFyaWFibGVSZWZlcmVuY2UoKSk7CkBAIC0xNTMwLDcgKzE1MzMsNyBAQCBh
dXRvIFBhcnNlcjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gRXhwZWN0CiAgICAgaWYgKGV4cHJlc3Np
b25zLnNpemUoKSA9PSAxKQogICAgICAgICByZXR1cm4gV1RGTW92ZShleHByZXNzaW9uc1swXSk7
CiAgICAgYXV0byBlbmRPZmZzZXQgPSBtX2xleGVyLnBlZWsoKS5zdGFydE9mZnNldCgpOwotICAg
IEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworICAg
IENvZGVMb2NhdGlvbiBsb2NhdGlvbihzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKICAgICByZXR1
cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6Q29tbWFFeHByZXNzaW9uPihsb2NhdGlvbiwgV1RGTW92
ZShleHByZXNzaW9ucykpIH07CiB9CiAKQEAgLTE1NDEsMTEgKzE1NDQsMTEgQEAgYXV0byBQYXJz
ZXI6OmNvbXBsZXRlVGVybmFyeUNvbmRpdGlvbmFsKAogICAgIENPTlNVTUVfVFlQRShjb2xvbiwg
Q29sb24pOwogICAgIFBBUlNFKGVsc2VFeHByZXNzaW9uLCBQb3NzaWJsZVRlcm5hcnlDb25kaXRp
b25hbCk7CiAKLSAgICBBU1Q6OkNvZGVMb2NhdGlvbiBwcmVkaWNhdGVMb2NhdGlvbiA9IHByZWRp
Y2F0ZS0+Y29kZUxvY2F0aW9uKCk7CisgICAgQ29kZUxvY2F0aW9uIHByZWRpY2F0ZUxvY2F0aW9u
ID0gcHJlZGljYXRlLT5jb2RlTG9jYXRpb24oKTsKICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6
RXhwcmVzc2lvbj4+IGNhc3RBcmd1bWVudHM7CiAgICAgY2FzdEFyZ3VtZW50cy5hcHBlbmQoV1RG
TW92ZShwcmVkaWNhdGUpKTsKICAgICBhdXRvIGJvb2xDYXN0ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6
OkNhbGxFeHByZXNzaW9uPihwcmVkaWNhdGVMb2NhdGlvbiwgImJvb2wiX3N0ciwgV1RGTW92ZShj
YXN0QXJndW1lbnRzKSk7Ci0gICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24ocHJlZGljYXRl
TG9jYXRpb24sICgqZWxzZUV4cHJlc3Npb24pLT5jb2RlTG9jYXRpb24oKSk7CisgICAgQ29kZUxv
Y2F0aW9uIGxvY2F0aW9uKHByZWRpY2F0ZUxvY2F0aW9uLCAoKmVsc2VFeHByZXNzaW9uKS0+Y29k
ZUxvY2F0aW9uKCkpOwogICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpUZXJuYXJ5RXhw
cmVzc2lvbj4obG9jYXRpb24sIFdURk1vdmUoYm9vbENhc3QpLCBXVEZNb3ZlKCpib2R5RXhwcmVz
c2lvbiksIFdURk1vdmUoKmVsc2VFeHByZXNzaW9uKSkgfTsKIH0KIApAQCAtMTU2Nyw3ICsxNTcw
LDcgQEAgYXV0byBQYXJzZXI6OmNvbXBsZXRlQXNzaWdubWVudChVbmlxdWVSZQogICAgICAgICBy
ZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oYXNzaWdubWVudE9wZXJhdG9yLmVycm9yKCkpOwogCiAg
ICAgUEFSU0UocmlnaHQsIFBvc3NpYmxlVGVybmFyeUNvbmRpdGlvbmFsKTsKLSAgICBBU1Q6OkNv
ZGVMb2NhdGlvbiBsb2NhdGlvbiA9IHsgbGVmdC0+Y29kZUxvY2F0aW9uKCksICgqcmlnaHQpLT5j
b2RlTG9jYXRpb24oKSB9OworICAgIENvZGVMb2NhdGlvbiBsb2NhdGlvbiA9IHsgbGVmdC0+Y29k
ZUxvY2F0aW9uKCksICgqcmlnaHQpLT5jb2RlTG9jYXRpb24oKSB9OwogCiAgICAgaWYgKGFzc2ln
bm1lbnRPcGVyYXRvci0+dHlwZSA9PSBUb2tlbjo6VHlwZTo6RXF1YWxzU2lnbikKICAgICAgICAg
cmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihsb2NhdGlv
biwgV1RGTW92ZShsZWZ0KSwgV1RGTW92ZSgqcmlnaHQpKX07CkBAIC0xNjc2LDcgKzE2NzksNyBA
QCBhdXRvIFBhcnNlcjo6Y29tcGxldGVQb3NzaWJsZUxvZ2ljYWxCaW5hCiAgICAgICAgIFRva2Vu
OjpUeXBlOjpBbmQKICAgICAgICAgPigpKSB7CiAgICAgICAgIFBBUlNFKG5leHQsIFBvc3NpYmxl
UmVsYXRpb25hbEJpbmFyeU9wZXJhdGlvbik7Ci0gICAgICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxv
Y2F0aW9uKHByZXZpb3VzLT5jb2RlTG9jYXRpb24oKSwgKCpuZXh0KS0+Y29kZUxvY2F0aW9uKCkp
OworICAgICAgICBDb2RlTG9jYXRpb24gbG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2NhdGlvbigp
LCAoKm5leHQpLT5jb2RlTG9jYXRpb24oKSk7CiAKICAgICAgICAgc3dpdGNoIChsb2dpY2FsQmlu
YXJ5T3BlcmF0aW9uLT50eXBlKSB7CiAgICAgICAgIGNhc2UgVG9rZW46OlR5cGU6Ok9yT3I6CkBA
IC0xNzMwLDcgKzE3MzMsNyBAQCBhdXRvIFBhcnNlcjo6Y29tcGxldGVQb3NzaWJsZVJlbGF0aW9u
YWxCCiAgICAgICAgIFRva2VuOjpUeXBlOjpOb3RFcXVhbAogICAgICAgICA+KCkpIHsKICAgICAg
ICAgUEFSU0UobmV4dCwgUG9zc2libGVTaGlmdCk7Ci0gICAgICAgIEFTVDo6Q29kZUxvY2F0aW9u
IGxvY2F0aW9uKHByZXZpb3VzLT5jb2RlTG9jYXRpb24oKSwgKCpuZXh0KS0+Y29kZUxvY2F0aW9u
KCkpOworICAgICAgICBDb2RlTG9jYXRpb24gbG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2NhdGlv
bigpLCAoKm5leHQpLT5jb2RlTG9jYXRpb24oKSk7CiAKICAgICAgICAgVmVjdG9yPFVuaXF1ZVJl
ZjxBU1Q6OkV4cHJlc3Npb24+PiBjYWxsQXJndW1lbnRzOwogICAgICAgICBjYWxsQXJndW1lbnRz
LmFwcGVuZChXVEZNb3ZlKHByZXZpb3VzKSk7CkBAIC0xNzgyLDcgKzE3ODUsNyBAQCBhdXRvIFBh
cnNlcjo6Y29tcGxldGVQb3NzaWJsZVNoaWZ0KFVuaXF1CiAgICAgICAgIFRva2VuOjpUeXBlOjpS
aWdodFNoaWZ0CiAgICAgICAgID4oKSkgewogICAgICAgICBQQVJTRShuZXh0LCBQb3NzaWJsZUFk
ZCk7Ci0gICAgICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uKHByZXZpb3VzLT5jb2RlTG9j
YXRpb24oKSwgKCpuZXh0KS0+Y29kZUxvY2F0aW9uKCkpOworICAgICAgICBDb2RlTG9jYXRpb24g
bG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2NhdGlvbigpLCAoKm5leHQpLT5jb2RlTG9jYXRpb24o
KSk7CiAKICAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBjYWxsQXJn
dW1lbnRzOwogICAgICAgICBjYWxsQXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKHByZXZpb3VzKSk7
CkBAIC0xODE3LDcgKzE4MjAsNyBAQCBhdXRvIFBhcnNlcjo6Y29tcGxldGVQb3NzaWJsZUFkZChV
bmlxdWVSCiAgICAgICAgIFRva2VuOjpUeXBlOjpNaW51cwogICAgICAgICA+KCkpIHsKICAgICAg
ICAgUEFSU0UobmV4dCwgUG9zc2libGVNdWx0aXBseSk7Ci0gICAgICAgIEFTVDo6Q29kZUxvY2F0
aW9uIGxvY2F0aW9uKHByZXZpb3VzLT5jb2RlTG9jYXRpb24oKSwgKCpuZXh0KS0+Y29kZUxvY2F0
aW9uKCkpOworICAgICAgICBDb2RlTG9jYXRpb24gbG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2Nh
dGlvbigpLCAoKm5leHQpLT5jb2RlTG9jYXRpb24oKSk7CiAKICAgICAgICAgVmVjdG9yPFVuaXF1
ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBjYWxsQXJndW1lbnRzOwogICAgICAgICBjYWxsQXJndW1l
bnRzLmFwcGVuZChXVEZNb3ZlKHByZXZpb3VzKSk7CkBAIC0xODUzLDcgKzE4NTYsNyBAQCBhdXRv
IFBhcnNlcjo6Y29tcGxldGVQb3NzaWJsZU11bHRpcGx5KFVuCiAgICAgICAgIFRva2VuOjpUeXBl
OjpNb2QKICAgICAgICAgPigpKSB7CiAgICAgICAgIFBBUlNFKG5leHQsIFBvc3NpYmxlUHJlZml4
KTsKLSAgICAgICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2Nh
dGlvbigpLCAoKm5leHQpLT5jb2RlTG9jYXRpb24oKSk7CisgICAgICAgIENvZGVMb2NhdGlvbiBs
b2NhdGlvbihwcmV2aW91cy0+Y29kZUxvY2F0aW9uKCksICgqbmV4dCktPmNvZGVMb2NhdGlvbigp
KTsKIAogICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGNhbGxBcmd1
bWVudHM7CiAgICAgICAgIGNhbGxBcmd1bWVudHMuYXBwZW5kKFdURk1vdmUocHJldmlvdXMpKTsK
QEAgLTE4OTMsNyArMTg5Niw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVBvc3NpYmxlUHJlZml4KGJv
b2wgKmkKICAgICAgICAgVG9rZW46OlR5cGU6OlN0YXIKICAgICA+KCkpIHsKICAgICAgICAgUEFS
U0UobmV4dCwgUG9zc2libGVQcmVmaXgpOwotICAgICAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2Nh
dGlvbigqcHJlZml4LCAoKm5leHQpLT5jb2RlTG9jYXRpb24oKSk7CisgICAgICAgIENvZGVMb2Nh
dGlvbiBsb2NhdGlvbigqcHJlZml4LCAoKm5leHQpLT5jb2RlTG9jYXRpb24oKSk7CiAKICAgICAg
ICAgc3dpdGNoIChwcmVmaXgtPnR5cGUpIHsKICAgICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6UGx1
c1BsdXM6IHsKQEAgLTIwMTEsNyArMjAxNCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUNhbGxFeHBy
ZXNzaW9uKCkgLT4gRXgKICAgICB9CiAKICAgICBDT05TVU1FX1RZUEUocmlnaHRQYXJlbnRoZXNp
cywgUmlnaHRQYXJlbnRoZXNpcyk7Ci0gICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24oKm5h
bWUsICpyaWdodFBhcmVudGhlc2lzKTsKKyAgICBDb2RlTG9jYXRpb24gbG9jYXRpb24oKm5hbWUs
ICpyaWdodFBhcmVudGhlc2lzKTsKIAogICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpD
YWxsRXhwcmVzc2lvbj4obG9jYXRpb24sIFdURk1vdmUoY2FsbE5hbWUpLCBXVEZNb3ZlKGFyZ3Vt
ZW50cykpIH07CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUGFyc2VyLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJXSExTTEVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQu
aCIKICNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIgogI2luY2x1ZGUgIldI
TFNMRW51bWVyYXRpb25NZW1iZXIuaCIKKyNpbmNsdWRlICJXSExTTEVycm9yLmgiCiAjaW5jbHVk
ZSAiV0hMU0xFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xGYWxsdGhyb3VnaC5oIgogI2lu
Y2x1ZGUgIldITFNMRmxvYXRMaXRlcmFsLmgiCkBAIC0xMDYsMjEgKzEwNyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgVXNlcgogICAgIH07CiAKLSAgICBzdHJ1Y3QgRXJyb3IgewotICAgICAgICBFcnJv
cihTdHJpbmcmJiBlcnJvcikKLSAgICAgICAgICAgIDogZXJyb3IoV1RGTW92ZShlcnJvcikpCi0g
ICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBlcnJvcjsKLQotICAgICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAg
b3V0LnByaW50KGVycm9yKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBPcHRpb25hbDxFcnJv
cj4gcGFyc2UoUHJvZ3JhbSYsIFN0cmluZ1ZpZXcsIE1vZGUpOworICAgIEV4cGVjdGVkPHZvaWQs
IEVycm9yPiBwYXJzZShQcm9ncmFtJiwgU3RyaW5nVmlldywgTW9kZSk7CiAKIHByaXZhdGU6CiAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgbmVlZCB0aGlzCkBAIC0xNTgsMTMgKzE0NSwxMyBA
QCBwcml2YXRlOgogICAgIEV4cGVjdGVkPEFTVDo6VHlwZUFyZ3VtZW50LCBFcnJvcj4gcGFyc2VU
eXBlQXJndW1lbnQoKTsKICAgICBFeHBlY3RlZDxBU1Q6OlR5cGVBcmd1bWVudHMsIEVycm9yPiBw
YXJzZVR5cGVBcmd1bWVudHMoKTsKICAgICBzdHJ1Y3QgVHlwZVN1ZmZpeEFiYnJldmlhdGVkIHsK
LSAgICAgICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb247CisgICAgICAgIENvZGVMb2NhdGlv
biBsb2NhdGlvbjsKICAgICAgICAgVG9rZW4gdG9rZW47CiAgICAgICAgIE9wdGlvbmFsPHVuc2ln
bmVkPiBudW1FbGVtZW50czsKICAgICB9OwogICAgIEV4cGVjdGVkPFR5cGVTdWZmaXhBYmJyZXZp
YXRlZCwgRXJyb3I+IHBhcnNlVHlwZVN1ZmZpeEFiYnJldmlhdGVkKCk7CiAgICAgc3RydWN0IFR5
cGVTdWZmaXhOb25BYmJyZXZpYXRlZCB7Ci0gICAgICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0
aW9uOworICAgICAgICBDb2RlTG9jYXRpb24gbG9jYXRpb247CiAgICAgICAgIFRva2VuIHRva2Vu
OwogICAgICAgICBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1NwYWNlOwogICAg
ICAgICBPcHRpb25hbDx1bnNpZ25lZD4gbnVtRWxlbWVudHM7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAJKHJldmlz
aW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UHJlcGFyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDEwICs5NSwxMSBAQCBzdGF0aWMgYm9v
bCBkdW1wQVNUQXRFbmRJZk5lZWRlZChQcm9ncmFtCiAjZGVmaW5lIENIRUNLX1BBU1MocGFzcywg
Li4uKSBcCiAgICAgZG8geyBcCiAgICAgICAgIGR1bXBBU1RCZXR3ZWVuRWFjaFBhc3NJZk5lZWRl
ZChwcm9ncmFtLCAiQVNUIGJlZm9yZSAiICMgcGFzcyk7IFwKLSAgICAgICAgaWYgKCFwYXNzKF9f
VkFfQVJHU19fKSkgeyBcCisgICAgICAgIGF1dG8gcmVzdWx0ID0gcGFzcyhfX1ZBX0FSR1NfXyk7
IFwKKyAgICAgICAgaWYgKCFyZXN1bHQpIHsgXAogICAgICAgICAgICAgaWYgKGR1bXBQYXNzRmFp
bHVyZSkgXAotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiZmFpbGVkIHBhc3M6ICIgIyBwYXNz
KTsgXAotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsgXAorICAgICAgICAgICAgICAg
IGRhdGFMb2dMbigiZmFpbGVkIHBhc3M6ICIgIyBwYXNzLCAiICIsIHJlc3VsdC5lcnJvcigpLnRv
U3RyaW5nKCkpOyBcCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocmVzdWx0LmVy
cm9yKCkpOyBcCiAgICAgICAgIH0gXAogICAgIH0gd2hpbGUgKDApCiAKQEAgLTEwOCwxNCArMTA5
LDE1IEBAIHN0YXRpYyBib29sIGR1bXBBU1RBdEVuZElmTmVlZGVkKFByb2dyYW0KICAgICAgICAg
cGFzcyhfX1ZBX0FSR1NfXyk7IFwKICAgICB9IHdoaWxlICgwKQogCi1zdGF0aWMgT3B0aW9uYWw8
UHJvZ3JhbT4gcHJlcGFyZVNoYXJlZChTdHJpbmcmIHdobHNsU291cmNlKQorc3RhdGljIEV4cGVj
dGVkPFByb2dyYW0sIEVycm9yPiBwcmVwYXJlU2hhcmVkKFN0cmluZyYgd2hsc2xTb3VyY2UpCiB7
CiAgICAgUHJvZ3JhbSBwcm9ncmFtOwogICAgIFBhcnNlciBwYXJzZXI7Ci0gICAgaWYgKGF1dG8g
cGFyc2VGYWlsdXJlID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHdobHNsU291cmNlLCBQYXJzZXI6
Ok1vZGU6OlVzZXIpKSB7CisgICAgYXV0byBwYXJzZVJlc3VsdCA9IHBhcnNlci5wYXJzZShwcm9n
cmFtLCB3aGxzbFNvdXJjZSwgUGFyc2VyOjpNb2RlOjpVc2VyKTsKKyAgICBpZiAoIXBhcnNlUmVz
dWx0KSB7CiAgICAgICAgIGlmIChkdW1wUGFzc0ZhaWx1cmUpCi0gICAgICAgICAgICBkYXRhTG9n
TG4oImZhaWxlZCB0byBwYXJzZSB0aGUgcHJvZ3JhbTogIiwgKnBhcnNlRmFpbHVyZSk7Ci0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0
byBwYXJzZSB0aGUgcHJvZ3JhbTogIiwgcGFyc2VSZXN1bHQuZXJyb3IoKS50b1N0cmluZygpKTsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHBhcnNlUmVzdWx0LmVycm9yKCkpOwogICAg
IH0KICAgICBpbmNsdWRlU3RhbmRhcmRMaWJyYXJ5KHByb2dyYW0sIHBhcnNlciwgcGFyc2VGdWxs
U3RhbmRhcmRMaWJyYXJ5KTsKIApAQCAtMTQ5LDE0ICsxNTEsMTQgQEAgc3RhdGljIE9wdGlvbmFs
PFByb2dyYW0+IHByZXBhcmVTaGFyZWQoUwogICAgIHJldHVybiBwcm9ncmFtOwogfQogCi1PcHRp
b25hbDxSZW5kZXJQcmVwYXJlUmVzdWx0PiBwcmVwYXJlKFN0cmluZyYgd2hsc2xTb3VyY2UsIFJl
bmRlclBpcGVsaW5lRGVzY3JpcHRvciYgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKQorRXhwZWN0
ZWQ8UmVuZGVyUHJlcGFyZVJlc3VsdCwgRXJyb3I+IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJj
ZSwgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJiByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpCiB7
CiAgICAgYXV0byBwcm9ncmFtID0gcHJlcGFyZVNoYXJlZCh3aGxzbFNvdXJjZSk7CiAgICAgaWYg
KCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQocHJvZ3JhbS5lcnJvcigpKTsKICAgICBhdXRvIG1hdGNoZWRTZW1hbnRp
Y3MgPSBtYXRjaFNlbWFudGljcygqcHJvZ3JhbSwgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsK
ICAgICBpZiAoIW1hdGNoZWRTZW1hbnRpY3MpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiQ291bGQgbm90IG1hdGNoIHNl
bWFudGljcyJfc3RyKSk7CiAKICAgICBhdXRvIGdlbmVyYXRlZENvZGUgPSBNZXRhbDo6Z2VuZXJh
dGVNZXRhbENvZGUoKnByb2dyYW0sIFdURk1vdmUoKm1hdGNoZWRTZW1hbnRpY3MpLCByZW5kZXJQ
aXBlbGluZURlc2NyaXB0b3IubGF5b3V0KTsKIApAQCAtMTY3LDE3ICsxNjksMTcgQEAgT3B0aW9u
YWw8UmVuZGVyUHJlcGFyZVJlc3VsdD4gcHJlcGFyZShTdAogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLU9wdGlvbmFsPENvbXB1dGVQcmVwYXJlUmVzdWx0PiBwcmVwYXJlKFN0cmluZyYgd2hsc2xT
b3VyY2UsIENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3ImIGNvbXB1dGVQaXBlbGluZURlc2NyaXB0
b3IpCitFeHBlY3RlZDxDb21wdXRlUHJlcGFyZVJlc3VsdCwgRXJyb3I+IHByZXBhcmUoU3RyaW5n
JiB3aGxzbFNvdXJjZSwgQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciYgY29tcHV0ZVBpcGVsaW5l
RGVzY3JpcHRvcikKIHsKICAgICBhdXRvIHByb2dyYW0gPSBwcmVwYXJlU2hhcmVkKHdobHNsU291
cmNlKTsKICAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChwcm9ncmFtLmVycm9yKCkpOwogICAgIGF1dG8g
bWF0Y2hlZFNlbWFudGljcyA9IG1hdGNoU2VtYW50aWNzKCpwcm9ncmFtLCBjb21wdXRlUGlwZWxp
bmVEZXNjcmlwdG9yKTsKICAgICBpZiAoIW1hdGNoZWRTZW1hbnRpY3MpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiQ291
bGQgbm90IG1hdGNoIHNlbWFudGljcyJfc3RyKSk7CiAgICAgYXV0byBjb21wdXRlRGltZW5zaW9u
cyA9IFdITFNMOjpjb21wdXRlRGltZW5zaW9ucygqcHJvZ3JhbSwgKm1hdGNoZWRTZW1hbnRpY3Mt
PnNoYWRlcik7CiAgICAgaWYgKCFjb21wdXRlRGltZW5zaW9ucykKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJDb3VsZCBu
b3QgbWF0Y2ggY29tcHV0ZSBkaW1lbnNpb25zIl9zdHIpKTsKIAogICAgIGF1dG8gZ2VuZXJhdGVk
Q29kZSA9IE1ldGFsOjpnZW5lcmF0ZU1ldGFsQ29kZSgqcHJvZ3JhbSwgV1RGTW92ZSgqbWF0Y2hl
ZFNlbWFudGljcyksIGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IubGF5b3V0KTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJl
LmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUHJlcGFyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNp
ZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAiV0hMU0xFcnJvci5oIgogI2luY2x1ZGUgIldI
TFNMUGlwZWxpbmVEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKQEAgLTM0LDEzICszNSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBX
SExTTCB7CiAKLS8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTk1NjgyIEdlbmVyYXRlIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2VzIGFuZCByZXR1cm4g
dGhlbSBoZXJlLgogc3RydWN0IFJlbmRlclByZXBhcmVSZXN1bHQgewogICAgIFN0cmluZyBtZXRh
bFNvdXJjZTsKICAgICBTdHJpbmcgbWFuZ2xlZFZlcnRleEVudHJ5UG9pbnROYW1lOwogICAgIFN0
cmluZyBtYW5nbGVkRnJhZ21lbnRFbnRyeVBvaW50TmFtZTsKIH07Ci1PcHRpb25hbDxSZW5kZXJQ
cmVwYXJlUmVzdWx0PiBwcmVwYXJlKFN0cmluZyYgd2hsc2xTb3VyY2UsIFJlbmRlclBpcGVsaW5l
RGVzY3JpcHRvciYpOworRXhwZWN0ZWQ8UmVuZGVyUHJlcGFyZVJlc3VsdCwgRXJyb3I+IHByZXBh
cmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJik7CiAKIHN0
cnVjdCBDb21wdXRlRGltZW5zaW9ucyB7CiAgICAgdW5zaWduZWQgd2lkdGg7CkBAIC01Myw3ICs1
Myw3IEBAIHN0cnVjdCBDb21wdXRlUHJlcGFyZVJlc3VsdCB7CiAgICAgU3RyaW5nIG1hbmdsZWRF
bnRyeVBvaW50TmFtZTsKICAgICBDb21wdXRlRGltZW5zaW9ucyBjb21wdXRlRGltZW5zaW9uczsK
IH07Ci1PcHRpb25hbDxDb21wdXRlUHJlcGFyZVJlc3VsdD4gcHJlcGFyZShTdHJpbmcmIHdobHNs
U291cmNlLCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJik7CitFeHBlY3RlZDxDb21wdXRlUHJl
cGFyZVJlc3VsdCwgRXJyb3I+IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwgQ29tcHV0ZVBp
cGVsaW5lRGVzY3JpcHRvciYpOwogCiB9IC8vIG5hbWVzcGFjZSBXSExTTAogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UHJvcGVydHlSZXNvbHZlci5jcHAJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3Nyw3ICsyNzcsNyBAQCBzdHJ1Y3QgTW9kaWZpY2F0aW9uUmVzdWx0IHsKICAg
ICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGV4cHJlc3Npb25zOwogICAgIFVu
aXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+IHJlc3VsdDsKIH07Ci1zdGF0aWMgT3B0aW9uYWw8TW9k
aWZ5UmVzdWx0PiBtb2RpZnkoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbiwgc3RkOjpmdW5jdGlvbjxPcHRpb25hbDxNb2RpZmljYXRpb25SZXN1
bHQ+KE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiYmKT4gbW9kaWZpY2F0aW9u
KQorc3RhdGljIEV4cGVjdGVkPE1vZGlmeVJlc3VsdCwgRXJyb3I+IG1vZGlmeShBU1Q6OlByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBzdGQ6OmZ1bmN0
aW9uPE9wdGlvbmFsPE1vZGlmaWNhdGlvblJlc3VsdD4oT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6
RXhwcmVzc2lvbj4+JiYpPiBtb2RpZmljYXRpb24pCiB7CiAgICAgLy8gQ29uc2lkZXIgYS5iLmMu
ZCsrOwogICAgIC8vIFRoaXMgd291bGQgZ2V0IHRyYW5zZm9ybWVkIGludG86CkBAIC00MjgsNyAr
NDI4LDcgQEAgc3RhdGljIE9wdGlvbmFsPE1vZGlmeVJlc3VsdD4gbW9kaWZ5KEFTVAogICAgICAg
ICBhdXRvIGNhbGxFeHByZXNzaW9uID0gZ2V0dGVyQ2FsbChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24sIHJlbGV2YW50QW5kZXIsIHByZXZpb3VzTGVmdFZhbHVlLCBpbmRleFZhcmlhYmxlID8gJipp
bmRleFZhcmlhYmxlIDogbnVsbHB0cik7CiAKICAgICAgICAgaWYgKCFjYWxsRXhwcmVzc2lvbikK
LSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoRXJyb3IoIkNvdWxkIG5vdCByZXNvbHZlIGdldHRlciBjYWxsLiIsIHByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkpOwogCiAgICAgICAgIGF1dG8gdmFy
aWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFT
VDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAodmFyaWFibGVEZWNsYXJhdGlvbikpOwogICAgICAg
ICBBU1NFUlQodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOwpAQCAtNDUwLDcgKzQ1MCw3IEBA
IHN0YXRpYyBPcHRpb25hbDxNb2RpZnlSZXN1bHQ+IG1vZGlmeShBU1QKICAgICAvLyBTdGVwIDM6
CiAgICAgYXV0byBtb2RpZmljYXRpb25SZXN1bHQgPSBtb2RpZmljYXRpb24oV1RGTW92ZShsYXN0
R2V0dGVyQ2FsbEV4cHJlc3Npb24pKTsKICAgICBpZiAoIW1vZGlmaWNhdGlvblJlc3VsdCkKLSAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KEVycm9yKCJDb3VsZCBub3QgZW1pdCBtb2RpZmNhdGlvbi4iLCBjaGFpblswXS5nZXQoKS5jb2Rl
TG9jYXRpb24oKSkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbW9kaWZpY2F0aW9uUmVz
dWx0LT5leHByZXNzaW9ucy5zaXplKCk7ICsraSkKICAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5k
KFdURk1vdmUobW9kaWZpY2F0aW9uUmVzdWx0LT5leHByZXNzaW9uc1tpXSkpOwogCkBAIC00NzEs
NyArNDcxLDcgQEAgc3RhdGljIE9wdGlvbmFsPE1vZGlmeVJlc3VsdD4gbW9kaWZ5KEFTVAogICAg
ICAgICB9LCBpbmRleFZhcmlhYmxlID8gJippbmRleFZhcmlhYmxlIDogbnVsbHB0cik7CiAKICAg
ICAgICAgaWYgKCFhc3NpZ25tZW50RXhwcmVzc2lvbikKLSAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkNvdWxk
IG5vdCBlbWl0IHNldHRlci4iLCBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uY29kZUxvY2F0aW9u
KCkpKTsKIAogICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZSgqYXNzaWdubWVudEV4
cHJlc3Npb24pKTsKIApAQCAtNDk4LDcgKzQ5OCw3IEBAIHN0YXRpYyBPcHRpb25hbDxNb2RpZnlS
ZXN1bHQ+IG1vZGlmeShBU1QKICAgICAgICAgfSwgaW5kZXhWYXJpYWJsZXNbaW5kZXhWYXJpYWJs
ZXMuc2l6ZSgpIC0gMV0gPyAmKihpbmRleFZhcmlhYmxlc1tpbmRleFZhcmlhYmxlcy5zaXplKCkg
LSAxXSkgOiBudWxscHRyKTsKIAogICAgICAgICBpZiAoIWFzc2lnbm1lbnRFeHByZXNzaW9uKQot
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChFcnJvcigiQ291bGQgbm90IGVtaXQgc2V0dGVyLiIsIHByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkpOwogCiAgICAgICAgIGV4cHJlc3Npb25zLmFwcGVu
ZChXVEZNb3ZlKCphc3NpZ25tZW50RXhwcmVzc2lvbikpOwogICAgIH0KQEAgLTUzMyw3ICs1MzMs
NyBAQCB2b2lkIFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6QXNzaWduCiAgICAgfSk7CiAK
ICAgICBpZiAoIW1vZGlmeVJlc3VsdCkgewotICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBz
ZXRFcnJvcihtb2RpZnlSZXN1bHQuZXJyb3IoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgc2ltcGxpZnlMZWZ0VmFsdWUobW9kaWZ5UmVzdWx0LT5pbm5lckxlZnRWYWx1ZSk7CkBAIC01
NTAsNyArNTUwLDcgQEAgdm9pZCBQcm9wZXJ0eVJlc29sdmVyOjp2aXNpdChBU1Q6OkFzc2lnbgog
dm9pZCBQcm9wZXJ0eVJlc29sdmVyOjp2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24mIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pCiB7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWVFeHByZXNzaW9uKCkpOwotICAgIGlm
IChlcnJvcigpKQorICAgIGlmIChoYXNFcnJvcigpKQogICAgICAgICByZXR1cm47CiAKICAgICBh
dXRvIGxvY2F0aW9uID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKTsK
QEAgLTY2Miw3ICs2NjIsNyBAQCB2b2lkIFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6UmVh
ZE1vCiAKICAgICBBU1NFUlQoIXJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCku
dHlwZUFubm90YXRpb24oKS5pc1JpZ2h0VmFsdWUoKSk7CiAgICAgaWYgKCFpczxBU1Q6OlByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbj4ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUo
KSkpIHsKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgc2V0RXJyb3IoRXJyb3IoIlVuZXhw
ZWN0ZWQgbGhzIHZhbHVlIGZvciByZWFkIG1vZGlmeSB3cml0ZSBleHByZXNzaW9uLiIsIHJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkuY29kZUxvY2F0aW9uKCkpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvIG1vZGlmeVJlc3VsdCA9IG1vZGlmeShkb3duY2Fz
dDxBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbj4ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bi5sZWZ0VmFsdWUoKSksIFsmXShPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4m
JiBsYXN0R2V0dGVyQ2FsbEV4cHJlc3Npb24pIC0+IE9wdGlvbmFsPE1vZGlmaWNhdGlvblJlc3Vs
dD4gewpAQCAtNzAzLDcgKzcwMyw3IEBAIHZvaWQgUHJvcGVydHlSZXNvbHZlcjo6dmlzaXQoQVNU
OjpSZWFkTW8KICAgICB9KTsKIAogICAgIGlmICghbW9kaWZ5UmVzdWx0KSB7Ci0gICAgICAgIHNl
dEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKG1vZGlmeVJlc3VsdC5lcnJvcigpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBzaW1wbGlmeUxlZnRWYWx1ZShtb2RpZnlSZXN1bHQtPmlu
bmVyTGVmdFZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUmVjdXJzaW9uQ2hlY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpb25DaGVja2VyLmNwcAkocmV2aXNpb24g
MjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1
cnNpb25DaGVja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwcml2YXRl
OgogCiAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9zdGFydGVkVmlzaXRpbmcuYWRkKCZmdW5j
dGlvbkRlZmluaXRpb24pOwogICAgICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KSB7Ci0g
ICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5v
dCB1c2UgcmVjdXJzaW9uIGluIHRoZSBjYWxsIGdyYXBoLiIsIGZ1bmN0aW9uRGVmaW5pdGlvbi5j
b2RlTG9jYXRpb24oKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTc3
LDExICs3NywxMSBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8QVNUOjpGdW5jdGlvbkRlZmluaXRp
b24qPiBtX2ZpbmlzaGVkVmlzaXRpbmc7CiB9OwogCi1ib29sIGNoZWNrUmVjdXJzaW9uKFByb2dy
YW0mIHByb2dyYW0pCitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gY2hlY2tSZWN1cnNpb24oUHJvZ3Jh
bSYgcHJvZ3JhbSkKIHsKICAgICBSZWN1cnNpb25DaGVja2VyIHJlY3Vyc2lvbkNoZWNrZXI7CiAg
ICAgcmVjdXJzaW9uQ2hlY2tlci5WaXNpdG9yOjp2aXNpdChwcm9ncmFtKTsKLSAgICByZXR1cm4g
IXJlY3Vyc2lvbkNoZWNrZXIuZXJyb3IoKTsKKyAgICByZXR1cm4gcmVjdXJzaW9uQ2hlY2tlci5n
ZXRFcnJvcigpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFJlY3Vyc2lvbkNoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2lvbkNoZWNrZXIuaAkocmV2aXNpb24g
MjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1
cnNpb25DaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEzICsyNywxNiBAQAogCiAjaWYg
RU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMRXJyb3IuaCIKKyNpbmNsdWRlIDx3dGYv
RXhwZWN0ZWQuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewog
CiBjbGFzcyBQcm9ncmFtOwogCi1ib29sIGNoZWNrUmVjdXJzaW9uKFByb2dyYW0mKTsKK0V4cGVj
dGVkPHZvaWQsIEVycm9yPiBjaGVja1JlY3Vyc2lvbihQcm9ncmFtJik7CiAKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hl
Y2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5jcHAJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNr
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIGRvIHsgXAogICAgICAgICBy
ZXR1cm47IFwKICAgICBhdXRvIHJlc3VsdFN0YXJ0ZWRWaXNpdGluZyA9IG1fc3RhcnRlZFZpc2l0
aW5nLmFkZCh0KTsgXAogICAgIGlmICghcmVzdWx0U3RhcnRlZFZpc2l0aW5nLmlzTmV3RW50cnkp
IHsgXAotICAgICAgICBzZXRFcnJvcigpOyBcCisgICAgICAgIHNldEVycm9yKEVycm9yKCJDYW5u
b3QgZGVjbGFyZSByZWN1cnNpdmUgdHlwZXMuIiwgKHQpLT5jb2RlTG9jYXRpb24oKSkpOyBcCiAg
ICAgICAgIHJldHVybjsgXAogICAgIH0gXAogfSB3aGlsZSAoZmFsc2UpOwpAQCAtMTAyLDE0ICsx
MDIsMTQgQEAgdm9pZCBSZWN1cnNpdmVUeXBlQ2hlY2tlcjo6dmlzaXQoQVNUOjpSZQogewogfQog
Ci1ib29sIGNoZWNrUmVjdXJzaXZlVHlwZXMoUHJvZ3JhbSYgcHJvZ3JhbSkKK0V4cGVjdGVkPHZv
aWQsIEVycm9yPiBjaGVja1JlY3Vyc2l2ZVR5cGVzKFByb2dyYW0mIHByb2dyYW0pCiB7CiAgICAg
UmVjdXJzaXZlVHlwZUNoZWNrZXIgcmVjdXJzaXZlVHlwZUNoZWNrZXI7CiAgICAgZm9yIChhdXRv
JiB0eXBlRGVmaW5pdGlvbiA6IHByb2dyYW0udHlwZURlZmluaXRpb25zKCkpCiAgICAgICAgIHJl
Y3Vyc2l2ZVR5cGVDaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlRGVmaW5pdGlvbik7CiAg
ICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZp
bml0aW9ucygpKQogICAgICAgICByZWN1cnNpdmVUeXBlQ2hlY2tlci5jaGVja0Vycm9yQW5kVmlz
aXQoc3RydWN0dXJlRGVmaW5pdGlvbik7Ci0gICAgcmV0dXJuICFyZWN1cnNpdmVUeXBlQ2hlY2tl
ci5lcnJvcigpOworICAgIHJldHVybiByZWN1cnNpdmVUeXBlQ2hlY2tlci5nZXRFcnJvcigpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXSExTTApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNr
ZXIuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw4IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAiV0hMU0xFcnJvci5o
IgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTM0LDcgKzM2LDcgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogY2xhc3MgUHJvZ3JhbTsKIAotYm9v
bCBjaGVja1JlY3Vyc2l2ZVR5cGVzKFByb2dyYW0mKTsKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBj
aGVja1JlY3Vyc2l2ZVR5cGVzKFByb2dyYW0mKTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeVV0aWxpdGllcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xT
dGFuZGFyZExpYnJhcnlVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeVV0aWxpdGll
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDggKzc5LDkgQEAgdm9pZCBpbmNsdWRlU3RhbmRh
cmRMaWJyYXJ5KFByb2dyYW0mIHBybwogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJp
bmc+IHN0YW5kYXJkTGlicmFyeShkZWNvbXByZXNzQW5kRGVjb2RlU3RhbmRhcmRMaWJyYXJ5KCkp
OwogICAgIGlmIChwYXJzZUZ1bGxTdGFuZGFyZExpYnJhcnkpIHsKLSAgICAgICAgaWYgKGF1dG8g
cGFyc2VGYWlsdXJlID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHN0YW5kYXJkTGlicmFyeS5nZXQo
KSwgUGFyc2VyOjpNb2RlOjpTdGFuZGFyZExpYnJhcnkpKSB7Ci0gICAgICAgICAgICBkYXRhTG9n
TG4oImZhaWxlZCB0byBwYXJzZSB0aGUgKGZ1bGwpIHN0YW5kYXJkIGxpYnJhcnk6ICIsICpwYXJz
ZUZhaWx1cmUpOworICAgICAgICBhdXRvIHBhcnNlUmVzdWx0ID0gcGFyc2VyLnBhcnNlKHByb2dy
YW0sIHN0YW5kYXJkTGlicmFyeS5nZXQoKSwgUGFyc2VyOjpNb2RlOjpTdGFuZGFyZExpYnJhcnkp
OworICAgICAgICBpZiAoIXBhcnNlUmVzdWx0KSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oImZh
aWxlZCB0byBwYXJzZSB0aGUgKGZ1bGwpIHN0YW5kYXJkIGxpYnJhcnk6ICIsIHBhcnNlUmVzdWx0
LmVycm9yKCkudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm47CkBAIC04OSw4ICs5MCw4IEBAIHZvaWQgaW5jbHVk
ZVN0YW5kYXJkTGlicmFyeShQcm9ncmFtJiBwcm8KICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
SGFzaE1hcDxTdHJpbmcsIFN1YnN0cmluZ0xvY2F0aW9uPj4gc3RhbmRhcmRMaWJyYXJ5RnVuY3Rp
b25NYXAoY29tcHV0ZVN0YW5kYXJkTGlicmFyeUZ1bmN0aW9uTWFwKCkpOwogCiAgICAgYXV0byBz
dHJpbmdWaWV3ID0gU3RyaW5nVmlldyhzdGFuZGFyZExpYnJhcnkuZ2V0KCkpLnN1YnN0cmluZygw
LCBmaXJzdEZ1bmN0aW9uT2Zmc2V0SW5TdGFuZGFyZExpYnJhcnkoKSk7Ci0gICAgYXV0byBwYXJz
ZUZhaWx1cmUgPSBwYXJzZXIucGFyc2UocHJvZ3JhbSwgc3RyaW5nVmlldywgUGFyc2VyOjpNb2Rl
OjpTdGFuZGFyZExpYnJhcnkpOwotICAgIEFTU0VSVF9VTlVTRUQocGFyc2VGYWlsdXJlLCAhcGFy
c2VGYWlsdXJlKTsKKyAgICBhdXRvIHBhcnNlUmVzdWx0ID0gcGFyc2VyLnBhcnNlKHByb2dyYW0s
IHN0cmluZ1ZpZXcsIFBhcnNlcjo6TW9kZTo6U3RhbmRhcmRMaWJyYXJ5KTsKKyAgICBBU1NFUlRf
VU5VU0VEKHBhcnNlUmVzdWx0LCBwYXJzZVJlc3VsdCk7CiAKICAgICBOYW1lRmluZGVyIG5hbWVG
aW5kZXI7CiAgICAgbmFtZUZpbmRlci5WaXNpdG9yOjp2aXNpdChwcm9ncmFtKTsKQEAgLTEwOSw4
ICsxMTAsOSBAQCB2b2lkIGluY2x1ZGVTdGFuZGFyZExpYnJhcnkoUHJvZ3JhbSYgcHJvCiAgICAg
ICAgICAgICBpZiAoaXRlcmF0b3IgPT0gc3RhbmRhcmRMaWJyYXJ5RnVuY3Rpb25NYXAuZ2V0KCku
ZW5kKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBhdXRvIHN0cmlu
Z1ZpZXcgPSBTdHJpbmdWaWV3KHN0YW5kYXJkTGlicmFyeS5nZXQoKSkuc3Vic3RyaW5nKGl0ZXJh
dG9yLT52YWx1ZS5zdGFydCwgaXRlcmF0b3ItPnZhbHVlLmVuZCAtIGl0ZXJhdG9yLT52YWx1ZS5z
dGFydCk7Ci0gICAgICAgICAgICBpZiAoYXV0byBwYXJzZUZhaWx1cmUgPSBwYXJzZXIucGFyc2Uo
cHJvZ3JhbSwgc3RyaW5nVmlldywgUGFyc2VyOjpNb2RlOjpTdGFuZGFyZExpYnJhcnkpKSB7Ci0g
ICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8gcGFyc2UgdGhlIChwYXJ0aWFsKSBz
dGFuZGFyZCBsaWJyYXJ5OiAiLCAqcGFyc2VGYWlsdXJlKTsKKyAgICAgICAgICAgIGF1dG8gcGFy
c2VSZXN1bHQgPSBwYXJzZXIucGFyc2UocHJvZ3JhbSwgc3RyaW5nVmlldywgUGFyc2VyOjpNb2Rl
OjpTdGFuZGFyZExpYnJhcnkpOworICAgICAgICAgICAgaWYgKCFwYXJzZVJlc3VsdCkgeworICAg
ICAgICAgICAgICAgIGRhdGFMb2dMbigiZmFpbGVkIHRvIHBhcnNlIHRoZSAocGFydGlhbCkgc3Rh
bmRhcmQgbGlicmFyeTogIiwgcGFyc2VSZXN1bHQuZXJyb3IoKS50b1N0cmluZygpKTsKICAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGF0ZW1lbnRCZWhhdmlvckNoZWNr
ZXIuY3BwCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkyLDcgKzkyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHZpc2l0KEFTVDo6RG9XaGlsZUxv
b3AmIGRvV2hpbGVMb29wKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGRvV2hpbGVMb29wLmJvZHkoKSk7Ci0gICAgICAgIGlmIChlcnJvcigpKQorICAgICAgICBp
ZiAoaGFzRXJyb3IoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYXV0byBiID0gbV9z
dGFjay50YWtlTGFzdCgpOwogICAgICAgICBiLnJlbW92ZShCZWhhdmlvcjo6QnJlYWspOwpAQCAt
MTA3LDcgKzEwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIHNvIHdlIGNhbiBqdXN0IGlnbm9y
ZSB0aGUgaW5pdGlhbGl6YXRpb24uCiAKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZvckxv
b3AuYm9keSgpKTsKLSAgICAgICAgaWYgKGVycm9yKCkpCisgICAgICAgIGlmIChoYXNFcnJvcigp
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBhdXRvIGIgPSBtX3N0YWNrLnRha2VMYXN0
KCk7CiAgICAgICAgIGIucmVtb3ZlKEJlaGF2aW9yOjpCcmVhayk7CkBAIC0xMTksNyArMTE5LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHZpc2l0KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxvb3ApIG92
ZXJyaWRlCiAgICAgewogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmJvZHko
KSk7Ci0gICAgICAgIGlmIChlcnJvcigpKQorICAgICAgICBpZiAoaGFzRXJyb3IoKSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgYXV0byBiID0gbV9zdGFjay50YWtlTGFzdCgpOwogICAg
ICAgICBiLnJlbW92ZShCZWhhdmlvcjo6QnJlYWspOwpAQCAtMTQzLDEzICsxNDMsMTMgQEAgcHJp
dmF0ZToKICAgICAgICAgT3B0aW9uU2V0PEJlaGF2aW9yPiByZWR1Y3Rpb24gPSB7IH07CiAgICAg
ICAgIGZvciAoYXV0byYgc3dpdGNoQ2FzZSA6IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygp
KSB7CiAgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoQ2FzZSk7Ci0gICAgICAg
ICAgICBpZiAoZXJyb3IoKSkKKyAgICAgICAgICAgIGlmIChoYXNFcnJvcigpKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGF1dG8gYiA9IG1fc3RhY2sudGFrZUxhc3QoKTsK
ICAgICAgICAgICAgIHJlZHVjdGlvbiA9IHJlZHVjdGlvbiB8IGI7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKHJlZHVjdGlvbi5jb250YWlucyhCZWhhdmlvcjo6Tm90aGluZykpIHsKLSAgICAgICAg
ICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICBzZXRFcnJvcihFcnJvcigiU3dpdGNoIHN0YXRl
bWVudCBtdXN0IGVuZCBpbiBhIGJyZWFrL2ZhbGx0aHJvdWdoL3JldHVybiIsIHN3aXRjaFN0YXRl
bWVudC5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIHJlZHVjdGlvbi5yZW1vdmUoQmVoYXZpb3I6OkJyZWFrKTsKQEAgLTE2MSwxMyArMTYx
LDEzIEBAIHByaXZhdGU6CiAgICAgdm9pZCB2aXNpdChBU1Q6OklmU3RhdGVtZW50JiBpZlN0YXRl
bWVudCkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRl
bWVudC5ib2R5KCkpOwotICAgICAgICBpZiAoZXJyb3IoKSkKKyAgICAgICAgaWYgKGhhc0Vycm9y
KCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGF1dG8gYiA9IG1fc3RhY2sudGFrZUxh
c3QoKTsKICAgICAgICAgT3B0aW9uU2V0PEJlaGF2aW9yPiBiUHJpbWU7CiAgICAgICAgIGlmIChp
ZlN0YXRlbWVudC5lbHNlQm9keSgpKSB7CiAgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
KmlmU3RhdGVtZW50LmVsc2VCb2R5KCkpOwotICAgICAgICAgICAgaWYgKGVycm9yKCkpCisgICAg
ICAgICAgICBpZiAoaGFzRXJyb3IoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICBiUHJpbWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CiAgICAgICAgIH0gZWxzZQpAQCAtMTkw
LDIyICsxOTAsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgT3B0aW9uU2V0PEJlaGF2aW9yPiByZWR1
Y3Rpb24gPSB7IH07CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2suc3RhdGVt
ZW50cygpLnNpemUoKSAtIDE7ICsraSkgewogICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGJsb2NrLnN0YXRlbWVudHMoKVtpXSk7Ci0gICAgICAgICAgICBpZiAoZXJyb3IoKSkKKyAgICAg
ICAgICAgIGlmIChoYXNFcnJvcigpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIGF1dG8gYiA9IG1fc3RhY2sudGFrZUxhc3QoKTsKICAgICAgICAgICAgIGlmICghYi5jb250
YWlucyhCZWhhdmlvcjo6Tm90aGluZykpIHsKLSAgICAgICAgICAgICAgICBzZXRFcnJvcigpOwor
ICAgICAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJTdGF0ZW1lbnQgaW5zaWRlIGFuIGlubmVy
IGJsb2NrIG11c3QgYmUgcmVhY2hhYmxlLiIsIGJsb2NrLnN0YXRlbWVudHMoKVtpXS0+Y29kZUxv
Y2F0aW9uKCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBiLnJlbW92ZShCZWhhdmlvcjo6Tm90aGluZyk7CiAgICAgICAgICAgICBpZiAoYi5j
b250YWlucyhCZWhhdmlvcjo6RmFsbHRocm91Z2gpKSB7Ci0gICAgICAgICAgICAgICAgc2V0RXJy
b3IoKTsKKyAgICAgICAgICAgICAgICBzZXRFcnJvcihFcnJvcigiRmFsbHRocm91Z2ggbXVzdCBi
ZSB0aGUgbGFzdCBzdGF0ZW1lbnQgaW4gYSBibG9jay4iLCBibG9jay5zdGF0ZW1lbnRzKClbaV0t
PmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgcmVkdWN0aW9uID0gcmVkdWN0aW9uIHwgYjsKICAgICAgICAgfQogICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYmxvY2suc3RhdGVtZW50cygpW2Jsb2NrLnN0YXRlbWVu
dHMoKS5zaXplKCkgLSAxXSk7Ci0gICAgICAgIGlmIChlcnJvcigpKQorICAgICAgICBpZiAoaGFz
RXJyb3IoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYXV0byBiID0gbV9zdGFjay50
YWtlTGFzdCgpOwogICAgICAgICBtX3N0YWNrLmFwcGVuZChyZWR1Y3Rpb24gfCBiKTsKQEAgLTIx
OSwyNSArMjE5LDI1IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPE9wdGlvblNldDxCZWhhdmlvcj4+
IG1fc3RhY2s7CiB9OwogCi1ib29sIGNoZWNrU3RhdGVtZW50QmVoYXZpb3IoUHJvZ3JhbSYgcHJv
Z3JhbSkKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBjaGVja1N0YXRlbWVudEJlaGF2aW9yKFByb2dy
YW0mIHByb2dyYW0pCiB7CiAgICAgU3RhdGVtZW50QmVoYXZpb3JDaGVja2VyIHN0YXRlbWVudEJl
aGF2aW9yQ2hlY2tlcjsKICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHByb2dy
YW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKSB7CiAgICAgICAgIHN0YXRlbWVudEJlaGF2aW9yQ2hl
Y2tlci5WaXNpdG9yOjp2aXNpdChmdW5jdGlvbkRlZmluaXRpb24pOwotICAgICAgICBpZiAoc3Rh
dGVtZW50QmVoYXZpb3JDaGVja2VyLmVycm9yKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGlmIChzdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXIuaGFzRXJyb3IoKSkKKyAgICAg
ICAgICAgIHJldHVybiBzdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXIuZ2V0RXJyb3IoKTsKICAgICAg
ICAgYXV0byBiZWhhdmlvciA9IHN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlci50YWtlRnVuY3Rpb25C
ZWhhdmlvcigpOwogICAgICAgICBpZiAobWF0Y2hlcyhmdW5jdGlvbkRlZmluaXRpb24tPnR5cGUo
KSwgcHJvZ3JhbS5pbnRyaW5zaWNzKCkudm9pZFR5cGUoKSkpIHsKICAgICAgICAgICAgIGJlaGF2
aW9yLnJlbW92ZShTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXI6OkJlaGF2aW9yOjpSZXR1cm4pOwog
ICAgICAgICAgICAgYmVoYXZpb3IucmVtb3ZlKFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlcjo6QmVo
YXZpb3I6Ok5vdGhpbmcpOwogICAgICAgICAgICAgaWYgKGJlaGF2aW9yICE9IE9wdGlvblNldDxT
dGF0ZW1lbnRCZWhhdmlvckNoZWNrZXI6OkJlaGF2aW9yPigpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3Io
InZvaWQgZnVuY3Rpb25zIG11c3QgcmV0dXJuIG5vdGhpbmcuIikpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgaWYgKGJlaGF2aW9yICE9IFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlcjo6
QmVoYXZpb3I6OlJldHVybikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJOb24tdm9pZCBmdW5jdGlvbnMg
bXVzdCByZXR1cm4gc29tZXRoaW5nLiIpKTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXSExTTApJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGF0ZW1lbnRCZWhhdmlv
ckNoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlci5oCShyZXZpc2lvbiAyNDc3MDApCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YXRlbWVudEJlaGF2
aW9yQ2hlY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMyArMjcsMTYgQEAKIAogI2lmIEVO
QUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTEVycm9yLmgiCisjaW5jbHVkZSA8d3RmL0V4
cGVjdGVkLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAog
Y2xhc3MgUHJvZ3JhbTsKIAotYm9vbCBjaGVja1N0YXRlbWVudEJlaGF2aW9yKFByb2dyYW0mKTsK
K0V4cGVjdGVkPHZvaWQsIEVycm9yPiBjaGVja1N0YXRlbWVudEJlaGF2aW9yKFByb2dyYW0mKTsK
IAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5
bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVu
Z3RoLmNwcAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8c3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxBU1Q6OkFycmF5VHlwZT4+IG1fYXJyYXlUeXBlczsKIH07CiAKLWJvb2wgc3lu
dGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgoUHJvZ3JhbSYgcHJvZ3JhbSkKK0V4cGVjdGVkPHZv
aWQsIEVycm9yPiBzeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aChQcm9ncmFtJiBwcm9ncmFt
KQogewogICAgIEZpbmRBcnJheVR5cGVzIGZpbmRBcnJheVR5cGVzOwogICAgIGZpbmRBcnJheVR5
cGVzLmNoZWNrRXJyb3JBbmRWaXNpdChwcm9ncmFtKTsKQEAgLTcxLDkgKzcxLDkgQEAgYm9vbCBz
eW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aChQcm9ncgogICAgICAgICBwYXJhbWV0ZXJzLmFw
cGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgQVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9w
dCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBwcm9ncmFtLmludHJpbnNpY3Mo
KS51aW50VHlwZSgpKSwgIm9wZXJhdG9yLmxlbmd0aCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMp
LCBudWxscHRyLCBpc09wZXJhdG9yKSk7CiAgICAgICAgIGlmICghcHJvZ3JhbS5hcHBlbmQoV1RG
TW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkNhbm5vdCBzeW50
aGVzaXplIG9wZXJhdG9yLmxlbmd0aCBmb3IgYXJyYXkgdHlwZS4iKSk7CiAgICAgfQotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdITFNMCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVB
cnJheU9wZXJhdG9yTGVuZ3RoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oCShyZXZp
c2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEz
ICsyNywxNiBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMRXJyb3Iu
aCIKKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBu
YW1lc3BhY2UgV0hMU0wgewogCiBjbGFzcyBQcm9ncmFtOwogCi1ib29sIHN5bnRoZXNpemVBcnJh
eU9wZXJhdG9yTGVuZ3RoKFByb2dyYW0mKTsKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBzeW50aGVz
aXplQXJyYXlPcGVyYXRvckxlbmd0aChQcm9ncmFtJik7CiAKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNyArMTQ1LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4+IG1fbmFtZWRUeXBlczsK
IH07CiAKLWJvb2wgc3ludGhlc2l6ZUNvbnN0cnVjdG9ycyhQcm9ncmFtJiBwcm9ncmFtKQorRXhw
ZWN0ZWQ8dm9pZCwgRXJyb3I+IHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMoUHJvZ3JhbSYgcHJvZ3Jh
bSkKIHsKICAgICBGaW5kQWxsVHlwZXMgZmluZEFsbFR5cGVzOwogICAgIGZpbmRBbGxUeXBlcy5j
aGVja0Vycm9yQW5kVmlzaXQocHJvZ3JhbSk7CkBAIC0xNTgsMTUgKzE1OCwxNyBAQCBib29sIHN5
bnRoZXNpemVDb25zdHJ1Y3RvcnMoUHJvZ3JhbSYgcHJvCiAgICAgICAgIGF1dG8mIHVubmFtZWRU
eXBlID0gdW5uYW1lZFR5cGVLZXkudW5uYW1lZFR5cGUoKTsKICAgICAgICAgYXV0byBsb2NhdGlv
biA9IHVubmFtZWRUeXBlLmNvZGVMb2NhdGlvbigpOwogCi0gICAgICAgIGF1dG8gdmFyaWFibGVE
ZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihsb2Nh
dGlvbiwgQVNUOjpRdWFsaWZpZXJzKCksIHVubmFtZWRUeXBlLmNsb25lKCksIFN0cmluZygpLCBu
dWxscHRyLCBudWxscHRyKTsKLSAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJh
bWV0ZXJzOwotICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFy
YXRpb24pKTsKLSAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGNvcHlDb25z
dHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRl
QmxvY2soKSwgV1RGOjpudWxsb3B0LCB1bm5hbWVkVHlwZS5jbG9uZSgpLCAib3BlcmF0b3IgY2Fz
dCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7Ci0gICAg
ICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUoY29weUNvbnN0cnVjdG9yKSk7CisgICAgICAgIHsK
KyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCksIHVubmFt
ZWRUeXBlLmNsb25lKCksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgICAg
IEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAgIHBhcmFt
ZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAg
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGNvcHlDb25zdHJ1Y3RvcihBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxs
b3B0LCB1bm5hbWVkVHlwZS5jbG9uZSgpLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CisgICAgICAgICAgICBwcm9ncmFtLmFw
cGVuZChXVEZNb3ZlKGNvcHlDb25zdHJ1Y3RvcikpOworICAgICAgICB9CiAKICAgICAgICAgQVNU
OjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGRlZmF1bHRDb25zdHJ1Y3RvcihBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxs
b3B0LCB1bm5hbWVkVHlwZS5jbG9uZSgpLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb25zKCksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKICAgICAgICAgaWYgKCFw
cm9ncmFtLmFwcGVuZChXVEZNb3ZlKGRlZmF1bHRDb25zdHJ1Y3RvcikpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJD
b3VsZCBub3Qgc3ludGhlc2l6ZSBkZWZhdWx0IGNvbnN0cnVjdG9yIikpOwogICAgIH0KIAogICAg
IGZvciAoYXV0byYgbmFtZWRUeXBlIDogbmFtZWRUeXBlcykgewpAQCAtMTkwLDkgKzE5Miw5IEBA
IGJvb2wgc3ludGhlc2l6ZUNvbnN0cnVjdG9ycyhQcm9ncmFtJiBwcm8KICAgICAgICAgfQogICAg
ICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gZGVmYXVsdENvbnN0cnVjdG9yKEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBX
VEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChsb2NhdGlvbiwgbmFtZWRUeXBl
LmdldCgpKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucygp
LCBudWxscHRyLCBpc09wZXJhdG9yKSk7CiAgICAgICAgIGlmICghcHJvZ3JhbS5hcHBlbmQoV1RG
TW92ZShkZWZhdWx0Q29uc3RydWN0b3IpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiQ291bGQgbm90IHN5bnRoZXNp
emUgZGVmYXVsdCBjb25zdHJ1Y3RvciIpKTsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIHsgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV0hMU0wKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3lu
dGhlc2l6ZUNvbnN0cnVjdG9ycy5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsMTMgKzI3LDE2IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisj
aW5jbHVkZSAiV0hMU0xFcnJvci5oIgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7CiAKIGNsYXNzIFByb2dyYW07CiAK
LWJvb2wgc3ludGhlc2l6ZUNvbnN0cnVjdG9ycyhQcm9ncmFtJik7CitFeHBlY3RlZDx2b2lkLCBF
cnJvcj4gc3ludGhlc2l6ZUNvbnN0cnVjdG9ycyhQcm9ncmFtJik7CiAKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRp
b25GdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcAkocmV2aXNp
b24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xT
eW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3
ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAotYm9v
bCBzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSkKK0V4cGVj
dGVkPHZvaWQsIEVycm9yPiBzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMoUHJvZ3JhbSYg
cHJvZ3JhbSkKIHsKICAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOwogICAgIGZvciAoYXV0byYg
ZW51bWVyYXRpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkp
IHsKQEAgLTQ5LDcgKzQ5LDcgQEAgYm9vbCBzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMo
UHJvZwogICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xh
cmF0aW9uMikpOwogICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9u
LCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNl
Ojp3cmFwKGxvY2F0aW9uLCBwcm9ncmFtLmludHJpbnNpY3MoKS5ib29sVHlwZSgpKSwgIm9wZXJh
dG9yPT0iX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVsbHB0ciwgaXNPcGVyYXRvcikpOwog
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24pKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJDYW5ub3QgY3JlYXRlIG9wZXJhdG9yPT0g
Zm9yIGVudW0gdHlwZS4iKSk7CiAgICAgICAgIH0KIAogICAgICAgICB7CkBAIC01OCw3ICs1OCw3
IEBAIGJvb2wgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2cKICAgICAgICAgICAg
IHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwogICAgICAg
ICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJs
b2NrKCksIFdURjo6bnVsbG9wdCwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCkuY2xvbmUo
KSwgIm9wZXJhdG9yLnZhbHVlIl9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIG51bGxwdHIsIGlz
T3BlcmF0b3IpKTsKICAgICAgICAgICAgIGlmICghcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiQ2Fubm90IGNyZWF0
ZSBvcGVyYXRvci52YWx1ZSBmb3IgZW51bSB0eXBlLiIpKTsKICAgICAgICAgfQogCiAgICAgICAg
IHsKQEAgLTY3LDcgKzY3LDcgQEAgYm9vbCBzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMo
UHJvZwogICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xh
cmF0aW9uKSk7CiAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24s
IEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBlbnVtZXJhdGlvbkRlZmluaXRp
b24tPnR5cGUoKS5jbG9uZSgpLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CiAgICAgICAgICAgICBpZiAoIXByb2dyYW0uYXBw
ZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJy
b3IoIkNhbm5vdCBjcmVhdGUgY29weSBjb25zdHJ1Y3RvciBmb3IgZW51bSB0eXBlLiIpKTsKICAg
ICAgICAgfQogCiAgICAgICAgIHsKQEAgLTc2LDEwICs3NiwxMCBAQCBib29sIHN5bnRoZXNpemVF
bnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9nCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChX
VEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQs
IFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9j
YXRpb24sIGVudW1lcmF0aW9uRGVmaW5pdGlvbikpLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CiAgICAgICAgICAgICBpZiAo
IXByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoRXJyb3IoIkNhbm5vdCBjcmVhdGUgJ29wZXJhdG9yIGNhc3QnIGZvciBlbnVtIHR5
cGUuIikpOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7
IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdITFNMCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3lu
dGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9u
RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEzICsyNywxNiBAQAogCiAjaWYgRU5B
QkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMRXJyb3IuaCIKKyNpbmNsdWRlIDx3dGYvRXhw
ZWN0ZWQuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCiBj
bGFzcyBQcm9ncmFtOwogCi1ib29sIHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9n
cmFtJik7CitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rp
b25zKFByb2dyYW0mKTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0
cnVjdHVyZUFjY2Vzc29ycy5jcHAJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBuYW1lc3BhY2UgV0hMU0wgewogCi1ib29sIHN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMo
UHJvZ3JhbSYgcHJvZ3JhbSkKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBzeW50aGVzaXplU3RydWN0
dXJlQWNjZXNzb3JzKFByb2dyYW0mIHByb2dyYW0pCiB7CiAgICAgYm9vbCBpc09wZXJhdG9yID0g
dHJ1ZTsKICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZURlZmluaXRpb24gOiBwcm9ncmFtLnN0cnVj
dHVyZURlZmluaXRpb25zKCkpIHsKQEAgLTU4LDEwICs1OCwxMCBAQCBib29sIHN5bnRoZXNpemVT
dHJ1Y3R1cmVBY2Nlc3NvcnMoUHJvZ3JhCiAgICAgICAgICAgICAgICAgfHwgIXByb2dyYW0uYXBw
ZW5kKGNyZWF0ZUFuZGVyKEFTVDo6QWRkcmVzc1NwYWNlOjpEZXZpY2UpKQogICAgICAgICAgICAg
ICAgIHx8ICFwcm9ncmFtLmFwcGVuZChjcmVhdGVBbmRlcihBU1Q6OkFkZHJlc3NTcGFjZTo6VGhy
ZWFkZ3JvdXApKQogICAgICAgICAgICAgICAgIHx8ICFwcm9ncmFtLmFwcGVuZChjcmVhdGVBbmRl
cihBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiQ2FuIG5v
dCBjcmVhdGUgYW5kZXIiKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIHsgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV0hMU0wKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vz
c29ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oCShyZXZpc2lvbiAyNDc3MDApCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1
Y3R1cmVBY2Nlc3NvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTMgKzI3LDE2IEBACiAKICNp
ZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAiV0hMU0xFcnJvci5oIgorI2luY2x1ZGUgPHd0
Zi9FeHBlY3RlZC5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7
CiAKIGNsYXNzIFByb2dyYW07CiAKLWJvb2wgc3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyhQ
cm9ncmFtJik7CitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gc3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vz
c29ycyhQcm9ncmFtJik7CiAKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw5ICsyNywxMSBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1
ZGUgIldITFNMRXJyb3IuaCIKICNpbmNsdWRlICJXSExTTEZ1bmN0aW9uQXR0cmlidXRlLmgiCiAj
aW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgogI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50Lmgi
CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
MTc4LDIzICsxODAsMjQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlRl
cm5hcnlFeHByZXNzaW9uJik7CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVS
ZWZlcmVuY2UmKTsKIAotICAgIGJvb2wgZXJyb3IoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yOyB9
CisgICAgYm9vbCBoYXNFcnJvcigpIGNvbnN0IHsgcmV0dXJuICFtX2V4cGVjdGVkRXJyb3I7IH0K
KyAgICBFeHBlY3RlZDx2b2lkLCBFcnJvcj4gZ2V0RXJyb3IoKSB7IHJldHVybiBtX2V4cGVjdGVk
RXJyb3I7IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgY2hlY2tFcnJvckFuZFZp
c2l0KFQmIHgpCiAgICAgewotICAgICAgICBpZiAoIW1fZXJyb3IpCisgICAgICAgIGlmICghaGFz
RXJyb3IoKSkKICAgICAgICAgICAgIHZpc2l0KHgpOwogICAgIH0KIAogcHJvdGVjdGVkOgotICAg
IHZvaWQgc2V0RXJyb3IoKQorICAgIHZvaWQgc2V0RXJyb3IoRXJyb3IgZXJyb3IpCiAgICAgewot
ICAgICAgICBBU1NFUlQoIW1fZXJyb3IpOwotICAgICAgICBtX2Vycm9yID0gdHJ1ZTsKKyAgICAg
ICAgQVNTRVJUKCFoYXNFcnJvcigpKTsKKyAgICAgICAgbV9leHBlY3RlZEVycm9yID0gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3IpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29sIG1fZXJyb3IgeyBm
YWxzZSB9OyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5NTY4MiBNaWdyYXRlIHRoaXMgdG8gYmUgc29tZSBzb3J0IG9mIGRlc2NyaXB0aXZlIHN0cmlu
Zy4KKyAgICBFeHBlY3RlZDx2b2lkLCBFcnJvcj4gbV9leHBlY3RlZEVycm9yOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV0hMU0wKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5UmVmZXJlbmNlVHlwZS5o
CShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyAr
MjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIK
KyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMUmVmZXJlbmNl
VHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEFycmF5VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVR5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAot
I2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgog
I2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCiAjaW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlw
ZS5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXNz
aWdubWVudEV4cHJlc3Npb24uaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNs
dWRlICJXSExTTEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVk
ZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCYXNlRnVuY3Rpb25BdHRyaWJ1
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xCYXNlRnVuY3Rpb25BdHRyaWJ1dGUuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQmFzZUZ1bmN0aW9uQXR0
cmlidXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShX
RUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9j
YXRpb24uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCYXNlU2VtYW50aWMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCYXNlU2VtYW50
aWMuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMQmFzZVNlbWFudGljLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3
LDggQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlv
bi5oIgogI2luY2x1ZGUgIldITFNMRW50cnlQb2ludFR5cGUuaCIKLSNpbmNsdWRlICJXSExTTExl
eGVyLmgiCiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQmxvY2suaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyAr
MjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIK
KyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMU3RhdGVtZW50
LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCb29sZWFuTGl0ZXJhbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJvb2xlYW5MaXRl
cmFsLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEJvb2xlYW5MaXRlcmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcg
KzI4LDYgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9u
LmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJyZWFrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMQnJlYWsuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMQnJlYWsuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcs
NyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNp
bmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMU3RhdGVtZW50Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5o
CShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgs
NyBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEJhc2VTZW1hbnRpYy5o
IgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5o
IgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDYWxsRXhwcmVz
c2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTENhbGxFeHByZXNzaW9uLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENhbGxFeHByZXNzaW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lv
bi5oIgogI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIldI
TFNMTGV4ZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TENvbW1hRXhwcmVzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTENvbW1hRXhwcmVzc2lvbi5oCShyZXZpc2lvbiAyNDc3MDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb21tYUV4
cHJlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2lmIEVOQUJMRShX
RUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTExl
eGVyLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
Q29udGludWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xDb250aW51ZS5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb250aW51ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAi
V0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAi
V0hMU0xTdGF0ZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRGVyZWZlcmVuY2VFeHByZXNzaW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMRGVyZWZlcmVuY2VFeHByZXNzaW9uLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERlcmVmZXJlbmNlRXhwcmVz
c2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgRU5BQkxFKFdFQkdQ
VSkKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvV2hpbGVM
b29wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMRG9XaGlsZUxvb3AuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG9XaGlsZUxvb3AuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJX
SExTTEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hM
U0xTdGF0ZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvdEV4cHJlc3Npb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xEb3RFeHByZXNzaW9uLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvdEV4cHJlc3Npb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNiBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldI
TFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oIgog
I2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25j
YXRlbmF0ZS5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMRWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVmZmVjdGZ1bEV4cHJlc3Np
b25TdGF0ZW1lbnQuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2lu
Y2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNs
dWRlICJXSExTTFN0YXRlbWVudC5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRp
b25EZWZpbml0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgJKHJldmlzaW9uIDI0Nzcw
MCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1l
cmF0aW9uRGVmaW5pdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAKICNp
ZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKICNpbmNs
dWRlICJXSExTTEVudW1lcmF0aW9uTWVtYmVyLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgog
I2luY2x1ZGUgIldITFNMTmFtZWRUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlwZS5o
IgogI2luY2x1ZGUgPG1lbW9yeT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25NZW1iZXIu
aAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMRW51bWVyYXRpb25NZW1iZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCAr
MjcsOCBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0
aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJX
SExTTExleGVyLmgiCiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25NZW1iZXJMaXRl
cmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmgJKHJldmlzaW9uIDI0NzcwMCkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9u
TWVtYmVyTGl0ZXJhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBF
TkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNM
Q29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEV4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgJKHJldmlzaW9uIDI0NzcwMCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Np
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJHUFUp
CiAKICNpbmNsdWRlICJXSExTTEFkZHJlc3NTcGFjZS5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMVW5uYW1l
ZFR5cGUuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVl
UmVmLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xGYWxsdGhyb3VnaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEZhbGx0aHJvdWdoLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZhbGx0aHJvdWdoLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAK
LSNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIK
ICNpbmNsdWRlICJXSExTTFN0YXRlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVy
YWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xGbG9hdExpdGVyYWwuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgog
I2luY2x1ZGUgIldITFNMRmxvYXRMaXRlcmFsVHlwZS5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGb3JMb29wLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRm9yTG9vcC5oCShyZXZpc2lvbiAy
NDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xG
b3JMb29wLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoV0VC
R1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhl
ci5oIgogI2luY2x1ZGUgIldITFNMU3RhdGVtZW50LmgiCiAjaW5jbHVkZSAiV0hMU0xWYXJpYWJs
ZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oIgogI2luY2x1ZGUgPG1lbW9yeT4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOSArMjcsOSBAQAogCiAjaWYgRU5BQkxFKFdFQkdQ
VSkKIAorI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xFbnRy
eVBvaW50VHlwZS5oIgogI2luY2x1ZGUgIldITFNMRnVuY3Rpb25BdHRyaWJ1dGUuaCIKLSNpbmNs
dWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgogI2luY2x1ZGUg
IldITFNMVW5uYW1lZFR5cGUuaCIKICNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24u
aCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEds
b2JhbFZhcmlhYmxlUmVmZXJlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMR2xvYmFsVmFyaWFibGVSZWZlcmVuY2UuaAkocmV2
aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMR2xvYmFsVmFyaWFibGVSZWZlcmVuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyAr
MjcsNiBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIK
ICNpbmNsdWRlICJXSExTTFN0cnVjdHVyZUVsZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVl
UmVmLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTElmU3RhdGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMSWZTdGF0ZW1lbnQuaAkocmV2aXNpb24gMjQ3NzAwKQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSWZTdGF0ZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAK
ICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAj
aW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8
d3RmL1VuaXF1ZVJlZi5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmgJKHJldmlz
aW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEluZGV4RXhwcmVzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAK
ICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUg
IldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24uaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50
ZWdlckxpdGVyYWwuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWwuaAkod29ya2luZyBjb3B5KQpA
QCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCiAjaW5jbHVk
ZSAiV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTG9naWNhbEV4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xMb2dpY2FsRXhwcmVzc2lv
bi5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xMb2dpY2FsRXhwcmVzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw2IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lv
bi5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTG9naWNhbE5vdEV4
cHJlc3Npb24uaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMTG9naWNhbE5vdEV4cHJlc3Npb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNyArMjgsNiBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExT
TEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSA8d3RmL1Vu
aXF1ZVJlZi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oCShyZXZpc2lvbiAyNDc3MDApCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNp
ZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCi0jaW5jbHVk
ZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmgJ
KHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw2IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lv
bi5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTE5hbWVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hbWVkVHlwZS5oCShyZXZpc2lvbiAy
NDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xO
YW1lZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxF
KFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTENvZGVM
b2NhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24u
aAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTExleGVy
LmgiCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJXSExTTE5hbWVk
VHlwZS5oIgogI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCiAjaW5jbHVkZSAiV0hMU0xU
eXBlUmVmZXJlbmNlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xOdWxsTGl0ZXJhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsLmgJKHJldmlzaW9uIDI0Nzcw
MCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxM
aXRlcmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoV0VC
R1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhl
ci5oIgogI2luY2x1ZGUgIldITFNMTnVsbExpdGVyYWxUeXBlLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFBvaW50ZXJUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAot
I2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgog
I2luY2x1ZGUgIldITFNMUmVmZXJlbmNlVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSAi
V0hMU0xFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgi
Ci0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUXVhbGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUXVhbGlmaWVyLmgJKHJldmlzaW9uIDI0Nzcw
MCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFF1YWxp
Zmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VC
R1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0
aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgRU5BQkxFKFdF
QkdQVSkKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMTGV4
ZXIuaCIKICNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJX
SExTTFZhcmlhYmxlUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNlVHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFJlZmVyZW5jZVR5cGUuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNlVHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNM
QWRkcmVzc1NwYWNlLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNM
Q29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlwZS5oIgogI2luY2x1ZGUg
PHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2Vt
YW50aWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAK
ICNpbmNsdWRlICJXSExTTEJhc2VTZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIK
KyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJldHVy
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFJldHVybi5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXR1cm4uaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NyArMjgsNiBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Np
b24uaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQu
aCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6YXRp
b25Db25zdGFudFNlbWFudGljLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmgJ
KHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNM
QmFzZVNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNM
Q29kZUxvY2F0aW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhZ2VJbk91dFNlbWFudGljLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMU3RhZ2VJbk91dFNlbWFudGljLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisj
aW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJXSExTTEJhc2VTZW1hbnRp
Yy5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGF0ZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xTdGF0ZW1lbnQuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhdGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJXSExT
TExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlIDx3dGYv
VW5pcXVlUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YXRlbWVudExpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGF0ZW1l
bnRMaXN0LmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFN0YXRlbWVudExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMU3RhdGVt
ZW50LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3Ry
dWN0dXJlRGVmaW5pdGlvbi5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNs
dWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKICNpbmNs
dWRlICJXSExTTE5hbWVkVHlwZS5oIgogI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRWxlbWVudC5o
IgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVFbGVt
ZW50LmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMUXVhbGlm
aWVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgogI2luY2x1ZGUgIldITFNMVHlwZS5o
IgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3dp
dGNoQ2FzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFN3aXRjaENhc2UuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3dpdGNoQ2FzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUg
IldITFNMQmxvY2suaCIKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUg
IldITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2lu
Y2x1ZGUgIldITFNMU3RhdGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN3aXRjaFN0
YXRlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFN3aXRjaFN0YXRlbWVudC5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTd2l0Y2hTdGF0ZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAK
ICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAj
aW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJXSExTTFN3aXRjaENhc2UuaCIK
ICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUZXJuYXJ5RXhwcmVzc2lvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFRlcm5hcnlFeHBy
ZXNzaW9uLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFRlcm5hcnlFeHByZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFeHBy
ZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVS
ZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmgJ
KHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFR5cGVBcmd1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBA
CiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMQ29uc3RhbnRFeHByZXNzaW9u
LmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9u
LmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZURlZmluaXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5o
CShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3
IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2lu
Y2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIK
ICNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5o
PgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlw
ZVJlZmVyZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQog
Ci0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgi
CiAjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKICNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVu
dC5oIgogI2luY2x1ZGUgIldITFNMVW5uYW1lZFR5cGUuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5uYW1lZFR5
cGUuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVW5uYW1lZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcs
NyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNp
bmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMVHlwZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2ln
bmVkSW50ZWdlckxpdGVyYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmgJKHJldmlzaW9u
IDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBA
QAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKLSNp
bmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xVbnNpZ25lZEludGVnZXJMaXRl
cmFsVHlwZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFy
aWFibGVEZWNsYXJhdGlvbi5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVk
ZSAiV0hMU0xFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUg
IldITFNMUXVhbGlmaWVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgogI2luY2x1ZGUg
IldITFNMVHlwZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xh
cmF0aW9uc1N0YXRlbWVudC5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCR1BV
KQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9u
LmgiCiAjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJXSExTTFZhcmlhYmxl
RGVjbGFyYXRpb24uaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFZhcmlhYmxlUmVmZXJlbmNlLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVk
ZSAiV0hMU0xFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUg
IldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xXaGlsZUxvb3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xXaGlsZUxvb3AuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMV2hpbGVMb29wLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVk
ZSAiV0hMU0xFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUg
IldITFNMU3RhdGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTYzOTEsNiArNjM5MSw3IEBACiAJCTFDQUYz
NDdFMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViU2NyaXB0T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFDQUYzNDdGMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3QubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJTY3JpcHRPYmplY3Qu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQUYzNDgwMEE2QzQwNTIwMEFCRTA2
RSAvKiBXZWJTY3JpcHRPYmplY3RQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYlNjcmlwdE9iamVjdFByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUNCNUZFODgyMkRFQkM4QjAwOTQ0MEUyIC8qIFdITFNMRXJyb3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0hMU0xFcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0I2OUIz
MjIxREVENDBCMDA2RTg0NkEgLyogV0hMU0xSZXNvbHZhYmxlVHlwZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXSExTTFJlc29sdmFibGVUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFD
QjY5QjM0MjFERUQ2M0EwMDZFODQ2QSAvKiBXSExTTEZsb2F0TGl0ZXJhbFR5cGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0hMU0xGbG9hdExpdGVyYWxUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFDQjY5QjM1MjFERUQ2NDkwMDZFODQ2QSAvKiBXSExTTEludGVnZXJMaXRlcmFsVHlw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEludGVnZXJMaXRlcmFsVHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtODMyMyw2ICs4MzI0LDcgQEAKIAkJNTFGQjY3REExQUU2QjVF
NDAwRDA2QzVBIC8qIENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyMTMxRTVBMUM0RjE1NjEwMDMzRjgwMiAvKiBWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUyMTU4NjJDMjI5Mzc3QjcwMDU5MjVFRiAvKiBXSExTTEFTVC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXSExTTEFTVC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MjJC
QUI5NjIyRTZBMzYyMDBDNTRDRTkgLyogV0hMU0xDb2RlTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0hMU0xDb2RlTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTIy
REEzRDMyMjlFMUQzOTAwNDJEMTUxIC8qIFdITFNMR2xvYmFsVmFyaWFibGVSZWZlcmVuY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0hMU0xHbG9iYWxWYXJpYWJsZVJlZmVyZW5jZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MjJFMUExNzIyOTdENkQ0MDBFNUQzNkEgLyogV0hMU0xQcmVz
ZXJ2ZVZhcmlhYmxlTGlmZXRpbWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMUHJlc2Vy
dmVWYXJpYWJsZUxpZmV0aW1lcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUy
MkUxQTE5MjI5N0Q2RDQwMEU1RDM2QSAvKiBXSExTTFByZXNlcnZlVmFyaWFibGVMaWZldGltZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xQcmVzZXJ2ZVZhcmlhYmxlTGlmZXRpbWVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTUxOCw4ICsyNTUyMCwxMCBAQAogCQkJCTFDODQw
Qjk3MjFFQzQwMDcwMEQwNTAwRCAvKiBXSExTTENoZWNrZXIuaCAqLywKIAkJCQkxQzI4MUM2RDIy
Qjg3Qjk4MDA2OTFDMDAgLyogV0hMU0xDaGVja1RleHR1cmVSZWZlcmVuY2VzLmNwcCAqLywKIAkJ
CQkxQzI4MUM2RTIyQjg3Qjk4MDA2OTFDMDAgLyogV0hMU0xDaGVja1RleHR1cmVSZWZlcmVuY2Vz
LmggKi8sCisJCQkJNTIyQkFCOTYyMkU2QTM2MjAwQzU0Q0U5IC8qIFdITFNMQ29kZUxvY2F0aW9u
LmggKi8sCiAJCQkJMUM4NkNBNEIyMkFBMTlGRjAwMUJGOTYxIC8qIFdITFNMQ29tcHV0ZURpbWVu
c2lvbnMuY3BwICovLAogCQkJCTFDODZDQTRDMjJBQTE5RkYwMDFCRjk2MSAvKiBXSExTTENvbXB1
dGVEaW1lbnNpb25zLmggKi8sCisJCQkJMUNCNUZFODgyMkRFQkM4QjAwOTQ0MEUyIC8qIFdITFNM
RXJyb3IuaCAqLywKIAkJCQkxQ0EwQzJFNDIxRUVEMTJBMDBBMTE4NjAgLyogV0hMU0xGdW5jdGlv
blN0YWdlQ2hlY2tlci5jcHAgKi8sCiAJCQkJMUNBMEMyRTUyMUVFRDEyQTAwQTExODYwIC8qIFdI
TFNMRnVuY3Rpb25TdGFnZUNoZWNrZXIuaCAqLywKIAkJCQkxQzg0MEI5OTIxRUM0MDA4MDBEMDUw
MEQgLyogV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwICovLApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQaXBlbGluZU1ldGFs
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9j
b2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbQkocmV2aXNpb24gMjQ3NzAwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQaXBlbGlu
ZU1ldGFsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHN0YXRpYyBPcHRpb25h
bDxXSExTTDo6Q29tcHV0ZURpbWVuc2lvbnMKIAogICAgICAgICBhdXRvIHdobHNsQ29tcGlsZVJl
c3VsdCA9IFdITFNMOjpwcmVwYXJlKHdobHNsU291cmNlLCAqd2hsc2xEZXNjcmlwdG9yKTsKICAg
ICAgICAgaWYgKCF3aGxzbENvbXBpbGVSZXN1bHQpIHsKLSAgICAgICAgICAgIGVycm9yU2NvcGVz
LmdlbmVyYXRlRXJyb3IobWFrZVN0cmluZyhmdW5jdGlvbk5hbWUsICI6IFdITFNMIGNvbXBpbGF0
aW9uIGZhaWxlZCEiKSk7CisgICAgICAgICAgICBlcnJvclNjb3Blcy5nZW5lcmF0ZUVycm9yKG1h
a2VTdHJpbmcoIldITFNMIGNvbXBpbGF0aW9uIGZhaWxlZDogIiwgd2hsc2xDb21waWxlUmVzdWx0
LmVycm9yKCkudG9TdHJpbmcoKSkpOwogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374714</attachid>
            <date>2019-07-23 15:26:26 -0700</date>
            <delta_ts>2019-07-23 15:29:01 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>156074</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0Nzc1MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxMyBAQAorMjAxOS0wNy0yMyAgU2FhbSBC
YXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBbV0hMU0xdIEFkZCBkZXNjcmlw
dGl2ZSBlcnJvciBtZXNzYWdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk1NjgyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MDc0NjMyMj4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNo
IGFkZHMgZXJyb3IgbWVzc2FnZXMgdG8gdGhlIFdITFNMIGNvbXBpbGVyLiBJJ20gdGFraW5nIGEg
Zmlyc3QgcGFzcworICAgICAgICBhdCBoYXZpbmcgZGVjZW50IGVycm9yIG1lc3NhZ2VzIGV2ZXJ5
d2hlcmUgd2Ugc2V0IGFuIGVycm9yLiBIb3dldmVyLCB3ZSB3aWxsCisgICAgICAgIHByb2JhYmx5
IHJlZmluZSB0aGVzZSBtZXNzYWdlcyB0byBiZSBtb3JlIGFjY3VyYXRlIGFuZCBkZXNjcmlwdGl2
ZSBvdmVyIHRpbWUuCisgICAgICAgIAorICAgICAgICBQYXNzZXMgdGhhdCBjYW4gZmFpbCBubyBs
b25nZXIgcmV0dXJuIGEgYm9vbGVhbi4gSW5zdGVhZCwgdGhleSByZXR1cm4gRXhwZWN0ZWQ8dm9p
ZCwgRXJyb3I+LgorICAgICAgICBGcm9tIEVycm9yLCB3ZSBjYW4gZ2VuZXJhdGUgYSBkZXNjcmlw
dGl2ZSBlcnJvciBtZXNzYWdlLiBWaXNpdG9yOjpzZXRFcnJvciBub3cKKyAgICAgICAgcmVxdWly
ZXMgYW4gRXJyb3IgYXMgYW4gYXJndW1lbnQuIFNvIGFueXdoZXJlIGluIFZpc2l0b3IgdGhhdCBt
aWdodCBmYWlsIGlzCisgICAgICAgIG5vdyByZXF1aXJlZCB0byBwcm92aWRlIGFuIGVycm9yIG1l
c3NhZ2UuCisgICAgICAgIAorICAgICAgICBJbiBhIGZvbGxvdy11cCB0byB0aGlzLCB3ZSBzaG91
bGQgYWN0dWFsbHkgbWFrZSBvdXIgY2hlY2tGYWlsIHRlc3RzIHRlc3QgdGhhdAorICAgICAgICB0
aGV5IGdldCB0aGUgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwMDA0OQorCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaDoKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCYXNlRnVuY3Rpb25BdHRyaWJ1dGUuaDoKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCYXNlU2VtYW50aWMuaDoKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCbG9jay5oOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJvb2xlYW5MaXRlcmFsLmg6CisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnJlYWsuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaDoKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDYWxsRXhwcmVzc2lvbi5oOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbW1hRXhwcmVzc2lvbi5oOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnRpbnVlLmg6CisgICAgICAgICogTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRGVyZWZlcmVuY2VFeHByZXNzaW9uLmg6CisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG9XaGlsZUxvb3AuaDoKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xEb3RFeHByZXNzaW9uLmg6CisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRl
bWVudC5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0
aW9uRGVmaW5pdGlvbi5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEVudW1lcmF0aW9uTWVtYmVyLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEZhbGx0aHJvdWdoLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMRm9yTG9vcC5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xHbG9iYWxWYXJpYWJsZVJlZmVyZW5jZS5oOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTElmU3RhdGVtZW50Lmg6CisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmg6CisgICAgICAgICog
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWwuaDoKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xMb2dpY2FsRXhwcmVzc2lvbi5oOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTExvZ2ljYWxOb3RFeHByZXNzaW9u
Lmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFrZUFycmF5UmVm
ZXJlbmNlRXhwcmVzc2lvbi5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTE5hbWVkVHlwZS5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaDoKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xRdWFsaWZpZXIuaDoKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmg6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNlVHlwZS5oOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMu
aDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXR1cm4uaDoKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0
YW50U2VtYW50aWMuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xT
dGFnZUluT3V0U2VtYW50aWMuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xTdGF0ZW1lbnQuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xTdGF0ZW1lbnRMaXN0Lmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFN0cnVjdHVyZUVsZW1lbnQuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xTd2l0Y2hDYXNlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMU3dpdGNoU3RhdGVtZW50Lmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVGVybmFyeUV4cHJlc3Npb24uaDoKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaDoKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbm5hbWVkVHlwZS5oOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaDoKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmg6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlv
bnNTdGF0ZW1lbnQuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xW
YXJpYWJsZVJlZmVyZW5jZS5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFdoaWxlTG9vcC5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQXV0
b0luaXRpYWxpemVWYXJpYWJsZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkF1dG9J
bml0aWFsaXplOjp2aXNpdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6YXV0b0luaXRpYWxp
emVWYXJpYWJsZXMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQXV0b0lu
aXRpYWxpemVWYXJpYWJsZXMuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpj
aGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMQ2hlY2tUZXh0dXJlUmVmZXJlbmNlcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6VGV4dHVyZVJlZmVyZW5jZXNDaGVja2VyOjp2aXNpdCk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6Y2hlY2tUZXh0dXJlUmVmZXJlbmNlcyk6CisgICAgICAgICogTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xDaGVja1RleHR1cmVSZWZlcmVuY2VzLmg6CisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpyZXNvbHZlV2l0aE9wZXJhdG9yQW5kZXJJbmRleGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpyZXNvbHZlV2l0aE9wZXJhdG9yTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpyZXNvbHZlV2l0aFJlZmVyZW5jZUNvbXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OnJlc29sdmVCeUluc3RhbnRpYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OnJlc29sdmVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Y2hlY2tTZW1hbnRp
Y3MpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmFzc2lnblR5cGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjp2aXNpdCk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6Q2hlY2tlcjo6cmVjdXJzZUFuZEdldEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkNoZWNrZXI6OmdldEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNr
ZXI6OmZpbmlzaFZpc2l0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjpy
ZWN1cnNlQW5kUmVxdWlyZUJvb2xUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpjaGVj
ayk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmg6CisgICAg
ICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDb2RlTG9jYXRpb24uaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q29kZUxvY2F0aW9uOjpDb2RlTG9jYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OkNvZGVMb2NhdGlvbjo6c3RhcnRPZmZzZXQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNvZGVMb2NhdGlvbjo6ZW5kT2Zmc2V0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDb2RlTG9jYXRpb246Om9wZXJhdG9yPT0gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNvZGVMb2NhdGlvbjo6b3BlcmF0b3IhPSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q29kZUxvY2F0aW9uOjpvcGVyYXRvciBib29s
IGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENvbXB1dGVEaW1l
bnNpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpjb21wdXRlRGltZW5zaW9ucyk6
CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xFcnJvci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpFcnJvcjo6RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkVycm9yOjpjb2RlTG9jYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkVycm9yOjptZXNzYWdlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpjaGVja0Z1bmN0aW9uU3RhZ2VzKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkdhdGhlcmVyOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6R2F0aGVyZXI6
OnZpc2l0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpnYXRoZXJFbnRyeVBvaW50SXRlbXMp
OgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0
ZW1zLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OmxpbmVBbmRDb2x1bW5OdW1iZXJGcm9tT2Zm
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpMZXhlcjo6ZXJyb3JTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OkxleGVyOjpsaW5lTnVtYmVyRnJvbU9mZnNldCk6IERlbGV0
ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkNvZGVMb2NhdGlvbjo6Q29kZUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpMZXhlcjo6ZXJyb3JTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkFTVDo6Q29kZUxvY2F0aW9uOjpDb2RlTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6Q29kZUxvY2F0aW9uOjpzdGFydE9mZnNldCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpDb2RlTG9jYXRpb246OmVu
ZE9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xOYW1lUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok5hbWVSZXNv
bHZlcjo6fk5hbWVSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TmFtZVJlc29s
dmVyOjp2aXNpdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6cmVzb2x2ZU5hbWVzSW5UeXBl
cyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6cmVzb2x2ZVR5cGVOYW1lc0luRnVuY3Rpb25z
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjppbnRMaXRlcmFsVG9JbnQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnVpbnRMaXRlcmFs
VG9VaW50KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpmbG9hdExpdGVyYWxUb0Zsb2F0KToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpyZWNvZ25pemVTaW1wbGVVbnNpZ25lZEludGVnZXIp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VUeXBlQXJndW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlRm9yTG9vcCk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6UGFyc2VyOjpwYXJzZVdoaWxlTG9vcCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
UGFyc2VyOjpwYXJzZUVmZmVjdGZ1bEV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OlBhcnNlcjo6cGFyc2VMaW1pdGVkU3VmZml4T3BlcmF0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VTdWZmaXhPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6UGFyc2VyOjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OlBhcnNlcjo6Y29tcGxldGVUZXJuYXJ5Q29uZGl0aW9uYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OlBhcnNlcjo6Y29tcGxldGVBc3NpZ25tZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpQYXJzZXI6OmNvbXBsZXRlUG9zc2libGVMb2dpY2FsQmluYXJ5T3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OmNvbXBsZXRlUG9zc2libGVSZWxhdGlv
bmFsQmluYXJ5T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OmNv
bXBsZXRlUG9zc2libGVTaGlmdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpj
b21wbGV0ZVBvc3NpYmxlQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OmNv
bXBsZXRlUG9zc2libGVNdWx0aXBseSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2Vy
OjpwYXJzZVBvc3NpYmxlUHJlZml4KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6
OnBhcnNlQ2FsbEV4cHJlc3Npb24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUGFyc2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpFcnJvcjo6RXJy
b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6RXJyb3I6OmR1
bXAgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UHJlcGFyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6cHJlcGFyZVNoYXJlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6cHJlcGFyZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQcmVwYXJlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjptb2Rp
ZnkpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2lvbkNoZWNrZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmNoZWNrUmVjdXJzaW9uKToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2lvbkNoZWNrZXIuaDoKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpjaGVja1JlY3Vyc2l2ZVR5cGVzKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmg6CisgICAgICAgICog
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnlVdGlsaXRpZXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmluY2x1ZGVTdGFuZGFyZExpYnJhcnkpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhdGVtZW50QmVoYXZpb3JDaGVja2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpjaGVja1N0YXRlbWVudEJlaGF2aW9yKToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tl
ci5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5
T3BlcmF0b3JMZW5ndGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnN5bnRoZXNpemVB
cnJheU9wZXJhdG9yTGVuZ3RoKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpzeW50aGVzaXplQ29uc3RydWN0b3JzKToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaDoKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6c3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25z
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJh
dGlvbkZ1bmN0aW9ucy5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3lu
dGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
c3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmg6CisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6VmlzaXRvcjo6aGFzRXJyb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlZp
c2l0b3I6OmdldEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpWaXNpdG9yOjpjaGVj
a0Vycm9yQW5kVmlzaXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlZpc2l0b3I6OnNldEVy
cm9yKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpWaXNpdG9yOjplcnJvciBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2Ev
R1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwubW06CisgICAgICAgIChXZWJDb3JlOjp0cnlTZXRGdW5j
dGlvbnMpOgorCiAyMDE5LTA3LTIzICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgW2lPU10gVGFwcGluZyB0aGUgc2VhcmNoIGZpZWxkIG9uIGEgc2VhcmNoIHJlc3Vs
dHMgcGFnZSBvbiB6aWxsb3cuY29tIHNob3dzIGFuZCBpbW1lZGlhdGVseSBkaXNtaXNzZXMgdGhl
IGtleWJvYXJkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TEF1dG9Jbml0aWFsaXplVmFyaWFibGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEF1dG9Jbml0aWFsaXplVmFyaWFibGVzLmNwcAko
cmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xBdXRvSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcg
Kzc2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
UmVzb2x2aW5nVHlwZT4+IGFyZ3VtZW50VHlwZXM7CiAgICAgICAgIGF1dG8qIGZ1bmN0aW9uID0g
cmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQobV9jYXN0RnVuY3Rpb25zLCBhcmd1bWVudFR5cGVzLCB0
eXBlKTsKICAgICAgICAgaWYgKCFmdW5jdGlvbikgewotICAgICAgICAgICAgc2V0RXJyb3IoKTsK
KyAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3QgZmluZCB0aGUgZGVmYXVsdCBjb25z
dHJ1Y3RvciBmb3IgdmFyaWFibGUuIiwgdmFyaWFibGVEZWNsYXJhdGlvbi5jb2RlTG9jYXRpb24o
KSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGNhbGxFeHByZXNz
aW9uLT5zZXRGdW5jdGlvbigqZnVuY3Rpb24pOwpAQCAtODgsMTEgKzg4LDExIEBAIHByaXZhdGU6
CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uPiwgMT4mIG1fY2FzdEZ1bmN0aW9uczsKIH07CiAKLWJvb2wgYXV0b0luaXRpYWxpemVWYXJp
YWJsZXMoUHJvZ3JhbSYgcHJvZ3JhbSkKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBhdXRvSW5pdGlh
bGl6ZVZhcmlhYmxlcyhQcm9ncmFtJiBwcm9ncmFtKQogewogICAgIEF1dG9Jbml0aWFsaXplIGF1
dG9Jbml0aWFsaXplKHByb2dyYW0ubmFtZUNvbnRleHQoKSk7CiAgICAgYXV0b0luaXRpYWxpemUu
VmlzaXRvcjo6dmlzaXQocHJvZ3JhbSk7Ci0gICAgcmV0dXJuICFhdXRvSW5pdGlhbGl6ZS5lcnJv
cigpOworICAgIHJldHVybiBhdXRvSW5pdGlhbGl6ZS5nZXRFcnJvcigpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXSExTTApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xBdXRvSW5pdGlhbGl6ZVZhcmlhYmxlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQXV0b0luaXRpYWxpemVWYXJpYWJsZXMuaAko
cmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xBdXRvSW5pdGlhbGl6ZVZhcmlhYmxlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMyAr
MjcsMTYgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTEVycm9yLmgi
CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFt
ZXNwYWNlIFdITFNMIHsKIAogY2xhc3MgUHJvZ3JhbTsKIAotYm9vbCBhdXRvSW5pdGlhbGl6ZVZh
cmlhYmxlcyhQcm9ncmFtJik7CitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gYXV0b0luaXRpYWxpemVW
YXJpYWJsZXMoUHJvZ3JhbSYpOwogCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNh
dGVGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE1LDkgKzExNSw5IEBAIHByaXZhdGU6CiAgICAgY29uc3QgQVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uKiBtX2Z1bmN0aW9uIHsgbnVsbHB0ciB9OwogfTsKIAotYm9vbCBjaGVj
a0R1cGxpY2F0ZUZ1bmN0aW9ucyhjb25zdCBQcm9ncmFtJiBwcm9ncmFtKQorRXhwZWN0ZWQ8dm9p
ZCwgRXJyb3I+IGNoZWNrRHVwbGljYXRlRnVuY3Rpb25zKGNvbnN0IFByb2dyYW0mIHByb2dyYW0p
CiB7Ci0gICAgYXV0byBwYXNzZXNTdGF0aWNDaGVja3MgPSBbJl0gKGNvbnN0IEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbiYgZnVuY3Rpb24pIHsKKyAgICBhdXRvIHBhc3Nlc1N0YXRpY0NoZWNrcyA9
IFsmXSAoY29uc3QgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5jdGlvbikgLT4gRXhwZWN0
ZWQ8dm9pZCwgRXJyb3I+IHsKICAgICAgICAgaWYgKGZ1bmN0aW9uLm5hbWUoKSA9PSAib3BlcmF0
b3ImW10iICYmIGZ1bmN0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMgogICAgICAgICAgICAg
JiYgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5u
YW1lZFR5cGUmPigqZnVuY3Rpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpKSkgewogICAgICAg
ICAgICAgYXV0byYgdHlwZSA9IHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigq
ZnVuY3Rpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwpAQCAtMTI3LDQ0ICsxMjcsNDUgQEAg
Ym9vbCBjaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyhjb25zdCBQcm9ncgogICAgICAgICAgICAgICAg
ICAgICBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCpyZXNvbHZlZFR5cGUpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBk
b3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnJlc29sdmVkVHlwZSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
dWludCIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiQ2Fubm90
IGRlZmluZSBjdXN0b20gYXJyYXkgYW5kZXIuIikpOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGZ1bmN0
aW9uLm5hbWUoKSA9PSAib3BlcmF0b3IubGVuZ3RoIiAmJiBmdW5jdGlvbi5wYXJhbWV0ZXJzKCku
c2l6ZSgpID09IDEKICAgICAgICAgICAgICYmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4o
c3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbi5wYXJhbWV0ZXJz
KClbMF0tPnR5cGUoKSkpCiAgICAgICAgICAgICB8fCBpczxBU1Q6OkFycmF5VHlwZT4oc3RhdGlj
X2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbi5wYXJhbWV0ZXJzKClbMF0t
PnR5cGUoKSkpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChFcnJvcigiQ2Fubm90IGRlZmluZSBvcGVyYXRvci5sZW5ndGggZm9y
IGFuIGFycmF5LiIpKTsKICAgICAgICAgZWxzZSBpZiAoZnVuY3Rpb24ubmFtZSgpID09ICJvcGVy
YXRvcj09IgogICAgICAgICAgICAgJiYgZnVuY3Rpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAy
CiAgICAgICAgICAgICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0
IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpKQog
ICAgICAgICAgICAgJiYgaXM8QVNUOjpSZWZlcmVuY2VUeXBlPihzdGF0aWNfY2FzdDxjb25zdCBB
U1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKSkKICAg
ICAgICAgICAgICYmIG1hdGNoZXMoKmZ1bmN0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpLCAq
ZnVuY3Rpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJDYW5ub3QgZGVm
aW5lIG9wZXJhdG9yPT0gb24gdHdvIHJlZmVyZW5jZSB0eXBlcy4iKSk7CiAgICAgICAgIGVsc2Ug
aWYgKGZ1bmN0aW9uLmlzQ2FzdCgpICYmIGZ1bmN0aW9uLnBhcmFtZXRlcnMoKS5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IGZ1bmN0aW9uLnR5cGUoKS51bmlmeU5v
ZGUoKTsKICAgICAgICAgICAgIGlmIChpczxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKSAmJiBp
czxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVu
aWZ5Tm9kZSkpKSB7CiAgICAgICAgICAgICAgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9u
ID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KGRvd25jYXN0PEFTVDo6TmFt
ZWRUeXBlPih1bmlmeU5vZGUpKTsKICAgICAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xh
cmF0aW9uLmlzT3BhcXVlVHlwZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiQ2Fubm90
IGRlZmluZSBhIGNhc3Qgb24gYW4gb3BhcXVlIHR5cGUuIikpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAg
fTsKIAogICAgIEhhc2hTZXQ8RHVwbGljYXRlRnVuY3Rpb25LZXksIER1cGxpY2F0ZUZ1bmN0aW9u
S2V5OjpIYXNoLCBEdXBsaWNhdGVGdW5jdGlvbktleTo6VHJhaXRzPiBmdW5jdGlvbnM7CiAKLSAg
ICBhdXRvIGFkZCA9IFsmXSAoY29uc3QgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5jdGlv
bikgeworICAgIGF1dG8gYWRkID0gWyZdIChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24m
IGZ1bmN0aW9uKSAtPiBFeHBlY3RlZDx2b2lkLCBFcnJvcj4gewogICAgICAgICBhdXRvIGFkZFJl
c3VsdCA9IGZ1bmN0aW9ucy5hZGQoRHVwbGljYXRlRnVuY3Rpb25LZXkgeyBmdW5jdGlvbiB9KTsK
ICAgICAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiRm91bmQgZHVw
bGljYXRlIGZ1bmN0aW9uIikpOwogICAgICAgICByZXR1cm4gcGFzc2VzU3RhdGljQ2hlY2tzKGZ1
bmN0aW9uKTsKICAgICB9OwogCiAgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBw
cm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkgewotICAgICAgICBpZiAoIWFkZChmdW5jdGlv
bkRlZmluaXRpb24uZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBh
dXRvIGFkZFJlc3VsdCA9IGFkZChmdW5jdGlvbkRlZmluaXRpb24uZ2V0KCkpOworICAgICAgICBp
ZiAoIWFkZFJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBhZGRSZXN1bHQ7CiAgICAgfQogCiAg
ICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9ucygpKSB7CkBAIC0xODAsMTAgKzE4MSwxMCBAQCBib29sIGNoZWNr
RHVwbGljYXRlRnVuY3Rpb25zKGNvbnN0IFByb2dyCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg4NjEKICAgICAgICAgLy8gQVNTRVJUKHBhc3Nl
c1N0YXRpY0NoZWNrcyhuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmdldCgpKSk7CiAgICAgICAg
IGlmIChmdW5jdGlvbnMuY29udGFpbnMoRHVwbGljYXRlRnVuY3Rpb25LZXkgeyBuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLmdldCgpIH0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJEdXBsaWNhdGUgbmF0aXZlIGZ1
bmN0aW9uLiIpKTsKICAgICB9CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9Owog
fQogCiB9IC8vIG5hbWVzcGFjZSBXSExTTApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVG
dW5jdGlvbnMuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNywxMyArMjcsMTUgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJX
SExTTEVycm9yLmgiCiAjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSA8d3RmL0V4
cGVjdGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAot
Ym9vbCBjaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyhjb25zdCBQcm9ncmFtJik7CitFeHBlY3RlZDx2
b2lkLCBFcnJvcj4gY2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMoY29uc3QgUHJvZ3JhbSYpOwogCiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tU
ZXh0dXJlUmVmZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja1RleHR1cmVSZWZlcmVuY2VzLmNwcAkocmV2aXNpb24g
MjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVj
a1RleHR1cmVSZWZlcmVuY2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsMjggKzg0LDI4IEBA
IGJvb2wgVGV4dHVyZVJlZmVyZW5jZXNDaGVja2VyOjpjb250YWluc1QKIHZvaWQgVGV4dHVyZVJl
ZmVyZW5jZXNDaGVja2VyOjp2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlwZSkKIHsK
ICAgICBWaXNpdG9yOjp2aXNpdChwb2ludGVyVHlwZSk7Ci0gICAgaWYgKGVycm9yKCkpCisgICAg
aWYgKGhhc0Vycm9yKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoY29udGFpbnNUZXh0dXJl
T3JTYW1wbGVyKHBvaW50ZXJUeXBlLmVsZW1lbnRUeXBlKCkpKQotICAgICAgICBzZXRFcnJvcigp
OworICAgICAgICBzZXRFcnJvcihFcnJvcigiQ2Fubm90IGhhdmUgYSBwb2ludGVyIHRvIGEgdGV4
dHVyZS4iLCBwb2ludGVyVHlwZS5jb2RlTG9jYXRpb24oKSkpOwogfQogCiB2b2lkIFRleHR1cmVS
ZWZlcmVuY2VzQ2hlY2tlcjo6dmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGFycmF5UmVm
ZXJlbmNlVHlwZSkKIHsKICAgICBWaXNpdG9yOjp2aXNpdChhcnJheVJlZmVyZW5jZVR5cGUpOwot
ICAgIGlmIChlcnJvcigpKQorICAgIGlmIChoYXNFcnJvcigpKQogICAgICAgICByZXR1cm47CiAg
ICAgaWYgKGNvbnRhaW5zVGV4dHVyZU9yU2FtcGxlcihhcnJheVJlZmVyZW5jZVR5cGUuZWxlbWVu
dFR5cGUoKSkpCi0gICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJD
YW5ub3QgaGF2ZSBhbiBhcnJheSByZWZlcmVuY2UgdG8gYSB0ZXh0dXJlLiIsIGFycmF5UmVmZXJl
bmNlVHlwZS5jb2RlTG9jYXRpb24oKSkpOwogfQogCiB2b2lkIFRleHR1cmVSZWZlcmVuY2VzQ2hl
Y2tlcjo6dmlzaXQoQVNUOjpBcnJheVR5cGUmIGFycmF5VHlwZSkKIHsKICAgICBWaXNpdG9yOjp2
aXNpdChhcnJheVR5cGUpOwotICAgIGlmIChlcnJvcigpKQorICAgIGlmIChoYXNFcnJvcigpKQog
ICAgICAgICByZXR1cm47CiAgICAgaWYgKGNvbnRhaW5zVGV4dHVyZU9yU2FtcGxlcihhcnJheVR5
cGUudHlwZSgpKSkKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgc2V0RXJyb3IoRXJyb3Io
IkNhbm5vdCBoYXZlIGFuIGFycmF5IG9mIHRleHR1cmVzLiIsIGFycmF5VHlwZS5jb2RlTG9jYXRp
b24oKSkpOwogfQogCiB2b2lkIFRleHR1cmVSZWZlcmVuY2VzQ2hlY2tlcjo6dmlzaXQoQVNUOjpF
eHByZXNzaW9uJiBleHByZXNzaW9uKQpAQCAtMTE0LDExICsxMTQsMTEgQEAgdm9pZCBUZXh0dXJl
UmVmZXJlbmNlc0NoZWNrZXI6OnZpc2l0KEFTVAogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChleHBy
ZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKIH0KIAotYm9vbCBjaGVja1RleHR1cmVSZWZlcmVuY2Vz
KFByb2dyYW0mIHByb2dyYW0pCitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gY2hlY2tUZXh0dXJlUmVm
ZXJlbmNlcyhQcm9ncmFtJiBwcm9ncmFtKQogewogICAgIFRleHR1cmVSZWZlcmVuY2VzQ2hlY2tl
ciB0ZXh0dXJlUmVmZXJlbmNlc0NoZWNrZXI7CiAgICAgdGV4dHVyZVJlZmVyZW5jZXNDaGVja2Vy
LmNoZWNrRXJyb3JBbmRWaXNpdChwcm9ncmFtKTsKLSAgICByZXR1cm4gIXRleHR1cmVSZWZlcmVu
Y2VzQ2hlY2tlci5lcnJvcigpOworICAgIHJldHVybiB0ZXh0dXJlUmVmZXJlbmNlc0NoZWNrZXIu
Z2V0RXJyb3IoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV0hMU0wKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tUZXh0dXJlUmVmZXJlbmNlcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hl
Y2tUZXh0dXJlUmVmZXJlbmNlcy5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrVGV4dHVyZVJlZmVyZW5jZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsMTMgKzI3LDE2IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisj
aW5jbHVkZSAiV0hMU0xFcnJvci5oIgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7CiAKIGNsYXNzIFByb2dyYW07CiAK
LWJvb2wgY2hlY2tUZXh0dXJlUmVmZXJlbmNlcyhQcm9ncmFtJik7CitFeHBlY3RlZDx2b2lkLCBF
cnJvcj4gY2hlY2tUZXh0dXJlUmVmZXJlbmNlcyhQcm9ncmFtJik7CiAKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIu
Y3BwCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTENoZWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHB1
YmxpYzoKICAgICAgICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNOdW1iZXIoKQogICAg
ICAgICAgICAgJiYgIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc1ZlY3RvcigpCiAgICAgICAgICAg
ICAmJiAhbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzTWF0cml4KCkpCi0gICAgICAgICAgICBzZXRF
cnJvcigpOworICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIlVzZSBvZiBuYXRpdmUgdHlwZSBp
cyBub3QgYSBQT0QgaW4gZW50cnlwb2ludCBzZW1hbnRpYy4iLCBuYXRpdmVUeXBlRGVjbGFyYXRp
b24uY29kZUxvY2F0aW9uKCkpKTsKICAgICB9CiAKICAgICB2b2lkIHZpc2l0KEFTVDo6U3RydWN0
dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikgb3ZlcnJpZGUKQEAgLTEwMiwxNCAr
MTAyLDE0IEBAIHB1YmxpYzoKICAgICAgICAgVmlzaXRvcjo6dmlzaXQoYXJyYXlUeXBlKTsKICAg
ICB9CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6UG9pbnRlclR5cGUmKSBvdmVycmlkZQorICAgIHZv
aWQgdmlzaXQoQVNUOjpQb2ludGVyVHlwZSYgcG9pbnRlclR5cGUpIG92ZXJyaWRlCiAgICAgewot
ICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBzZXRFcnJvcihFcnJvcigiSWxsZWdhbCB1c2Ug
b2YgcG9pbnRlciBpbiBlbnRyeXBvaW50IHNlbWFudGljLiIsIHBvaW50ZXJUeXBlLmNvZGVMb2Nh
dGlvbigpKSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlw
ZSYpIG92ZXJyaWRlCisgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYgYXJy
YXlSZWZlcmVuY2VUeXBlKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAg
ICAgICAgc2V0RXJyb3IoRXJyb3IoIklsbGVnYWwgdXNlIG9mIGFycmF5IHJlZmVyZW5jZSBpbiBl
bnRyeXBvaW50IHNlbWFudGljLiIsIGFycmF5UmVmZXJlbmNlVHlwZS5jb2RlTG9jYXRpb24oKSkp
OwogICAgIH0KIAogICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJl
bmNlKSBvdmVycmlkZQpAQCAtMTE4LDcgKzExOCw3IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi1z
dGF0aWMgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJlc29sdmVXaXRoT3BlcmF0b3JB
bmRlckluZGV4ZXIoQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24sIEFTVDo6QXJyYXlSZWZlcmVu
Y2VUeXBlJiBmaXJzdEFyZ3VtZW50LCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQorc3Rh
dGljIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0aE9wZXJhdG9yQW5k
ZXJJbmRleGVyKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUm
IGZpcnN0QXJndW1lbnQsIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCiB7CiAgICAgY29u
c3QgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKICAgICBhdXRvIHJldHVyblR5cGUgPSBtYWtlVW5p
cXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KGxvY2F0aW9uLCBmaXJzdEFyZ3VtZW50LmFkZHJlc3NT
cGFjZSgpLCBmaXJzdEFyZ3VtZW50LmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CkBAIC0xMjgsNyAr
MTI4LDcgQEAgc3RhdGljIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZQogICAgIHJl
dHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92
ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVyYXRvciZbXSIsIFN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CiB9
CiAKLXN0YXRpYyBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gcmVzb2x2ZVdpdGhPcGVy
YXRvckxlbmd0aChBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbiwgQVNUOjpVbm5hbWVkVHlwZSYg
Zmlyc3RBcmd1bWVudCwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykKK3N0YXRpYyBBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gcmVzb2x2ZVdpdGhPcGVyYXRvckxlbmd0aChDb2Rl
TG9jYXRpb24gbG9jYXRpb24sIEFTVDo6VW5uYW1lZFR5cGUmIGZpcnN0QXJndW1lbnQsIGNvbnN0
IEludHJpbnNpY3MmIGludHJpbnNpY3MpCiB7CiAgICAgY29uc3QgYm9vbCBpc09wZXJhdG9yID0g
dHJ1ZTsKICAgICBhdXRvIHJldHVyblR5cGUgPSBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAobG9j
YXRpb24sIGludHJpbnNpY3MudWludFR5cGUoKSk7CkBAIC0xMzcsNyArMTM3LDcgQEAgc3RhdGlj
IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZQogICAgIHJldHVybiBBU1Q6Ok5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBB
U1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwg
U3RyaW5nKCJvcGVyYXRvci5sZW5ndGgiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwg
V1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVsbHB0ciwgaXNPcGVyYXRvcikpOwogfQogCi1zdGF0aWMg
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJlc29sdmVXaXRoUmVmZXJlbmNlQ29tcGFy
YXRvcihBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbiwgUmVzb2x2aW5nVHlwZSYgZmlyc3RBcmd1
bWVudCwgUmVzb2x2aW5nVHlwZSYgc2Vjb25kQXJndW1lbnQsIGNvbnN0IEludHJpbnNpY3MmIGlu
dHJpbnNpY3MpCitzdGF0aWMgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJlc29sdmVX
aXRoUmVmZXJlbmNlQ29tcGFyYXRvcihDb2RlTG9jYXRpb24gbG9jYXRpb24sIFJlc29sdmluZ1R5
cGUmIGZpcnN0QXJndW1lbnQsIFJlc29sdmluZ1R5cGUmIHNlY29uZEFyZ3VtZW50LCBjb25zdCBJ
bnRyaW5zaWNzJiBpbnRyaW5zaWNzKQogewogICAgIGNvbnN0IGJvb2wgaXNPcGVyYXRvciA9IHRy
dWU7CiAgICAgYXV0byByZXR1cm5UeXBlID0gQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0
aW9uLCBpbnRyaW5zaWNzLmJvb2xUeXBlKCkpOwpAQCAtMTY1LDcgKzE2NSw3IEBAIGVudW0gY2xh
c3MgQWNjZXB0YWJpbGl0eSB7CiAgICAgTm8KIH07CiAKLXN0YXRpYyBPcHRpb25hbDxBU1Q6Ok5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+IHJlc29sdmVCeUluc3RhbnRpYXRpb24oY29uc3QgU3Ry
aW5nJiBuYW1lLCBBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbiwgY29uc3QgVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiB0eXBlcywgY29uc3QgSW50cmluc2lj
cyYgaW50cmluc2ljcykKK3N0YXRpYyBPcHRpb25hbDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24+IHJlc29sdmVCeUluc3RhbnRpYXRpb24oY29uc3QgU3RyaW5nJiBuYW1lLCBDb2RlTG9j
YXRpb24gbG9jYXRpb24sIGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29s
dmluZ1R5cGU+PiYgdHlwZXMsIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCiB7CiAgICAg
aWYgKG5hbWUgPT0gIm9wZXJhdG9yJltdIiAmJiB0eXBlcy5zaXplKCkgPT0gMikgewogICAgICAg
ICBhdXRvKiBmaXJzdEFyZ3VtZW50QXJyYXlSZWYgPSB0eXBlc1swXS5nZXQoKS52aXNpdChXVEY6
Om1ha2VWaXNpdG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUp
IC0+IEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlKiB7CkBAIC0yMTcsNyArMjE3LDcgQEAgc3RhdGlj
IE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYQogICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiB9CiAKLXN0YXRpYyBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlv
bihQcm9ncmFtJiBwcm9ncmFtLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24+LCAxPiogcG9zc2libGVPdmVybG9hZHMsIFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgdHlwZXMsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24sIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNp
Y3MsIEFTVDo6TmFtZWRUeXBlKiBjYXN0UmV0dXJuVHlwZSA9IG51bGxwdHIpCitzdGF0aWMgQVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rpb24oUHJvZ3JhbSYgcHJvZ3JhbSwg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwg
MT4qIHBvc3NpYmxlT3ZlcmxvYWRzLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNv
bHZpbmdUeXBlPj4mIHR5cGVzLCBjb25zdCBTdHJpbmcmIG5hbWUsIENvZGVMb2NhdGlvbiBsb2Nh
dGlvbiwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcywgQVNUOjpOYW1lZFR5cGUqIGNhc3RS
ZXR1cm5UeXBlID0gbnVsbHB0cikKIHsKICAgICBpZiAocG9zc2libGVPdmVybG9hZHMpIHsKICAg
ICAgICAgaWYgKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogZnVuY3Rpb24gPSByZXNvbHZlRnVu
Y3Rpb25PdmVybG9hZCgqcG9zc2libGVPdmVybG9hZHMsIHR5cGVzLCBjYXN0UmV0dXJuVHlwZSkp
CkBAIC0yOTYsNyArMjk2LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tTZW1hbnRpY3MoVmVjdG9yPEVu
dHJ5UAogICAgICAgICAgICAgICAgICAgICBwb2RDaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdChk
b3duY2FzdDxBU1Q6OkFycmF5VHlwZT4oKml0ZW0udW5uYW1lZFR5cGUpLnR5cGUoKSk7CiAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICBpZiAocG9kQ2hlY2tlci5lcnJvcigpKQorICAgICAgICAgICAgICAgIGlmIChwb2RD
aGVja2VyLmhhc0Vycm9yKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDYwLDcgKzQ2MCw3IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgdmlzaXQoUHJvZ3JhbSYpIG92ZXJyaWRlOwogCi0gICAgYm9v
bCBhc3NpZ25UeXBlcygpOworICAgIEV4cGVjdGVkPHZvaWQsIEVycm9yPiBhc3NpZ25UeXBlcygp
OwogCiBwcml2YXRlOgogICAgIGJvb2wgY2hlY2tTaGFkZXJUeXBlKGNvbnN0IEFTVDo6RnVuY3Rp
b25EZWZpbml0aW9uJik7CkBAIC01MzgsNyArNTM4LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChQ
cm9ncmFtJiBwcm9ncmFtKQogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQocHJvZ3JhbS5uYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpW2ldKTsKIH0KIAotYm9vbCBDaGVja2VyOjphc3NpZ25U
eXBlcygpCitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gQ2hlY2tlcjo6YXNzaWduVHlwZXMoKQogewog
ICAgIGZvciAoYXV0byYga2V5VmFsdWVQYWlyIDogbV90eXBlTWFwKSB7CiAgICAgICAgIGF1dG8g
c3VjY2VzcyA9IGtleVZhbHVlUGFpci52YWx1ZS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0o
VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7CkBAIC01
NTMsMTAgKzU1MywxMCBAQCBib29sIENoZWNrZXI6OmFzc2lnblR5cGVzKCkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9KSk7CiAgICAgICAgIGlmICghc3VjY2VzcykKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChF
cnJvcigiQ291bGQgbm90IHJlc29sdmUgdGhlIHR5cGUgb2YgYSBjb25zdGFudC4iKSk7CiAgICAg
fQogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogYm9vbCBDaGVja2Vy
OjpjaGVja1NoYWRlclR5cGUoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9u
RGVmaW5pdGlvbikKQEAgLTU3NiwyMSArNTc2LDIxIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNU
OjpGdW5jdGlvbkRlZmluaXQKICAgICBtX2N1cnJlbnRGdW5jdGlvbiA9ICZmdW5jdGlvbkRlZmlu
aXRpb247CiAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpKSB7CiAg
ICAgICAgIGlmICghY2hlY2tTaGFkZXJUeXBlKGZ1bmN0aW9uRGVmaW5pdGlvbikpIHsKLSAgICAg
ICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICBzZXRFcnJvcihFcnJvcigiRHVwbGljYXRl
IGVudHJ5cG9pbnQgZnVuY3Rpb24uIiwgZnVuY3Rpb25EZWZpbml0aW9uLmNvZGVMb2NhdGlvbigp
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgYXV0byBlbnRyeVBv
aW50SXRlbXMgPSBnYXRoZXJFbnRyeVBvaW50SXRlbXMobV9pbnRyaW5zaWNzLCBmdW5jdGlvbkRl
ZmluaXRpb24pOwogICAgICAgICBpZiAoIWVudHJ5UG9pbnRJdGVtcykgewotICAgICAgICAgICAg
c2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHNldEVycm9yKGVudHJ5UG9pbnRJdGVtcy5lcnJvcigp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAoIWNoZWNrU2Vt
YW50aWNzKGVudHJ5UG9pbnRJdGVtcy0+aW5wdXRzLCBlbnRyeVBvaW50SXRlbXMtPm91dHB1dHMs
IGZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpLCBtX2ludHJpbnNpY3MpKSB7Ci0g
ICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkJhZCBz
ZW1hbnRpY3MgZm9yIGVudHJ5cG9pbnQuIiwgZnVuY3Rpb25EZWZpbml0aW9uLmNvZGVMb2NhdGlv
bigpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCFj
aGVja09wZXJhdG9yT3ZlcmxvYWQoZnVuY3Rpb25EZWZpbml0aW9uLCBtX2ludHJpbnNpY3MsIG1f
cHJvZ3JhbS5uYW1lQ29udGV4dCgpKSkgewotICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBz
ZXRFcnJvcihFcnJvcigiRW50cnlwb2ludCBjYW5ub3QgYmUgYW4gb3BlcmF0b3IuIiwgZnVuY3Rp
b25EZWZpbml0aW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTY1Niw3ICs2NTYsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25E
ZWZpCiAgICAgICAgIHJldHVybiAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOwogICAgIH0pKCk7CiAg
ICAgaWYgKCFiYXNlVHlwZSkgewotICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBzZXRFcnJv
cihFcnJvcigiSW52YWxpZCBiYXNlIHR5cGUgZm9yIGVudW0uIiwgZW51bWVyYXRpb25EZWZpbml0
aW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTY2Niwx
MiArNjY2LDEyIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmkKICAg
ICAgICAgaW50NjRfdCB2YWx1ZSA9IG1lbWJlci5nZXQoKS52YWx1ZSgpOwogICAgICAgICBpZiAo
aXNTaWduZWQpIHsKICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGF0aWNf
Y2FzdDxpbnQzMl90Pih2YWx1ZSkpICE9IHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgc2V0RXJy
b3IoKTsKKyAgICAgICAgICAgICAgICBzZXRFcnJvcihFcnJvcigiSW52YWxpZCBlbnVtZXJhdGlv
biB2YWx1ZS4iLCBtZW1iZXIuZ2V0KCkuY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSkgIT0g
dmFsdWUpIHsKLSAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgIHNl
dEVycm9yKEVycm9yKCJJbnZhbGlkIGVudW1lcmF0aW9uIHZhbHVlLiIsIG1lbWJlci5nZXQoKS5j
b2RlTG9jYXRpb24oKSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtNjgyLDcgKzY4Miw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpF
bnVtZXJhdGlvbkRlZmkKICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgZW51bWVy
YXRpb25NZW1iZXJzLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICBhdXRvIG90aGVyVmFsdWUg
PSBlbnVtZXJhdGlvbk1lbWJlcnNbal0uZ2V0KCkudmFsdWUoKTsKICAgICAgICAgICAgIGlmICh2
YWx1ZSA9PSBvdGhlclZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAg
ICAgICAgICAgICBzZXRFcnJvcihFcnJvcigiQ2Fubm90IGRlY2xhcmUgZHVwbGljYXRlIGVudW1l
cmF0aW9uIHZhbHVlcy4iLCBlbnVtZXJhdGlvbk1lbWJlcnNbal0uZ2V0KCkuY29kZUxvY2F0aW9u
KCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
QEAgLTY5Niw3ICs2OTYsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25E
ZWZpCiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCFmb3VuZFplcm8pIHsKLSAgICAgICAgc2V0
RXJyb3IoKTsKKyAgICAgICAgc2V0RXJyb3IoRXJyb3IoImVudW0gZGVmaW5pdGlvbiBtdXN0IGNv
bnRhaW4gYSB6ZXJvIHZhbHVlLiIsIGVudW1lcmF0aW9uRGVmaW5pdGlvbi5jb2RlTG9jYXRpb24o
KSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogfQpAQCAtNzEyLDcgKzcxMiw3IEBAIHZvaWQg
Q2hlY2tlcjo6dmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiAKIGF1dG8gQ2hlY2tlcjo6cmVjdXJz
ZUFuZEdldEluZm8oQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBib29sIHJlcXVpcmVzTGVm
dFZhbHVlKSAtPiBPcHRpb25hbDxSZWN1cnNlSW5mbz4KIHsKICAgICBWaXNpdG9yOjp2aXNpdChl
eHByZXNzaW9uKTsKLSAgICBpZiAoZXJyb3IoKSkKKyAgICBpZiAoaGFzRXJyb3IoKSkKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICByZXR1cm4gZ2V0SW5mbyhleHByZXNzaW9uLCBy
ZXF1aXJlc0xlZnRWYWx1ZSk7CiB9CkBAIC03MjQsNyArNzI0LDcgQEAgYXV0byBDaGVja2VyOjpn
ZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYgZQogCiAgICAgY29uc3QgYXV0byYgdHlwZUFubm90YXRp
b24gPSBleHByZXNzaW9uLnR5cGVBbm5vdGF0aW9uKCk7CiAgICAgaWYgKHJlcXVpcmVzTGVmdFZh
bHVlICYmIHR5cGVBbm5vdGF0aW9uLmlzUmlnaHRWYWx1ZSgpKSB7Ci0gICAgICAgIHNldEVycm9y
KCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJVbmV4cGVjdGVkIHJ2YWx1ZS4iLCBleHByZXNz
aW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
fQogICAgIHJldHVybiB7eyAqdHlwZUl0ZXJhdG9yLT52YWx1ZSwgdHlwZUFubm90YXRpb24gfX07
CkBAIC03NDEsNyArNzQxLDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVj
bGFyYQogICAgICAgICBpZiAoIWluaXRpYWxpemVySW5mbykKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgaWYgKCFtYXRjaEFuZENvbW1pdChpbml0aWFsaXplckluZm8tPnJlc29sdmluZ1R5
cGUsIGxoc1R5cGUpKSB7Ci0gICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgc2V0
RXJyb3IoRXJyb3IoIkRlY2xhcmVkIHZhcmlhYmxlIHR5cGUgZG9lcyBub3QgbWF0Y2ggaXRzIGlu
aXRpYWxpemVyJ3MgdHlwZS4iLCB2YXJpYWJsZURlY2xhcmF0aW9uLmNvZGVMb2NhdGlvbigpKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC03ODUsNyArNzg1LDcg
QEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZQogCiAgICAgYXV0byBy
ZXN1bHRUeXBlID0gbWF0Y2hBbmRDb21taXQobGVmdEluZm8tPnJlc29sdmluZ1R5cGUsIHJpZ2h0
SW5mby0+cmVzb2x2aW5nVHlwZSk7CiAgICAgaWYgKCFyZXN1bHRUeXBlKSB7Ci0gICAgICAgIHNl
dEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJMZWZ0IGhhbmQgc2lkZSBvZiBhc3Np
Z25tZW50IGRvZXMgbm90IG1hdGNoIHRoZSB0eXBlIG9mIHRoZSByaWdodCBoYW5kIHNpZGUuIiwg
YXNzaWdubWVudEV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtODA3LDcgKzgwNyw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpSZWFk
TW9kaWZ5V3JpdGUKICAgICBpZiAoT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+
PiBtYXRjaGVkVHlwZSA9IG1hdGNoQW5kQ29tbWl0KGxlZnRWYWx1ZUluZm8tPnJlc29sdmluZ1R5
cGUsIG5ld1ZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSkpCiAgICAgICAgIHJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24ubmV3VmFsdWUoKS5zZXRUeXBlKFdURk1vdmUobWF0Y2hlZFR5cGUudmFsdWUo
KSkpOwogICAgIGVsc2UgewotICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBzZXRFcnJvcihF
cnJvcigiTGVmdCBoYW5kIHNpZGUgb2YgYXNzaWdubWVudCBkb2VzIG5vdCBtYXRjaCB0aGUgdHlw
ZSBvZiB0aGUgcmlnaHQgaGFuZCBzaWRlLiIsIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uY29k
ZUxvY2F0aW9uKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODQ4LDcgKzg0OCw3
IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHIKICAgICAgICAgcmV0
dXJuICZkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVW5pZnlUeXBlKTsKICAgICB9
KSh1bm5hbWVkVHlwZSk7CiAgICAgaWYgKCFwb2ludGVyVHlwZSkgewotICAgICAgICBzZXRFcnJv
cigpOworICAgICAgICBzZXRFcnJvcihFcnJvcigiQ2Fubm90IGRlcmVmZXJlbmNlIGEgbm9uLXBv
aW50ZXIgdHlwZS4iLCBkZXJlZmVyZW5jZUV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCkpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODYzLDEzICs4NjMsMTMgQEAgdm9pZCBDaGVja2Vy
Ojp2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcgogCiAgICAgYXV0byBsZWZ0QWRkcmVzc1NwYWNl
ID0gbGVmdFZhbHVlSW5mby0+dHlwZUFubm90YXRpb24ubGVmdEFkZHJlc3NTcGFjZSgpOwogICAg
IGlmICghbGVmdEFkZHJlc3NTcGFjZSkgewotICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBz
ZXRFcnJvcihFcnJvcigiQ2Fubm90IHRha2UgdGhlIGFkZHJlc3Mgb2YgYSBub24gbHZhbHVlLiIs
IG1ha2VQb2ludGVyRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgYXV0byogbGVmdFZhbHVlVHlwZSA9IGdldFVubmFtZWRUeXBlKGxlZnRW
YWx1ZUluZm8tPnJlc29sdmluZ1R5cGUpOwogICAgIGlmICghbGVmdFZhbHVlVHlwZSkgewotICAg
ICAgICBzZXRFcnJvcigpOworICAgICAgICBzZXRFcnJvcihFcnJvcigiQ2Fubm90IHRha2UgdGhl
IGFkZHJlc3Mgb2YgYSB2YWx1ZSB3aXRob3V0IGEgdHlwZS4iLCBtYWtlUG9pbnRlckV4cHJlc3Np
b24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODg0LDcg
Kzg4NCw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmUKIAogICAg
IGF1dG8qIGxlZnRWYWx1ZVR5cGUgPSBnZXRVbm5hbWVkVHlwZShsZWZ0VmFsdWVJbmZvLT5yZXNv
bHZpbmdUeXBlKTsKICAgICBpZiAoIWxlZnRWYWx1ZVR5cGUpIHsKLSAgICAgICAgc2V0RXJyb3Io
KTsKKyAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5vdCB0YWtlIHRoZSBhZGRyZXNzIG9mIGEg
dmFsdWUgd2l0aG91dCBhIHR5cGUuIiwgbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5jb2Rl
TG9jYXRpb24oKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC05MDAsNyArOTAwLDcg
QEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZQogCiAgICAgICAgIGF1
dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGxlZnRWYWx1ZUluZm8tPnR5cGVBbm5vdGF0aW9uLmxlZnRB
ZGRyZXNzU3BhY2UoKTsKICAgICAgICAgaWYgKCFsZWZ0QWRkcmVzc1NwYWNlKSB7Ci0gICAgICAg
ICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5vdCB0YWtl
IHRoZSBhZGRyZXNzIG9mIGEgbm9uIGx2YWx1ZS4iLCBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNz
aW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApA
QCAtOTE0LDcgKzkxNCw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZl
cmUKIAogICAgIGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGxlZnRWYWx1ZUluZm8tPnR5cGVBbm5v
dGF0aW9uLmxlZnRBZGRyZXNzU3BhY2UoKTsKICAgICBpZiAoIWxlZnRBZGRyZXNzU3BhY2UpIHsK
LSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5vdCB0YWtl
IHRoZSBhZGRyZXNzIG9mIGEgbm9uIGx2YWx1ZS4iLCBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNz
aW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTk1MCw3
ICs5NTAsNyBAQCB2b2lkIENoZWNrZXI6OmZpbmlzaFZpc2l0aW5nKEFTVDo6UHJvcGVyCiAgICAg
ICAgIHJldHVybjsKICAgICBhdXRvIGJhc2VVbm5hbWVkVHlwZSA9IGNvbW1pdChiYXNlSW5mby0+
cmVzb2x2aW5nVHlwZSk7CiAgICAgaWYgKCFiYXNlVW5uYW1lZFR5cGUpIHsKLSAgICAgICAgc2V0
RXJyb3IoKTsKKyAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5vdCByZXNvbHZlIHRoZSB0eXBl
IG9mIHRoZSBiYXNlIG9mIGEgcHJvcGVydHkgYWNjZXNzIGV4cHJlc3Npb24uIiwgcHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTk5OSwzMiArOTk5LDMyIEBAIHZvaWQgQ2hlY2tlcjo6ZmluaXNoVmlzaXRpbmcoQVNU
OjpQcm9wZXIKICAgICB9CiAKICAgICBpZiAobGVmdEFkZHJlc3NTcGFjZSAmJiAhYW5kZXJGdW5j
dGlvbiAmJiAhZ2V0dGVyRnVuY3Rpb24pIHsKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAg
c2V0RXJyb3IoRXJyb3IoIlByb3BlcnR5IGFjY2VzcyBpbnN0cnVjdGlvbiBtdXN0IGVpdGhlciBo
YXZlIGFuIGFuZGVyIG9yIGEgZ2V0dGVyLiIsIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5jb2Rl
TG9jYXRpb24oKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCFsZWZ0QWRk
cmVzc1NwYWNlICYmICF0aHJlYWRBbmRlckZ1bmN0aW9uICYmICFnZXR0ZXJGdW5jdGlvbikgewot
ICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBzZXRFcnJvcihFcnJvcigiUHJvcGVydHkgYWNj
ZXNzIGluc3RydWN0aW9uIG11c3QgZWl0aGVyIGhhdmUgYSB0aHJlYWQgYW5kZXIgb3IgYSBnZXR0
ZXIuIiwgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBpZiAodGhyZWFkQW5kZXJGdW5jdGlvbiAmJiBnZXR0ZXJG
dW5jdGlvbikgewotICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBzZXRFcnJvcihFcnJvcigi
Q2Fubm90IGhhdmUgYm90aCBhIHRocmVhZCBhbmRlciBhbmQgYSBnZXR0ZXIuIiwgcHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoYW5kZXJGdW5jdGlvbiAmJiB0aHJlYWRBbmRlckZ1bmN0aW9uICYmICFtYXRj
aGVzKCphbmRlclJldHVyblR5cGUsICp0aHJlYWRBbmRlclJldHVyblR5cGUpKSB7Ci0gICAgICAg
IHNldEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJSZXR1cm4gdHlwZSBvZiBhbmRl
ciBtdXN0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgdGhyZWFkIGFuZGVyLiIsIHByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWYgKGdldHRlckZ1bmN0aW9uICYmIGFuZGVyRnVuY3Rpb24gJiYgIW1hdGNo
ZXMoKmdldHRlclJldHVyblR5cGUsICphbmRlclJldHVyblR5cGUpKSB7Ci0gICAgICAgIHNldEVy
cm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJSZXR1cm4gdHlwZSBvZiBhbmRlciBtdXN0
IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZ2V0dGVyLiIsIHByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAg
aWYgKGdldHRlckZ1bmN0aW9uICYmIHRocmVhZEFuZGVyRnVuY3Rpb24gJiYgIW1hdGNoZXMoKmdl
dHRlclJldHVyblR5cGUsICp0aHJlYWRBbmRlclJldHVyblR5cGUpKSB7Ci0gICAgICAgIHNldEVy
cm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJSZXR1cm4gdHlwZSBvZiB0aGUgdGhyZWFk
IGFuZGVyIG11c3QgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIHRoZSBnZXR0ZXIuIiwgcHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTEwNDYsNyArMTA0Niw3IEBAIHZvaWQgQ2hlY2tlcjo6ZmluaXNoVmlzaXRpbmco
QVNUOjpQcm9wZXIKICAgICB9CiAKICAgICBpZiAoc2V0dGVyRnVuY3Rpb24gJiYgIWdldHRlckZ1
bmN0aW9uKSB7Ci0gICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJD
YW5ub3QgZGVmaW5lIGEgc2V0dGVyIGZ1bmN0aW9uIHdpdGhvdXQgYSBjb3JyZXNwb25kaW5nIGdl
dHRlci4iLCBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTA5NCwxMiArMTA5NCwxMiBAQCB2b2lkIENoZWNrZXI6
OnZpc2l0KEFTVDo6UmV0dXJuJiByZXR1cm5TCiAgICAgICAgIGlmICghdmFsdWVJbmZvKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoIW1hdGNoQW5kQ29tbWl0KHZhbHVlSW5mby0+
cmVzb2x2aW5nVHlwZSwgbV9jdXJyZW50RnVuY3Rpb24tPnR5cGUoKSkpCi0gICAgICAgICAgICBz
ZXRFcnJvcigpOworICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIlR5cGUgb2YgdGhlIHJldHVy
biB2YWx1ZSBtdXN0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24uIiwgcmV0
dXJuU3RhdGVtZW50LmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZiAoIW1hdGNoZXMobV9jdXJyZW50RnVuY3Rpb24tPnR5cGUoKSwgbV9pbnRyaW5zaWNz
LnZvaWRUeXBlKCkpKQotICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBzZXRFcnJvcihFcnJv
cigiQ2Fubm90IHJldHVybiBub3RoaW5nIGZyb20gYSBub24tdm9pZCBmdW5jdGlvbi4iLCByZXR1
cm5TdGF0ZW1lbnQuY29kZUxvY2F0aW9uKCkpKTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChB
U1Q6OlBvaW50ZXJUeXBlJikKQEAgLTExNjMsNyArMTE2Myw3IEBAIGJvb2wgQ2hlY2tlcjo6cmVj
dXJzZUFuZFJlcXVpcmVCb29sVHlwZSgKICAgICBpZiAoIWV4cHJlc3Npb25JbmZvKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFpc0Jvb2xUeXBlKGV4cHJlc3Npb25JbmZvLT5yZXNv
bHZpbmdUeXBlKSkgewotICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBzZXRFcnJvcihFcnJv
cigiRXhwZWN0ZWQgYm9vbCB0eXBlIGZyb20gZXhwcmVzc2lvbi4iLCBleHByZXNzaW9uLmNvZGVM
b2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRy
dWU7CkBAIC0xMjE0LDcgKzEyMTQsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6Rm9yTG9v
cCYgZm9yTG9vCiAgICAgfSwgWyZdKFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNz
aW9uKSB7CiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uKTsKICAgICB9KSwg
Zm9yTG9vcC5pbml0aWFsaXphdGlvbigpKTsKLSAgICBpZiAoZXJyb3IoKSkKKyAgICBpZiAoaGFz
RXJyb3IoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChmb3JMb29wLmNvbmRpdGlvbigpKSB7
CiAgICAgICAgIGlmICghcmVjdXJzZUFuZFJlcXVpcmVCb29sVHlwZSgqZm9yTG9vcC5jb25kaXRp
b24oKSkpCkBAIC0xMjQ0LDcgKzEyNDQsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6U3dp
dGNoU3RhdGVtZW50CiAgICAgICAgIHJldHVybiAmdmFsdWVOYW1lZFVuaWZ5Tm9kZTsKICAgICB9
KSgpOwogICAgIGlmICghdmFsdWVUeXBlKSB7Ci0gICAgICAgIHNldEVycm9yKCk7CisgICAgICAg
IHNldEVycm9yKEVycm9yKCJJbnZhbGlkIHR5cGUgZm9yIHRoZSBleHByZXNzaW9uIGNvbmRpdGlv
biBvZiB0aGUgc3dpdGNoIHN0YXRlbWVudC4iLCBzd2l0Y2hTdGF0ZW1lbnQuY29kZUxvY2F0aW9u
KCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTI3MCw3ICsxMjcwLDcgQEAgdm9p
ZCBDaGVja2VyOjp2aXNpdChBU1Q6OlN3aXRjaFN0YXRlbWVudAogICAgICAgICAgICAgcmV0dXJu
IG1hdGNoZXMoKnZhbHVlVHlwZSwgKmVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlv
bkRlZmluaXRpb24oKSk7CiAgICAgICAgIH0pKTsKICAgICAgICAgaWYgKCFzdWNjZXNzKSB7Ci0g
ICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkludmFs
aWQgdHlwZSBmb3Igc3dpdGNoIGNhc2UuIiwgc3dpdGNoQ2FzZS5jb2RlTG9jYXRpb24oKSkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMTI4NCw3ICsxMjg0LDcg
QEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlN3aXRjaFN0YXRlbWVudAogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBpZiAoIXN0YXRpY19jYXN0PGJvb2w+KGZpcnN0
Q2FzZS52YWx1ZSgpKSkgewotICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAg
ICAgICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5vdCBkZWZpbmUgbXVsdGlwbGUgZGVmYXVsdCBjYXNl
cyBpbiBzd2l0Y2ggc3RhdGVtZW50LiIsIHNlY29uZENhc2UuY29kZUxvY2F0aW9uKCkpKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKQEAgLTEzMTYsNyArMTMxNiw3
IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgIGlmICghc3Vj
Y2VzcykgewotICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgc2V0
RXJyb3IoRXJyb3IoIkNhbm5vdCBkZWZpbmUgZHVwbGljYXRlIGNhc2Ugc3RhdGVtZW50cyBpbiBh
IHN3aXRjaC4iLCBzZWNvbmRDYXNlLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMzU2LDcgKzEzNTYsNyBAQCB2
b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3Mp
IHsKLSAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgIHNldEVycm9y
KEVycm9yKCJTd2l0Y2ggY2FzZXMgbXVzdCBiZSBleGhhdXN0aXZlIG9yIHlvdSBtdXN0IGRlZmlu
ZSBhIGRlZmF1bHQgY2FzZS4iLCBzd2l0Y2hTdGF0ZW1lbnQuY29kZUxvY2F0aW9uKCkpKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CkBA
IC0xMzcxLDcgKzEzNzEsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6U3dpdGNoU3RhdGVt
ZW50CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uTWVt
YmVyIDogZG93bmNhc3Q8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KCp2YWx1ZVR5cGUpLmVu
dW1lcmF0aW9uTWVtYmVycygpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZXMuY29udGFp
bnMoJmVudW1lcmF0aW9uTWVtYmVyLmdldCgpKSkgewotICAgICAgICAgICAgICAgICAgICBzZXRF
cnJvcigpOworICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcihFcnJvcigiU3dpdGNoIGNhc2Vz
IG92ZXIgYW4gZW51bSBtdXN0IGJlIGV4aGF1c3RpdmUgb3IgeW91IG11c3QgZGVmaW5lIGEgZGVm
YXVsdCBjYXNlLiIsIHN3aXRjaFN0YXRlbWVudC5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAt
MTM4Myw3ICsxMzgzLDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkNvbW1hRXhwcmVzc2lv
bgogewogICAgIEFTU0VSVChjb21tYUV4cHJlc3Npb24ubGlzdCgpLnNpemUoKSA+IDApOwogICAg
IFZpc2l0b3I6OnZpc2l0KGNvbW1hRXhwcmVzc2lvbik7Ci0gICAgaWYgKGVycm9yKCkpCisgICAg
aWYgKGhhc0Vycm9yKCkpCiAgICAgICAgIHJldHVybjsKICAgICBhdXRvIGxhc3RJbmZvID0gZ2V0
SW5mbyhjb21tYUV4cHJlc3Npb24ubGlzdCgpLmxhc3QoKSk7CiAgICAgZm9yd2FyZFR5cGUoY29t
bWFFeHByZXNzaW9uLCBsYXN0SW5mby0+cmVzb2x2aW5nVHlwZSk7CkBAIC0xNDAwLDcgKzE0MDAs
NyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VGVybmFyeUV4cHJlc3NpCiAgICAgCiAgICAg
YXV0byByZXN1bHRUeXBlID0gbWF0Y2hBbmRDb21taXQoYm9keUluZm8tPnJlc29sdmluZ1R5cGUs
IGVsc2VJbmZvLT5yZXNvbHZpbmdUeXBlKTsKICAgICBpZiAoIXJlc3VsdFR5cGUpIHsKLSAgICAg
ICAgc2V0RXJyb3IoKTsKKyAgICAgICAgc2V0RXJyb3IoRXJyb3IoImxocyBhbmQgcmhzIG9mIGEg
dGVybmFyeSBleHByZXNzaW9uIG11c3QgbWF0Y2guIiwgdGVybmFyeUV4cHJlc3Npb24uY29kZUxv
Y2F0aW9uKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTQzMSwxOSArMTQzMSwx
OSBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mCiAgICAgICAgIH0K
ICAgICB9CiAgICAgaWYgKCFmdW5jdGlvbnMpIHsKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAg
ICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5vdCByZXNvbHZlIGZ1bmN0aW9uIGNhbGwgdG8gYSBjb25j
cmV0ZSBjYWxsZWUuIE1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIGNvbXBhdGlibGUgdHlwZXMuIiwg
Y2FsbEV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGF1dG8qIGZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uKG1fcHJvZ3JhbSwgZnVuY3Rp
b25zLCB0eXBlcywgY2FsbEV4cHJlc3Npb24ubmFtZSgpLCBjYWxsRXhwcmVzc2lvbi5jb2RlTG9j
YXRpb24oKSwgbV9pbnRyaW5zaWNzLCBjYWxsRXhwcmVzc2lvbi5jYXN0UmV0dXJuVHlwZSgpKTsK
ICAgICBpZiAoIWZ1bmN0aW9uKSB7Ci0gICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHNldEVy
cm9yKEVycm9yKCJDYW5ub3QgcmVzb2x2ZSBmdW5jdGlvbiBjYWxsIHRvIGEgY29uY3JldGUgY2Fs
bGVlLiBNYWtlIHN1cmUgeW91IGFyZSB1c2luZyBjb21wYXRpYmxlIHR5cGVzLiIsIGNhbGxFeHBy
ZXNzaW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uLT5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgaWYgKCFtYXRjaEFuZENvbW1pdCh0eXBlc1tpXS5nZXQoKSwgKmZ1bmN0aW9u
LT5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKSkpIHsKLSAgICAgICAgICAgIHNldEVycm9yKCk7Cisg
ICAgICAgICAgICBzZXRFcnJvcihFcnJvcihtYWtlU3RyaW5nKCJJbnZhbGlkIHR5cGUgZm9yIHBh
cmFtZXRlciBudW1iZXIgIiwgaSArIDEsICIgaW4gZnVuY3Rpb24gY2FsbC4iKSwgY2FsbEV4cHJl
c3Npb24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgIH0KQEAgLTE0NTMsMTIgKzE0NTMsMTIgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkNh
bGxFeHByZXNzaW9uJgogICAgIGFzc2lnblR5cGUoY2FsbEV4cHJlc3Npb24sIGZ1bmN0aW9uLT50
eXBlKCkuY2xvbmUoKSk7CiB9CiAKLWJvb2wgY2hlY2soUHJvZ3JhbSYgcHJvZ3JhbSkKK0V4cGVj
dGVkPHZvaWQsIEVycm9yPiBjaGVjayhQcm9ncmFtJiBwcm9ncmFtKQogewogICAgIENoZWNrZXIg
Y2hlY2tlcihwcm9ncmFtLmludHJpbnNpY3MoKSwgcHJvZ3JhbSk7CiAgICAgY2hlY2tlci5jaGVj
a0Vycm9yQW5kVmlzaXQocHJvZ3JhbSk7Ci0gICAgaWYgKGNoZWNrZXIuZXJyb3IoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChjaGVja2VyLmhhc0Vycm9yKCkpCisgICAgICAgIHJl
dHVybiBjaGVja2VyLmdldEVycm9yKCk7CiAgICAgcmV0dXJuIGNoZWNrZXIuYXNzaWduVHlwZXMo
KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xD
aGVja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xDaGVja2VyLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywx
MyArMjcsMTYgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTEVycm9y
LmgiCisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
bmFtZXNwYWNlIFdITFNMIHsKIAogY2xhc3MgUHJvZ3JhbTsKIAotYm9vbCBjaGVjayhQcm9ncmFt
Jik7CitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gY2hlY2soUHJvZ3JhbSYpOwogCiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ29kZUxvY2F0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xD
b2RlTG9jYXRpb24uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTENvZGVMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworc3RydWN0IFRva2Vu
OworCitjbGFzcyBDb2RlTG9jYXRpb24geworcHVibGljOgorICAgIENvZGVMb2NhdGlvbigpID0g
ZGVmYXVsdDsKKyAgICBDb2RlTG9jYXRpb24odW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVk
IGVuZE9mZnNldCkKKyAgICAgICAgOiBtX3N0YXJ0T2Zmc2V0KHN0YXJ0T2Zmc2V0KQorICAgICAg
ICAsIG1fZW5kT2Zmc2V0KGVuZE9mZnNldCkKKyAgICB7IH0KKyAgICBDb2RlTG9jYXRpb24oY29u
c3QgVG9rZW4mKTsKKyAgICBDb2RlTG9jYXRpb24oY29uc3QgQ29kZUxvY2F0aW9uJiBsb2NhdGlv
bjEsIGNvbnN0IENvZGVMb2NhdGlvbiYgbG9jYXRpb24yKQorICAgICAgICA6IG1fc3RhcnRPZmZz
ZXQobG9jYXRpb24xLnN0YXJ0T2Zmc2V0KCkpCisgICAgICAgICwgbV9lbmRPZmZzZXQobG9jYXRp
b24yLmVuZE9mZnNldCgpKQorICAgIHsgfQorCisgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQoKSBj
b25zdCB7IHJldHVybiBtX3N0YXJ0T2Zmc2V0OyB9CisgICAgdW5zaWduZWQgZW5kT2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9lbmRPZmZzZXQ7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBDb2RlTG9jYXRpb24mIG90aGVyKSBjb25zdCAKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N0
YXJ0T2Zmc2V0ID09IG90aGVyLm1fc3RhcnRPZmZzZXQKKyAgICAgICAgICAgICYmIG1fZW5kT2Zm
c2V0ID09IG90aGVyLm1fZW5kT2Zmc2V0OworICAgIH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgQ29kZUxvY2F0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7
IH0KKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gKnRoaXMgIT0g
Q29kZUxvY2F0aW9uKCk7IH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3N0YXJ0T2Zmc2V0
IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisgICAgdW5zaWduZWQg
bV9lbmRPZmZzZXQgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdITFNMCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHUFUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTENvbXB1dGVEaW1lbnNpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENvbXB1dGVEaW1lbnNpb25zLmNwcAko
cmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xDb21wdXRlRGltZW5zaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0p
LCBmdW5jdGlvbkF0dHJpYnV0ZSk7CiAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAg
ICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJD
YW5ub3QgZGVjbGFyZSBtdWx0aXBsZSBudW10aHJlYWQgYXR0cmlidXRlcy4iLCBmdW5jdGlvbkRl
Y2xhcmF0aW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CkBAIC03OSw3ICs3OSw3IEBAIE9wdGlvbmFsPENvbXB1dGVE
aW1lbnNpb25zPiBjb21wdXRlRGltZW4KIHsKICAgICBDb21wdXRlRGltZW5zaW9uc1Zpc2l0b3Ig
Y29tcHV0ZURpbWVuc2lvbnMoZW50cnlQb2ludCk7CiAgICAgY29tcHV0ZURpbWVuc2lvbnMuVmlz
aXRvcjo6dmlzaXQocHJvZ3JhbSk7Ci0gICAgaWYgKGNvbXB1dGVEaW1lbnNpb25zLmVycm9yKCkp
CisgICAgaWYgKGNvbXB1dGVEaW1lbnNpb25zLmhhc0Vycm9yKCkpCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgcmV0dXJuIGNvbXB1dGVEaW1lbnNpb25zLmNvbXB1dGVEaW1lbnNp
b25zKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TEVycm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xFcnJvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMRXJyb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5j
bHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25j
YXRlbmF0ZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIEVycm9yIHsKK3B1YmxpYzoKKyAgICBFcnJv
cihTdHJpbmcmJiBtZXNzYWdlLCBDb2RlTG9jYXRpb24gY29kZUxvY2F0aW9uKQorICAgICAgICA6
IG1fbWVzc2FnZShXVEZNb3ZlKG1lc3NhZ2UpKQorICAgICAgICAsIG1fbG9jYXRpb24oY29kZUxv
Y2F0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICBFcnJvcihTdHJpbmcmJiBtZXNzYWdlKQorICAg
ICAgICA6IG1fbWVzc2FnZShXVEZNb3ZlKG1lc3NhZ2UpKQorICAgIHsKKyAgICB9CisKKyAgICBD
b2RlTG9jYXRpb24gY29kZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQor
ICAgIFN0cmluZyBtZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9tZXNzYWdlOyB9CisKK3ByaXZh
dGU6CisgICAgU3RyaW5nIG1fbWVzc2FnZTsKKyAgICBDb2RlTG9jYXRpb24gbV9sb2NhdGlvbjsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdITFNMCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEZ1bmN0aW9uU3RhZ2VDaGVj
a2VyLmNwcAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xGdW5jdGlvblN0YWdlQ2hlY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDEyICs1MCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCB2aXNpdChBU1Q6OkNhbGxFeHByZXNz
aW9uJiBjYWxsRXhwcmVzc2lvbikgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmICgoJmNhbGxF
eHByZXNzaW9uLmZ1bmN0aW9uKCkgPT0gbV9pbnRyaW5zaWNzLmRkeCgpIHx8ICZjYWxsRXhwcmVz
c2lvbi5mdW5jdGlvbigpID09IG1faW50cmluc2ljcy5kZHkoKSkgJiYgbV9lbnRyeVBvaW50VHlw
ZSAhPSBBU1Q6OkVudHJ5UG9pbnRUeXBlOjpGcmFnbWVudCkgewotICAgICAgICAgICAgc2V0RXJy
b3IoKTsKKyAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3QgdXNlIGRkeCBvciBkZHkg
aW4gYSBub24tZnJhZ21lbnQgc2hhZGVyLiIsIGNhbGxFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigp
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKCgmY2FsbEV4
cHJlc3Npb24uZnVuY3Rpb24oKSA9PSBtX2ludHJpbnNpY3MuYWxsTWVtb3J5QmFycmllcigpIHx8
ICZjYWxsRXhwcmVzc2lvbi5mdW5jdGlvbigpID09IG1faW50cmluc2ljcy5kZXZpY2VNZW1vcnlC
YXJyaWVyKCkgfHwgJmNhbGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkgPT0gbV9pbnRyaW5zaWNzLmdy
b3VwTWVtb3J5QmFycmllcigpKQogICAgICAgICAgICAgJiYgbV9lbnRyeVBvaW50VHlwZSAhPSBB
U1Q6OkVudHJ5UG9pbnRUeXBlOjpDb21wdXRlKSB7Ci0gICAgICAgICAgICBzZXRFcnJvcigpOwor
ICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5vdCB1c2UgbWVtb3J5IGJhcnJpZXIgaW4g
YSBub24tY29tcHV0ZSBzaGFkZXIuIiwgY2FsbEV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCkpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBWaXNpdG9yOjp2aXNpdChj
YWxsRXhwcmVzc2lvbi5mdW5jdGlvbigpKTsKQEAgLTY1LDE3ICs2NSwxNyBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgSW50cmluc2ljcyYgbV9pbnRyaW5zaWNzOwogfTsKIAotYm9vbCBjaGVja0Z1bmN0
aW9uU3RhZ2VzKFByb2dyYW0mIHByb2dyYW0pCitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gY2hlY2tG
dW5jdGlvblN0YWdlcyhQcm9ncmFtJiBwcm9ncmFtKQogewogICAgIGZvciAoYXV0byYgZnVuY3Rp
b25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpIHsKICAgICAgICAg
aWYgKCFmdW5jdGlvbkRlZmluaXRpb24tPmVudHJ5UG9pbnRUeXBlKCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgRnVuY3Rpb25TdGFnZUNoZWNrZXIgZnVuY3Rpb25TdGFnZUNoZWNr
ZXIoKmZ1bmN0aW9uRGVmaW5pdGlvbi0+ZW50cnlQb2ludFR5cGUoKSwgcHJvZ3JhbS5pbnRyaW5z
aWNzKCkpOwogICAgICAgICBmdW5jdGlvblN0YWdlQ2hlY2tlci5WaXNpdG9yOjp2aXNpdChmdW5j
dGlvbkRlZmluaXRpb24pOwotICAgICAgICBpZiAoZnVuY3Rpb25TdGFnZUNoZWNrZXIuZXJyb3Io
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGZ1bmN0aW9uU3RhZ2VD
aGVja2VyLmhhc0Vycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZnVu
Y3Rpb25TdGFnZUNoZWNrZXIuZ2V0RXJyb3IoKS5lcnJvcigpKTsKICAgICB9Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xGdW5jdGlvblN0YWdlQ2hlY2tlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMRnVuY3Rpb25TdGFn
ZUNoZWNrZXIuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xGdW5jdGlvblN0YWdlQ2hlY2tlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNywxMyArMjcsMTYgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExT
TEVycm9yLmgiCisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAogY2xhc3MgUHJvZ3JhbTsKIAotYm9vbCBjaGVja0Z1
bmN0aW9uU3RhZ2VzKFByb2dyYW0mKTsKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBjaGVja0Z1bmN0
aW9uU3RhZ2VzKFByb2dyYW0mKTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBv
aW50SXRlbXMuY3BwCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDYgKzU4LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXQoKQogICAgIHsKICAg
ICAgICAgbV9jdXJyZW50U2VtYW50aWMgPSBudWxscHRyOworICAgICAgICBtX2N1cnJlbnRWYXJp
YWJsZUxvY2F0aW9uID0geyB9OwogICAgIH0KIAogICAgIFZlY3RvcjxFbnRyeVBvaW50SXRlbT4g
dGFrZUVudHJ5UG9pbnRJdGVtcygpCkBAIC02OCw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJikKICAgICB7CiAgICAgICAgIGlmICgh
bV9jdXJyZW50U2VtYW50aWMpIHsKLSAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAg
ICBzZXRFcnJvcihFcnJvcigiRXhwZWN0ZWQgc2VtYW50aWMgZm9yIGVudHJ5cG9pbnQgYXJndW1l
bnQuIiwgbV9jdXJyZW50VmFyaWFibGVMb2NhdGlvbikpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRl
bShtX3R5cGVSZWZlcmVuY2VzLmxhc3QoKS5nZXQoKSwgKm1fY3VycmVudFNlbWFudGljLCBtX3Bh
dGgpKTsKQEAgLTc3LDExICs3OCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCB2aXNpdChBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQogICAgIHsKICAgICAg
ICAgaWYgKCFtX2N1cnJlbnRTZW1hbnRpYykgewotICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAg
ICAgICAgICAgIHNldEVycm9yKEVycm9yKCJFeHBlY3RlZCBzZW1hbnRpYyBmb3IgZW50cnlwb2lu
dCBhcmd1bWVudC4iLCBtX2N1cnJlbnRWYXJpYWJsZUxvY2F0aW9uKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1hdGNoZXMobmF0aXZlVHlwZURlY2xhcmF0
aW9uLCBtX2ludHJpbnNpY3Mudm9pZFR5cGUoKSkpIHsKLSAgICAgICAgICAgIHNldEVycm9yKCk7
CisgICAgICAgICAgICBzZXRFcnJvcihFcnJvcigiVW5leHBlY3RlZCB2b2lkIHR5cGUgZm9yIGVu
dHJ5cG9pbnQgYXJndW1lbnQuIiwgbV9jdXJyZW50VmFyaWFibGVMb2NhdGlvbikpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTkxLDcgKzkyLDcgQEAgcHVibGljOgogICAg
IHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9u
KQogICAgIHsKICAgICAgICAgaWYgKG1fY3VycmVudFNlbWFudGljKSB7Ci0gICAgICAgICAgICBz
ZXRFcnJvcigpOworICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIlVuZXhwZWN0ZWQgc2VtYW50
aWMgZm9yIHN0cnVjdCBlbnRyeXBvaW50IGFyZ3VtZW50LiIsIG1fY3VycmVudFZhcmlhYmxlTG9j
YXRpb24pKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0xMjEsNyArMTIy
LDcgQEAgcHVibGljOgogICAgIHZvaWQgdmlzaXQoQVNUOjpQb2ludGVyVHlwZSYgcG9pbnRlclR5
cGUpCiAgICAgewogICAgICAgICBpZiAoIW1fY3VycmVudFNlbWFudGljKSB7Ci0gICAgICAgICAg
ICBzZXRFcnJvcigpOworICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkV4cGVjdGVkIHNlbWFu
dGljIGZvciBlbnRyeXBvaW50IGFyZ3VtZW50LiIsIG1fY3VycmVudFZhcmlhYmxlTG9jYXRpb24p
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBtX2VudHJ5UG9pbnRJ
dGVtcy5hcHBlbmQoRW50cnlQb2ludEl0ZW0ocG9pbnRlclR5cGUsICptX2N1cnJlbnRTZW1hbnRp
YywgbV9wYXRoKSk7CkBAIC0xMzAsNyArMTMxLDcgQEAgcHVibGljOgogICAgIHZvaWQgdmlzaXQo
QVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGFycmF5UmVmZXJlbmNlVHlwZSkKICAgICB7CiAgICAg
ICAgIGlmICghbV9jdXJyZW50U2VtYW50aWMpIHsKLSAgICAgICAgICAgIHNldEVycm9yKCk7Cisg
ICAgICAgICAgICBzZXRFcnJvcihFcnJvcigiRXhwZWN0ZWQgc2VtYW50aWMgZm9yIGVudHJ5cG9p
bnQgYXJndW1lbnQuIiwgbV9jdXJyZW50VmFyaWFibGVMb2NhdGlvbikpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRy
eVBvaW50SXRlbShhcnJheVJlZmVyZW5jZVR5cGUsICptX2N1cnJlbnRTZW1hbnRpYywgbV9wYXRo
KSk7CkBAIC0xMzksNyArMTQwLDcgQEAgcHVibGljOgogICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJh
eVR5cGUmIGFycmF5VHlwZSkKICAgICB7CiAgICAgICAgIGlmICghbV9jdXJyZW50U2VtYW50aWMp
IHsKLSAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICBzZXRFcnJvcihFcnJvcigi
RXhwZWN0ZWQgc2VtYW50aWMgZm9yIGVudHJ5cG9pbnQgYXJndW1lbnQuIiwgbV9jdXJyZW50VmFy
aWFibGVMb2NhdGlvbikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
IG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShhcnJheVR5cGUsICptX2N1
cnJlbnRTZW1hbnRpYywgbV9wYXRoKSk7CkBAIC0xNDgsNiArMTQ5LDcgQEAgcHVibGljOgogICAg
IHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9u
KQogICAgIHsKICAgICAgICAgQVNTRVJUKCFtX2N1cnJlbnRTZW1hbnRpYyk7CisgICAgICAgIG1f
Y3VycmVudFZhcmlhYmxlTG9jYXRpb24gPSB2YXJpYWJsZURlY2xhcmF0aW9uLmNvZGVMb2NhdGlv
bigpOwogICAgICAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5zZW1hbnRpYygpKQogICAgICAg
ICAgICAgbV9jdXJyZW50U2VtYW50aWMgPSB2YXJpYWJsZURlY2xhcmF0aW9uLnNlbWFudGljKCk7
CiAgICAgICAgIEFTU0VSVCh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7CkBAIC0xNjAsMjUg
KzE2MiwyNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxTdHJpbmc+IG1fcGF0aDsKICAgICBjb25z
dCBJbnRyaW5zaWNzJiBtX2ludHJpbnNpY3M7CiAgICAgQVNUOjpTZW1hbnRpYyogbV9jdXJyZW50
U2VtYW50aWMgeyBudWxscHRyIH07CisgICAgQ29kZUxvY2F0aW9uIG1fY3VycmVudFZhcmlhYmxl
TG9jYXRpb247CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpUeXBlUmVm
ZXJlbmNlPj4gbV90eXBlUmVmZXJlbmNlczsKICAgICBWZWN0b3I8RW50cnlQb2ludEl0ZW0+IG1f
ZW50cnlQb2ludEl0ZW1zOwogfTsKIAotT3B0aW9uYWw8RW50cnlQb2ludEl0ZW1zPiBnYXRoZXJF
bnRyeVBvaW50SXRlbXMoY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcywgQVNUOjpGdW5jdGlv
bkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKK0V4cGVjdGVkPEVudHJ5UG9pbnRJdGVt
cywgRXJyb3I+IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5z
aWNzLCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQogewogICAg
IEFTU0VSVChmdW5jdGlvbkRlZmluaXRpb24uZW50cnlQb2ludFR5cGUoKSk7CiAgICAgR2F0aGVy
ZXIgaW5wdXRHYXRoZXJlcihpbnRyaW5zaWNzKTsKICAgICBmb3IgKGF1dG8mIHBhcmFtZXRlciA6
IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkpIHsKICAgICAgICAgaW5wdXRHYXRoZXJl
ci5yZXNldCgpOwogICAgICAgICBpbnB1dEdhdGhlcmVyLmNoZWNrRXJyb3JBbmRWaXNpdChwYXJh
bWV0ZXIpOwotICAgICAgICBpZiAoaW5wdXRHYXRoZXJlci5lcnJvcigpKQotICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgaWYgKGlucHV0R2F0aGVyZXIuaGFzRXJyb3Io
KSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChpbnB1dEdhdGhlcmVyLmdldEVy
cm9yKCkuZXJyb3IoKSk7CiAgICAgfQogICAgIEdhdGhlcmVyIG91dHB1dEdhdGhlcmVyKGludHJp
bnNpY3MsIGZ1bmN0aW9uRGVmaW5pdGlvbi5zZW1hbnRpYygpKTsKICAgICBpZiAoKmZ1bmN0aW9u
RGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpICE9IEFTVDo6RW50cnlQb2ludFR5cGU6OkNvbXB1
dGUpCiAgICAgICAgIG91dHB1dEdhdGhlcmVyLmNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRl
ZmluaXRpb24udHlwZSgpKTsKLSAgICBpZiAob3V0cHV0R2F0aGVyZXIuZXJyb3IoKSkKLSAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpZiAob3V0cHV0R2F0aGVyZXIuaGFzRXJyb3Io
KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKG91dHB1dEdhdGhlcmVyLmdldEVycm9y
KCkuZXJyb3IoKSk7CiAKICAgICByZXR1cm4ge3sgaW5wdXRHYXRoZXJlci50YWtlRW50cnlQb2lu
dEl0ZW1zKCksIG91dHB1dEdhdGhlcmVyLnRha2VFbnRyeVBvaW50SXRlbXMoKSB9fTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQ
b2ludEl0ZW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaAkocmV2aXNpb24gMjQ3NzAwKQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50
SXRlbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdF
QkdQVSkKIAorI2luY2x1ZGUgIldITFNMRXJyb3IuaCIKICNpbmNsdWRlICJXSExTTFNlbWFudGlj
LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgpAQCAtNjIsNyArNjMsNyBAQCBzdHJ1Y3QgRW50cnlQb2ludEl0ZW1zIHsKICAgICBWZWN0
b3I8RW50cnlQb2ludEl0ZW0+IG91dHB1dHM7CiB9OwogCi1PcHRpb25hbDxFbnRyeVBvaW50SXRl
bXM+IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhjb25zdCBJbnRyaW5zaWNzJiwgQVNUOjpGdW5jdGlv
bkRlZmluaXRpb24mKTsKK0V4cGVjdGVkPEVudHJ5UG9pbnRJdGVtcywgRXJyb3I+IGdhdGhlckVu
dHJ5UG9pbnRJdGVtcyhjb25zdCBJbnRyaW5zaWNzJiwgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24m
KTsKIAogfSAvLyBuYW1lc3BhY2UgV0hMU0wKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5jcHAJKHJldmlzaW9uIDI0NzcwMCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OTgsMTYgKzQ5OCw2IEBAIGF1dG8gTGV4ZXI6OmNvbnN1bWVUb2tl
bkZyb21TdHJlYW0oKSAtPiAKICAgICByZXR1cm4gcHJlcGFyZShtX29mZnNldCwgVG9rZW46OlR5
cGU6OkludmFsaWQpOwogfQogCi11bnNpZ25lZCBMZXhlcjo6bGluZU51bWJlckZyb21PZmZzZXQo
dW5zaWduZWQgdGFyZ2V0T2Zmc2V0KQotewotICAgIC8vIENvdW50aW5nIGZyb20gMSB0byBtYXRj
aCBtb3N0IHRleHQgZWRpdG9ycy4KLSAgICB1bnNpZ25lZCBsaW5lTnVtYmVyID0gMTsKLSAgICBm
b3IgKHVuc2lnbmVkIG9mZnNldCA9IDA7IG9mZnNldCA8IHRhcmdldE9mZnNldDsgKytvZmZzZXQp
IHsKLSAgICAgICAgaWYgKG1fc3RyaW5nVmlld1tvZmZzZXRdID09ICdcbicpCi0gICAgICAgICAg
ICArK2xpbmVOdW1iZXI7Ci0gICAgfQotICAgIHJldHVybiBsaW5lTnVtYmVyOwotfQogCiAvLyBX
ZSBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgdHdvIHByb3BlcnRpZXMgb2YgVW5pY29kZToKIC8vIDEu
IFRoZSBjb25zaXR1dGVudCBVVEYtMTYgY29kZSB1bml0cyBmb3IgYWxsIG5vbi1CTVAgY29kZSBw
b2ludHMgYXJlIHN1cnJvZ2F0ZXMsCkBAIC01MzksNiArNTI5LDMxIEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBpc05ld2xpbmUoVUNoYXIgY29kZVUKICAgICB9CiB9CiAKKworYXV0byBMZXhlcjo6bGlu
ZUFuZENvbHVtbk51bWJlckZyb21PZmZzZXQoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldywg
dW5zaWduZWQgdGFyZ2V0T2Zmc2V0KSAtPiBMaW5lQW5kQ29sdW1uCit7CisgICAgLy8gQ291bnRp
bmcgZnJvbSAxIHRvIG1hdGNoIG1vc3QgdGV4dCBlZGl0b3JzLgorICAgIHVuc2lnbmVkIGxpbmVO
dW1iZXIgPSAxOworICAgIHVuc2lnbmVkIGNvbHVtbk51bWJlciA9IDE7CisgICAgZm9yICh1bnNp
Z25lZCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBzdGQ6Om1pbihzdHJpbmdWaWV3Lmxlbmd0aCgpLCB0
YXJnZXRPZmZzZXQpOyArK29mZnNldCkgeworICAgICAgICArK2NvbHVtbk51bWJlcjsKKyAgICAg
ICAgaWYgKGlzTmV3bGluZShzdHJpbmdWaWV3W29mZnNldF0pKSB7CisgICAgICAgICAgICArK2xp
bmVOdW1iZXI7CisgICAgICAgICAgICBjb2x1bW5OdW1iZXIgPSAxOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiB7IGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciB9OworfQorCitTdHJpbmcg
TGV4ZXI6OmVycm9yU3RyaW5nKGNvbnN0IFN0cmluZ1ZpZXcmIHNvdXJjZSwgRXJyb3IgZXJyb3Ip
Cit7CisgICAgaWYgKGVycm9yLmNvZGVMb2NhdGlvbigpKSB7CisgICAgICAgIGF1dG8gbGluZUFu
ZENvbHVtbiA9IGxpbmVBbmRDb2x1bW5OdW1iZXJGcm9tT2Zmc2V0KHNvdXJjZSwgZXJyb3IuY29k
ZUxvY2F0aW9uKCkuc3RhcnRPZmZzZXQoKSk7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKGxp
bmVBbmRDb2x1bW4ubGluZSwgJzonLCBsaW5lQW5kQ29sdW1uLmNvbHVtbiwgIjogIiwgZXJyb3Iu
bWVzc2FnZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIGVycm9yLm1lc3NhZ2UoKTsKK30KKwogdm9p
ZCBMZXhlcjo6c2tpcFdoaXRlc3BhY2VBbmRDb21tZW50cygpCiB7CiAgICAgd2hpbGUgKG1fb2Zm
c2V0IDwgbV9zdHJpbmdWaWV3Lmxlbmd0aCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5oCShyZXZpc2lvbiAyNDc3MDApCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNs
dWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0
ZS5oPgpAQCAtMzgsMzcgKzM5LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNl
IFdITFNMIHsKIAotc3RydWN0IFRva2VuOwotCi1uYW1lc3BhY2UgQVNUIHsKLQotY2xhc3MgQ29k
ZUxvY2F0aW9uIHsKLXB1YmxpYzoKLSAgICBDb2RlTG9jYXRpb24oKSA9IGRlZmF1bHQ7Ci0gICAg
Q29kZUxvY2F0aW9uKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCi0g
ICAgICAgIDogbV9zdGFydE9mZnNldChzdGFydE9mZnNldCkKLSAgICAgICAgLCBtX2VuZE9mZnNl
dChlbmRPZmZzZXQpCi0gICAgeyB9Ci0gICAgaW5saW5lIENvZGVMb2NhdGlvbihjb25zdCBUb2tl
biYpOwotICAgIENvZGVMb2NhdGlvbihjb25zdCBDb2RlTG9jYXRpb24mIGxvY2F0aW9uMSwgY29u
c3QgQ29kZUxvY2F0aW9uJiBsb2NhdGlvbjIpCi0gICAgICAgIDogbV9zdGFydE9mZnNldChsb2Nh
dGlvbjEuc3RhcnRPZmZzZXQoKSkKLSAgICAgICAgLCBtX2VuZE9mZnNldChsb2NhdGlvbjIuZW5k
T2Zmc2V0KCkpCi0gICAgeyB9Ci0KLSAgICB1bnNpZ25lZCBzdGFydE9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhcnRPZmZzZXQ7IH0KLSAgICB1bnNpZ25lZCBlbmRPZmZzZXQoKSBjb25zdCB7
IHJldHVybiBtX2VuZE9mZnNldDsgfQotCi1wcml2YXRlOgotICAgIHVuc2lnbmVkIG1fc3RhcnRP
ZmZzZXQgeyAwIH07Ci0gICAgdW5zaWduZWQgbV9lbmRPZmZzZXQgeyAwIH07Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBBU1QKLQogY2xhc3MgTGV4ZXI7CiAKIHN0cnVjdCBUb2tlbiB7Ci0gICAgQVNU
OjpDb2RlTG9jYXRpb24gY29kZUxvY2F0aW9uOworICAgIENvZGVMb2NhdGlvbiBjb2RlTG9jYXRp
b247CiAgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CiAgICAgICAgIEludExpdGVyYWws
CiAgICAgICAgIFVpbnRMaXRlcmFsLApAQCAtMTg5LDcgKzE2Myw3IEBAIHN0cnVjdCBUb2tlbiB7
CiAgICAgfQogfTsKIAotQVNUOjpDb2RlTG9jYXRpb246OkNvZGVMb2NhdGlvbihjb25zdCBUb2tl
biYgdG9rZW4pCitpbmxpbmUgQ29kZUxvY2F0aW9uOjpDb2RlTG9jYXRpb24oY29uc3QgVG9rZW4m
IHRva2VuKQogICAgIDogbV9zdGFydE9mZnNldCh0b2tlbi5jb2RlTG9jYXRpb24uc3RhcnRPZmZz
ZXQoKSkKICAgICAsIG1fZW5kT2Zmc2V0KHRva2VuLmNvZGVMb2NhdGlvbi5lbmRPZmZzZXQoKSkK
IHsgfQpAQCAtMjczLDE2ICsyNDcsMjIgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGVycm9yU3Ry
aW5nKGNvbnN0IFRva2VuJiB0b2tlbiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlBhcnNlIGVycm9yIGF0IGxpbmUgIiwgbGluZU51bWJl
ckZyb21PZmZzZXQodG9rZW4uc3RhcnRPZmZzZXQoKSksICI6ICIsIG1lc3NhZ2UpOworICAgICAg
ICByZXR1cm4gbWFrZVN0cmluZygiUGFyc2UgZXJyb3IgYXQgbGluZSAiLCBsaW5lQW5kQ29sdW1u
TnVtYmVyRnJvbU9mZnNldChtX3N0cmluZ1ZpZXcsIHRva2VuLnN0YXJ0T2Zmc2V0KCkpLmxpbmUs
ICI6ICIsIG1lc3NhZ2UpOwogICAgIH0KIAorICAgIHN0YXRpYyBTdHJpbmcgZXJyb3JTdHJpbmco
Y29uc3QgU3RyaW5nVmlldyYgc291cmNlLCBFcnJvcik7CisKIHByaXZhdGU6CiAgICAgZnJpZW5k
IHN0cnVjdCBUb2tlbjsKICAgICBUb2tlbiBjb25zdW1lVG9rZW5Gcm9tU3RyZWFtKCk7CiAKICAg
ICB2b2lkIHNraXBXaGl0ZXNwYWNlQW5kQ29tbWVudHMoKTsKIAotICAgIHVuc2lnbmVkIGxpbmVO
dW1iZXJGcm9tT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCk7CisgICAgc3RydWN0IExpbmVBbmRDb2x1
bW4geworICAgICAgICB1bnNpZ25lZCBsaW5lOworICAgICAgICB1bnNpZ25lZCBjb2x1bW47Cisg
ICAgfTsKKyAgICBzdGF0aWMgTGluZUFuZENvbHVtbiBsaW5lQW5kQ29sdW1uTnVtYmVyRnJvbU9m
ZnNldChjb25zdCBTdHJpbmdWaWV3JiwgdW5zaWduZWQgb2Zmc2V0KTsKIAogICAgIE9wdGlvbmFs
PFRva2VuOjpUeXBlPiByZWNvZ25pemVLZXl3b3JkKHVuc2lnbmVkIGVuZCk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5h
bWVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjIsMjcgKzYyLDI3IEBAIE5hbWVSZXNvbHZlcjo6TmFtZVJlc29sdmVyKE5hbWVSZXNvbHZlciYK
IAogTmFtZVJlc29sdmVyOjp+TmFtZVJlc29sdmVyKCkKIHsKLSAgICBpZiAoZXJyb3IoKSAmJiBt
X3BhcmVudE5hbWVSZXNvbHZlcikKLSAgICAgICAgbV9wYXJlbnROYW1lUmVzb2x2ZXItPnNldEVy
cm9yKCk7CisgICAgaWYgKGhhc0Vycm9yKCkgJiYgbV9wYXJlbnROYW1lUmVzb2x2ZXIpCisgICAg
ICAgIG1fcGFyZW50TmFtZVJlc29sdmVyLT5zZXRFcnJvcihnZXRFcnJvcigpLmVycm9yKCkpOwog
fQogCiB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVm
ZXJlbmNlKQogewogICAgIFNjb3BlZFNldEFkZGVyPEFTVDo6VHlwZVJlZmVyZW5jZSo+IGFkZGVy
KG1fdHlwZVJlZmVyZW5jZXMsICZ0eXBlUmVmZXJlbmNlKTsKICAgICBpZiAoIWFkZGVyLmlzTmV3
RW50cnkoKSkgewotICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBzZXRFcnJvcihFcnJvcigi
Q2Fubm90IHVzZSByZWN1cnNpdmUgdHlwZSBhcmd1bWVudHMuIiwgdHlwZVJlZmVyZW5jZS5jb2Rl
TG9jYXRpb24oKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgVmlzaXRvcjo6dmlz
aXQodHlwZVJlZmVyZW5jZSk7Ci0gICAgaWYgKGVycm9yKCkpCisgICAgaWYgKGhhc0Vycm9yKCkp
CiAgICAgICAgIHJldHVybjsKICAgICBpZiAodHlwZVJlZmVyZW5jZS5tYXliZVJlc29sdmVkVHlw
ZSgpKSAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
ODE2MSBTaG91bGRuJ3Qgd2Uga25vdyBieSBub3cgd2hldGhlciB0aGUgdHlwZSBoYXMgYmVlbiBy
ZXNvbHZlZCBvciBub3Q/CiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8qIGNhbmRpZGF0ZXMg
PSBtX25hbWVDb250ZXh0LmdldFR5cGVzKHR5cGVSZWZlcmVuY2UubmFtZSgpKTsKICAgICBpZiAo
Y2FuZGlkYXRlcyA9PSBudWxscHRyKSB7Ci0gICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHNl
dEVycm9yKEVycm9yKCJDYW5ub3QgZmluZCB0eXBlIHJlZmVyZW5jZS4iLCB0eXBlUmVmZXJlbmNl
LmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgZm9yIChhdXRv
JiBjYW5kaWRhdGUgOiAqY2FuZGlkYXRlcykKQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBOYW1lUmVz
b2x2ZXI6OnZpc2l0KEFTVDo6VHlwZVJlZmVyZQogICAgIGlmIChhdXRvIHJlc3VsdCA9IHJlc29s
dmVUeXBlT3ZlcmxvYWRJbXBsKCpjYW5kaWRhdGVzLCB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVu
dHMoKSkpCiAgICAgICAgIHR5cGVSZWZlcmVuY2Uuc2V0UmVzb2x2ZWRUeXBlKCpyZXN1bHQpOwog
ICAgIGVsc2UgewotICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBzZXRFcnJvcihFcnJvcigi
Q2Fubm90IHJlc29sdmUgdHlwZSBhcmd1bWVudHMuIiwgdHlwZVJlZmVyZW5jZS5jb2RlTG9jYXRp
b24oKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogfQpAQCAtMTAwLDcgKzEwMCw3IEBAIHZv
aWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGUKICAgICBOYW1lQ29udGV4dCBu
ZXdOYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CiAgICAgTmFtZVJlc29sdmVyIG5ld05hbWVS
ZXNvbHZlcigqdGhpcywgbmV3TmFtZUNvbnRleHQpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChm
dW5jdGlvbkRlZmluaXRpb24udHlwZSgpKTsKLSAgICBpZiAoZXJyb3IoKSkKKyAgICBpZiAoaGFz
RXJyb3IoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDogZnVu
Y3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKSkKICAgICAgICAgbmV3TmFtZVJlc29sdmVyLmNo
ZWNrRXJyb3JBbmRWaXNpdChwYXJhbWV0ZXIpOwpAQCAtMTE3LDcgKzExNyw3IEBAIHZvaWQgTmFt
ZVJlc29sdmVyOjp2aXNpdChBU1Q6OkJsb2NrJiBibG8KIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNp
dChBU1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkKIHsKICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoaWZTdGF0ZW1lbnQuY29uZGl0aW9uYWwoKSk7Ci0gICAgaWYgKGVycm9yKCkpCisgICAgaWYg
KGhhc0Vycm9yKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHsKQEAgLTEyNSw3ICsxMjUsNyBA
QCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpJZlN0YXRlbWVuCiAgICAgICAgIE5hbWVS
ZXNvbHZlciBuZXdOYW1lUmVzb2x2ZXIoKnRoaXMsIG5hbWVDb250ZXh0KTsKICAgICAgICAgbmV3
TmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVudC5ib2R5KCkpOwogICAg
IH0KLSAgICBpZiAoZXJyb3IoKSkKKyAgICBpZiAoaGFzRXJyb3IoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKGlmU3RhdGVtZW50LmVsc2VCb2R5KCkpIHsKQEAgLTEzOCw3ICsxMzgsNyBA
QCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpJZlN0YXRlbWVuCiB2b2lkIE5hbWVSZXNv
bHZlcjo6dmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxlTG9vcCkKIHsKICAgICBjaGVja0Vycm9y
QW5kVmlzaXQod2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOwotICAgIGlmIChlcnJvcigpKQorICAg
IGlmIChoYXNFcnJvcigpKQogICAgICAgICByZXR1cm47CiAKICAgICBOYW1lQ29udGV4dCBuYW1l
Q29udGV4dCgmbV9uYW1lQ29udGV4dCk7CkBAIC0xNjcsNyArMTY3LDcgQEAgdm9pZCBOYW1lUmVz
b2x2ZXI6OnZpc2l0KEFTVDo6Rm9yTG9vcCYgZgogdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKIHsKICAgICBpZiAo
IW1fbmFtZUNvbnRleHQuYWRkKHZhcmlhYmxlRGVjbGFyYXRpb24pKSB7Ci0gICAgICAgIHNldEVy
cm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3QgZGVjbGFyZSBkdXBsaWNhdGUg
dmFyaWFibGVzLiIsIHZhcmlhYmxlRGVjbGFyYXRpb24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBWaXNpdG9yOjp2aXNpdCh2YXJpYWJsZURlY2xhcmF0aW9u
KTsKQEAgLTE4MSw3ICsxODEsNyBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpWYXJp
YWJsZVJlCiAgICAgaWYgKGF1dG8qIHZhcmlhYmxlID0gbV9uYW1lQ29udGV4dC5nZXRWYXJpYWJs
ZSh2YXJpYWJsZVJlZmVyZW5jZS5uYW1lKCkpKQogICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS5z
ZXRWYXJpYWJsZSgqdmFyaWFibGUpOwogICAgIGVsc2UgewotICAgICAgICBzZXRFcnJvcigpOwor
ICAgICAgICBzZXRFcnJvcihFcnJvcigiQ2Fubm90IGZpbmQgdGhlIHZhcmlhYmxlIGRlY2xhcmF0
aW9uLiIsIHZhcmlhYmxlUmVmZXJlbmNlLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiB9CkBAIC0yMDEsNyArMjAxLDcgQEAgdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0
KEFTVDo6RG90RXhwcmVzcwogICAgICAgICAgICAgICAgICAgICBBU1Q6OnJlcGxhY2VXaXRoPEFT
VDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsPihkb3RFeHByZXNzaW9uLCBXVEZNb3ZlKGVudW1l
cmF0aW9uTWVtYmVyTGl0ZXJhbCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAg
ICAgc2V0RXJyb3IoRXJyb3IoIk5vIGVudW0gbWVtYmVyIG1hdGNoZXMgdGhlIHVzZWQgbmFtZS4i
LCBkb3RFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yMjcsNyArMjI3LDcgQEAgdm9pZCBOYW1l
UmVzb2x2ZXI6OnZpc2l0KEFTVDo6RW51bWVyYXRpbwogICAgICAgICB9CiAgICAgfQogICAgIAot
ICAgIHNldEVycm9yKCk7CisgICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5vdCByZXNvbHZlIGVudW1l
cmF0aW9uIG1lbWJlciBsaXRlcmFsLiIsIGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5jb2RlTG9j
YXRpb24oKSkpOwogfQogCiB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQpAQCAtMjM5LDQ0ICsy
MzksNDQgQEAgdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6TmF0aXZlRnVuYwogCiAvLyBG
SVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2NyBNYWtl
IHN1cmUgYWxsIHRoZSBuYW1lcyBoYXZlIGJlZW4gcmVzb2x2ZWQuCiAKLWJvb2wgcmVzb2x2ZU5h
bWVzSW5UeXBlcyhQcm9ncmFtJiBwcm9ncmFtLCBOYW1lUmVzb2x2ZXImIG5hbWVSZXNvbHZlcikK
K0V4cGVjdGVkPHZvaWQsIEVycm9yPiByZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mIHByb2dy
YW0sIE5hbWVSZXNvbHZlciYgbmFtZVJlc29sdmVyKQogewogICAgIGZvciAoYXV0byYgdHlwZURl
ZmluaXRpb24gOiBwcm9ncmFtLnR5cGVEZWZpbml0aW9ucygpKSB7CiAgICAgICAgIG5hbWVSZXNv
bHZlci5jaGVja0Vycm9yQW5kVmlzaXQodHlwZURlZmluaXRpb24pOwotICAgICAgICBpZiAobmFt
ZVJlc29sdmVyLmVycm9yKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
IChuYW1lUmVzb2x2ZXIuaGFzRXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBuYW1lUmVzb2x2
ZXIuZ2V0RXJyb3IoKTsKICAgICB9CiAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9u
IDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygpKSB7CiAgICAgICAgIG5hbWVSZXNvbHZl
ci5jaGVja0Vycm9yQW5kVmlzaXQoc3RydWN0dXJlRGVmaW5pdGlvbik7Ci0gICAgICAgIGlmIChu
YW1lUmVzb2x2ZXIuZXJyb3IoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
aWYgKG5hbWVSZXNvbHZlci5oYXNFcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIG5hbWVSZXNv
bHZlci5nZXRFcnJvcigpOwogICAgIH0KICAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5p
dGlvbiA6IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKSB7CiAgICAgICAgIG5hbWVS
ZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoZW51bWVyYXRpb25EZWZpbml0aW9uKTsKLSAgICAg
ICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAobmFtZVJlc29sdmVyLmhhc0Vycm9yKCkpCisgICAgICAgICAgICByZXR1cm4g
bmFtZVJlc29sdmVyLmdldEVycm9yKCk7CiAgICAgfQogICAgIGZvciAoYXV0byYgbmF0aXZlVHlw
ZURlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVUeXBlRGVjbGFyYXRpb25zKCkpIHsKICAgICAg
ICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChuYXRpdmVUeXBlRGVjbGFyYXRpb24p
OwotICAgICAgICBpZiAobmFtZVJlc29sdmVyLmVycm9yKCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuaGFzRXJyb3IoKSkKKyAgICAgICAgICAg
IHJldHVybiBuYW1lUmVzb2x2ZXIuZ2V0RXJyb3IoKTsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCByZXNvbHZlVHlwZU5hbWVzSW5GdW5jdGlvbnMo
UHJvZ3JhbSYgcHJvZ3JhbSwgTmFtZVJlc29sdmVyJiBuYW1lUmVzb2x2ZXIpCitFeHBlY3RlZDx2
b2lkLCBFcnJvcj4gcmVzb2x2ZVR5cGVOYW1lc0luRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0s
IE5hbWVSZXNvbHZlciYgbmFtZVJlc29sdmVyKQogewogICAgIGZvciAoYXV0byYgZnVuY3Rpb25E
ZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpIHsKICAgICAgICAgbmFt
ZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24pOwotICAgICAg
ICBpZiAobmFtZVJlc29sdmVyLmVycm9yKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuaGFzRXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBu
YW1lUmVzb2x2ZXIuZ2V0RXJyb3IoKTsKICAgICB9CiAgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKSB7
CiAgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQobmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbik7Ci0gICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5oYXNFcnJvcigpKQor
ICAgICAgICAgICAgcmV0dXJuIG5hbWVSZXNvbHZlci5nZXRFcnJvcigpOwogICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXSExTTApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTE5hbWVSZXNvbHZlci5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw4ICsyNywxMCBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNM
RXJyb3IuaCIKICNpbmNsdWRlICJXSExTTE5hbWVDb250ZXh0LmgiCiAjaW5jbHVkZSAiV0hMU0xW
aXNpdG9yLmgiCisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjMsOCArNjUsOCBAQCBwcml2YXRlOgog
ICAgIE5hbWVSZXNvbHZlciogbV9wYXJlbnROYW1lUmVzb2x2ZXIgeyBudWxscHRyIH07CiB9Owog
Ci1ib29sIHJlc29sdmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYsIE5hbWVSZXNvbHZlciYpOwotYm9v
bCByZXNvbHZlVHlwZU5hbWVzSW5GdW5jdGlvbnMoUHJvZ3JhbSYsIE5hbWVSZXNvbHZlciYpOwor
RXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IHJlc29sdmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYsIE5hbWVS
ZXNvbHZlciYpOworRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IHJlc29sdmVUeXBlTmFtZXNJbkZ1bmN0
aW9ucyhQcm9ncmFtJiwgTmFtZVJlc29sdmVyJik7CiAKIH0gLy8gbmFtZXNwYWNlIFdITFNMCiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFBhcnNlci5jcHAJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTks
NyBAQCBuYW1lc3BhY2UgV0hMU0wgewogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4o
bmFtZS5lcnJvcigpKTsKIAogLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTU2ODIgUmV0dXJuIGEgYmV0dGVyIGVycm9yIGNvZGUgZnJvbSB0aGlzLCBh
bmQgcmVwb3J0IGl0IHRvIEphdmFTY3JpcHQuCi1hdXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYg
cHJvZ3JhbSwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1vZGUpIC0+IE9wdGlvbmFsPEVy
cm9yPgorYXV0byBQYXJzZXI6OnBhcnNlKFByb2dyYW0mIHByb2dyYW0sIFN0cmluZ1ZpZXcgc3Ry
aW5nVmlldywgTW9kZSBtb2RlKSAtPiBFeHBlY3RlZDx2b2lkLCBFcnJvcj4KIHsKICAgICBtX2xl
eGVyID0gTGV4ZXIoc3RyaW5nVmlldyk7CiAgICAgbV9tb2RlID0gbW9kZTsKQEAgLTY4LDI4ICs2
OCwyOCBAQCBhdXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYgcHJvZ3JhbSwgU3RyCiAgICAgICAg
IGF1dG8gdG9rZW4gPSBtX2xleGVyLnBlZWsoKTsKICAgICAgICAgc3dpdGNoICh0b2tlbi50eXBl
KSB7CiAgICAgICAgIGNhc2UgVG9rZW46OlR5cGU6OkludmFsaWQ6Ci0gICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgY2FzZSBU
b2tlbjo6VHlwZTo6U2VtaWNvbG9uOgogICAgICAgICAgICAgbV9sZXhlci5jb25zdW1lVG9rZW4o
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpUeXBl
ZGVmOiB7CiAgICAgICAgICAgICBhdXRvIHR5cGVEZWZpbml0aW9uID0gcGFyc2VUeXBlRGVmaW5p
dGlvbigpOwogICAgICAgICAgICAgaWYgKCF0eXBlRGVmaW5pdGlvbikKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdHlwZURlZmluaXRpb24uZXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQodHlwZURlZmluaXRpb24uZXJyb3IoKSk7CiAgICAgICAgICAgICBwcm9n
cmFtLmFwcGVuZChXVEZNb3ZlKCp0eXBlRGVmaW5pdGlvbikpOwogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6U3RydWN0OiB7CiAgICAg
ICAgICAgICBhdXRvIHN0cnVjdHVyZURlZmluaXRpb24gPSBwYXJzZVN0cnVjdHVyZURlZmluaXRp
b24oKTsKICAgICAgICAgICAgIGlmICghc3RydWN0dXJlRGVmaW5pdGlvbikKLSAgICAgICAgICAg
ICAgICByZXR1cm4gc3RydWN0dXJlRGVmaW5pdGlvbi5lcnJvcigpOworICAgICAgICAgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChzdHJ1Y3R1cmVEZWZpbml0aW9uLmVycm9yKCkpOwogICAg
ICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqc3RydWN0dXJlRGVmaW5pdGlvbikpOwog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBUb2tlbjo6VHlw
ZTo6RW51bTogewogICAgICAgICAgICAgYXV0byBlbnVtZXJhdGlvbkRlZmluaXRpb24gPSBwYXJz
ZUVudW1lcmF0aW9uRGVmaW5pdGlvbigpOwogICAgICAgICAgICAgaWYgKCFlbnVtZXJhdGlvbkRl
ZmluaXRpb24pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGVudW1lcmF0aW9uRGVmaW5pdGlvbi5l
cnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlbnVtZXJhdGlv
bkRlZmluaXRpb24uZXJyb3IoKSk7CiAgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3Zl
KCplbnVtZXJhdGlvbkRlZmluaXRpb24pKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9CkBAIC05NywzMSArOTcsMzEgQEAgYXV0byBQYXJzZXI6OnBhcnNlKFByb2dyYW0mIHByb2dy
YW0sIFN0cgogICAgICAgICAgICAgQVNTRVJUKG1fbW9kZSA9PSBNb2RlOjpTdGFuZGFyZExpYnJh
cnkpOwogICAgICAgICAgICAgYXV0byBmdXJ0aGVyVG9rZW4gPSBwZWVrRnVydGhlcigpOwogICAg
ICAgICAgICAgaWYgKCFmdXJ0aGVyVG9rZW4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAgaWYgKGZ1
cnRoZXJUb2tlbi0+dHlwZSA9PSBUb2tlbjo6VHlwZTo6VHlwZWRlZikgewogICAgICAgICAgICAg
ICAgIGF1dG8gbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gcGFyc2VOYXRpdmVUeXBlRGVjbGFyYXRp
b24oKTsKICAgICAgICAgICAgICAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5lcnJvcigpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQobmF0aXZlVHlwZURlY2xhcmF0
aW9uLmVycm9yKCkpOwogICAgICAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKm5h
dGl2ZVR5cGVEZWNsYXJhdGlvbikpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgYXV0byBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uID0gcGFy
c2VOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKCk7CiAgICAgICAgICAgICBpZiAoIW5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24pCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24uZXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5lcnJvcigpKTsKICAgICAgICAgICAgIHByb2dy
YW0uYXBwZW5kKFdURk1vdmUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgICAg
IGF1dG8gZnVuY3Rpb25EZWZpbml0aW9uID0gcGFyc2VGdW5jdGlvbkRlZmluaXRpb24oKTsKICAg
ICAgICAgICAgIGlmICghZnVuY3Rpb25EZWZpbml0aW9uKQotICAgICAgICAgICAgICAgIHJldHVy
biBmdW5jdGlvbkRlZmluaXRpb24uZXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoZnVuY3Rpb25EZWZpbml0aW9uLmVycm9yKCkpOwogICAgICAgICAgICAgcHJv
Z3JhbS5hcHBlbmQoV1RGTW92ZSgqZnVuY3Rpb25EZWZpbml0aW9uKSk7CiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIFBhcnNlcjo6ZmFpbChjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIFRyeVRvUGVlayB0cnlUb1BlZWspIC0+IFVuZXhwZWN0ZWQ8RXJyb3I+
CkBAIC0yNDEsNyArMjQxLDcgQEAgc3RhdGljIGludCBkaWdpdFZhbHVlKFVDaGFyIGNoYXJhY3Rl
cikKICAgICByZXR1cm4gY2hhcmFjdGVyIC0gJ0EnICsgMTA7CiB9CiAKLXN0YXRpYyBFeHBlY3Rl
ZDxpbnQsIFBhcnNlcjo6RXJyb3I+IGludExpdGVyYWxUb0ludChTdHJpbmdWaWV3IHRleHQpCitz
dGF0aWMgRXhwZWN0ZWQ8aW50LCBFcnJvcj4gaW50TGl0ZXJhbFRvSW50KFN0cmluZ1ZpZXcgdGV4
dCkKIHsKICAgICBib29sIG5lZ2F0ZSA9IGZhbHNlOwogICAgIGlmICh0ZXh0LnN0YXJ0c1dpdGgo
Ii0iX3N0cikpIHsKQEAgLTI2MCwyMSArMjYwLDIxIEBAIHN0YXRpYyBFeHBlY3RlZDxpbnQsIFBh
cnNlcjo6RXJyb3I+IGludEwKICAgICAgICAgYXV0byBwcmV2aW91cyA9IHJlc3VsdDsKICAgICAg
ICAgcmVzdWx0ID0gcmVzdWx0ICogYmFzZSArIGRpZ2l0OwogICAgICAgICBpZiAocmVzdWx0IDwg
cHJldmlvdXMpCi0gICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxQYXJzZXI6OkVycm9yPihQ
YXJzZXI6OkVycm9yKG1ha2VTdHJpbmcoImludCBsaXRlcmFsICIsIHRleHQsICIgaXMgb3V0IG9m
IGJvdW5kcyIpKSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IobWFr
ZVN0cmluZygiaW50IGxpdGVyYWwgIiwgdGV4dCwgIiBpcyBvdXQgb2YgYm91bmRzIikpKTsKICAg
ICB9CiAgICAgaWYgKG5lZ2F0ZSkgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihpbnQ2
NF90KSA+IHNpemVvZih1bnNpZ25lZCkgJiYgc2l6ZW9mKGludDY0X3QpID4gc2l6ZW9mKGludCks
ICJUaGlzIGNvZGUgd291bGQgYmUgd3Jvbmcgb3RoZXJ3aXNlIik7CiAgICAgICAgIGludDY0X3Qg
aW50UmVzdWx0ID0gLXN0YXRpY19jYXN0PGludDY0X3Q+KHJlc3VsdCk7CiAgICAgICAgIGlmIChp
bnRSZXN1bHQgPCBzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46
Om1pbigpKSkKLSAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPFBhcnNlcjo6RXJyb3I+KFBh
cnNlcjo6RXJyb3IobWFrZVN0cmluZygiaW50IGxpdGVyYWwgIiwgdGV4dCwgIiBpcyBvdXQgb2Yg
Ym91bmRzIikpKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcihtYWtl
U3RyaW5nKCJpbnQgbGl0ZXJhbCAiLCB0ZXh0LCAiIGlzIG91dCBvZiBib3VuZHMiKSkpOwogICAg
ICAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxpbnQ+KGludFJlc3VsdCkgfTsKICAgICB9CiAgICAg
aWYgKHJlc3VsdCA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1heCgpKSkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UGFyc2VyOjpFcnJvcj4oUGFy
c2VyOjpFcnJvcihtYWtlU3RyaW5nKCJpbnQgbGl0ZXJhbCAiLCB0ZXh0LCAiIGlzIG91dCBvZiBi
b3VuZHMiKSkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IobWFrZVN0cmlu
ZygiaW50IGxpdGVyYWwgIiwgdGV4dCwgIiBpcyBvdXQgb2YgYm91bmRzIikpKTsKICAgICByZXR1
cm4geyBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdCkgfTsKIH0KIAotc3RhdGljIEV4cGVjdGVkPHVu
c2lnbmVkLCBQYXJzZXI6OkVycm9yPiB1aW50TGl0ZXJhbFRvVWludChTdHJpbmdWaWV3IHRleHQp
CitzdGF0aWMgRXhwZWN0ZWQ8dW5zaWduZWQsIEVycm9yPiB1aW50TGl0ZXJhbFRvVWludChTdHJp
bmdWaWV3IHRleHQpCiB7CiAgICAgdW5zaWduZWQgYmFzZSA9IDEwOwogICAgIGlmICh0ZXh0LnN0
YXJ0c1dpdGgoIjB4Il9zdHIpKSB7CkBAIC0yODksMTcgKzI4OSwxNyBAQCBzdGF0aWMgRXhwZWN0
ZWQ8dW5zaWduZWQsIFBhcnNlcjo6RXJyb3I+CiAgICAgICAgIGF1dG8gcHJldmlvdXMgPSByZXN1
bHQ7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIGJhc2UgKyBkaWdpdDsKICAgICAgICAgaWYg
KHJlc3VsdCA8IHByZXZpb3VzKQotICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UGFyc2Vy
OjpFcnJvcj4oUGFyc2VyOjpFcnJvcihtYWtlU3RyaW5nKCJ1aW50IGxpdGVyYWwgIiwgdGV4dCwg
IiBpcyBvdXQgb2YgYm91bmRzIikpKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChFcnJvcihtYWtlU3RyaW5nKCJ1aW50IGxpdGVyYWwgIiwgdGV4dCwgIiBpcyBvdXQgb2YgYm91
bmRzIikpKTsKICAgICB9CiAgICAgcmV0dXJuIHsgcmVzdWx0IH07CiB9CiAKLXN0YXRpYyBFeHBl
Y3RlZDxmbG9hdCwgUGFyc2VyOjpFcnJvcj4gZmxvYXRMaXRlcmFsVG9GbG9hdChTdHJpbmdWaWV3
IHRleHQpCitzdGF0aWMgRXhwZWN0ZWQ8ZmxvYXQsIEVycm9yPiBmbG9hdExpdGVyYWxUb0Zsb2F0
KFN0cmluZ1ZpZXcgdGV4dCkKIHsKICAgICBzaXplX3QgcGFyc2VkTGVuZ3RoOwogICAgIGF1dG8g
cmVzdWx0ID0gcGFyc2VEb3VibGUodGV4dCwgcGFyc2VkTGVuZ3RoKTsKICAgICBpZiAocGFyc2Vk
TGVuZ3RoICE9IHRleHQubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPFBhcnNl
cjo6RXJyb3I+KFBhcnNlcjo6RXJyb3IobWFrZVN0cmluZygiQ2Fubm90IHBhcnNlIGZsb2F0ICIs
IHRleHQpKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcihtYWtlU3RyaW5n
KCJDYW5ub3QgcGFyc2UgZmxvYXQgIiwgdGV4dCkpKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHJlc3VsdCk7CiB9CiAKQEAgLTM0MywxOCArMzQzLDE4IEBAIGF1dG8gUGFyc2VyOjpj
b25zdW1lTm9uTmVnYXRpdmVJbnRlZ3JhbEwKICAgICByZXR1cm4gZmFpbCgiaW50IGxpdGVyYWwg
aXMgbmVnYXRpdmUiX3N0cik7CiB9CiAKLXN0YXRpYyBFeHBlY3RlZDx1bnNpZ25lZCwgUGFyc2Vy
OjpFcnJvcj4gcmVjb2duaXplU2ltcGxlVW5zaWduZWRJbnRlZ2VyKFN0cmluZ1ZpZXcgc3RyaW5n
VmlldykKK3N0YXRpYyBFeHBlY3RlZDx1bnNpZ25lZCwgRXJyb3I+IHJlY29nbml6ZVNpbXBsZVVu
c2lnbmVkSW50ZWdlcihTdHJpbmdWaWV3IHN0cmluZ1ZpZXcpCiB7CiAgICAgdW5zaWduZWQgcmVz
dWx0ID0gMDsKICAgICBpZiAoc3RyaW5nVmlldy5sZW5ndGgoKSA8IDEpCi0gICAgICAgIHJldHVy
biBVbmV4cGVjdGVkPFBhcnNlcjo6RXJyb3I+KFBhcnNlcjo6RXJyb3IobWFrZVN0cmluZygiU2lt
cGxlIHVuc2lnbmVkIGxpdGVyYWwgIiwgc3RyaW5nVmlldywgIiBpcyB0b28gc2hvcnQiKSkpOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IobWFrZVN0cmluZygiU2ltcGxlIHVu
c2lnbmVkIGxpdGVyYWwgIiwgc3RyaW5nVmlldywgIiBpcyB0b28gc2hvcnQiKSkpOwogICAgIGZv
ciAoYXV0byBjb2RlUG9pbnQgOiBzdHJpbmdWaWV3LmNvZGVQb2ludHMoKSkgewogICAgICAgICBp
ZiAoY29kZVBvaW50IDwgJzAnIHx8IGNvZGVQb2ludCA+ICc5JykKLSAgICAgICAgICAgIHJldHVy
biBVbmV4cGVjdGVkPFBhcnNlcjo6RXJyb3I+KFBhcnNlcjo6RXJyb3IobWFrZVN0cmluZygiU2lt
cGxlIHVuc2lnbmVkIGxpdGVyYWwgIiwgc3RyaW5nVmlldywgIiBpc24ndCBvZiB0aGUgZm9ybSBb
MC05XSsiKSkpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKG1ha2VT
dHJpbmcoIlNpbXBsZSB1bnNpZ25lZCBsaXRlcmFsICIsIHN0cmluZ1ZpZXcsICIgaXNuJ3Qgb2Yg
dGhlIGZvcm0gWzAtOV0rIikpKTsKICAgICAgICAgYXV0byBwcmV2aW91cyA9IHJlc3VsdDsKICAg
ICAgICAgcmVzdWx0ID0gcmVzdWx0ICogMTAgKyAoY29kZVBvaW50IC0gJzAnKTsKICAgICAgICAg
aWYgKHJlc3VsdCA8IHByZXZpb3VzKQotICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UGFy
c2VyOjpFcnJvcj4oUGFyc2VyOjpFcnJvcihtYWtlU3RyaW5nKCJTaW1wbGUgdW5zaWduZWQgbGl0
ZXJhbCAiLCBzdHJpbmdWaWV3LCAiIGlzIG91dCBvZiBib3VuZHMiKSkpOworICAgICAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKG1ha2VTdHJpbmcoIlNpbXBsZSB1bnNpZ25lZCBs
aXRlcmFsICIsIHN0cmluZ1ZpZXcsICIgaXMgb3V0IG9mIGJvdW5kcyIpKSk7CiAgICAgfQogICAg
IHJldHVybiByZXN1bHQ7CiB9CkBAIC00MTUsNyArNDE1LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNl
VHlwZUFyZ3VtZW50KCkgLT4gRXhwZQogICAgICAgICByZXR1cm4gQVNUOjpUeXBlQXJndW1lbnQo
V1RGTW92ZSgqY29uc3RhbnRFeHByZXNzaW9uKSk7CiAgICAgfQogICAgIENPTlNVTUVfVFlQRShy
ZXN1bHQsIElkZW50aWZpZXIpOwotICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uKCpyZXN1
bHQpOworICAgIENvZGVMb2NhdGlvbiBsb2NhdGlvbigqcmVzdWx0KTsKICAgICByZXR1cm4gQVNU
OjpUeXBlQXJndW1lbnQobWFrZVVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+KGxvY2F0aW9u
LCByZXN1bHQtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSwgQVNUOjpUeXBlQXJndW1l
bnRzKCkpKTsKIH0KIApAQCAtNTM0LDcgKzUzNCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVR5cGUo
KSAtPiBFeHBlY3RlZDxVbmkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGF1dG8gY29uc3RydWN0VHlwZUZyb21TdWZmaXhBYmJyZXZpYXRlZCA9IFsmXShjb25zdCBUeXBl
U3VmZml4QWJicmV2aWF0ZWQmIHR5cGVTdWZmaXhBYmJyZXZpYXRlZCwgVW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+JiYgcHJldmlvdXMpIC0+IFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiB7
Ci0gICAgICAgICAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbigqYWRkcmVzc1NwYWNlVG9r
ZW4sIHR5cGVTdWZmaXhBYmJyZXZpYXRlZC5sb2NhdGlvbik7CisgICAgICAgICAgICBDb2RlTG9j
YXRpb24gbG9jYXRpb24oKmFkZHJlc3NTcGFjZVRva2VuLCB0eXBlU3VmZml4QWJicmV2aWF0ZWQu
bG9jYXRpb24pOwogICAgICAgICAgICAgc3dpdGNoICh0eXBlU3VmZml4QWJicmV2aWF0ZWQudG9r
ZW4udHlwZSkgewogICAgICAgICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6U3RhcjoKICAgICAgICAg
ICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KGxvY2F0aW9u
LCBhZGRyZXNzU3BhY2UsIFdURk1vdmUocHJldmlvdXMpKSB9OwpAQCAtNTY1LDcgKzU2NSw3IEBA
IGF1dG8gUGFyc2VyOjpwYXJzZVR5cGUoKSAtPiBFeHBlY3RlZDxVbmkKICAgICB9CiAKICAgICBh
dXRvIGNvbnN0cnVjdFR5cGVGcm9tU3VmZml4Tm9uQWJicmV2aWF0ZWQgPSBbJl0oY29uc3QgVHlw
ZVN1ZmZpeE5vbkFiYnJldmlhdGVkJiB0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQsIFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPiYmIHByZXZpb3VzKSAtPiBVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4gewotICAgICAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbigqbmFtZSwgdHlwZVN1
ZmZpeE5vbkFiYnJldmlhdGVkLmxvY2F0aW9uKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uIGxvY2F0
aW9uKCpuYW1lLCB0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQubG9jYXRpb24pOwogICAgICAgICBz
d2l0Y2ggKHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC50b2tlbi50eXBlKSB7CiAgICAgICAgIGNh
c2UgVG9rZW46OlR5cGU6OlN0YXI6CiAgICAgICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVm
PEFTVDo6UG9pbnRlclR5cGU+KGxvY2F0aW9uLCAqdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLmFk
ZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpIH07CkBAIC0xMTg2LDcgKzExODYsNyBAQCBh
dXRvIFBhcnNlcjo6cGFyc2VGb3JMb29wKCkgLT4gRXhwZWN0ZWQ8CiAgICAgICAgIH0KIAogICAg
ICAgICBQQVJTRShib2R5LCBTdGF0ZW1lbnQpOwotICAgICAgICBBU1Q6OkNvZGVMb2NhdGlvbiBs
b2NhdGlvbihvcmlnaW4tPmNvZGVMb2NhdGlvbiwgICgqYm9keSktPmNvZGVMb2NhdGlvbigpKTsK
KyAgICAgICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9uKG9yaWdpbi0+Y29kZUxvY2F0aW9uLCAgKCpi
b2R5KS0+Y29kZUxvY2F0aW9uKCkpOwogICAgICAgICByZXR1cm4gQVNUOjpGb3JMb29wKGxvY2F0
aW9uLCBXVEZNb3ZlKGluaXRpYWxpemF0aW9uKSwgV1RGTW92ZShjb25kaXRpb24pLCBXVEZNb3Zl
KGluY3JlbWVudCksIFdURk1vdmUoKmJvZHkpKTsKICAgICB9OwogCkBAIC0xMjExLDcgKzEyMTEs
NyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VXaGlsZUxvb3AoKSAtPiBFeHBlY3RlCiAgICAgQ09OU1VN
RV9UWVBFKHJpZ2h0UGFyZW50aGVzaXMsIFJpZ2h0UGFyZW50aGVzaXMpOwogICAgIFBBUlNFKGJv
ZHksIFN0YXRlbWVudCk7CiAKLSAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbihvcmlnaW4t
PmNvZGVMb2NhdGlvbiwgICgqYm9keSktPmNvZGVMb2NhdGlvbigpKTsKKyAgICBDb2RlTG9jYXRp
b24gbG9jYXRpb24ob3JpZ2luLT5jb2RlTG9jYXRpb24sICAoKmJvZHkpLT5jb2RlTG9jYXRpb24o
KSk7CiAgICAgcmV0dXJuIEFTVDo6V2hpbGVMb29wKGxvY2F0aW9uLCBXVEZNb3ZlKCpjb25kaXRp
b25hbCksIFdURk1vdmUoKmJvZHkpKTsKIH0KIApAQCAtMTM4OSw3ICsxMzg5LDcgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlRWZmZWN0ZnVsRXhwcmVzc2lvbigpIAogICAgIGlmIChleHByZXNzaW9ucy5z
aXplKCkgPT0gMSkKICAgICAgICAgcmV0dXJuIFdURk1vdmUoZXhwcmVzc2lvbnNbMF0pOwogICAg
IHVuc2lnbmVkIGVuZE9mZnNldCA9IG1fbGV4ZXIucGVlaygpLnN0YXJ0T2Zmc2V0KCk7Ci0gICAg
QVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24ob3JpZ2luLT5zdGFydE9mZnNldCgpLCBlbmRPZmZz
ZXQpOworICAgIENvZGVMb2NhdGlvbiBsb2NhdGlvbihvcmlnaW4tPnN0YXJ0T2Zmc2V0KCksIGVu
ZE9mZnNldCk7CiAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkNvbW1hRXhwcmVzc2lv
bj4obG9jYXRpb24sIFdURk1vdmUoZXhwcmVzc2lvbnMpKSB9OwogfQogCkBAIC0xNDMzLDE0ICsx
NDMzLDE0IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUxpbWl0ZWRTdWZmaXhPcGVyYXRvcigKICAgICAg
ICAgYXV0byBpZGVudGlmaWVyID0gY29uc3VtZVR5cGUoVG9rZW46OlR5cGU6OklkZW50aWZpZXIp
OwogICAgICAgICBpZiAoIWlkZW50aWZpZXIpCiAgICAgICAgICAgICByZXR1cm4gU3VmZml4RXhw
cmVzc2lvbihXVEZNb3ZlKHByZXZpb3VzKSwgZmFsc2UpOwotICAgICAgICBBU1Q6OkNvZGVMb2Nh
dGlvbiBsb2NhdGlvbihwcmV2aW91cy0+Y29kZUxvY2F0aW9uKCksICppZGVudGlmaWVyKTsKKyAg
ICAgICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9uKHByZXZpb3VzLT5jb2RlTG9jYXRpb24oKSwgKmlk
ZW50aWZpZXIpOwogICAgICAgICByZXR1cm4gU3VmZml4RXhwcmVzc2lvbihtYWtlVW5pcXVlUmVm
PEFTVDo6RG90RXhwcmVzc2lvbj4obG9jYXRpb24sIFdURk1vdmUocHJldmlvdXMpLCBpZGVudGlm
aWVyLT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCkpLCB0cnVlKTsKICAgICB9CiAgICAg
Y2FzZSBUb2tlbjo6VHlwZTo6QXJyb3c6IHsKICAgICAgICAgYXV0byBpZGVudGlmaWVyID0gY29u
c3VtZVR5cGUoVG9rZW46OlR5cGU6OklkZW50aWZpZXIpOwogICAgICAgICBpZiAoIWlkZW50aWZp
ZXIpCiAgICAgICAgICAgICByZXR1cm4gU3VmZml4RXhwcmVzc2lvbihXVEZNb3ZlKHByZXZpb3Vz
KSwgZmFsc2UpOwotICAgICAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbihwcmV2aW91cy0+
Y29kZUxvY2F0aW9uKCksICppZGVudGlmaWVyKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uIGxvY2F0
aW9uKHByZXZpb3VzLT5jb2RlTG9jYXRpb24oKSwgKmlkZW50aWZpZXIpOwogICAgICAgICByZXR1
cm4gU3VmZml4RXhwcmVzc2lvbihtYWtlVW5pcXVlUmVmPEFTVDo6RG90RXhwcmVzc2lvbj4obG9j
YXRpb24sIG1ha2VVbmlxdWVSZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KGxvY2F0aW9u
LCBXVEZNb3ZlKHByZXZpb3VzKSksIGlkZW50aWZpZXItPnN0cmluZ1ZpZXcobV9sZXhlcikudG9T
dHJpbmcoKSksIHRydWUpOwogICAgIH0KICAgICBkZWZhdWx0OiB7CkBAIC0xNDQ5LDcgKzE0NDks
NyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VMaW1pdGVkU3VmZml4T3BlcmF0b3IoCiAgICAgICAgIGlm
ICghZXhwcmVzc2lvbikKICAgICAgICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKFdURk1v
dmUocHJldmlvdXMpLCBmYWxzZSk7CiAgICAgICAgIGlmIChhdXRvIHJpZ2h0U3F1YXJlQnJhY2tl
dCA9IGNvbnN1bWVUeXBlKFRva2VuOjpUeXBlOjpSaWdodFNxdWFyZUJyYWNrZXQpKSB7Ci0gICAg
ICAgICAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbihwcmV2aW91cy0+Y29kZUxvY2F0aW9u
KCksICpyaWdodFNxdWFyZUJyYWNrZXQpOworICAgICAgICAgICAgQ29kZUxvY2F0aW9uIGxvY2F0
aW9uKHByZXZpb3VzLT5jb2RlTG9jYXRpb24oKSwgKnJpZ2h0U3F1YXJlQnJhY2tldCk7CiAgICAg
ICAgICAgICByZXR1cm4gU3VmZml4RXhwcmVzc2lvbihtYWtlVW5pcXVlUmVmPEFTVDo6SW5kZXhF
eHByZXNzaW9uPihsb2NhdGlvbiwgV1RGTW92ZShwcmV2aW91cyksIFdURk1vdmUoKmV4cHJlc3Np
b24pKSwgdHJ1ZSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFN1ZmZpeEV4cHJlc3Npb24o
V1RGTW92ZShwcmV2aW91cyksIGZhbHNlKTsKQEAgLTE0NzMsMTQgKzE0NzMsMTQgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlU3VmZml4T3BlcmF0b3IoVW5pcXVlUgogICAgICAgICBhdXRvIGlkZW50aWZp
ZXIgPSBjb25zdW1lVHlwZShUb2tlbjo6VHlwZTo6SWRlbnRpZmllcik7CiAgICAgICAgIGlmICgh
aWRlbnRpZmllcikKICAgICAgICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKFdURk1vdmUo
cHJldmlvdXMpLCBmYWxzZSk7Ci0gICAgICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uKHBy
ZXZpb3VzLT5jb2RlTG9jYXRpb24oKSwgKmlkZW50aWZpZXIpOworICAgICAgICBDb2RlTG9jYXRp
b24gbG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2NhdGlvbigpLCAqaWRlbnRpZmllcik7CiAgICAg
ICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKG1ha2VVbmlxdWVSZWY8QVNUOjpEb3RFeHByZXNz
aW9uPihsb2NhdGlvbiwgV1RGTW92ZShwcmV2aW91cyksIGlkZW50aWZpZXItPnN0cmluZ1ZpZXco
bV9sZXhlcikudG9TdHJpbmcoKSksIHRydWUpOwogICAgIH0KICAgICBjYXNlIFRva2VuOjpUeXBl
OjpBcnJvdzogewogICAgICAgICBhdXRvIGlkZW50aWZpZXIgPSBjb25zdW1lVHlwZShUb2tlbjo6
VHlwZTo6SWRlbnRpZmllcik7CiAgICAgICAgIGlmICghaWRlbnRpZmllcikKICAgICAgICAgICAg
IHJldHVybiBTdWZmaXhFeHByZXNzaW9uKFdURk1vdmUocHJldmlvdXMpLCBmYWxzZSk7Ci0gICAg
ICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uKHByZXZpb3VzLT5jb2RlTG9jYXRpb24oKSwg
KmlkZW50aWZpZXIpOworICAgICAgICBDb2RlTG9jYXRpb24gbG9jYXRpb24ocHJldmlvdXMtPmNv
ZGVMb2NhdGlvbigpLCAqaWRlbnRpZmllcik7CiAgICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNz
aW9uKG1ha2VVbmlxdWVSZWY8QVNUOjpEb3RFeHByZXNzaW9uPihsb2NhdGlvbiwgbWFrZVVuaXF1
ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4oV1RGTW92ZSgqc3VmZml4KSwgV1RGTW92
ZShwcmV2aW91cykpLCBpZGVudGlmaWVyLT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCkp
LCB0cnVlKTsKICAgICB9CiAgICAgY2FzZSBUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQ6
IHsKQEAgLTE0ODgsMTMgKzE0ODgsMTMgQEAgYXV0byBQYXJzZXI6OnBhcnNlU3VmZml4T3BlcmF0
b3IoVW5pcXVlUgogICAgICAgICBpZiAoIWV4cHJlc3Npb24pCiAgICAgICAgICAgICByZXR1cm4g
U3VmZml4RXhwcmVzc2lvbihXVEZNb3ZlKHByZXZpb3VzKSwgZmFsc2UpOwogICAgICAgICBpZiAo
YXV0byByaWdodFNxdWFyZUJyYWNrZXQgPSBjb25zdW1lVHlwZShUb2tlbjo6VHlwZTo6UmlnaHRT
cXVhcmVCcmFja2V0KSkgewotICAgICAgICAgICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24o
cHJldmlvdXMtPmNvZGVMb2NhdGlvbigpLCAqcmlnaHRTcXVhcmVCcmFja2V0KTsKKyAgICAgICAg
ICAgIENvZGVMb2NhdGlvbiBsb2NhdGlvbihwcmV2aW91cy0+Y29kZUxvY2F0aW9uKCksICpyaWdo
dFNxdWFyZUJyYWNrZXQpOwogICAgICAgICAgICAgcmV0dXJuIFN1ZmZpeEV4cHJlc3Npb24obWFr
ZVVuaXF1ZVJlZjxBU1Q6OkluZGV4RXhwcmVzc2lvbj4obG9jYXRpb24sIFdURk1vdmUocHJldmlv
dXMpLCBXVEZNb3ZlKCpleHByZXNzaW9uKSksIHRydWUpOwogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiBTdWZmaXhFeHByZXNzaW9uKFdURk1vdmUocHJldmlvdXMpLCBmYWxzZSk7CiAgICAgfQog
ICAgIGNhc2UgVG9rZW46OlR5cGU6OlBsdXNQbHVzOiB7Ci0gICAgICAgIEFTVDo6Q29kZUxvY2F0
aW9uIGxvY2F0aW9uKHByZXZpb3VzLT5jb2RlTG9jYXRpb24oKSwgKnN1ZmZpeCk7CisgICAgICAg
IENvZGVMb2NhdGlvbiBsb2NhdGlvbihwcmV2aW91cy0+Y29kZUxvY2F0aW9uKCksICpzdWZmaXgp
OwogICAgICAgICBhdXRvIHJlc3VsdCA9IEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6
Y3JlYXRlKGxvY2F0aW9uLCBXVEZNb3ZlKHByZXZpb3VzKSk7CiAgICAgICAgIFZlY3RvcjxVbmlx
dWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gY2FsbEFyZ3VtZW50czsKICAgICAgICAgY2FsbEFyZ3Vt
ZW50cy5hcHBlbmQocmVzdWx0LT5vbGRWYXJpYWJsZVJlZmVyZW5jZSgpKTsKQEAgLTE1MDQsNyAr
MTUwNCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVN1ZmZpeE9wZXJhdG9yKFVuaXF1ZVIKICAgICB9
CiAgICAgZGVmYXVsdDogewogICAgICAgICBBU1NFUlQoc3VmZml4LT50eXBlID09IFRva2VuOjpU
eXBlOjpNaW51c01pbnVzKTsKLSAgICAgICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24ocHJl
dmlvdXMtPmNvZGVMb2NhdGlvbigpLCAqc3VmZml4KTsKKyAgICAgICAgQ29kZUxvY2F0aW9uIGxv
Y2F0aW9uKHByZXZpb3VzLT5jb2RlTG9jYXRpb24oKSwgKnN1ZmZpeCk7CiAgICAgICAgIGF1dG8g
cmVzdWx0ID0gQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uOjpjcmVhdGUobG9jYXRpb24s
IFdURk1vdmUocHJldmlvdXMpKTsKICAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJl
c3Npb24+PiBjYWxsQXJndW1lbnRzOwogICAgICAgICBjYWxsQXJndW1lbnRzLmFwcGVuZChyZXN1
bHQtPm9sZFZhcmlhYmxlUmVmZXJlbmNlKCkpOwpAQCAtMTUzMCw3ICsxNTMwLDcgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlRXhwcmVzc2lvbigpIC0+IEV4cGVjdAogICAgIGlmIChleHByZXNzaW9ucy5z
aXplKCkgPT0gMSkKICAgICAgICAgcmV0dXJuIFdURk1vdmUoZXhwcmVzc2lvbnNbMF0pOwogICAg
IGF1dG8gZW5kT2Zmc2V0ID0gbV9sZXhlci5wZWVrKCkuc3RhcnRPZmZzZXQoKTsKLSAgICBBU1Q6
OkNvZGVMb2NhdGlvbiBsb2NhdGlvbihzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKyAgICBDb2Rl
TG9jYXRpb24gbG9jYXRpb24oc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CiAgICAgcmV0dXJuIHsg
bWFrZVVuaXF1ZVJlZjxBU1Q6OkNvbW1hRXhwcmVzc2lvbj4obG9jYXRpb24sIFdURk1vdmUoZXhw
cmVzc2lvbnMpKSB9OwogfQogCkBAIC0xNTQxLDExICsxNTQxLDExIEBAIGF1dG8gUGFyc2VyOjpj
b21wbGV0ZVRlcm5hcnlDb25kaXRpb25hbCgKICAgICBDT05TVU1FX1RZUEUoY29sb24sIENvbG9u
KTsKICAgICBQQVJTRShlbHNlRXhwcmVzc2lvbiwgUG9zc2libGVUZXJuYXJ5Q29uZGl0aW9uYWwp
OwogCi0gICAgQVNUOjpDb2RlTG9jYXRpb24gcHJlZGljYXRlTG9jYXRpb24gPSBwcmVkaWNhdGUt
PmNvZGVMb2NhdGlvbigpOworICAgIENvZGVMb2NhdGlvbiBwcmVkaWNhdGVMb2NhdGlvbiA9IHBy
ZWRpY2F0ZS0+Y29kZUxvY2F0aW9uKCk7CiAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJl
c3Npb24+PiBjYXN0QXJndW1lbnRzOwogICAgIGNhc3RBcmd1bWVudHMuYXBwZW5kKFdURk1vdmUo
cHJlZGljYXRlKSk7CiAgICAgYXV0byBib29sQ2FzdCA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxs
RXhwcmVzc2lvbj4ocHJlZGljYXRlTG9jYXRpb24sICJib29sIl9zdHIsIFdURk1vdmUoY2FzdEFy
Z3VtZW50cykpOwotICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uKHByZWRpY2F0ZUxvY2F0
aW9uLCAoKmVsc2VFeHByZXNzaW9uKS0+Y29kZUxvY2F0aW9uKCkpOworICAgIENvZGVMb2NhdGlv
biBsb2NhdGlvbihwcmVkaWNhdGVMb2NhdGlvbiwgKCplbHNlRXhwcmVzc2lvbiktPmNvZGVMb2Nh
dGlvbigpKTsKICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6VGVybmFyeUV4cHJlc3Np
b24+KGxvY2F0aW9uLCBXVEZNb3ZlKGJvb2xDYXN0KSwgV1RGTW92ZSgqYm9keUV4cHJlc3Npb24p
LCBXVEZNb3ZlKCplbHNlRXhwcmVzc2lvbikpIH07CiB9CiAKQEAgLTE1NjcsNyArMTU2Nyw3IEBA
IGF1dG8gUGFyc2VyOjpjb21wbGV0ZUFzc2lnbm1lbnQoVW5pcXVlUmUKICAgICAgICAgcmV0dXJu
IFVuZXhwZWN0ZWQ8RXJyb3I+KGFzc2lnbm1lbnRPcGVyYXRvci5lcnJvcigpKTsKIAogICAgIFBB
UlNFKHJpZ2h0LCBQb3NzaWJsZVRlcm5hcnlDb25kaXRpb25hbCk7Ci0gICAgQVNUOjpDb2RlTG9j
YXRpb24gbG9jYXRpb24gPSB7IGxlZnQtPmNvZGVMb2NhdGlvbigpLCAoKnJpZ2h0KS0+Y29kZUxv
Y2F0aW9uKCkgfTsKKyAgICBDb2RlTG9jYXRpb24gbG9jYXRpb24gPSB7IGxlZnQtPmNvZGVMb2Nh
dGlvbigpLCAoKnJpZ2h0KS0+Y29kZUxvY2F0aW9uKCkgfTsKIAogICAgIGlmIChhc3NpZ25tZW50
T3BlcmF0b3ItPnR5cGUgPT0gVG9rZW46OlR5cGU6OkVxdWFsc1NpZ24pCiAgICAgICAgIHJldHVy
biB7IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4obG9jYXRpb24sIFdU
Rk1vdmUobGVmdCksIFdURk1vdmUoKnJpZ2h0KSl9OwpAQCAtMTY3Niw3ICsxNjc2LDcgQEAgYXV0
byBQYXJzZXI6OmNvbXBsZXRlUG9zc2libGVMb2dpY2FsQmluYQogICAgICAgICBUb2tlbjo6VHlw
ZTo6QW5kCiAgICAgICAgID4oKSkgewogICAgICAgICBQQVJTRShuZXh0LCBQb3NzaWJsZVJlbGF0
aW9uYWxCaW5hcnlPcGVyYXRpb24pOwotICAgICAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlv
bihwcmV2aW91cy0+Y29kZUxvY2F0aW9uKCksICgqbmV4dCktPmNvZGVMb2NhdGlvbigpKTsKKyAg
ICAgICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9uKHByZXZpb3VzLT5jb2RlTG9jYXRpb24oKSwgKCpu
ZXh0KS0+Y29kZUxvY2F0aW9uKCkpOwogCiAgICAgICAgIHN3aXRjaCAobG9naWNhbEJpbmFyeU9w
ZXJhdGlvbi0+dHlwZSkgewogICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpPck9yOgpAQCAtMTcz
MCw3ICsxNzMwLDcgQEAgYXV0byBQYXJzZXI6OmNvbXBsZXRlUG9zc2libGVSZWxhdGlvbmFsQgog
ICAgICAgICBUb2tlbjo6VHlwZTo6Tm90RXF1YWwKICAgICAgICAgPigpKSB7CiAgICAgICAgIFBB
UlNFKG5leHQsIFBvc3NpYmxlU2hpZnQpOwotICAgICAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2Nh
dGlvbihwcmV2aW91cy0+Y29kZUxvY2F0aW9uKCksICgqbmV4dCktPmNvZGVMb2NhdGlvbigpKTsK
KyAgICAgICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9uKHByZXZpb3VzLT5jb2RlTG9jYXRpb24oKSwg
KCpuZXh0KS0+Y29kZUxvY2F0aW9uKCkpOwogCiAgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNU
OjpFeHByZXNzaW9uPj4gY2FsbEFyZ3VtZW50czsKICAgICAgICAgY2FsbEFyZ3VtZW50cy5hcHBl
bmQoV1RGTW92ZShwcmV2aW91cykpOwpAQCAtMTc4Miw3ICsxNzgyLDcgQEAgYXV0byBQYXJzZXI6
OmNvbXBsZXRlUG9zc2libGVTaGlmdChVbmlxdQogICAgICAgICBUb2tlbjo6VHlwZTo6UmlnaHRT
aGlmdAogICAgICAgICA+KCkpIHsKICAgICAgICAgUEFSU0UobmV4dCwgUG9zc2libGVBZGQpOwot
ICAgICAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbihwcmV2aW91cy0+Y29kZUxvY2F0aW9u
KCksICgqbmV4dCktPmNvZGVMb2NhdGlvbigpKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uIGxvY2F0
aW9uKHByZXZpb3VzLT5jb2RlTG9jYXRpb24oKSwgKCpuZXh0KS0+Y29kZUxvY2F0aW9uKCkpOwog
CiAgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gY2FsbEFyZ3VtZW50
czsKICAgICAgICAgY2FsbEFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZShwcmV2aW91cykpOwpAQCAt
MTgxNyw3ICsxODE3LDcgQEAgYXV0byBQYXJzZXI6OmNvbXBsZXRlUG9zc2libGVBZGQoVW5pcXVl
UgogICAgICAgICBUb2tlbjo6VHlwZTo6TWludXMKICAgICAgICAgPigpKSB7CiAgICAgICAgIFBB
UlNFKG5leHQsIFBvc3NpYmxlTXVsdGlwbHkpOwotICAgICAgICBBU1Q6OkNvZGVMb2NhdGlvbiBs
b2NhdGlvbihwcmV2aW91cy0+Y29kZUxvY2F0aW9uKCksICgqbmV4dCktPmNvZGVMb2NhdGlvbigp
KTsKKyAgICAgICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9uKHByZXZpb3VzLT5jb2RlTG9jYXRpb24o
KSwgKCpuZXh0KS0+Y29kZUxvY2F0aW9uKCkpOwogCiAgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8
QVNUOjpFeHByZXNzaW9uPj4gY2FsbEFyZ3VtZW50czsKICAgICAgICAgY2FsbEFyZ3VtZW50cy5h
cHBlbmQoV1RGTW92ZShwcmV2aW91cykpOwpAQCAtMTg1Myw3ICsxODUzLDcgQEAgYXV0byBQYXJz
ZXI6OmNvbXBsZXRlUG9zc2libGVNdWx0aXBseShVbgogICAgICAgICBUb2tlbjo6VHlwZTo6TW9k
CiAgICAgICAgID4oKSkgewogICAgICAgICBQQVJTRShuZXh0LCBQb3NzaWJsZVByZWZpeCk7Ci0g
ICAgICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uKHByZXZpb3VzLT5jb2RlTG9jYXRpb24o
KSwgKCpuZXh0KS0+Y29kZUxvY2F0aW9uKCkpOworICAgICAgICBDb2RlTG9jYXRpb24gbG9jYXRp
b24ocHJldmlvdXMtPmNvZGVMb2NhdGlvbigpLCAoKm5leHQpLT5jb2RlTG9jYXRpb24oKSk7CiAK
ICAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBjYWxsQXJndW1lbnRz
OwogICAgICAgICBjYWxsQXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKHByZXZpb3VzKSk7CkBAIC0x
ODkzLDcgKzE4OTMsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VQb3NzaWJsZVByZWZpeChib29sICpp
CiAgICAgICAgIFRva2VuOjpUeXBlOjpTdGFyCiAgICAgPigpKSB7CiAgICAgICAgIFBBUlNFKG5l
eHQsIFBvc3NpYmxlUHJlZml4KTsKLSAgICAgICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24o
KnByZWZpeCwgKCpuZXh0KS0+Y29kZUxvY2F0aW9uKCkpOworICAgICAgICBDb2RlTG9jYXRpb24g
bG9jYXRpb24oKnByZWZpeCwgKCpuZXh0KS0+Y29kZUxvY2F0aW9uKCkpOwogCiAgICAgICAgIHN3
aXRjaCAocHJlZml4LT50eXBlKSB7CiAgICAgICAgIGNhc2UgVG9rZW46OlR5cGU6OlBsdXNQbHVz
OiB7CkBAIC0yMDExLDcgKzIwMTEsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VDYWxsRXhwcmVzc2lv
bigpIC0+IEV4CiAgICAgfQogCiAgICAgQ09OU1VNRV9UWVBFKHJpZ2h0UGFyZW50aGVzaXMsIFJp
Z2h0UGFyZW50aGVzaXMpOwotICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uKCpuYW1lLCAq
cmlnaHRQYXJlbnRoZXNpcyk7CisgICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9uKCpuYW1lLCAqcmln
aHRQYXJlbnRoZXNpcyk7CiAKICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4
cHJlc3Npb24+KGxvY2F0aW9uLCBXVEZNb3ZlKGNhbGxOYW1lKSwgV1RGTW92ZShhcmd1bWVudHMp
KSB9OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
YXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFBhcnNlci5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0
Niw3IEBACiAjaW5jbHVkZSAiV0hMU0xFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LmgiCiAj
aW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCIKICNpbmNsdWRlICJXSExTTEVu
dW1lcmF0aW9uTWVtYmVyLmgiCisjaW5jbHVkZSAiV0hMU0xFcnJvci5oIgogI2luY2x1ZGUgIldI
TFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMRmFsbHRocm91Z2guaCIKICNpbmNsdWRl
ICJXSExTTEZsb2F0TGl0ZXJhbC5oIgpAQCAtMTA2LDIxICsxMDcsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIFVzZXIKICAgICB9OwogCi0gICAgc3RydWN0IEVycm9yIHsKLSAgICAgICAgRXJyb3IoU3Ry
aW5nJiYgZXJyb3IpCi0gICAgICAgICAgICA6IGVycm9yKFdURk1vdmUoZXJyb3IpKQotICAgICAg
ICB7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgZXJyb3I7Ci0KLSAgICAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG91dC5w
cmludChlcnJvcik7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgT3B0aW9uYWw8RXJyb3I+IHBh
cnNlKFByb2dyYW0mLCBTdHJpbmdWaWV3LCBNb2RlKTsKKyAgICBFeHBlY3RlZDx2b2lkLCBFcnJv
cj4gcGFyc2UoUHJvZ3JhbSYsIFN0cmluZ1ZpZXcsIE1vZGUpOwogCiBwcml2YXRlOgogICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgbm90IG5lZWQgdGhpcwpAQCAtMTU4LDEzICsxNDUsMTMgQEAgcHJp
dmF0ZToKICAgICBFeHBlY3RlZDxBU1Q6OlR5cGVBcmd1bWVudCwgRXJyb3I+IHBhcnNlVHlwZUFy
Z3VtZW50KCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpUeXBlQXJndW1lbnRzLCBFcnJvcj4gcGFyc2VU
eXBlQXJndW1lbnRzKCk7CiAgICAgc3RydWN0IFR5cGVTdWZmaXhBYmJyZXZpYXRlZCB7Ci0gICAg
ICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uOworICAgICAgICBDb2RlTG9jYXRpb24gbG9j
YXRpb247CiAgICAgICAgIFRva2VuIHRva2VuOwogICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4g
bnVtRWxlbWVudHM7CiAgICAgfTsKICAgICBFeHBlY3RlZDxUeXBlU3VmZml4QWJicmV2aWF0ZWQs
IEVycm9yPiBwYXJzZVR5cGVTdWZmaXhBYmJyZXZpYXRlZCgpOwogICAgIHN0cnVjdCBUeXBlU3Vm
Zml4Tm9uQWJicmV2aWF0ZWQgewotICAgICAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbjsK
KyAgICAgICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9uOwogICAgICAgICBUb2tlbiB0b2tlbjsKICAg
ICAgICAgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZTsKICAgICAgICAg
T3B0aW9uYWw8dW5zaWduZWQ+IG51bUVsZW1lbnRzOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCShyZXZpc2lvbiAy
NDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBh
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSwxMCArOTUsMTEgQEAgc3RhdGljIGJvb2wgZHVt
cEFTVEF0RW5kSWZOZWVkZWQoUHJvZ3JhbQogI2RlZmluZSBDSEVDS19QQVNTKHBhc3MsIC4uLikg
XAogICAgIGRvIHsgXAogICAgICAgICBkdW1wQVNUQmV0d2VlbkVhY2hQYXNzSWZOZWVkZWQocHJv
Z3JhbSwgIkFTVCBiZWZvcmUgIiAjIHBhc3MpOyBcCi0gICAgICAgIGlmICghcGFzcyhfX1ZBX0FS
R1NfXykpIHsgXAorICAgICAgICBhdXRvIHJlc3VsdCA9IHBhc3MoX19WQV9BUkdTX18pOyBcCisg
ICAgICAgIGlmICghcmVzdWx0KSB7IFwKICAgICAgICAgICAgIGlmIChkdW1wUGFzc0ZhaWx1cmUp
IFwKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCBwYXNzOiAiICMgcGFzcyk7IFwK
LSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7IFwKKyAgICAgICAgICAgICAgICBkYXRh
TG9nTG4oImZhaWxlZCBwYXNzOiAiICMgcGFzcywgIiAiLCBMZXhlcjo6ZXJyb3JTdHJpbmcod2hs
c2xTb3VyY2UsIHJlc3VsdC5lcnJvcigpKSk7IFwKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChMZXhlcjo6ZXJyb3JTdHJpbmcod2hsc2xTb3VyY2UsIHJlc3VsdC5lcnJvcigpKSk7
IFwKICAgICAgICAgfSBcCiAgICAgfSB3aGlsZSAoMCkKIApAQCAtMTA4LDE0ICsxMDksMTUgQEAg
c3RhdGljIGJvb2wgZHVtcEFTVEF0RW5kSWZOZWVkZWQoUHJvZ3JhbQogICAgICAgICBwYXNzKF9f
VkFfQVJHU19fKTsgXAogICAgIH0gd2hpbGUgKDApCiAKLXN0YXRpYyBPcHRpb25hbDxQcm9ncmFt
PiBwcmVwYXJlU2hhcmVkKFN0cmluZyYgd2hsc2xTb3VyY2UpCitzdGF0aWMgRXhwZWN0ZWQ8UHJv
Z3JhbSwgU3RyaW5nPiBwcmVwYXJlU2hhcmVkKFN0cmluZyYgd2hsc2xTb3VyY2UpCiB7CiAgICAg
UHJvZ3JhbSBwcm9ncmFtOwogICAgIFBhcnNlciBwYXJzZXI7Ci0gICAgaWYgKGF1dG8gcGFyc2VG
YWlsdXJlID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHdobHNsU291cmNlLCBQYXJzZXI6Ok1vZGU6
OlVzZXIpKSB7CisgICAgYXV0byBwYXJzZVJlc3VsdCA9IHBhcnNlci5wYXJzZShwcm9ncmFtLCB3
aGxzbFNvdXJjZSwgUGFyc2VyOjpNb2RlOjpVc2VyKTsKKyAgICBpZiAoIXBhcnNlUmVzdWx0KSB7
CiAgICAgICAgIGlmIChkdW1wUGFzc0ZhaWx1cmUpCi0gICAgICAgICAgICBkYXRhTG9nTG4oImZh
aWxlZCB0byBwYXJzZSB0aGUgcHJvZ3JhbTogIiwgKnBhcnNlRmFpbHVyZSk7Ci0gICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwYXJz
ZSB0aGUgcHJvZ3JhbTogIiwgTGV4ZXI6OmVycm9yU3RyaW5nKHdobHNsU291cmNlLCBwYXJzZVJl
c3VsdC5lcnJvcigpKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChMZXhlcjo6ZXJy
b3JTdHJpbmcod2hsc2xTb3VyY2UsIHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKICAgICB9CiAgICAg
aW5jbHVkZVN0YW5kYXJkTGlicmFyeShwcm9ncmFtLCBwYXJzZXIsIHBhcnNlRnVsbFN0YW5kYXJk
TGlicmFyeSk7CiAKQEAgLTE0OSwxNCArMTUxLDE0IEBAIHN0YXRpYyBPcHRpb25hbDxQcm9ncmFt
PiBwcmVwYXJlU2hhcmVkKFMKICAgICByZXR1cm4gcHJvZ3JhbTsKIH0KIAotT3B0aW9uYWw8UmVu
ZGVyUHJlcGFyZVJlc3VsdD4gcHJlcGFyZShTdHJpbmcmIHdobHNsU291cmNlLCBSZW5kZXJQaXBl
bGluZURlc2NyaXB0b3ImIHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcikKK0V4cGVjdGVkPFJlbmRl
clByZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFyZShTdHJpbmcmIHdobHNsU291cmNlLCBSZW5k
ZXJQaXBlbGluZURlc2NyaXB0b3ImIHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcikKIHsKICAgICBh
dXRvIHByb2dyYW0gPSBwcmVwYXJlU2hhcmVkKHdobHNsU291cmNlKTsKICAgICBpZiAoIXByb2dy
YW0pCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChwcm9ncmFtLmVycm9yKCkpOwogICAgIGF1dG8gbWF0Y2hlZFNlbWFudGljcyA9IG1h
dGNoU2VtYW50aWNzKCpwcm9ncmFtLCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwogICAgIGlm
ICghbWF0Y2hlZFNlbWFudGljcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKExleGVyOjplcnJvclN0cmluZyh3aGxzbFNvdXJjZSwg
RXJyb3IoIkNvdWxkIG5vdCBtYXRjaCBzZW1hbnRpY3MiX3N0cikpKTsKIAogICAgIGF1dG8gZ2Vu
ZXJhdGVkQ29kZSA9IE1ldGFsOjpnZW5lcmF0ZU1ldGFsQ29kZSgqcHJvZ3JhbSwgV1RGTW92ZSgq
bWF0Y2hlZFNlbWFudGljcyksIHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvci5sYXlvdXQpOwogCkBA
IC0xNjcsMTcgKzE2OSwxNyBAQCBPcHRpb25hbDxSZW5kZXJQcmVwYXJlUmVzdWx0PiBwcmVwYXJl
KFN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotT3B0aW9uYWw8Q29tcHV0ZVByZXBhcmVSZXN1
bHQ+IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwgQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRv
ciYgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcikKK0V4cGVjdGVkPENvbXB1dGVQcmVwYXJlUmVz
dWx0LCBTdHJpbmc+IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwgQ29tcHV0ZVBpcGVsaW5l
RGVzY3JpcHRvciYgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcikKIHsKICAgICBhdXRvIHByb2dy
YW0gPSBwcmVwYXJlU2hhcmVkKHdobHNsU291cmNlKTsKICAgICBpZiAoIXByb2dyYW0pCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChw
cm9ncmFtLmVycm9yKCkpOwogICAgIGF1dG8gbWF0Y2hlZFNlbWFudGljcyA9IG1hdGNoU2VtYW50
aWNzKCpwcm9ncmFtLCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKICAgICBpZiAoIW1hdGNo
ZWRTZW1hbnRpY3MpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChMZXhlcjo6ZXJyb3JTdHJpbmcod2hsc2xTb3VyY2UsIEVycm9yKCJD
b3VsZCBub3QgbWF0Y2ggc2VtYW50aWNzIl9zdHIpKSk7CiAgICAgYXV0byBjb21wdXRlRGltZW5z
aW9ucyA9IFdITFNMOjpjb21wdXRlRGltZW5zaW9ucygqcHJvZ3JhbSwgKm1hdGNoZWRTZW1hbnRp
Y3MtPnNoYWRlcik7CiAgICAgaWYgKCFjb21wdXRlRGltZW5zaW9ucykKLSAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKExleGVyOjplcnJv
clN0cmluZyh3aGxzbFNvdXJjZSwgRXJyb3IoIkNvdWxkIG5vdCBtYXRjaCBjb21wdXRlIGRpbWVu
c2lvbnMiX3N0cikpKTsKIAogICAgIGF1dG8gZ2VuZXJhdGVkQ29kZSA9IE1ldGFsOjpnZW5lcmF0
ZU1ldGFsQ29kZSgqcHJvZ3JhbSwgV1RGTW92ZSgqbWF0Y2hlZFNlbWFudGljcyksIGNvbXB1dGVQ
aXBlbGluZURlc2NyaXB0b3IubGF5b3V0KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmgJKHJldmlzaW9uIDI0NzcwMCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisj
aW5jbHVkZSAiV0hMU0xFcnJvci5oIgogI2luY2x1ZGUgIldITFNMUGlwZWxpbmVEZXNjcmlwdG9y
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM0LDEzICszNSwxMiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7CiAKLS8vIEZJWE1FOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NjgyIEdlbmVyYXRlIGRl
c2NyaXB0aXZlIGVycm9yIG1lc3NhZ2VzIGFuZCByZXR1cm4gdGhlbSBoZXJlLgogc3RydWN0IFJl
bmRlclByZXBhcmVSZXN1bHQgewogICAgIFN0cmluZyBtZXRhbFNvdXJjZTsKICAgICBTdHJpbmcg
bWFuZ2xlZFZlcnRleEVudHJ5UG9pbnROYW1lOwogICAgIFN0cmluZyBtYW5nbGVkRnJhZ21lbnRF
bnRyeVBvaW50TmFtZTsKIH07Ci1PcHRpb25hbDxSZW5kZXJQcmVwYXJlUmVzdWx0PiBwcmVwYXJl
KFN0cmluZyYgd2hsc2xTb3VyY2UsIFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYpOworRXhwZWN0
ZWQ8UmVuZGVyUHJlcGFyZVJlc3VsdCwgU3RyaW5nPiBwcmVwYXJlKFN0cmluZyYgd2hsc2xTb3Vy
Y2UsIFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYpOwogCiBzdHJ1Y3QgQ29tcHV0ZURpbWVuc2lv
bnMgewogICAgIHVuc2lnbmVkIHdpZHRoOwpAQCAtNTMsNyArNTMsNyBAQCBzdHJ1Y3QgQ29tcHV0
ZVByZXBhcmVSZXN1bHQgewogICAgIFN0cmluZyBtYW5nbGVkRW50cnlQb2ludE5hbWU7CiAgICAg
Q29tcHV0ZURpbWVuc2lvbnMgY29tcHV0ZURpbWVuc2lvbnM7CiB9OwotT3B0aW9uYWw8Q29tcHV0
ZVByZXBhcmVSZXN1bHQ+IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwgQ29tcHV0ZVBpcGVs
aW5lRGVzY3JpcHRvciYpOworRXhwZWN0ZWQ8Q29tcHV0ZVByZXBhcmVSZXN1bHQsIFN0cmluZz4g
cHJlcGFyZShTdHJpbmcmIHdobHNsU291cmNlLCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJik7
CiAKIH0gLy8gbmFtZXNwYWNlIFdITFNMCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNw
cAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc3LDcgKzI3
Nyw3IEBAIHN0cnVjdCBNb2RpZmljYXRpb25SZXN1bHQgewogICAgIFZlY3RvcjxVbmlxdWVSZWY8
QVNUOjpFeHByZXNzaW9uPj4gZXhwcmVzc2lvbnM7CiAgICAgVW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4gcmVzdWx0OwogfTsKLXN0YXRpYyBPcHRpb25hbDxNb2RpZnlSZXN1bHQ+IG1vZGlmeShB
U1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBz
dGQ6OmZ1bmN0aW9uPE9wdGlvbmFsPE1vZGlmaWNhdGlvblJlc3VsdD4oT3B0aW9uYWw8VW5pcXVl
UmVmPEFTVDo6RXhwcmVzc2lvbj4+JiYpPiBtb2RpZmljYXRpb24pCitzdGF0aWMgRXhwZWN0ZWQ8
TW9kaWZ5UmVzdWx0LCBFcnJvcj4gbW9kaWZ5KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9u
JiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sIHN0ZDo6ZnVuY3Rpb248T3B0aW9uYWw8TW9kaWZp
Y2F0aW9uUmVzdWx0PihPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4mJik+IG1v
ZGlmaWNhdGlvbikKIHsKICAgICAvLyBDb25zaWRlciBhLmIuYy5kKys7CiAgICAgLy8gVGhpcyB3
b3VsZCBnZXQgdHJhbnNmb3JtZWQgaW50bzoKQEAgLTQyOCw3ICs0MjgsNyBAQCBzdGF0aWMgT3B0
aW9uYWw8TW9kaWZ5UmVzdWx0PiBtb2RpZnkoQVNUCiAgICAgICAgIGF1dG8gY2FsbEV4cHJlc3Np
b24gPSBnZXR0ZXJDYWxsKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiwgcmVsZXZhbnRBbmRlciwg
cHJldmlvdXNMZWZ0VmFsdWUsIGluZGV4VmFyaWFibGUgPyAmKmluZGV4VmFyaWFibGUgOiBudWxs
cHRyKTsKIAogICAgICAgICBpZiAoIWNhbGxFeHByZXNzaW9uKQotICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigi
Q291bGQgbm90IHJlc29sdmUgZ2V0dGVyIGNhbGwuIiwgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9u
LmNvZGVMb2NhdGlvbigpKSk7CiAKICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5j
ZTo6d3JhcCh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CiAgICAgICAgIEFTU0VSVCh2YXJpYWJsZURl
Y2xhcmF0aW9uLnR5cGUoKSk7CkBAIC00NTAsNyArNDUwLDcgQEAgc3RhdGljIE9wdGlvbmFsPE1v
ZGlmeVJlc3VsdD4gbW9kaWZ5KEFTVAogICAgIC8vIFN0ZXAgMzoKICAgICBhdXRvIG1vZGlmaWNh
dGlvblJlc3VsdCA9IG1vZGlmaWNhdGlvbihXVEZNb3ZlKGxhc3RHZXR0ZXJDYWxsRXhwcmVzc2lv
bikpOwogICAgIGlmICghbW9kaWZpY2F0aW9uUmVzdWx0KQotICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkNvdWxkIG5vdCBl
bWl0IG1vZGlmY2F0aW9uLiIsIGNoYWluWzBdLmdldCgpLmNvZGVMb2NhdGlvbigpKSk7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtb2RpZmljYXRpb25SZXN1bHQtPmV4cHJlc3Npb25zLnNp
emUoKTsgKytpKQogICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShtb2RpZmljYXRp
b25SZXN1bHQtPmV4cHJlc3Npb25zW2ldKSk7CiAKQEAgLTQ3MSw3ICs0NzEsNyBAQCBzdGF0aWMg
T3B0aW9uYWw8TW9kaWZ5UmVzdWx0PiBtb2RpZnkoQVNUCiAgICAgICAgIH0sIGluZGV4VmFyaWFi
bGUgPyAmKmluZGV4VmFyaWFibGUgOiBudWxscHRyKTsKIAogICAgICAgICBpZiAoIWFzc2lnbm1l
bnRFeHByZXNzaW9uKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiQ291bGQgbm90IGVtaXQgc2V0dGVyLiIs
IHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkpOwogCiAgICAgICAgIGV4
cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKCphc3NpZ25tZW50RXhwcmVzc2lvbikpOwogCkBAIC00
OTgsNyArNDk4LDcgQEAgc3RhdGljIE9wdGlvbmFsPE1vZGlmeVJlc3VsdD4gbW9kaWZ5KEFTVAog
ICAgICAgICB9LCBpbmRleFZhcmlhYmxlc1tpbmRleFZhcmlhYmxlcy5zaXplKCkgLSAxXSA/ICYq
KGluZGV4VmFyaWFibGVzW2luZGV4VmFyaWFibGVzLnNpemUoKSAtIDFdKSA6IG51bGxwdHIpOwog
CiAgICAgICAgIGlmICghYXNzaWdubWVudEV4cHJlc3Npb24pCi0gICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJD
b3VsZCBub3QgZW1pdCBzZXR0ZXIuIiwgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmNvZGVMb2Nh
dGlvbigpKSk7CiAKICAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoKmFzc2lnbm1l
bnRFeHByZXNzaW9uKSk7CiAgICAgfQpAQCAtNTMzLDcgKzUzMyw3IEBAIHZvaWQgUHJvcGVydHlS
ZXNvbHZlcjo6dmlzaXQoQVNUOjpBc3NpZ24KICAgICB9KTsKIAogICAgIGlmICghbW9kaWZ5UmVz
dWx0KSB7Ci0gICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKG1vZGlmeVJlc3Vs
dC5lcnJvcigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBzaW1wbGlmeUxlZnRWYWx1
ZShtb2RpZnlSZXN1bHQtPmlubmVyTGVmdFZhbHVlKTsKQEAgLTU1MCw3ICs1NTAsNyBAQCB2b2lk
IFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6QXNzaWduCiB2b2lkIFByb3BlcnR5UmVzb2x2
ZXI6OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbikKIHsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbi5uZXdWYWx1ZUV4cHJlc3Npb24oKSk7Ci0gICAgaWYgKGVycm9yKCkpCisgICAgaWYg
KGhhc0Vycm9yKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gbG9jYXRpb24gPSByZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpOwpAQCAtNjYyLDcgKzY2Miw3IEBA
IHZvaWQgUHJvcGVydHlSZXNvbHZlcjo6dmlzaXQoQVNUOjpSZWFkTW8KIAogICAgIEFTU0VSVCgh
cmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS50eXBlQW5ub3RhdGlvbigpLmlz
UmlnaHRWYWx1ZSgpKTsKICAgICBpZiAoIWlzPEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9u
PihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKSkgewotICAgICAgICBzZXRF
cnJvcigpOworICAgICAgICBzZXRFcnJvcihFcnJvcigiVW5leHBlY3RlZCBsaHMgdmFsdWUgZm9y
IHJlYWQgbW9kaWZ5IHdyaXRlIGV4cHJlc3Npb24uIiwgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bi5sZWZ0VmFsdWUoKS5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIGF1dG8gbW9kaWZ5UmVzdWx0ID0gbW9kaWZ5KGRvd25jYXN0PEFTVDo6UHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uPihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKSwgWyZd
KE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiYmIGxhc3RHZXR0ZXJDYWxsRXhw
cmVzc2lvbikgLT4gT3B0aW9uYWw8TW9kaWZpY2F0aW9uUmVzdWx0PiB7CkBAIC03MDMsNyArNzAz
LDcgQEAgdm9pZCBQcm9wZXJ0eVJlc29sdmVyOjp2aXNpdChBU1Q6OlJlYWRNbwogICAgIH0pOwog
CiAgICAgaWYgKCFtb2RpZnlSZXN1bHQpIHsKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAg
c2V0RXJyb3IobW9kaWZ5UmVzdWx0LmVycm9yKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIHNpbXBsaWZ5TGVmdFZhbHVlKG1vZGlmeVJlc3VsdC0+aW5uZXJMZWZ0VmFsdWUpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpb25DaGVj
a2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFJlY3Vyc2lvbkNoZWNrZXIuY3BwCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2lvbkNoZWNrZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgYXV0byBh
ZGRSZXN1bHQgPSBtX3N0YXJ0ZWRWaXNpdGluZy5hZGQoJmZ1bmN0aW9uRGVmaW5pdGlvbik7CiAg
ICAgICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgICAgIHNldEVycm9y
KCk7CisgICAgICAgICAgICBzZXRFcnJvcihFcnJvcigiQ2Fubm90IHVzZSByZWN1cnNpb24gaW4g
dGhlIGNhbGwgZ3JhcGguIiwgZnVuY3Rpb25EZWZpbml0aW9uLmNvZGVMb2NhdGlvbigpKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtNzcsMTEgKzc3LDExIEBAIHByaXZh
dGU6CiAgICAgSGFzaFNldDxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbio+IG1fZmluaXNoZWRWaXNp
dGluZzsKIH07CiAKLWJvb2wgY2hlY2tSZWN1cnNpb24oUHJvZ3JhbSYgcHJvZ3JhbSkKK0V4cGVj
dGVkPHZvaWQsIEVycm9yPiBjaGVja1JlY3Vyc2lvbihQcm9ncmFtJiBwcm9ncmFtKQogewogICAg
IFJlY3Vyc2lvbkNoZWNrZXIgcmVjdXJzaW9uQ2hlY2tlcjsKICAgICByZWN1cnNpb25DaGVja2Vy
LlZpc2l0b3I6OnZpc2l0KHByb2dyYW0pOwotICAgIHJldHVybiAhcmVjdXJzaW9uQ2hlY2tlci5l
cnJvcigpOworICAgIHJldHVybiByZWN1cnNpb25DaGVja2VyLmdldEVycm9yKCk7CiB9CiAKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaW9u
Q2hlY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUmVjdXJzaW9uQ2hlY2tlci5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2lvbkNoZWNrZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsMTMgKzI3LDE2IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisj
aW5jbHVkZSAiV0hMU0xFcnJvci5oIgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7CiAKIGNsYXNzIFByb2dyYW07CiAK
LWJvb2wgY2hlY2tSZWN1cnNpb24oUHJvZ3JhbSYpOworRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IGNo
ZWNrUmVjdXJzaW9uKFByb2dyYW0mKTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5
cGVDaGVja2VyLmNwcAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU3LDcgKzU3LDcgQEAgZG8geyBcCiAgICAgICAgIHJldHVybjsgXAogICAgIGF1dG8g
cmVzdWx0U3RhcnRlZFZpc2l0aW5nID0gbV9zdGFydGVkVmlzaXRpbmcuYWRkKHQpOyBcCiAgICAg
aWYgKCFyZXN1bHRTdGFydGVkVmlzaXRpbmcuaXNOZXdFbnRyeSkgeyBcCi0gICAgICAgIHNldEVy
cm9yKCk7IFwKKyAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5vdCBkZWNsYXJlIHJlY3Vyc2l2
ZSB0eXBlcy4iLCAodCktPmNvZGVMb2NhdGlvbigpKSk7IFwKICAgICAgICAgcmV0dXJuOyBcCiAg
ICAgfSBcCiB9IHdoaWxlIChmYWxzZSk7CkBAIC0xMDIsMTQgKzEwMiwxNCBAQCB2b2lkIFJlY3Vy
c2l2ZVR5cGVDaGVja2VyOjp2aXNpdChBU1Q6OlJlCiB7CiB9CiAKLWJvb2wgY2hlY2tSZWN1cnNp
dmVUeXBlcyhQcm9ncmFtJiBwcm9ncmFtKQorRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IGNoZWNrUmVj
dXJzaXZlVHlwZXMoUHJvZ3JhbSYgcHJvZ3JhbSkKIHsKICAgICBSZWN1cnNpdmVUeXBlQ2hlY2tl
ciByZWN1cnNpdmVUeXBlQ2hlY2tlcjsKICAgICBmb3IgKGF1dG8mIHR5cGVEZWZpbml0aW9uIDog
cHJvZ3JhbS50eXBlRGVmaW5pdGlvbnMoKSkKICAgICAgICAgcmVjdXJzaXZlVHlwZUNoZWNrZXIu
Y2hlY2tFcnJvckFuZFZpc2l0KHR5cGVEZWZpbml0aW9uKTsKICAgICBmb3IgKGF1dG8mIHN0cnVj
dHVyZURlZmluaXRpb24gOiBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25zKCkpCiAgICAgICAg
IHJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1cmVEZWZpbml0
aW9uKTsKLSAgICByZXR1cm4gIXJlY3Vyc2l2ZVR5cGVDaGVja2VyLmVycm9yKCk7CisgICAgcmV0
dXJuIHJlY3Vyc2l2ZVR5cGVDaGVja2VyLmdldEVycm9yKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdITFNMCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJl
Y3Vyc2l2ZVR5cGVDaGVja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oCShyZXZpc2lvbiAyNDc3
MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2
ZVR5cGVDaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAogI2lmIEVO
QUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTEVycm9yLmgiCisjaW5jbHVkZSA8d3RmL0V4
cGVjdGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzQsNyArMzYsNyBAQCBuYW1l
c3BhY2UgV0hMU0wgewogCiBjbGFzcyBQcm9ncmFtOwogCi1ib29sIGNoZWNrUmVjdXJzaXZlVHlw
ZXMoUHJvZ3JhbSYpOworRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IGNoZWNrUmVjdXJzaXZlVHlwZXMo
UHJvZ3JhbSYpOwogCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMU3RhbmRhcmRMaWJyYXJ5VXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeVV0aWxp
dGllcy5jcHAJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMU3RhbmRhcmRMaWJyYXJ5VXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzksOCArNzksOSBAQCB2b2lkIGluY2x1ZGVTdGFuZGFyZExpYnJhcnkoUHJvZ3JhbSYg
cHJvCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gc3RhbmRhcmRMaWJyYXJ5
KGRlY29tcHJlc3NBbmREZWNvZGVTdGFuZGFyZExpYnJhcnkoKSk7CiAgICAgaWYgKHBhcnNlRnVs
bFN0YW5kYXJkTGlicmFyeSkgewotICAgICAgICBpZiAoYXV0byBwYXJzZUZhaWx1cmUgPSBwYXJz
ZXIucGFyc2UocHJvZ3JhbSwgc3RhbmRhcmRMaWJyYXJ5LmdldCgpLCBQYXJzZXI6Ok1vZGU6OlN0
YW5kYXJkTGlicmFyeSkpIHsKLSAgICAgICAgICAgIGRhdGFMb2dMbigiZmFpbGVkIHRvIHBhcnNl
IHRoZSAoZnVsbCkgc3RhbmRhcmQgbGlicmFyeTogIiwgKnBhcnNlRmFpbHVyZSk7CisgICAgICAg
IGF1dG8gcGFyc2VSZXN1bHQgPSBwYXJzZXIucGFyc2UocHJvZ3JhbSwgc3RhbmRhcmRMaWJyYXJ5
LmdldCgpLCBQYXJzZXI6Ok1vZGU6OlN0YW5kYXJkTGlicmFyeSk7CisgICAgICAgIGlmICghcGFy
c2VSZXN1bHQpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiZmFpbGVkIHRvIHBhcnNlIHRoZSAo
ZnVsbCkgc3RhbmRhcmQgbGlicmFyeTogIiwgTGV4ZXI6OmVycm9yU3RyaW5nKFN0cmluZ1ZpZXco
c3RhbmRhcmRMaWJyYXJ5KSwgcGFyc2VSZXN1bHQuZXJyb3IoKSkpOwogICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwpAQCAtODksOCAr
OTAsOCBAQCB2b2lkIGluY2x1ZGVTdGFuZGFyZExpYnJhcnkoUHJvZ3JhbSYgcHJvCiAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCBTdWJzdHJpbmdMb2NhdGlvbj4+IHN0
YW5kYXJkTGlicmFyeUZ1bmN0aW9uTWFwKGNvbXB1dGVTdGFuZGFyZExpYnJhcnlGdW5jdGlvbk1h
cCgpKTsKIAogICAgIGF1dG8gc3RyaW5nVmlldyA9IFN0cmluZ1ZpZXcoc3RhbmRhcmRMaWJyYXJ5
LmdldCgpKS5zdWJzdHJpbmcoMCwgZmlyc3RGdW5jdGlvbk9mZnNldEluU3RhbmRhcmRMaWJyYXJ5
KCkpOwotICAgIGF1dG8gcGFyc2VGYWlsdXJlID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHN0cmlu
Z1ZpZXcsIFBhcnNlcjo6TW9kZTo6U3RhbmRhcmRMaWJyYXJ5KTsKLSAgICBBU1NFUlRfVU5VU0VE
KHBhcnNlRmFpbHVyZSwgIXBhcnNlRmFpbHVyZSk7CisgICAgYXV0byBwYXJzZVJlc3VsdCA9IHBh
cnNlci5wYXJzZShwcm9ncmFtLCBzdHJpbmdWaWV3LCBQYXJzZXI6Ok1vZGU6OlN0YW5kYXJkTGli
cmFyeSk7CisgICAgQVNTRVJUX1VOVVNFRChwYXJzZVJlc3VsdCwgcGFyc2VSZXN1bHQpOwogCiAg
ICAgTmFtZUZpbmRlciBuYW1lRmluZGVyOwogICAgIG5hbWVGaW5kZXIuVmlzaXRvcjo6dmlzaXQo
cHJvZ3JhbSk7CkBAIC0xMDksOCArMTEwLDkgQEAgdm9pZCBpbmNsdWRlU3RhbmRhcmRMaWJyYXJ5
KFByb2dyYW0mIHBybwogICAgICAgICAgICAgaWYgKGl0ZXJhdG9yID09IHN0YW5kYXJkTGlicmFy
eUZ1bmN0aW9uTWFwLmdldCgpLmVuZCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgYXV0byBzdHJpbmdWaWV3ID0gU3RyaW5nVmlldyhzdGFuZGFyZExpYnJhcnkuZ2V0
KCkpLnN1YnN0cmluZyhpdGVyYXRvci0+dmFsdWUuc3RhcnQsIGl0ZXJhdG9yLT52YWx1ZS5lbmQg
LSBpdGVyYXRvci0+dmFsdWUuc3RhcnQpOwotICAgICAgICAgICAgaWYgKGF1dG8gcGFyc2VGYWls
dXJlID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHN0cmluZ1ZpZXcsIFBhcnNlcjo6TW9kZTo6U3Rh
bmRhcmRMaWJyYXJ5KSkgewotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiZmFpbGVkIHRvIHBh
cnNlIHRoZSAocGFydGlhbCkgc3RhbmRhcmQgbGlicmFyeTogIiwgKnBhcnNlRmFpbHVyZSk7Cisg
ICAgICAgICAgICBhdXRvIHBhcnNlUmVzdWx0ID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHN0cmlu
Z1ZpZXcsIFBhcnNlcjo6TW9kZTo6U3RhbmRhcmRMaWJyYXJ5KTsKKyAgICAgICAgICAgIGlmICgh
cGFyc2VSZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwYXJz
ZSB0aGUgKHBhcnRpYWwpIHN0YW5kYXJkIGxpYnJhcnk6ICIsIExleGVyOjplcnJvclN0cmluZyhz
dHJpbmdWaWV3LCBwYXJzZVJlc3VsdC5lcnJvcigpKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGF0ZW1lbnRC
ZWhhdmlvckNoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMU3RhdGVtZW50QmVoYXZpb3JDaGVja2VyLmNwcAkocmV2aXNpb24g
MjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGF0
ZW1lbnRCZWhhdmlvckNoZWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCB2aXNpdChBU1Q6OkRvV2hpbGVMb29wJiBkb1doaWxlTG9vcCkg
b3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb1doaWxlTG9vcC5i
b2R5KCkpOwotICAgICAgICBpZiAoZXJyb3IoKSkKKyAgICAgICAgaWYgKGhhc0Vycm9yKCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGF1dG8gYiA9IG1fc3RhY2sudGFrZUxhc3QoKTsK
ICAgICAgICAgYi5yZW1vdmUoQmVoYXZpb3I6OkJyZWFrKTsKQEAgLTEwNyw3ICsxMDcsNyBAQCBw
cml2YXRlOgogICAgICAgICAvLyBzbyB3ZSBjYW4ganVzdCBpZ25vcmUgdGhlIGluaXRpYWxpemF0
aW9uLgogCiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmb3JMb29wLmJvZHkoKSk7Ci0gICAg
ICAgIGlmIChlcnJvcigpKQorICAgICAgICBpZiAoaGFzRXJyb3IoKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgYXV0byBiID0gbV9zdGFjay50YWtlTGFzdCgpOwogICAgICAgICBiLnJl
bW92ZShCZWhhdmlvcjo6QnJlYWspOwpAQCAtMTE5LDcgKzExOSw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCB2aXNpdChBU1Q6OldoaWxlTG9vcCYgd2hpbGVMb29wKSBvdmVycmlkZQogICAgIHsKICAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5ib2R5KCkpOwotICAgICAgICBpZiAo
ZXJyb3IoKSkKKyAgICAgICAgaWYgKGhhc0Vycm9yKCkpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIGF1dG8gYiA9IG1fc3RhY2sudGFrZUxhc3QoKTsKICAgICAgICAgYi5yZW1vdmUoQmVo
YXZpb3I6OkJyZWFrKTsKQEAgLTE0MywxMyArMTQzLDEzIEBAIHByaXZhdGU6CiAgICAgICAgIE9w
dGlvblNldDxCZWhhdmlvcj4gcmVkdWN0aW9uID0geyB9OwogICAgICAgICBmb3IgKGF1dG8mIHN3
aXRjaENhc2UgOiBzd2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKSkgewogICAgICAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KHN3aXRjaENhc2UpOwotICAgICAgICAgICAgaWYgKGVycm9yKCkp
CisgICAgICAgICAgICBpZiAoaGFzRXJyb3IoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICBhdXRvIGIgPSBtX3N0YWNrLnRha2VMYXN0KCk7CiAgICAgICAgICAgICByZWR1
Y3Rpb24gPSByZWR1Y3Rpb24gfCBiOwogICAgICAgICB9CiAgICAgICAgIGlmIChyZWR1Y3Rpb24u
Y29udGFpbnMoQmVoYXZpb3I6Ok5vdGhpbmcpKSB7Ci0gICAgICAgICAgICBzZXRFcnJvcigpOwor
ICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIlN3aXRjaCBzdGF0ZW1lbnQgbXVzdCBlbmQgaW4g
YSBicmVhay9mYWxsdGhyb3VnaC9yZXR1cm4iLCBzd2l0Y2hTdGF0ZW1lbnQuY29kZUxvY2F0aW9u
KCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICByZWR1Y3Rpb24u
cmVtb3ZlKEJlaGF2aW9yOjpCcmVhayk7CkBAIC0xNjEsMTMgKzE2MSwxMyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgdmlzaXQoQVNUOjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpIG92ZXJyaWRlCiAg
ICAgewogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuYm9keSgpKTsKLSAg
ICAgICAgaWYgKGVycm9yKCkpCisgICAgICAgIGlmIChoYXNFcnJvcigpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBhdXRvIGIgPSBtX3N0YWNrLnRha2VMYXN0KCk7CiAgICAgICAgIE9w
dGlvblNldDxCZWhhdmlvcj4gYlByaW1lOwogICAgICAgICBpZiAoaWZTdGF0ZW1lbnQuZWxzZUJv
ZHkoKSkgewogICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCppZlN0YXRlbWVudC5lbHNl
Qm9keSgpKTsKLSAgICAgICAgICAgIGlmIChlcnJvcigpKQorICAgICAgICAgICAgaWYgKGhhc0Vy
cm9yKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYlByaW1lID0gbV9z
dGFjay50YWtlTGFzdCgpOwogICAgICAgICB9IGVsc2UKQEAgLTE5MCwyMiArMTkwLDIyIEBAIHBy
aXZhdGU6CiAgICAgICAgIE9wdGlvblNldDxCZWhhdmlvcj4gcmVkdWN0aW9uID0geyB9OwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLnN0YXRlbWVudHMoKS5zaXplKCkgLSAx
OyArK2kpIHsKICAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChibG9jay5zdGF0ZW1lbnRz
KClbaV0pOwotICAgICAgICAgICAgaWYgKGVycm9yKCkpCisgICAgICAgICAgICBpZiAoaGFzRXJy
b3IoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBhdXRvIGIgPSBtX3N0
YWNrLnRha2VMYXN0KCk7CiAgICAgICAgICAgICBpZiAoIWIuY29udGFpbnMoQmVoYXZpb3I6Ok5v
dGhpbmcpKSB7Ci0gICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICBz
ZXRFcnJvcihFcnJvcigiU3RhdGVtZW50IGluc2lkZSBhbiBpbm5lciBibG9jayBtdXN0IGJlIHJl
YWNoYWJsZS4iLCBibG9jay5zdGF0ZW1lbnRzKClbaV0tPmNvZGVMb2NhdGlvbigpKSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYi5yZW1vdmUo
QmVoYXZpb3I6Ok5vdGhpbmcpOwogICAgICAgICAgICAgaWYgKGIuY29udGFpbnMoQmVoYXZpb3I6
OkZhbGx0aHJvdWdoKSkgewotICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAg
ICAgICAgc2V0RXJyb3IoRXJyb3IoIkZhbGx0aHJvdWdoIG11c3QgYmUgdGhlIGxhc3Qgc3RhdGVt
ZW50IGluIGEgYmxvY2suIiwgYmxvY2suc3RhdGVtZW50cygpW2ldLT5jb2RlTG9jYXRpb24oKSkp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJl
ZHVjdGlvbiA9IHJlZHVjdGlvbiB8IGI7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KGJsb2NrLnN0YXRlbWVudHMoKVtibG9jay5zdGF0ZW1lbnRzKCkuc2l6ZSgpIC0gMV0p
OwotICAgICAgICBpZiAoZXJyb3IoKSkKKyAgICAgICAgaWYgKGhhc0Vycm9yKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIGF1dG8gYiA9IG1fc3RhY2sudGFrZUxhc3QoKTsKICAgICAg
ICAgbV9zdGFjay5hcHBlbmQocmVkdWN0aW9uIHwgYik7CkBAIC0yMTksMjUgKzIxOSwyNSBAQCBw
cml2YXRlOgogICAgIFZlY3RvcjxPcHRpb25TZXQ8QmVoYXZpb3I+PiBtX3N0YWNrOwogfTsKIAot
Ym9vbCBjaGVja1N0YXRlbWVudEJlaGF2aW9yKFByb2dyYW0mIHByb2dyYW0pCitFeHBlY3RlZDx2
b2lkLCBFcnJvcj4gY2hlY2tTdGF0ZW1lbnRCZWhhdmlvcihQcm9ncmFtJiBwcm9ncmFtKQogewog
ICAgIFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlciBzdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXI7CiAg
ICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5p
dGlvbnMoKSkgewogICAgICAgICBzdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXIuVmlzaXRvcjo6dmlz
aXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudEJlaGF2aW9yQ2hl
Y2tlci5lcnJvcigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoc3Rh
dGVtZW50QmVoYXZpb3JDaGVja2VyLmhhc0Vycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gc3Rh
dGVtZW50QmVoYXZpb3JDaGVja2VyLmdldEVycm9yKCk7CiAgICAgICAgIGF1dG8gYmVoYXZpb3Ig
PSBzdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXIudGFrZUZ1bmN0aW9uQmVoYXZpb3IoKTsKICAgICAg
ICAgaWYgKG1hdGNoZXMoZnVuY3Rpb25EZWZpbml0aW9uLT50eXBlKCksIHByb2dyYW0uaW50cmlu
c2ljcygpLnZvaWRUeXBlKCkpKSB7CiAgICAgICAgICAgICBiZWhhdmlvci5yZW1vdmUoU3RhdGVt
ZW50QmVoYXZpb3JDaGVja2VyOjpCZWhhdmlvcjo6UmV0dXJuKTsKICAgICAgICAgICAgIGJlaGF2
aW9yLnJlbW92ZShTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXI6OkJlaGF2aW9yOjpOb3RoaW5nKTsK
ICAgICAgICAgICAgIGlmIChiZWhhdmlvciAhPSBPcHRpb25TZXQ8U3RhdGVtZW50QmVoYXZpb3JD
aGVja2VyOjpCZWhhdmlvcj4oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJ2b2lkIGZ1bmN0aW9ucyBt
dXN0IHJldHVybiBub3RoaW5nLiIpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlm
IChiZWhhdmlvciAhPSBTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXI6OkJlaGF2aW9yOjpSZXR1cm4p
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChFcnJvcigiTm9uLXZvaWQgZnVuY3Rpb25zIG11c3QgcmV0dXJuIHNvbWV0
aGluZy4iKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJu
IHsgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV0hMU0wKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhdGVtZW50QmVoYXZpb3JDaGVja2VyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGF0ZW1l
bnRCZWhhdmlvckNoZWNrZXIuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsMTMgKzI3LDE2IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisj
aW5jbHVkZSAiV0hMU0xFcnJvci5oIgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7CiAKIGNsYXNzIFByb2dyYW07CiAK
LWJvb2wgY2hlY2tTdGF0ZW1lbnRCZWhhdmlvcihQcm9ncmFtJik7CitFeHBlY3RlZDx2b2lkLCBF
cnJvcj4gY2hlY2tTdGF0ZW1lbnRCZWhhdmlvcihQcm9ncmFtJik7CiAKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVy
YXRvckxlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAJKHJldmlzaW9u
IDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3lu
dGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1
Niw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpB
cnJheVR5cGU+PiBtX2FycmF5VHlwZXM7CiB9OwogCi1ib29sIHN5bnRoZXNpemVBcnJheU9wZXJh
dG9yTGVuZ3RoKFByb2dyYW0mIHByb2dyYW0pCitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gc3ludGhl
c2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgoUHJvZ3JhbSYgcHJvZ3JhbSkKIHsKICAgICBGaW5kQXJy
YXlUeXBlcyBmaW5kQXJyYXlUeXBlczsKICAgICBmaW5kQXJyYXlUeXBlcy5jaGVja0Vycm9yQW5k
VmlzaXQocHJvZ3JhbSk7CkBAIC03MSw5ICs3MSw5IEBAIGJvb2wgc3ludGhlc2l6ZUFycmF5T3Bl
cmF0b3JMZW5ndGgoUHJvZ3IKICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJp
YWJsZURlY2xhcmF0aW9uKSk7CiAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
biBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2Nh
dGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVy
ZW5jZTo6d3JhcChsb2NhdGlvbiwgcHJvZ3JhbS5pbnRyaW5zaWNzKCkudWludFR5cGUoKSksICJv
cGVyYXRvci5sZW5ndGgiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVsbHB0ciwgaXNPcGVy
YXRvcikpOwogICAgICAgICBpZiAoIXByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbikpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJDYW5ub3Qgc3ludGhlc2l6ZSBvcGVyYXRvci5s
ZW5ndGggZm9yIGFycmF5IHR5cGUuIikpOwogICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBy
ZXR1cm4geyB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXSExTTApJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaAkocmV2aXNpb24gMjQ3NzAwKQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlP
cGVyYXRvckxlbmd0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMyArMjcsMTYgQEAKIAogI2lm
IEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTEVycm9yLmgiCisjaW5jbHVkZSA8d3Rm
L0V4cGVjdGVkLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsK
IAogY2xhc3MgUHJvZ3JhbTsKIAotYm9vbCBzeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aChQ
cm9ncmFtJik7CitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gc3ludGhlc2l6ZUFycmF5T3BlcmF0b3JM
ZW5ndGgoUHJvZ3JhbSYpOwogCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3Ry
dWN0b3JzLmNwcAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+PiBtX25hbWVkVHlwZXM7CiB9OwogCi1ib29sIHN5bnRo
ZXNpemVDb25zdHJ1Y3RvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKK0V4cGVjdGVkPHZvaWQsIEVycm9y
PiBzeW50aGVzaXplQ29uc3RydWN0b3JzKFByb2dyYW0mIHByb2dyYW0pCiB7CiAgICAgRmluZEFs
bFR5cGVzIGZpbmRBbGxUeXBlczsKICAgICBmaW5kQWxsVHlwZXMuY2hlY2tFcnJvckFuZFZpc2l0
KHByb2dyYW0pOwpAQCAtMTU4LDE1ICsxNTgsMTcgQEAgYm9vbCBzeW50aGVzaXplQ29uc3RydWN0
b3JzKFByb2dyYW0mIHBybwogICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IHVubmFtZWRUeXBl
S2V5LnVubmFtZWRUeXBlKCk7CiAgICAgICAgIGF1dG8gbG9jYXRpb24gPSB1bm5hbWVkVHlwZS5j
b2RlTG9jYXRpb24oKTsKIAotICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtl
VW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlm
aWVycygpLCB1bm5hbWVkVHlwZS5jbG9uZSgpLCBTdHJpbmcoKSwgbnVsbHB0ciwgbnVsbHB0cik7
Ci0gICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKLSAgICAgICAg
cGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7Ci0gICAgICAg
IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0b3IoQVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVs
bG9wdCwgdW5uYW1lZFR5cGUuY2xvbmUoKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShw
YXJhbWV0ZXJzKSwgbnVsbHB0ciwgaXNPcGVyYXRvcikpOwotICAgICAgICBwcm9ncmFtLmFwcGVu
ZChXVEZNb3ZlKGNvcHlDb25zdHJ1Y3RvcikpOworICAgICAgICB7CisgICAgICAgICAgICBhdXRv
IHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbj4obG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycygpLCB1bm5hbWVkVHlwZS5jbG9uZSgpLCBT
dHJpbmcoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZN
b3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxv
Y2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgdW5uYW1lZFR5cGUu
Y2xvbmUoKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVsbHB0
ciwgaXNPcGVyYXRvcikpOworICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShjb3B5
Q29uc3RydWN0b3IpKTsKKyAgICAgICAgfQogCiAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiBkZWZhdWx0Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxv
Y2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgdW5uYW1lZFR5cGUu
Y2xvbmUoKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucygp
LCBudWxscHRyLCBpc09wZXJhdG9yKSk7CiAgICAgICAgIGlmICghcHJvZ3JhbS5hcHBlbmQoV1RG
TW92ZShkZWZhdWx0Q29uc3RydWN0b3IpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiQ291bGQgbm90IHN5bnRoZXNp
emUgZGVmYXVsdCBjb25zdHJ1Y3RvciIpKTsKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIG5hbWVk
VHlwZSA6IG5hbWVkVHlwZXMpIHsKQEAgLTE5MCw5ICsxOTIsOSBAQCBib29sIHN5bnRoZXNpemVD
b25zdHJ1Y3RvcnMoUHJvZ3JhbSYgcHJvCiAgICAgICAgIH0KICAgICAgICAgQVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uIGRlZmF1bHRDb25zdHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6
OlR5cGVSZWZlcmVuY2U6OndyYXAobG9jYXRpb24sIG5hbWVkVHlwZS5nZXQoKSksICJvcGVyYXRv
ciBjYXN0Il9zdHIsIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMoKSwgbnVsbHB0ciwgaXNPcGVy
YXRvcikpOwogICAgICAgICBpZiAoIXByb2dyYW0uYXBwZW5kKFdURk1vdmUoZGVmYXVsdENvbnN0
cnVjdG9yKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkNvdWxkIG5vdCBzeW50aGVzaXplIGRlZmF1bHQgY29uc3Ry
dWN0b3IiKSk7CiAgICAgfQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdITFNMCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3Rv
cnMuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDEzICsyNywxNiBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMRXJy
b3IuaCIKKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBuYW1lc3BhY2UgV0hMU0wgewogCiBjbGFzcyBQcm9ncmFtOwogCi1ib29sIHN5bnRoZXNpemVD
b25zdHJ1Y3RvcnMoUHJvZ3JhbSYpOworRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IHN5bnRoZXNpemVD
b25zdHJ1Y3RvcnMoUHJvZ3JhbSYpOwogCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5
bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0
aW9uRnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7CiAKLWJvb2wgc3ludGhlc2l6ZUVudW1l
cmF0aW9uRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0pCitFeHBlY3RlZDx2b2lkLCBFcnJvcj4g
c3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0pCiB7CiAgICAg
Ym9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKICAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5p
dGlvbiA6IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKSB7CkBAIC00OSw3ICs0OSw3
IEBAIGJvb2wgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2cKICAgICAgICAgICAg
IHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjIpKTsKICAgICAg
ICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVC
bG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChsb2NhdGlvbiwg
cHJvZ3JhbS5pbnRyaW5zaWNzKCkuYm9vbFR5cGUoKSksICJvcGVyYXRvcj09Il9zdHIsIFdURk1v
dmUocGFyYW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKICAgICAgICAgICAgIGlmICgh
cHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChFcnJvcigiQ2Fubm90IGNyZWF0ZSBvcGVyYXRvcj09IGZvciBlbnVtIHR5cGUuIikp
OwogICAgICAgICB9CiAKICAgICAgICAgewpAQCAtNTgsNyArNTgsNyBAQCBib29sIHN5bnRoZXNp
emVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9nCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVu
ZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgICAgIEFTVDo6TmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxv
cHQsIGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+dHlwZSgpLmNsb25lKCksICJvcGVyYXRvci52YWx1
ZSJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CiAgICAg
ICAgICAgICBpZiAoIXByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbikpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkNhbm5vdCBjcmVhdGUgb3BlcmF0b3IudmFsdWUg
Zm9yIGVudW0gdHlwZS4iKSk7CiAgICAgICAgIH0KIAogICAgICAgICB7CkBAIC02Nyw3ICs2Nyw3
IEBAIGJvb2wgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2cKICAgICAgICAgICAg
IHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwogICAgICAg
ICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJs
b2NrKCksIFdURjo6bnVsbG9wdCwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCkuY2xvbmUo
KSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVsbHB0ciwgaXNP
cGVyYXRvcikpOwogICAgICAgICAgICAgaWYgKCFwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJDYW5ub3QgY3JlYXRl
IGNvcHkgY29uc3RydWN0b3IgZm9yIGVudW0gdHlwZS4iKSk7CiAgICAgICAgIH0KIAogICAgICAg
ICB7CkBAIC03NiwxMCArNzYsMTAgQEAgYm9vbCBzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlv
bnMoUHJvZwogICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURl
Y2xhcmF0aW9uKSk7CiAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24g
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRp
b24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBVbmlxdWVSZWY8QVNUOjpV
bm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBlbnVtZXJhdGlv
bkRlZmluaXRpb24pKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwg
bnVsbHB0ciwgaXNPcGVyYXRvcikpOwogICAgICAgICAgICAgaWYgKCFwcm9ncmFtLmFwcGVuZChX
VEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJD
YW5ub3QgY3JlYXRlICdvcGVyYXRvciBjYXN0JyBmb3IgZW51bSB0eXBlLiIpKTsKICAgICAgICAg
fQogICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXSExTTApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlv
bkZ1bmN0aW9ucy5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNywxMyArMjcsMTYgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNp
bmNsdWRlICJXSExTTEVycm9yLmgiCisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAogY2xhc3MgUHJvZ3JhbTsKIAot
Ym9vbCBzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMoUHJvZ3JhbSYpOworRXhwZWN0ZWQ8
dm9pZCwgRXJyb3I+IHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9ncmFtJik7CiAK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50
aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMu
Y3BwCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNM
IHsKIAotYm9vbCBzeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzKFByb2dyYW0mIHByb2dyYW0p
CitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gc3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyhQcm9n
cmFtJiBwcm9ncmFtKQogewogICAgIGJvb2wgaXNPcGVyYXRvciA9IHRydWU7CiAgICAgZm9yIChh
dXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygp
KSB7CkBAIC01OCwxMCArNTgsMTAgQEAgYm9vbCBzeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3Jz
KFByb2dyYQogICAgICAgICAgICAgICAgIHx8ICFwcm9ncmFtLmFwcGVuZChjcmVhdGVBbmRlcihB
U1Q6OkFkZHJlc3NTcGFjZTo6RGV2aWNlKSkKICAgICAgICAgICAgICAgICB8fCAhcHJvZ3JhbS5h
cHBlbmQoY3JlYXRlQW5kZXIoQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZGdyb3VwKSkKICAgICAg
ICAgICAgICAgICB8fCAhcHJvZ3JhbS5hcHBlbmQoY3JlYXRlQW5kZXIoQVNUOjpBZGRyZXNzU3Bh
Y2U6OlRocmVhZCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkNhbiBub3QgY3JlYXRlIGFuZGVyIikp
OwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdITFNMCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVT
dHJ1Y3R1cmVBY2Nlc3NvcnMuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDEzICsyNywxNiBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkK
IAorI2luY2x1ZGUgIldITFNMRXJyb3IuaCIKKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCiBjbGFzcyBQcm9ncmFt
OwogCi1ib29sIHN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMoUHJvZ3JhbSYpOworRXhwZWN0
ZWQ8dm9pZCwgRXJyb3I+IHN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMoUHJvZ3JhbSYpOwog
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlz
aXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMVmlzaXRvci5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOSAr
MjcsMTEgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTEVycm9yLmgi
CiAjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIldITFNMU2Vt
YW50aWMuaCIKICNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgorI2luY2x1ZGUgPHd0Zi9F
eHBlY3RlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE3OCwyMyArMTgwLDI0IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYp
OwogICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJik7CiAKLSAg
ICBib29sIGVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvcjsgfQorICAgIGJvb2wgaGFzRXJy
b3IoKSBjb25zdCB7IHJldHVybiAhbV9leHBlY3RlZEVycm9yOyB9CisgICAgRXhwZWN0ZWQ8dm9p
ZCwgRXJyb3I+IGdldEVycm9yKCkgeyByZXR1cm4gbV9leHBlY3RlZEVycm9yOyB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChUJiB4KQogICAgIHsK
LSAgICAgICAgaWYgKCFtX2Vycm9yKQorICAgICAgICBpZiAoIWhhc0Vycm9yKCkpCiAgICAgICAg
ICAgICB2aXNpdCh4KTsKICAgICB9CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIHNldEVycm9yKCkK
KyAgICB2b2lkIHNldEVycm9yKEVycm9yIGVycm9yKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFt
X2Vycm9yKTsKLSAgICAgICAgbV9lcnJvciA9IHRydWU7CisgICAgICAgIEFTU0VSVCghaGFzRXJy
b3IoKSk7CisgICAgICAgIG1fZXhwZWN0ZWRFcnJvciA9IG1ha2VVbmV4cGVjdGVkKGVycm9yKTsK
ICAgICB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBtX2Vycm9yIHsgZmFsc2UgfTsgLy8gRklYTUU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU2ODIgTWlncmF0ZSB0
aGlzIHRvIGJlIHNvbWUgc29ydCBvZiBkZXNjcmlwdGl2ZSBzdHJpbmcuCisgICAgRXhwZWN0ZWQ8
dm9pZCwgRXJyb3I+IG1fZXhwZWN0ZWRFcnJvcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdITFNM
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJh
eVJlZmVyZW5jZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaAkocmV2aXNpb24gMjQ3NzAw
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlS
ZWZlcmVuY2VUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVO
QUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xD
b2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJXSExTTFJlZmVyZW5jZVR5cGUuaCIKICNpbmNsdWRl
IDx3dGYvVW5pcXVlUmVmLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVR5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xBcnJheVR5cGUuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTExl
eGVyLmgiCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJXSExTTFR5
cGVBcmd1bWVudC5oIgogI2luY2x1ZGUgIldITFNMVW5uYW1lZFR5cGUuaCIKICNpbmNsdWRlIDx3
dGYvVW5pcXVlUmVmLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFzc2lnbm1lbnRFeHByZXNzaW9u
LmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNz
aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMQmFzZUZ1bmN0aW9uQXR0cmlidXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQmFzZUZ1bmN0
aW9uQXR0cmlidXRlLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJhc2VGdW5jdGlvbkF0dHJpYnV0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVk
ZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQmFzZVNlbWFudGljLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQmFzZVNlbWFudGljLmgJKHJldmlzaW9uIDI0
NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJh
c2VTZW1hbnRpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAKICNpZiBFTkFC
TEUoV0VCR1BVKQogCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJX
SExTTEVudHJ5UG9pbnRUeXBlLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJsb2NrLmgJKHJl
dmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVO
QUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xD
b2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJXSExTTFN0YXRlbWVudC5oIgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMQm9vbGVhbkxpdGVyYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCb29sZWFuTGl0ZXJhbC5oCShyZXZpc2lvbiAy
NDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xC
b29sZWFuTGl0ZXJhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgRU5B
QkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldI
TFNMTGV4ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCcmVhay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJyZWFrLmgJKHJldmlz
aW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEJyZWFrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJM
RShXRUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xDb2Rl
TG9jYXRpb24uaCIKICNpbmNsdWRlICJXSExTTFN0YXRlbWVudC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xCdWlsdEluU2VtYW50aWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaAkocmV2aXNpb24gMjQ3NzAw
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJ
blNlbWFudGljLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpZiBFTkFCTEUo
V0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xCYXNlU2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExT
TExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ2FsbEV4cHJlc3Npb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDYWxsRXhw
cmVzc2lvbi5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xDYWxsRXhwcmVzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw3ICsyOSw2IEBACiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJX
SExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5j
bHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb21tYUV4cHJlc3Npb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xDb21tYUV4cHJlc3Npb24uaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29tbWFFeHByZXNzaW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVk
ZSAiV0hMU0xFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUg
PHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnRpbnVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29u
dGludWUuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQ29udGludWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcs
NyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNp
bmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMU3RhdGVtZW50Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTERlcmVmZXJlbmNlRXhwcmVzc2lvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERlcmVmZXJlbmNl
RXhwcmVzc2lvbi5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xEZXJlZmVyZW5jZUV4cHJlc3Npb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJX
SExTTEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSA8d3Rm
L1VuaXF1ZVJlZi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xEb1doaWxlTG9vcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvV2hpbGVM
b29wLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTERvV2hpbGVMb29wLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4
LDYgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgi
Ci0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNMU3RhdGVtZW50LmgiCiAj
aW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xEb3RFeHByZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5o
CShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xEb3RFeHByZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYg
QEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5j
bHVkZSAiV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCIKICNpbmNsdWRlIDx3dGYvVW5p
cXVlUmVmLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVmZmVjdGZ1bEV4
cHJlc3Npb25TdGF0ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LmgJKHJl
dmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNyArMjgsNiBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJl
c3Npb24uaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTdGF0ZW1l
bnQuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsOCBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkK
IAorI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xFbnVtZXJh
dGlvbk1lbWJlci5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTE5h
bWVkVHlwZS5oIgogI2luY2x1ZGUgIldITFNMVW5uYW1lZFR5cGUuaCIKICNpbmNsdWRlIDxtZW1v
cnk+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xF
bnVtZXJhdGlvbk1lbWJlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyLmgJKHJldmlzaW9uIDI0Nzcw
MCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1l
cmF0aW9uTWVtYmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDggQEAKIAogI2lmIEVO
QUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUg
IldITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0
aW9uTWVtYmVyTGl0ZXJhbC5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAot
I2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNz
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMRXhwcmVzc2lvbi5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hM
U0xBZGRyZXNzU3BhY2UuaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hM
U0xDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgiCiAjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmFsbHRocm91Z2guaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xGYWxsdGhyb3VnaC5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGYWxsdGhyb3VnaC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xM
ZXhlci5oIgorI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xT
dGF0ZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRl
cmFsLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsy
OSw2IEBACiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJXSExTTEZs
b2F0TGl0ZXJhbFR5cGUuaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMRm9yTG9vcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEZvckxvb3AuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRm9yTG9vcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUg
IldITFNMRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJX
SExTTFN0YXRlbWVudC5oIgogI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0
ZW1lbnQuaCIKICNpbmNsdWRlIDxtZW1vcnk+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25E
ZWNsYXJhdGlvbi5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDkgKzI3LDkgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJX
SExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMRW50cnlQb2ludFR5cGUuaCIKICNp
bmNsdWRlICJXSExTTEZ1bmN0aW9uQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5o
IgogI2luY2x1ZGUgIldITFNMU2VtYW50aWMuaCIKICNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBl
LmgiCiAjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xHbG9iYWxWYXJpYWJsZVJlZmVy
ZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEdsb2JhbFZhcmlhYmxlUmVmZXJlbmNlLmgJKHJldmlzaW9uIDI0NzcwMCkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEdsb2JhbFZhcmlh
YmxlUmVmZXJlbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2lmIEVO
QUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xT
dHJ1Y3R1cmVFbGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJZlN0YXRlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTElmU3RhdGVtZW50LmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTElmU3RhdGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xF
eHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNMU3Rh
dGVtZW50LmgiCiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEluZGV4
RXhwcmVzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEluZGV4RXhwcmVzc2lvbi5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Np
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQ
VSkKIAotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlv
bi5oIgogI2luY2x1ZGUgIldITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgiCiAjaW5jbHVk
ZSA8d3RmL1VuaXF1ZVJlZi5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsLmgJKHJl
dmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEludGVnZXJMaXRlcmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAK
IAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMSW50ZWdlckxp
dGVyYWxUeXBlLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TExvZ2ljYWxFeHByZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTG9naWNhbEV4cHJlc3Npb24uaAkocmV2aXNpb24gMjQ3
NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTG9n
aWNhbEV4cHJlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2lmIEVO
QUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJX
SExTTExleGVyLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmgJKHJldmlz
aW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYg
QEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCi0j
aW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb24uaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkK
IAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIK
ICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VQb2ludGVy
RXhwcmVzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oCShyZXZpc2lvbiAyNDc3MDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlUG9p
bnRlckV4cHJlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2lmIEVO
QUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJX
SExTTExleGVyLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xOYW1lZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xOYW1lZFR5cGUuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZWRUeXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNs
dWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKICNpbmNs
dWRlICJXSExTTFR5cGUuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmF0aXZlVHlw
ZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgJKHJldmlzaW9uIDI0Nzcw
MCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNp
ZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldI
TFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKICNpbmNsdWRl
ICJXSExTTFR5cGVBcmd1bWVudC5oIgogI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTnVsbExp
dGVyYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xOdWxsTGl0ZXJhbC5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOdWxsTGl0ZXJhbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUg
IldITFNMRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJX
SExTTE51bGxMaXRlcmFsVHlwZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQb2ludGVyVHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFBvaW50ZXJUeXBlLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBvaW50ZXJUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTExl
eGVyLmgiCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJXSExTTFJl
ZmVyZW5jZVR5cGUuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24uaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5o
IgogI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIldITFNM
TGV4ZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFF1
YWxpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFF1YWxpZmllci5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xRdWFsaWZpZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUg
IldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUg
IldITFNMVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRl
ICJXSExTTEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAi
V0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZVJlZmVy
ZW5jZS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFJlZmVyZW5jZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmgJ
KHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFJlZmVyZW5jZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBA
QAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEFkZHJlc3NTcGFjZS5oIgot
I2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgog
I2luY2x1ZGUgIldITFNMVW5uYW1lZFR5cGUuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3Vy
Y2VTZW1hbnRpYy5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDcgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xC
YXNlU2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xD
b2RlTG9jYXRpb24uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXR1cm4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXR1cm4uaAko
cmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMUmV0dXJuLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBF
TkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAi
V0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNMU3RhdGVtZW50LmgiCiAjaW5jbHVkZSA8bWVt
b3J5PgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRp
Yy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5oCShyZXZpc2lvbiAyNDc3MDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTcGVjaWFs
aXphdGlvbkNvbnN0YW50U2VtYW50aWMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBA
QAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEJhc2VTZW1hbnRpYy5oIgot
I2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YWdlSW5PdXRTZW1h
bnRpYy5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNyArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEJhc2VT
ZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTENvZGVM
b2NhdGlvbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YXRlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YXRlbWVudC5o
CShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xTdGF0ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAog
CiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRl
ICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMU3RhdGVtZW50TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YXRlbWVudExpc3QuaAkocmV2aXNpb24g
MjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
U3RhdGVtZW50TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBF
TkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNM
Q29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFN0cnVjdHVyZURlZmluaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgJ
KHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFN0cnVjdHVyZURlZmluaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyAr
MjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIK
KyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMTmFtZWRUeXBl
LmgiCiAjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVFbGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMU3RydWN0dXJlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZUVsZW1lbnQuaAkocmV2aXNpb24gMjQ3
NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3Ry
dWN0dXJlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBF
TkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNM
Q29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xRdWFsaWZpZXIuaCIKICNpbmNsdWRlICJX
SExTTFNlbWFudGljLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBlLmgiCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTd2l0Y2hDYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3dpdGNo
Q2FzZS5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xTd2l0Y2hDYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4
LDggQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xCbG9jay5oIgorI2lu
Y2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJl
c3Npb24uaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTdGF0ZW1l
bnQuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3dpdGNoU3RhdGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3dpdGNo
U3RhdGVtZW50LmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFN3aXRjaFN0YXRlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw3ICsyOCw2IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMRXhw
cmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFN0YXRl
bWVudC5oIgogI2luY2x1ZGUgIldITFNMU3dpdGNoQ2FzZS5oIgogI2luY2x1ZGUgPHd0Zi9Vbmlx
dWVSZWYuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFRlcm5hcnlFeHByZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVGVybmFyeUV4cHJlc3Npb24uaAkocmV2aXNpb24g
MjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
VGVybmFyeUV4cHJlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2lm
IEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKLSNpbmNsdWRl
ICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xUeXBlQXJndW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuaAkocmV2aXNpb24gMjQ3NzAwKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3Vt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoV0VCR1BV
KQogCiAjaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExT
TExleGVyLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi9WYXJp
YW50Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZURlZmluaXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5p
dGlvbi5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3
ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5o
IgorI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xOYW1lZFR5
cGUuaCIKICNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1
ZVJlZi5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVHlwZVJlZmVyZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaAkocmV2aXNpb24gMjQ3NzAwKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVy
ZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VC
R1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0
aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKICNpbmNsdWRlICJXSExTTFR5cGVB
cmd1bWVudC5oIgogI2luY2x1ZGUgIldITFNMVW5uYW1lZFR5cGUuaCIKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5u
YW1lZFR5cGUuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5uYW1lZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMVHlwZS5o
IgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmgJKHJl
dmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyAr
MjgsNiBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24u
aCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xVbnNpZ25lZEludGVn
ZXJMaXRlcmFsVHlwZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAj
aW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2lu
Y2x1ZGUgIldITFNMUXVhbGlmaWVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgogI2lu
Y2x1ZGUgIldITFNMVHlwZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJs
ZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0
YXRlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUo
V0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMQ29kZUxv
Y2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJXSExTTFZh
cmlhYmxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZVJlZmVyZW5j
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAj
aW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2lu
Y2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xXaGlsZUxvb3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xXaGlsZUxvb3AuaAkocmV2aXNpb24gMjQ3NzAwKQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMV2hpbGVMb29wLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAj
aW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2lu
Y2x1ZGUgIldITFNMU3RhdGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTYzOTEsNiArNjM5MSw3IEBACiAJ
CTFDQUYzNDdFMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU2NyaXB0T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFDQUYzNDdGMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmpl
Y3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJTY3JpcHRP
YmplY3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQUYzNDgwMEE2QzQwNTIw
MEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3RQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYlNjcmlwdE9iamVjdFByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMUNCNUZFODgyMkRFQkM4QjAwOTQ0MEUyIC8qIFdITFNMRXJyb3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0hMU0xFcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
Q0I2OUIzMjIxREVENDBCMDA2RTg0NkEgLyogV0hMU0xSZXNvbHZhYmxlVHlwZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXSExTTFJlc29sdmFibGVUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFDQjY5QjM0MjFERUQ2M0EwMDZFODQ2QSAvKiBXSExTTEZsb2F0TGl0ZXJhbFR5cGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0hMU0xGbG9hdExpdGVyYWxUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFDQjY5QjM1MjFERUQ2NDkwMDZFODQ2QSAvKiBXSExTTEludGVnZXJMaXRl
cmFsVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEludGVnZXJMaXRlcmFsVHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODMyMyw2ICs4MzI0LDcgQEAKIAkJNTFGQjY3REEx
QUU2QjVFNDAwRDA2QzVBIC8qIENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyMTMxRTVBMUM0RjE1NjEwMDMzRjgwMiAvKiBW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUyMTU4NjJDMjI5Mzc3QjcwMDU5MjVFRiAvKiBXSExTTEFTVC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXSExTTEFTVC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1MjJCQUI5NjIyRTZBMzYyMDBDNTRDRTkgLyogV0hMU0xDb2RlTG9jYXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0hMU0xDb2RlTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTIyREEzRDMyMjlFMUQzOTAwNDJEMTUxIC8qIFdITFNMR2xvYmFsVmFyaWFibGVSZWZlcmVu
Y2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xHbG9iYWxWYXJpYWJsZVJlZmVyZW5jZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjJFMUExNzIyOTdENkQ0MDBFNUQzNkEgLyogV0hM
U0xQcmVzZXJ2ZVZhcmlhYmxlTGlmZXRpbWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNM
UHJlc2VydmVWYXJpYWJsZUxpZmV0aW1lcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUyMkUxQTE5MjI5N0Q2RDQwMEU1RDM2QSAvKiBXSExTTFByZXNlcnZlVmFyaWFibGVMaWZl
dGltZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xQcmVzZXJ2ZVZhcmlhYmxlTGlmZXRpbWVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTUxOCw4ICsyNTUyMCwxMCBAQAogCQkJ
CTFDODQwQjk3MjFFQzQwMDcwMEQwNTAwRCAvKiBXSExTTENoZWNrZXIuaCAqLywKIAkJCQkxQzI4
MUM2RDIyQjg3Qjk4MDA2OTFDMDAgLyogV0hMU0xDaGVja1RleHR1cmVSZWZlcmVuY2VzLmNwcCAq
LywKIAkJCQkxQzI4MUM2RTIyQjg3Qjk4MDA2OTFDMDAgLyogV0hMU0xDaGVja1RleHR1cmVSZWZl
cmVuY2VzLmggKi8sCisJCQkJNTIyQkFCOTYyMkU2QTM2MjAwQzU0Q0U5IC8qIFdITFNMQ29kZUxv
Y2F0aW9uLmggKi8sCiAJCQkJMUM4NkNBNEIyMkFBMTlGRjAwMUJGOTYxIC8qIFdITFNMQ29tcHV0
ZURpbWVuc2lvbnMuY3BwICovLAogCQkJCTFDODZDQTRDMjJBQTE5RkYwMDFCRjk2MSAvKiBXSExT
TENvbXB1dGVEaW1lbnNpb25zLmggKi8sCisJCQkJMUNCNUZFODgyMkRFQkM4QjAwOTQ0MEUyIC8q
IFdITFNMRXJyb3IuaCAqLywKIAkJCQkxQ0EwQzJFNDIxRUVEMTJBMDBBMTE4NjAgLyogV0hMU0xG
dW5jdGlvblN0YWdlQ2hlY2tlci5jcHAgKi8sCiAJCQkJMUNBMEMyRTUyMUVFRDEyQTAwQTExODYw
IC8qIFdITFNMRnVuY3Rpb25TdGFnZUNoZWNrZXIuaCAqLywKIAkJCQkxQzg0MEI5OTIxRUM0MDA4
MDBEMDUwMEQgLyogV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwICovLApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQaXBlbGlu
ZU1ldGFsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbQkocmV2aXNpb24gMjQ3NzAwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQ
aXBlbGluZU1ldGFsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHN0YXRpYyBP
cHRpb25hbDxXSExTTDo6Q29tcHV0ZURpbWVuc2lvbnMKIAogICAgICAgICBhdXRvIHdobHNsQ29t
cGlsZVJlc3VsdCA9IFdITFNMOjpwcmVwYXJlKHdobHNsU291cmNlLCAqd2hsc2xEZXNjcmlwdG9y
KTsKICAgICAgICAgaWYgKCF3aGxzbENvbXBpbGVSZXN1bHQpIHsKLSAgICAgICAgICAgIGVycm9y
U2NvcGVzLmdlbmVyYXRlRXJyb3IobWFrZVN0cmluZyhmdW5jdGlvbk5hbWUsICI6IFdITFNMIGNv
bXBpbGF0aW9uIGZhaWxlZCEiKSk7CisgICAgICAgICAgICBlcnJvclNjb3Blcy5nZW5lcmF0ZUVy
cm9yKG1ha2VTdHJpbmcoIldITFNMIGNvbXBpbGF0aW9uIGZhaWxlZC4gIiwgd2hsc2xDb21waWxl
UmVzdWx0LmVycm9yKCkpKTsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
ICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374717</attachid>
            <date>2019-07-23 15:29:01 -0700</date>
            <delta_ts>2019-07-24 19:33:24 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>156159</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0Nzc1MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxMyBAQAorMjAxOS0wNy0yMyAgU2FhbSBC
YXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBbV0hMU0xdIEFkZCBkZXNjcmlw
dGl2ZSBlcnJvciBtZXNzYWdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk1NjgyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MDc0NjMyMj4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNo
IGFkZHMgZXJyb3IgbWVzc2FnZXMgdG8gdGhlIFdITFNMIGNvbXBpbGVyLiBJJ20gdGFraW5nIGEg
Zmlyc3QgcGFzcworICAgICAgICBhdCBoYXZpbmcgZGVjZW50IGVycm9yIG1lc3NhZ2VzIGV2ZXJ5
d2hlcmUgd2Ugc2V0IGFuIGVycm9yLiBIb3dldmVyLCB3ZSB3aWxsCisgICAgICAgIHByb2JhYmx5
IHJlZmluZSB0aGVzZSBtZXNzYWdlcyB0byBiZSBtb3JlIGFjY3VyYXRlIGFuZCBkZXNjcmlwdGl2
ZSBvdmVyIHRpbWUuCisgICAgICAgIAorICAgICAgICBQYXNzZXMgdGhhdCBjYW4gZmFpbCBubyBs
b25nZXIgcmV0dXJuIGEgYm9vbGVhbi4gSW5zdGVhZCwgdGhleSByZXR1cm4gRXhwZWN0ZWQ8dm9p
ZCwgRXJyb3I+LgorICAgICAgICBGcm9tIEVycm9yLCB3ZSBjYW4gZ2VuZXJhdGUgYSBkZXNjcmlw
dGl2ZSBlcnJvciBtZXNzYWdlLiBWaXNpdG9yOjpzZXRFcnJvciBub3cKKyAgICAgICAgcmVxdWly
ZXMgYW4gRXJyb3IgYXMgYW4gYXJndW1lbnQuIFNvIGFueXdoZXJlIGluIFZpc2l0b3IgdGhhdCBt
aWdodCBmYWlsIGlzCisgICAgICAgIG5vdyByZXF1aXJlZCB0byBwcm92aWRlIGFuIGVycm9yIG1l
c3NhZ2UuCisgICAgICAgIAorICAgICAgICBJbiBhIGZvbGxvdy11cCB0byB0aGlzLCB3ZSBzaG91
bGQgYWN0dWFsbHkgbWFrZSBvdXIgY2hlY2tGYWlsIHRlc3RzIHRlc3QgdGhhdAorICAgICAgICB0
aGV5IGdldCB0aGUgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwMDA0OQorCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaDoKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCYXNlRnVuY3Rpb25BdHRyaWJ1dGUuaDoKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCYXNlU2VtYW50aWMuaDoKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCbG9jay5oOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJvb2xlYW5MaXRlcmFsLmg6CisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnJlYWsuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaDoKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDYWxsRXhwcmVzc2lvbi5oOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbW1hRXhwcmVzc2lvbi5oOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnRpbnVlLmg6CisgICAgICAgICogTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRGVyZWZlcmVuY2VFeHByZXNzaW9uLmg6CisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG9XaGlsZUxvb3AuaDoKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xEb3RFeHByZXNzaW9uLmg6CisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRl
bWVudC5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0
aW9uRGVmaW5pdGlvbi5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEVudW1lcmF0aW9uTWVtYmVyLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEZhbGx0aHJvdWdoLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMRm9yTG9vcC5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xHbG9iYWxWYXJpYWJsZVJlZmVyZW5jZS5oOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTElmU3RhdGVtZW50Lmg6CisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmg6CisgICAgICAgICog
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWwuaDoKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xMb2dpY2FsRXhwcmVzc2lvbi5oOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTExvZ2ljYWxOb3RFeHByZXNzaW9u
Lmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFrZUFycmF5UmVm
ZXJlbmNlRXhwcmVzc2lvbi5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTE5hbWVkVHlwZS5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaDoKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xRdWFsaWZpZXIuaDoKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmg6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNlVHlwZS5oOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMu
aDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXR1cm4uaDoKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0
YW50U2VtYW50aWMuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xT
dGFnZUluT3V0U2VtYW50aWMuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xTdGF0ZW1lbnQuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xTdGF0ZW1lbnRMaXN0Lmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFN0cnVjdHVyZUVsZW1lbnQuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xTd2l0Y2hDYXNlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMU3dpdGNoU3RhdGVtZW50Lmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVGVybmFyeUV4cHJlc3Npb24uaDoKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaDoKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbm5hbWVkVHlwZS5oOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaDoKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmg6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlv
bnNTdGF0ZW1lbnQuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xW
YXJpYWJsZVJlZmVyZW5jZS5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFdoaWxlTG9vcC5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQXV0
b0luaXRpYWxpemVWYXJpYWJsZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkF1dG9J
bml0aWFsaXplOjp2aXNpdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6YXV0b0luaXRpYWxp
emVWYXJpYWJsZXMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQXV0b0lu
aXRpYWxpemVWYXJpYWJsZXMuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpj
aGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMQ2hlY2tUZXh0dXJlUmVmZXJlbmNlcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6VGV4dHVyZVJlZmVyZW5jZXNDaGVja2VyOjp2aXNpdCk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6Y2hlY2tUZXh0dXJlUmVmZXJlbmNlcyk6CisgICAgICAgICogTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xDaGVja1RleHR1cmVSZWZlcmVuY2VzLmg6CisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpyZXNvbHZlV2l0aE9wZXJhdG9yQW5kZXJJbmRleGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpyZXNvbHZlV2l0aE9wZXJhdG9yTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpyZXNvbHZlV2l0aFJlZmVyZW5jZUNvbXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OnJlc29sdmVCeUluc3RhbnRpYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OnJlc29sdmVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Y2hlY2tTZW1hbnRp
Y3MpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmFzc2lnblR5cGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjp2aXNpdCk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6Q2hlY2tlcjo6cmVjdXJzZUFuZEdldEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkNoZWNrZXI6OmdldEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNr
ZXI6OmZpbmlzaFZpc2l0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjpy
ZWN1cnNlQW5kUmVxdWlyZUJvb2xUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpjaGVj
ayk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmg6CisgICAg
ICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDb2RlTG9jYXRpb24uaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q29kZUxvY2F0aW9uOjpDb2RlTG9jYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OkNvZGVMb2NhdGlvbjo6c3RhcnRPZmZzZXQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNvZGVMb2NhdGlvbjo6ZW5kT2Zmc2V0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDb2RlTG9jYXRpb246Om9wZXJhdG9yPT0gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNvZGVMb2NhdGlvbjo6b3BlcmF0b3IhPSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q29kZUxvY2F0aW9uOjpvcGVyYXRvciBib29s
IGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENvbXB1dGVEaW1l
bnNpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpjb21wdXRlRGltZW5zaW9ucyk6
CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xFcnJvci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpFcnJvcjo6RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkVycm9yOjpjb2RlTG9jYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkVycm9yOjptZXNzYWdlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpjaGVja0Z1bmN0aW9uU3RhZ2VzKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkdhdGhlcmVyOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6R2F0aGVyZXI6
OnZpc2l0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpnYXRoZXJFbnRyeVBvaW50SXRlbXMp
OgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0
ZW1zLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OmxpbmVBbmRDb2x1bW5OdW1iZXJGcm9tT2Zm
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpMZXhlcjo6ZXJyb3JTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OkxleGVyOjpsaW5lTnVtYmVyRnJvbU9mZnNldCk6IERlbGV0
ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkNvZGVMb2NhdGlvbjo6Q29kZUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpMZXhlcjo6ZXJyb3JTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkFTVDo6Q29kZUxvY2F0aW9uOjpDb2RlTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6Q29kZUxvY2F0aW9uOjpzdGFydE9mZnNldCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpDb2RlTG9jYXRpb246OmVu
ZE9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xOYW1lUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok5hbWVSZXNv
bHZlcjo6fk5hbWVSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TmFtZVJlc29s
dmVyOjp2aXNpdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6cmVzb2x2ZU5hbWVzSW5UeXBl
cyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6cmVzb2x2ZVR5cGVOYW1lc0luRnVuY3Rpb25z
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjppbnRMaXRlcmFsVG9JbnQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnVpbnRMaXRlcmFs
VG9VaW50KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpmbG9hdExpdGVyYWxUb0Zsb2F0KToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpyZWNvZ25pemVTaW1wbGVVbnNpZ25lZEludGVnZXIp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VUeXBlQXJndW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlRm9yTG9vcCk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6UGFyc2VyOjpwYXJzZVdoaWxlTG9vcCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
UGFyc2VyOjpwYXJzZUVmZmVjdGZ1bEV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OlBhcnNlcjo6cGFyc2VMaW1pdGVkU3VmZml4T3BlcmF0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VTdWZmaXhPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6UGFyc2VyOjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OlBhcnNlcjo6Y29tcGxldGVUZXJuYXJ5Q29uZGl0aW9uYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OlBhcnNlcjo6Y29tcGxldGVBc3NpZ25tZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpQYXJzZXI6OmNvbXBsZXRlUG9zc2libGVMb2dpY2FsQmluYXJ5T3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OmNvbXBsZXRlUG9zc2libGVSZWxhdGlv
bmFsQmluYXJ5T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OmNv
bXBsZXRlUG9zc2libGVTaGlmdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpj
b21wbGV0ZVBvc3NpYmxlQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OmNv
bXBsZXRlUG9zc2libGVNdWx0aXBseSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2Vy
OjpwYXJzZVBvc3NpYmxlUHJlZml4KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6
OnBhcnNlQ2FsbEV4cHJlc3Npb24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUGFyc2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpFcnJvcjo6RXJy
b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6RXJyb3I6OmR1
bXAgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UHJlcGFyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6cHJlcGFyZVNoYXJlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6cHJlcGFyZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQcmVwYXJlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjptb2Rp
ZnkpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2lvbkNoZWNrZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmNoZWNrUmVjdXJzaW9uKToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2lvbkNoZWNrZXIuaDoKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpjaGVja1JlY3Vyc2l2ZVR5cGVzKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmg6CisgICAgICAgICog
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnlVdGlsaXRpZXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmluY2x1ZGVTdGFuZGFyZExpYnJhcnkpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhdGVtZW50QmVoYXZpb3JDaGVja2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpjaGVja1N0YXRlbWVudEJlaGF2aW9yKToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tl
ci5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5
T3BlcmF0b3JMZW5ndGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnN5bnRoZXNpemVB
cnJheU9wZXJhdG9yTGVuZ3RoKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpzeW50aGVzaXplQ29uc3RydWN0b3JzKToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaDoKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6c3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25z
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJh
dGlvbkZ1bmN0aW9ucy5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3lu
dGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
c3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmg6CisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6VmlzaXRvcjo6aGFzRXJyb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlZp
c2l0b3I6OmdldEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpWaXNpdG9yOjpjaGVj
a0Vycm9yQW5kVmlzaXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlZpc2l0b3I6OnNldEVy
cm9yKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpWaXNpdG9yOjplcnJvciBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2Ev
R1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwubW06CisgICAgICAgIChXZWJDb3JlOjp0cnlTZXRGdW5j
dGlvbnMpOgorCiAyMDE5LTA3LTIzICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgW2lPU10gVGFwcGluZyB0aGUgc2VhcmNoIGZpZWxkIG9uIGEgc2VhcmNoIHJlc3Vs
dHMgcGFnZSBvbiB6aWxsb3cuY29tIHNob3dzIGFuZCBpbW1lZGlhdGVseSBkaXNtaXNzZXMgdGhl
IGtleWJvYXJkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TEF1dG9Jbml0aWFsaXplVmFyaWFibGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEF1dG9Jbml0aWFsaXplVmFyaWFibGVzLmNwcAko
cmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xBdXRvSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcg
Kzc2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
UmVzb2x2aW5nVHlwZT4+IGFyZ3VtZW50VHlwZXM7CiAgICAgICAgIGF1dG8qIGZ1bmN0aW9uID0g
cmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQobV9jYXN0RnVuY3Rpb25zLCBhcmd1bWVudFR5cGVzLCB0
eXBlKTsKICAgICAgICAgaWYgKCFmdW5jdGlvbikgewotICAgICAgICAgICAgc2V0RXJyb3IoKTsK
KyAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3QgZmluZCB0aGUgZGVmYXVsdCBjb25z
dHJ1Y3RvciBmb3IgdmFyaWFibGUuIiwgdmFyaWFibGVEZWNsYXJhdGlvbi5jb2RlTG9jYXRpb24o
KSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGNhbGxFeHByZXNz
aW9uLT5zZXRGdW5jdGlvbigqZnVuY3Rpb24pOwpAQCAtODgsMTEgKzg4LDExIEBAIHByaXZhdGU6
CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uPiwgMT4mIG1fY2FzdEZ1bmN0aW9uczsKIH07CiAKLWJvb2wgYXV0b0luaXRpYWxpemVWYXJp
YWJsZXMoUHJvZ3JhbSYgcHJvZ3JhbSkKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBhdXRvSW5pdGlh
bGl6ZVZhcmlhYmxlcyhQcm9ncmFtJiBwcm9ncmFtKQogewogICAgIEF1dG9Jbml0aWFsaXplIGF1
dG9Jbml0aWFsaXplKHByb2dyYW0ubmFtZUNvbnRleHQoKSk7CiAgICAgYXV0b0luaXRpYWxpemUu
VmlzaXRvcjo6dmlzaXQocHJvZ3JhbSk7Ci0gICAgcmV0dXJuICFhdXRvSW5pdGlhbGl6ZS5lcnJv
cigpOworICAgIHJldHVybiBhdXRvSW5pdGlhbGl6ZS5leHBlY3RlZEVycm9yKCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdITFNMCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTEF1dG9Jbml0aWFsaXplVmFyaWFibGVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBdXRvSW5pdGlhbGl6ZVZhcmlhYmxl
cy5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTEF1dG9Jbml0aWFsaXplVmFyaWFibGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDEzICsyNywxNiBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMRXJy
b3IuaCIKKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBuYW1lc3BhY2UgV0hMU0wgewogCiBjbGFzcyBQcm9ncmFtOwogCi1ib29sIGF1dG9Jbml0aWFs
aXplVmFyaWFibGVzKFByb2dyYW0mKTsKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBhdXRvSW5pdGlh
bGl6ZVZhcmlhYmxlcyhQcm9ncmFtJik7CiAKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1
cGxpY2F0ZUZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTUsOSArMTE1LDkgQEAgcHJpdmF0ZToKICAgICBjb25zdCBBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24qIG1fZnVuY3Rpb24geyBudWxscHRyIH07CiB9OwogCi1ib29s
IGNoZWNrRHVwbGljYXRlRnVuY3Rpb25zKGNvbnN0IFByb2dyYW0mIHByb2dyYW0pCitFeHBlY3Rl
ZDx2b2lkLCBFcnJvcj4gY2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMoY29uc3QgUHJvZ3JhbSYgcHJv
Z3JhbSkKIHsKLSAgICBhdXRvIHBhc3Nlc1N0YXRpY0NoZWNrcyA9IFsmXSAoY29uc3QgQVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5jdGlvbikgeworICAgIGF1dG8gcGFzc2VzU3RhdGljQ2hl
Y2tzID0gWyZdIChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1bmN0aW9uKSAtPiBF
eHBlY3RlZDx2b2lkLCBFcnJvcj4gewogICAgICAgICBpZiAoZnVuY3Rpb24ubmFtZSgpID09ICJv
cGVyYXRvciZbXSIgJiYgZnVuY3Rpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyCiAgICAgICAg
ICAgICAmJiBpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNU
OjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSkpKSB7CiAg
ICAgICAgICAgICBhdXRvJiB0eXBlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlw
ZSY+KCpmdW5jdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CkBAIC0xMjcsNDQgKzEyNyw0
NSBAQCBib29sIGNoZWNrRHVwbGljYXRlRnVuY3Rpb25zKGNvbnN0IFByb2dyCiAgICAgICAgICAg
ICAgICAgICAgIGlmIChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnJlc29sdmVkVHlw
ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
biA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqcmVzb2x2ZWRUeXBlKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJ1aW50IikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJD
YW5ub3QgZGVmaW5lIGN1c3RvbSBhcnJheSBhbmRlci4iKSk7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAo
ZnVuY3Rpb24ubmFtZSgpID09ICJvcGVyYXRvci5sZW5ndGgiICYmIGZ1bmN0aW9uLnBhcmFtZXRl
cnMoKS5zaXplKCkgPT0gMQogICAgICAgICAgICAgJiYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VU
eXBlPihzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uLnBhcmFt
ZXRlcnMoKVswXS0+dHlwZSgpKSkKICAgICAgICAgICAgIHx8IGlzPEFTVDo6QXJyYXlUeXBlPihz
dGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uLnBhcmFtZXRlcnMo
KVswXS0+dHlwZSgpKSkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJDYW5ub3QgZGVmaW5lIG9wZXJhdG9yLmxlbmd0
aCBmb3IgYW4gYXJyYXkuIikpOwogICAgICAgICBlbHNlIGlmIChmdW5jdGlvbi5uYW1lKCkgPT0g
Im9wZXJhdG9yPT0iCiAgICAgICAgICAgICAmJiBmdW5jdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgp
ID09IDIKICAgICAgICAgICAgICYmIGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8
Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUo
KSkpCiAgICAgICAgICAgICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNv
bnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkp
KQogICAgICAgICAgICAgJiYgbWF0Y2hlcygqZnVuY3Rpb24ucGFyYW1ldGVycygpWzBdLT50eXBl
KCksICpmdW5jdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkNhbm5v
dCBkZWZpbmUgb3BlcmF0b3I9PSBvbiB0d28gcmVmZXJlbmNlIHR5cGVzLiIpKTsKICAgICAgICAg
ZWxzZSBpZiAoZnVuY3Rpb24uaXNDYXN0KCkgJiYgZnVuY3Rpb24ucGFyYW1ldGVycygpLmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gZnVuY3Rpb24udHlwZSgpLnVu
aWZ5Tm9kZSgpOwogICAgICAgICAgICAgaWYgKGlzPEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUp
ICYmIGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihkb3duY2FzdDxBU1Q6Ok5hbWVkVHlw
ZT4odW5pZnlOb2RlKSkpIHsKICAgICAgICAgICAgICAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFy
YXRpb24gPSBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oZG93bmNhc3Q8QVNU
OjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpOwogICAgICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBl
RGVjbGFyYXRpb24uaXNPcGFxdWVUeXBlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJD
YW5ub3QgZGVmaW5lIGEgY2FzdCBvbiBhbiBvcGFxdWUgdHlwZS4iKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICB9OwogCiAgICAgSGFzaFNldDxEdXBsaWNhdGVGdW5jdGlvbktleSwgRHVwbGljYXRlRnVu
Y3Rpb25LZXk6Okhhc2gsIER1cGxpY2F0ZUZ1bmN0aW9uS2V5OjpUcmFpdHM+IGZ1bmN0aW9uczsK
IAotICAgIGF1dG8gYWRkID0gWyZdIChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1
bmN0aW9uKSB7CisgICAgYXV0byBhZGQgPSBbJl0gKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbiYgZnVuY3Rpb24pIC0+IEV4cGVjdGVkPHZvaWQsIEVycm9yPiB7CiAgICAgICAgIGF1dG8g
YWRkUmVzdWx0ID0gZnVuY3Rpb25zLmFkZChEdXBsaWNhdGVGdW5jdGlvbktleSB7IGZ1bmN0aW9u
IH0pOwogICAgICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJGb3Vu
ZCBkdXBsaWNhdGUgZnVuY3Rpb24iKSk7CiAgICAgICAgIHJldHVybiBwYXNzZXNTdGF0aWNDaGVj
a3MoZnVuY3Rpb24pOwogICAgIH07CiAKICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlv
biA6IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKSB7Ci0gICAgICAgIGlmICghYWRkKGZ1
bmN0aW9uRGVmaW5pdGlvbi5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGF1dG8gYWRkUmVzdWx0ID0gYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5nZXQoKSk7CisgICAg
ICAgIGlmICghYWRkUmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIGFkZFJlc3VsdDsKICAgICB9
CiAKICAgICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkpIHsKQEAgLTE4MCwxMCArMTgxLDEwIEBAIGJvb2wg
Y2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMoY29uc3QgUHJvZ3IKICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODg2MQogICAgICAgICAvLyBBU1NFUlQo
cGFzc2VzU3RhdGljQ2hlY2tzKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uZ2V0KCkpKTsKICAg
ICAgICAgaWYgKGZ1bmN0aW9ucy5jb250YWlucyhEdXBsaWNhdGVGdW5jdGlvbktleSB7IG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24uZ2V0KCkgfSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkR1cGxpY2F0ZSBuYXRp
dmUgZnVuY3Rpb24uIikpOwogICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7
IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdITFNMCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxp
Y2F0ZUZ1bmN0aW9ucy5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDEzICsyNywxNSBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1
ZGUgIldITFNMRXJyb3IuaCIKICNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlIDx3
dGYvRXhwZWN0ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wg
ewogCi1ib29sIGNoZWNrRHVwbGljYXRlRnVuY3Rpb25zKGNvbnN0IFByb2dyYW0mKTsKK0V4cGVj
dGVkPHZvaWQsIEVycm9yPiBjaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyhjb25zdCBQcm9ncmFtJik7
CiAKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xD
aGVja1RleHR1cmVSZWZlcmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrVGV4dHVyZVJlZmVyZW5jZXMuY3BwCShyZXZp
c2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TENoZWNrVGV4dHVyZVJlZmVyZW5jZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCwyOCArODQs
MjggQEAgYm9vbCBUZXh0dXJlUmVmZXJlbmNlc0NoZWNrZXI6OmNvbnRhaW5zVAogdm9pZCBUZXh0
dXJlUmVmZXJlbmNlc0NoZWNrZXI6OnZpc2l0KEFTVDo6UG9pbnRlclR5cGUmIHBvaW50ZXJUeXBl
KQogewogICAgIFZpc2l0b3I6OnZpc2l0KHBvaW50ZXJUeXBlKTsKLSAgICBpZiAoZXJyb3IoKSkK
KyAgICBpZiAoaGFzRXJyb3IoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChjb250YWluc1Rl
eHR1cmVPclNhbXBsZXIocG9pbnRlclR5cGUuZWxlbWVudFR5cGUoKSkpCi0gICAgICAgIHNldEVy
cm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3QgaGF2ZSBhIHBvaW50ZXIgdG8g
YSB0ZXh0dXJlLiIsIHBvaW50ZXJUeXBlLmNvZGVMb2NhdGlvbigpKSk7CiB9CiAKIHZvaWQgVGV4
dHVyZVJlZmVyZW5jZXNDaGVja2VyOjp2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYgYXJy
YXlSZWZlcmVuY2VUeXBlKQogewogICAgIFZpc2l0b3I6OnZpc2l0KGFycmF5UmVmZXJlbmNlVHlw
ZSk7Ci0gICAgaWYgKGVycm9yKCkpCisgICAgaWYgKGhhc0Vycm9yKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBpZiAoY29udGFpbnNUZXh0dXJlT3JTYW1wbGVyKGFycmF5UmVmZXJlbmNlVHlwZS5l
bGVtZW50VHlwZSgpKSkKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgc2V0RXJyb3IoRXJy
b3IoIkNhbm5vdCBoYXZlIGFuIGFycmF5IHJlZmVyZW5jZSB0byBhIHRleHR1cmUuIiwgYXJyYXlS
ZWZlcmVuY2VUeXBlLmNvZGVMb2NhdGlvbigpKSk7CiB9CiAKIHZvaWQgVGV4dHVyZVJlZmVyZW5j
ZXNDaGVja2VyOjp2aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBlKQogewogICAgIFZpc2l0
b3I6OnZpc2l0KGFycmF5VHlwZSk7Ci0gICAgaWYgKGVycm9yKCkpCisgICAgaWYgKGhhc0Vycm9y
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoY29udGFpbnNUZXh0dXJlT3JTYW1wbGVyKGFy
cmF5VHlwZS50eXBlKCkpKQotICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBzZXRFcnJvcihF
cnJvcigiQ2Fubm90IGhhdmUgYW4gYXJyYXkgb2YgdGV4dHVyZXMuIiwgYXJyYXlUeXBlLmNvZGVM
b2NhdGlvbigpKSk7CiB9CiAKIHZvaWQgVGV4dHVyZVJlZmVyZW5jZXNDaGVja2VyOjp2aXNpdChB
U1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24pCkBAIC0xMTQsMTEgKzExNCwxMSBAQCB2b2lkIFRl
eHR1cmVSZWZlcmVuY2VzQ2hlY2tlcjo6dmlzaXQoQVNUCiAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOwogfQogCi1ib29sIGNoZWNrVGV4dHVyZVJlZmVy
ZW5jZXMoUHJvZ3JhbSYgcHJvZ3JhbSkKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBjaGVja1RleHR1
cmVSZWZlcmVuY2VzKFByb2dyYW0mIHByb2dyYW0pCiB7CiAgICAgVGV4dHVyZVJlZmVyZW5jZXND
aGVja2VyIHRleHR1cmVSZWZlcmVuY2VzQ2hlY2tlcjsKICAgICB0ZXh0dXJlUmVmZXJlbmNlc0No
ZWNrZXIuY2hlY2tFcnJvckFuZFZpc2l0KHByb2dyYW0pOwotICAgIHJldHVybiAhdGV4dHVyZVJl
ZmVyZW5jZXNDaGVja2VyLmVycm9yKCk7CisgICAgcmV0dXJuIHRleHR1cmVSZWZlcmVuY2VzQ2hl
Y2tlci5leHBlY3RlZEVycm9yKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdITFNMCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrVGV4dHVyZVJlZmVy
ZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTENoZWNrVGV4dHVyZVJlZmVyZW5jZXMuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja1RleHR1cmVSZWZlcmVu
Y2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEzICsyNywxNiBAQAogCiAjaWYgRU5BQkxFKFdF
QkdQVSkKIAorI2luY2x1ZGUgIldITFNMRXJyb3IuaCIKKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQu
aD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCiBjbGFzcyBQ
cm9ncmFtOwogCi1ib29sIGNoZWNrVGV4dHVyZVJlZmVyZW5jZXMoUHJvZ3JhbSYpOworRXhwZWN0
ZWQ8dm9pZCwgRXJyb3I+IGNoZWNrVGV4dHVyZVJlZmVyZW5jZXMoUHJvZ3JhbSYpOwogCiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xDaGVja2VyLmNwcAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyAr
ODQsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzTnVt
YmVyKCkKICAgICAgICAgICAgICYmICFuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNWZWN0b3IoKQog
ICAgICAgICAgICAgJiYgIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc01hdHJpeCgpKQotICAgICAg
ICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJVc2Ugb2YgbmF0
aXZlIHR5cGUgaXMgbm90IGEgUE9EIGluIGVudHJ5cG9pbnQgc2VtYW50aWMuIiwgbmF0aXZlVHlw
ZURlY2xhcmF0aW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgfQogCiAgICAgdm9pZCB2aXNpdChB
U1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pIG92ZXJyaWRlCkBA
IC0xMDIsMTQgKzEwMiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIFZpc2l0b3I6OnZpc2l0KGFycmF5
VHlwZSk7CiAgICAgfQogCi0gICAgdm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJikgb3ZlcnJp
ZGUKKyAgICB2b2lkIHZpc2l0KEFTVDo6UG9pbnRlclR5cGUmIHBvaW50ZXJUeXBlKSBvdmVycmlk
ZQogICAgIHsKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkls
bGVnYWwgdXNlIG9mIHBvaW50ZXIgaW4gZW50cnlwb2ludCBzZW1hbnRpYy4iLCBwb2ludGVyVHlw
ZS5jb2RlTG9jYXRpb24oKSkpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVJl
ZmVyZW5jZVR5cGUmKSBvdmVycmlkZQorICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGUmIGFycmF5UmVmZXJlbmNlVHlwZSkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHNldEVy
cm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJJbGxlZ2FsIHVzZSBvZiBhcnJheSByZWZl
cmVuY2UgaW4gZW50cnlwb2ludCBzZW1hbnRpYy4iLCBhcnJheVJlZmVyZW5jZVR5cGUuY29kZUxv
Y2F0aW9uKCkpKTsKICAgICB9CiAKICAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYg
dHlwZVJlZmVyZW5jZSkgb3ZlcnJpZGUKQEAgLTExOCw3ICsxMTgsNyBAQCBwdWJsaWM6CiAgICAg
fQogfTsKIAotc3RhdGljIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0
aE9wZXJhdG9yQW5kZXJJbmRleGVyKEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uLCBBU1Q6OkFy
cmF5UmVmZXJlbmNlVHlwZSYgZmlyc3RBcmd1bWVudCwgY29uc3QgSW50cmluc2ljcyYgaW50cmlu
c2ljcykKK3N0YXRpYyBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gcmVzb2x2ZVdpdGhP
cGVyYXRvckFuZGVySW5kZXhlcihDb2RlTG9jYXRpb24gbG9jYXRpb24sIEFTVDo6QXJyYXlSZWZl
cmVuY2VUeXBlJiBmaXJzdEFyZ3VtZW50LCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQog
ewogICAgIGNvbnN0IGJvb2wgaXNPcGVyYXRvciA9IHRydWU7CiAgICAgYXV0byByZXR1cm5UeXBl
ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihsb2NhdGlvbiwgZmlyc3RBcmd1bWVu
dC5hZGRyZXNzU3BhY2UoKSwgZmlyc3RBcmd1bWVudC5lbGVtZW50VHlwZSgpLmNsb25lKCkpOwpA
QCAtMTI4LDcgKzEyOCw3IEBAIHN0YXRpYyBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24g
cmUKICAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxv
cHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZygib3BlcmF0b3ImW10iLCBTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVsbHB0ciwgaXNPcGVy
YXRvcikpOwogfQogCi1zdGF0aWMgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJlc29s
dmVXaXRoT3BlcmF0b3JMZW5ndGgoQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24sIEFTVDo6VW5u
YW1lZFR5cGUmIGZpcnN0QXJndW1lbnQsIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCitz
dGF0aWMgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJlc29sdmVXaXRoT3BlcmF0b3JM
ZW5ndGgoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBBU1Q6OlVubmFtZWRUeXBlJiBmaXJzdEFyZ3Vt
ZW50LCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQogewogICAgIGNvbnN0IGJvb2wgaXNP
cGVyYXRvciA9IHRydWU7CiAgICAgYXV0byByZXR1cm5UeXBlID0gQVNUOjpUeXBlUmVmZXJlbmNl
Ojp3cmFwKGxvY2F0aW9uLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpOwpAQCAtMTM3LDcgKzEzNyw3
IEBAIHN0YXRpYyBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gcmUKICAgICByZXR1cm4g
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihs
b2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0
dXJuVHlwZSksIFN0cmluZygib3BlcmF0b3IubGVuZ3RoIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKIH0K
IAotc3RhdGljIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0aFJlZmVy
ZW5jZUNvbXBhcmF0b3IoQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24sIFJlc29sdmluZ1R5cGUm
IGZpcnN0QXJndW1lbnQsIFJlc29sdmluZ1R5cGUmIHNlY29uZEFyZ3VtZW50LCBjb25zdCBJbnRy
aW5zaWNzJiBpbnRyaW5zaWNzKQorc3RhdGljIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
biByZXNvbHZlV2l0aFJlZmVyZW5jZUNvbXBhcmF0b3IoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBS
ZXNvbHZpbmdUeXBlJiBmaXJzdEFyZ3VtZW50LCBSZXNvbHZpbmdUeXBlJiBzZWNvbmRBcmd1bWVu
dCwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykKIHsKICAgICBjb25zdCBib29sIGlzT3Bl
cmF0b3IgPSB0cnVlOwogICAgIGF1dG8gcmV0dXJuVHlwZSA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6
d3JhcChsb2NhdGlvbiwgaW50cmluc2ljcy5ib29sVHlwZSgpKTsKQEAgLTE2NSw3ICsxNjUsNyBA
QCBlbnVtIGNsYXNzIEFjY2VwdGFiaWxpdHkgewogICAgIE5vCiB9OwogCi1zdGF0aWMgT3B0aW9u
YWw8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPiByZXNvbHZlQnlJbnN0YW50aWF0aW9u
KGNvbnN0IFN0cmluZyYgbmFtZSwgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24sIGNvbnN0IFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgdHlwZXMsIGNvbnN0
IEludHJpbnNpY3MmIGludHJpbnNpY3MpCitzdGF0aWMgT3B0aW9uYWw8QVNUOjpOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uPiByZXNvbHZlQnlJbnN0YW50aWF0aW9uKGNvbnN0IFN0cmluZyYgbmFt
ZSwgQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBjb25zdCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxSZXNvbHZpbmdUeXBlPj4mIHR5cGVzLCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNz
KQogewogICAgIGlmIChuYW1lID09ICJvcGVyYXRvciZbXSIgJiYgdHlwZXMuc2l6ZSgpID09IDIp
IHsKICAgICAgICAgYXV0byogZmlyc3RBcmd1bWVudEFycmF5UmVmID0gdHlwZXNbMF0uZ2V0KCku
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVu
bmFtZWRUeXBlKSAtPiBBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSogewpAQCAtMjE3LDcgKzIxNyw3
IEBAIHN0YXRpYyBPcHRpb25hbDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGEKICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogfQogCi1zdGF0aWMgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNv
bHZlRnVuY3Rpb24oUHJvZ3JhbSYgcHJvZ3JhbSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4qIHBvc3NpYmxlT3ZlcmxvYWRzLCBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIHR5cGVzLCBjb25zdCBT
dHJpbmcmIG5hbWUsIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uLCBjb25zdCBJbnRyaW5zaWNz
JiBpbnRyaW5zaWNzLCBBU1Q6Ok5hbWVkVHlwZSogY2FzdFJldHVyblR5cGUgPSBudWxscHRyKQor
c3RhdGljIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uKFByb2dyYW0m
IHByb2dyYW0sIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbj4sIDE+KiBwb3NzaWJsZU92ZXJsb2FkcywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8UmVzb2x2aW5nVHlwZT4+JiB0eXBlcywgY29uc3QgU3RyaW5nJiBuYW1lLCBDb2RlTG9j
YXRpb24gbG9jYXRpb24sIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MsIEFTVDo6TmFtZWRU
eXBlKiBjYXN0UmV0dXJuVHlwZSA9IG51bGxwdHIpCiB7CiAgICAgaWYgKHBvc3NpYmxlT3Zlcmxv
YWRzKSB7CiAgICAgICAgIGlmIChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIGZ1bmN0aW9uID0g
cmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoKnBvc3NpYmxlT3ZlcmxvYWRzLCB0eXBlcywgY2FzdFJl
dHVyblR5cGUpKQpAQCAtMjk2LDcgKzI5Niw3IEBAIHN0YXRpYyBib29sIGNoZWNrU2VtYW50aWNz
KFZlY3RvcjxFbnRyeVAKICAgICAgICAgICAgICAgICAgICAgcG9kQ2hlY2tlci5jaGVja0Vycm9y
QW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KCppdGVtLnVubmFtZWRUeXBlKS50eXBl
KCkpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgaWYgKHBvZENoZWNrZXIuZXJyb3IoKSkKKyAgICAgICAgICAgICAg
ICBpZiAocG9kQ2hlY2tlci5oYXNFcnJvcigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ2MCw3
ICs0NjAsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHZpc2l0KFByb2dyYW0mKSBvdmVycmlkZTsK
IAotICAgIGJvb2wgYXNzaWduVHlwZXMoKTsKKyAgICBFeHBlY3RlZDx2b2lkLCBFcnJvcj4gYXNz
aWduVHlwZXMoKTsKIAogcHJpdmF0ZToKICAgICBib29sIGNoZWNrU2hhZGVyVHlwZShjb25zdCBB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpOwpAQCAtNTM4LDcgKzUzOCw3IEBAIHZvaWQgQ2hlY2tl
cjo6dmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHBy
b2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKVtpXSk7CiB9CiAKLWJvb2wgQ2hlY2tl
cjo6YXNzaWduVHlwZXMoKQorRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IENoZWNrZXI6OmFzc2lnblR5
cGVzKCkKIHsKICAgICBmb3IgKGF1dG8mIGtleVZhbHVlUGFpciA6IG1fdHlwZU1hcCkgewogICAg
ICAgICBhdXRvIHN1Y2Nlc3MgPSBrZXlWYWx1ZVBhaXIudmFsdWUtPnZpc2l0KFdURjo6bWFrZVZp
c2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJv
b2wgewpAQCAtNTUzLDEwICs1NTMsMTAgQEAgYm9vbCBDaGVja2VyOjphc3NpZ25UeXBlcygpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSkpOwogICAgICAgICBpZiAoIXN1Y2Nl
c3MpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoRXJyb3IoIkNvdWxkIG5vdCByZXNvbHZlIHRoZSB0eXBlIG9mIGEgY29uc3RhbnQu
IikpOwogICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIGJv
b2wgQ2hlY2tlcjo6Y2hlY2tTaGFkZXJUeXBlKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9u
JiBmdW5jdGlvbkRlZmluaXRpb24pCkBAIC01NzYsMjEgKzU3NiwyMSBAQCB2b2lkIENoZWNrZXI6
OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0CiAgICAgbV9jdXJyZW50RnVuY3Rpb24gPSAmZnVu
Y3Rpb25EZWZpbml0aW9uOwogICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24uZW50cnlQb2ludFR5
cGUoKSkgewogICAgICAgICBpZiAoIWNoZWNrU2hhZGVyVHlwZShmdW5jdGlvbkRlZmluaXRpb24p
KSB7Ci0gICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3Io
IkR1cGxpY2F0ZSBlbnRyeXBvaW50IGZ1bmN0aW9uLiIsIGZ1bmN0aW9uRGVmaW5pdGlvbi5jb2Rl
TG9jYXRpb24oKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGF1
dG8gZW50cnlQb2ludEl0ZW1zID0gZ2F0aGVyRW50cnlQb2ludEl0ZW1zKG1faW50cmluc2ljcywg
ZnVuY3Rpb25EZWZpbml0aW9uKTsKICAgICAgICAgaWYgKCFlbnRyeVBvaW50SXRlbXMpIHsKLSAg
ICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICBzZXRFcnJvcihlbnRyeVBvaW50SXRl
bXMuZXJyb3IoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYg
KCFjaGVja1NlbWFudGljcyhlbnRyeVBvaW50SXRlbXMtPmlucHV0cywgZW50cnlQb2ludEl0ZW1z
LT5vdXRwdXRzLCBmdW5jdGlvbkRlZmluaXRpb24uZW50cnlQb2ludFR5cGUoKSwgbV9pbnRyaW5z
aWNzKSkgewotICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHNldEVycm9yKEVy
cm9yKCJCYWQgc2VtYW50aWNzIGZvciBlbnRyeXBvaW50LiIsIGZ1bmN0aW9uRGVmaW5pdGlvbi5j
b2RlTG9jYXRpb24oKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQog
ICAgIGlmICghY2hlY2tPcGVyYXRvck92ZXJsb2FkKGZ1bmN0aW9uRGVmaW5pdGlvbiwgbV9pbnRy
aW5zaWNzLCBtX3Byb2dyYW0ubmFtZUNvbnRleHQoKSkpIHsKLSAgICAgICAgc2V0RXJyb3IoKTsK
KyAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkVudHJ5cG9pbnQgY2Fubm90IGJlIGFuIG9wZXJhdG9y
LiIsIGZ1bmN0aW9uRGVmaW5pdGlvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC02NTYsNyArNjU2LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkVu
dW1lcmF0aW9uRGVmaQogICAgICAgICByZXR1cm4gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKICAg
ICB9KSgpOwogICAgIGlmICghYmFzZVR5cGUpIHsKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAg
ICAgc2V0RXJyb3IoRXJyb3IoIkludmFsaWQgYmFzZSB0eXBlIGZvciBlbnVtLiIsIGVudW1lcmF0
aW9uRGVmaW5pdGlvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC02NjYsMTIgKzY2NiwxMiBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RW51bWVyYXRp
b25EZWZpCiAgICAgICAgIGludDY0X3QgdmFsdWUgPSBtZW1iZXIuZ2V0KCkudmFsdWUoKTsKICAg
ICAgICAgaWYgKGlzU2lnbmVkKSB7CiAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50NjRf
dD4oc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKSAhPSB2YWx1ZSkgewotICAgICAgICAgICAg
ICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkludmFsaWQg
ZW51bWVyYXRpb24gdmFsdWUuIiwgbWVtYmVyLmdldCgpLmNvZGVMb2NhdGlvbigpKSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludDY0X3Q+KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2
YWx1ZSkpICE9IHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAg
ICAgICAgICBzZXRFcnJvcihFcnJvcigiSW52YWxpZCBlbnVtZXJhdGlvbiB2YWx1ZS4iLCBtZW1i
ZXIuZ2V0KCkuY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KQEAgLTY4Miw3ICs2ODIsNyBAQCB2b2lkIENoZWNrZXI6OnZp
c2l0KEFTVDo6RW51bWVyYXRpb25EZWZpCiAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsg
aiA8IGVudW1lcmF0aW9uTWVtYmVycy5zaXplKCk7ICsraikgewogICAgICAgICAgICAgYXV0byBv
dGhlclZhbHVlID0gZW51bWVyYXRpb25NZW1iZXJzW2pdLmdldCgpLnZhbHVlKCk7CiAgICAgICAg
ICAgICBpZiAodmFsdWUgPT0gb3RoZXJWYWx1ZSkgewotICAgICAgICAgICAgICAgIHNldEVycm9y
KCk7CisgICAgICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5vdCBkZWNsYXJlIGR1cGxp
Y2F0ZSBlbnVtZXJhdGlvbiB2YWx1ZXMuIiwgZW51bWVyYXRpb25NZW1iZXJzW2pdLmdldCgpLmNv
ZGVMb2NhdGlvbigpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkBAIC02OTYsNyArNjk2LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkVu
dW1lcmF0aW9uRGVmaQogICAgICAgICB9CiAgICAgfQogICAgIGlmICghZm91bmRaZXJvKSB7Ci0g
ICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJlbnVtIGRlZmluaXRp
b24gbXVzdCBjb250YWluIGEgemVybyB2YWx1ZS4iLCBlbnVtZXJhdGlvbkRlZmluaXRpb24uY29k
ZUxvY2F0aW9uKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KQEAgLTcxMiw3ICs3MTIs
NyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgCiBhdXRvIENoZWNr
ZXI6OnJlY3Vyc2VBbmRHZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgYm9vbCBy
ZXF1aXJlc0xlZnRWYWx1ZSkgLT4gT3B0aW9uYWw8UmVjdXJzZUluZm8+CiB7CiAgICAgVmlzaXRv
cjo6dmlzaXQoZXhwcmVzc2lvbik7Ci0gICAgaWYgKGVycm9yKCkpCisgICAgaWYgKGhhc0Vycm9y
KCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcmV0dXJuIGdldEluZm8oZXhw
cmVzc2lvbiwgcmVxdWlyZXNMZWZ0VmFsdWUpOwogfQpAQCAtNzI0LDcgKzcyNCw3IEBAIGF1dG8g
Q2hlY2tlcjo6Z2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24mIGUKIAogICAgIGNvbnN0IGF1dG8mIHR5
cGVBbm5vdGF0aW9uID0gZXhwcmVzc2lvbi50eXBlQW5ub3RhdGlvbigpOwogICAgIGlmIChyZXF1
aXJlc0xlZnRWYWx1ZSAmJiB0eXBlQW5ub3RhdGlvbi5pc1JpZ2h0VmFsdWUoKSkgewotICAgICAg
ICBzZXRFcnJvcigpOworICAgICAgICBzZXRFcnJvcihFcnJvcigiVW5leHBlY3RlZCBydmFsdWUu
IiwgZXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgIH0KICAgICByZXR1cm4ge3sgKnR5cGVJdGVyYXRvci0+dmFsdWUsIHR5cGVBbm5v
dGF0aW9uIH19OwpAQCAtNzQxLDcgKzc0MSw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpW
YXJpYWJsZURlY2xhcmEKICAgICAgICAgaWYgKCFpbml0aWFsaXplckluZm8pCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIGlmICghbWF0Y2hBbmRDb21taXQoaW5pdGlhbGl6ZXJJbmZvLT5y
ZXNvbHZpbmdUeXBlLCBsaHNUeXBlKSkgewotICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAg
ICAgICAgIHNldEVycm9yKEVycm9yKCJEZWNsYXJlZCB2YXJpYWJsZSB0eXBlIGRvZXMgbm90IG1h
dGNoIGl0cyBpbml0aWFsaXplcidzIHR5cGUuIiwgdmFyaWFibGVEZWNsYXJhdGlvbi5jb2RlTG9j
YXRpb24oKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtNzg1
LDcgKzc4NSw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpBc3NpZ25tZW50RXhwcmUKIAog
ICAgIGF1dG8gcmVzdWx0VHlwZSA9IG1hdGNoQW5kQ29tbWl0KGxlZnRJbmZvLT5yZXNvbHZpbmdU
eXBlLCByaWdodEluZm8tPnJlc29sdmluZ1R5cGUpOwogICAgIGlmICghcmVzdWx0VHlwZSkgewot
ICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBzZXRFcnJvcihFcnJvcigiTGVmdCBoYW5kIHNp
ZGUgb2YgYXNzaWdubWVudCBkb2VzIG5vdCBtYXRjaCB0aGUgdHlwZSBvZiB0aGUgcmlnaHQgaGFu
ZCBzaWRlLiIsIGFzc2lnbm1lbnRFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTgwNyw3ICs4MDcsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0
KEFTVDo6UmVhZE1vZGlmeVdyaXRlCiAgICAgaWYgKE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVu
bmFtZWRUeXBlPj4gbWF0Y2hlZFR5cGUgPSBtYXRjaEFuZENvbW1pdChsZWZ0VmFsdWVJbmZvLT5y
ZXNvbHZpbmdUeXBlLCBuZXdWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUpKQogICAgICAgICByZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlKCkuc2V0VHlwZShXVEZNb3ZlKG1hdGNoZWRU
eXBlLnZhbHVlKCkpKTsKICAgICBlbHNlIHsKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAg
c2V0RXJyb3IoRXJyb3IoIkxlZnQgaGFuZCBzaWRlIG9mIGFzc2lnbm1lbnQgZG9lcyBub3QgbWF0
Y2ggdGhlIHR5cGUgb2YgdGhlIHJpZ2h0IGhhbmQgc2lkZS4iLCByZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg0
OCw3ICs4NDgsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByCiAg
ICAgICAgIHJldHVybiAmZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFVuaWZ5VHlw
ZSk7CiAgICAgfSkodW5uYW1lZFR5cGUpOwogICAgIGlmICghcG9pbnRlclR5cGUpIHsKLSAgICAg
ICAgc2V0RXJyb3IoKTsKKyAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5vdCBkZXJlZmVyZW5j
ZSBhIG5vbi1wb2ludGVyIHR5cGUuIiwgZGVyZWZlcmVuY2VFeHByZXNzaW9uLmNvZGVMb2NhdGlv
bigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg2MywxMyArODYzLDEzIEBAIHZv
aWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHIKIAogICAgIGF1dG8gbGVmdEFk
ZHJlc3NTcGFjZSA9IGxlZnRWYWx1ZUluZm8tPnR5cGVBbm5vdGF0aW9uLmxlZnRBZGRyZXNzU3Bh
Y2UoKTsKICAgICBpZiAoIWxlZnRBZGRyZXNzU3BhY2UpIHsKLSAgICAgICAgc2V0RXJyb3IoKTsK
KyAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5vdCB0YWtlIHRoZSBhZGRyZXNzIG9mIGEgbm9u
IGx2YWx1ZS4iLCBtYWtlUG9pbnRlckV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGF1dG8qIGxlZnRWYWx1ZVR5cGUgPSBnZXRVbm5hbWVk
VHlwZShsZWZ0VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlKTsKICAgICBpZiAoIWxlZnRWYWx1ZVR5
cGUpIHsKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5v
dCB0YWtlIHRoZSBhZGRyZXNzIG9mIGEgdmFsdWUgd2l0aG91dCBhIHR5cGUuIiwgbWFrZVBvaW50
ZXJFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTg4NCw3ICs4ODQsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVm
ZXJlCiAKICAgICBhdXRvKiBsZWZ0VmFsdWVUeXBlID0gZ2V0VW5uYW1lZFR5cGUobGVmdFZhbHVl
SW5mby0+cmVzb2x2aW5nVHlwZSk7CiAgICAgaWYgKCFsZWZ0VmFsdWVUeXBlKSB7Ci0gICAgICAg
IHNldEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3QgdGFrZSB0aGUgYWRk
cmVzcyBvZiBhIHZhbHVlIHdpdGhvdXQgYSB0eXBlLiIsIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTAw
LDcgKzkwMCw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmUKIAog
ICAgICAgICBhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBsZWZ0VmFsdWVJbmZvLT50eXBlQW5ub3Rh
dGlvbi5sZWZ0QWRkcmVzc1NwYWNlKCk7CiAgICAgICAgIGlmICghbGVmdEFkZHJlc3NTcGFjZSkg
ewotICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJD
YW5ub3QgdGFrZSB0aGUgYWRkcmVzcyBvZiBhIG5vbiBsdmFsdWUuIiwgbWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKQEAgLTkxNCw3ICs5MTQsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6TWFr
ZUFycmF5UmVmZXJlCiAKICAgICBhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBsZWZ0VmFsdWVJbmZv
LT50eXBlQW5ub3RhdGlvbi5sZWZ0QWRkcmVzc1NwYWNlKCk7CiAgICAgaWYgKCFsZWZ0QWRkcmVz
c1NwYWNlKSB7Ci0gICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJD
YW5ub3QgdGFrZSB0aGUgYWRkcmVzcyBvZiBhIG5vbiBsdmFsdWUuIiwgbWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC05NTAsNyArOTUwLDcgQEAgdm9pZCBDaGVja2VyOjpmaW5pc2hWaXNpdGluZyhBU1Q6OlBy
b3BlcgogICAgICAgICByZXR1cm47CiAgICAgYXV0byBiYXNlVW5uYW1lZFR5cGUgPSBjb21taXQo
YmFzZUluZm8tPnJlc29sdmluZ1R5cGUpOwogICAgIGlmICghYmFzZVVubmFtZWRUeXBlKSB7Ci0g
ICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3QgcmVzb2x2
ZSB0aGUgdHlwZSBvZiB0aGUgYmFzZSBvZiBhIHByb3BlcnR5IGFjY2VzcyBleHByZXNzaW9uLiIs
IHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC05OTksMzIgKzk5OSwzMiBAQCB2b2lkIENoZWNrZXI6OmZpbmlzaFZp
c2l0aW5nKEFTVDo6UHJvcGVyCiAgICAgfQogCiAgICAgaWYgKGxlZnRBZGRyZXNzU3BhY2UgJiYg
IWFuZGVyRnVuY3Rpb24gJiYgIWdldHRlckZ1bmN0aW9uKSB7Ci0gICAgICAgIHNldEVycm9yKCk7
CisgICAgICAgIHNldEVycm9yKEVycm9yKCJQcm9wZXJ0eSBhY2Nlc3MgaW5zdHJ1Y3Rpb24gbXVz
dCBlaXRoZXIgaGF2ZSBhbiBhbmRlciBvciBhIGdldHRlci4iLCBwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlm
ICghbGVmdEFkZHJlc3NTcGFjZSAmJiAhdGhyZWFkQW5kZXJGdW5jdGlvbiAmJiAhZ2V0dGVyRnVu
Y3Rpb24pIHsKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgc2V0RXJyb3IoRXJyb3IoIlBy
b3BlcnR5IGFjY2VzcyBpbnN0cnVjdGlvbiBtdXN0IGVpdGhlciBoYXZlIGEgdGhyZWFkIGFuZGVy
IG9yIGEgZ2V0dGVyLiIsIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKHRocmVhZEFuZGVyRnVuY3Rpb24g
JiYgZ2V0dGVyRnVuY3Rpb24pIHsKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgc2V0RXJy
b3IoRXJyb3IoIkNhbm5vdCBoYXZlIGJvdGggYSB0aHJlYWQgYW5kZXIgYW5kIGEgZ2V0dGVyLiIs
IHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWYgKGFuZGVyRnVuY3Rpb24gJiYgdGhyZWFkQW5kZXJGdW5jdGlv
biAmJiAhbWF0Y2hlcygqYW5kZXJSZXR1cm5UeXBlLCAqdGhyZWFkQW5kZXJSZXR1cm5UeXBlKSkg
ewotICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBzZXRFcnJvcihFcnJvcigiUmV0dXJuIHR5
cGUgb2YgYW5kZXIgbXVzdCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIHRocmVhZCBhbmRl
ci4iLCBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlmIChnZXR0ZXJGdW5jdGlvbiAmJiBhbmRlckZ1bmN0aW9u
ICYmICFtYXRjaGVzKCpnZXR0ZXJSZXR1cm5UeXBlLCAqYW5kZXJSZXR1cm5UeXBlKSkgewotICAg
ICAgICBzZXRFcnJvcigpOworICAgICAgICBzZXRFcnJvcihFcnJvcigiUmV0dXJuIHR5cGUgb2Yg
YW5kZXIgbXVzdCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIGdldHRlci4iLCBwcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIGlmIChnZXR0ZXJGdW5jdGlvbiAmJiB0aHJlYWRBbmRlckZ1bmN0aW9uICYmICFt
YXRjaGVzKCpnZXR0ZXJSZXR1cm5UeXBlLCAqdGhyZWFkQW5kZXJSZXR1cm5UeXBlKSkgewotICAg
ICAgICBzZXRFcnJvcigpOworICAgICAgICBzZXRFcnJvcihFcnJvcigiUmV0dXJuIHR5cGUgb2Yg
dGhlIHRocmVhZCBhbmRlciBtdXN0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZ2V0dGVy
LiIsIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC0xMDQ2LDcgKzEwNDYsNyBAQCB2b2lkIENoZWNrZXI6OmZpbmlz
aFZpc2l0aW5nKEFTVDo6UHJvcGVyCiAgICAgfQogCiAgICAgaWYgKHNldHRlckZ1bmN0aW9uICYm
ICFnZXR0ZXJGdW5jdGlvbikgewotICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBzZXRFcnJv
cihFcnJvcigiQ2Fubm90IGRlZmluZSBhIHNldHRlciBmdW5jdGlvbiB3aXRob3V0IGEgY29ycmVz
cG9uZGluZyBnZXR0ZXIuIiwgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigp
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwOTQsMTIgKzEwOTQsMTIgQEAgdm9p
ZCBDaGVja2VyOjp2aXNpdChBU1Q6OlJldHVybiYgcmV0dXJuUwogICAgICAgICBpZiAoIXZhbHVl
SW5mbykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKCFtYXRjaEFuZENvbW1pdCh2
YWx1ZUluZm8tPnJlc29sdmluZ1R5cGUsIG1fY3VycmVudEZ1bmN0aW9uLT50eXBlKCkpKQotICAg
ICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJUeXBlIG9m
IHRoZSByZXR1cm4gdmFsdWUgbXVzdCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0
aW9uLiIsIHJldHVyblN0YXRlbWVudC5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgaWYgKCFtYXRjaGVzKG1fY3VycmVudEZ1bmN0aW9uLT50eXBlKCksIG1f
aW50cmluc2ljcy52b2lkVHlwZSgpKSkKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgc2V0
RXJyb3IoRXJyb3IoIkNhbm5vdCByZXR1cm4gbm90aGluZyBmcm9tIGEgbm9uLXZvaWQgZnVuY3Rp
b24uIiwgcmV0dXJuU3RhdGVtZW50LmNvZGVMb2NhdGlvbigpKSk7CiB9CiAKIHZvaWQgQ2hlY2tl
cjo6dmlzaXQoQVNUOjpQb2ludGVyVHlwZSYpCkBAIC0xMTYzLDcgKzExNjMsNyBAQCBib29sIENo
ZWNrZXI6OnJlY3Vyc2VBbmRSZXF1aXJlQm9vbFR5cGUoCiAgICAgaWYgKCFleHByZXNzaW9uSW5m
bykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghaXNCb29sVHlwZShleHByZXNzaW9u
SW5mby0+cmVzb2x2aW5nVHlwZSkpIHsKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgc2V0
RXJyb3IoRXJyb3IoIkV4cGVjdGVkIGJvb2wgdHlwZSBmcm9tIGV4cHJlc3Npb24uIiwgZXhwcmVz
c2lvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IHJldHVybiB0cnVlOwpAQCAtMTIxNCw3ICsxMjE0LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChB
U1Q6OkZvckxvb3AmIGZvckxvbwogICAgIH0sIFsmXShVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9u
PiYgZXhwcmVzc2lvbikgewogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZXhwcmVzc2lvbik7
CiAgICAgfSksIGZvckxvb3AuaW5pdGlhbGl6YXRpb24oKSk7Ci0gICAgaWYgKGVycm9yKCkpCisg
ICAgaWYgKGhhc0Vycm9yKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoZm9yTG9vcC5jb25k
aXRpb24oKSkgewogICAgICAgICBpZiAoIXJlY3Vyc2VBbmRSZXF1aXJlQm9vbFR5cGUoKmZvckxv
b3AuY29uZGl0aW9uKCkpKQpAQCAtMTI0NCw3ICsxMjQ0LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNp
dChBU1Q6OlN3aXRjaFN0YXRlbWVudAogICAgICAgICByZXR1cm4gJnZhbHVlTmFtZWRVbmlmeU5v
ZGU7CiAgICAgfSkoKTsKICAgICBpZiAoIXZhbHVlVHlwZSkgewotICAgICAgICBzZXRFcnJvcigp
OworICAgICAgICBzZXRFcnJvcihFcnJvcigiSW52YWxpZCB0eXBlIGZvciB0aGUgZXhwcmVzc2lv
biBjb25kaXRpb24gb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQuIiwgc3dpdGNoU3RhdGVtZW50LmNv
ZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEyNzAsNyArMTI3
MCw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQKICAgICAgICAg
ICAgIHJldHVybiBtYXRjaGVzKCp2YWx1ZVR5cGUsICplbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwu
ZW51bWVyYXRpb25EZWZpbml0aW9uKCkpOwogICAgICAgICB9KSk7CiAgICAgICAgIGlmICghc3Vj
Y2VzcykgewotICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHNldEVycm9yKEVy
cm9yKCJJbnZhbGlkIHR5cGUgZm9yIHN3aXRjaCBjYXNlLiIsIHN3aXRjaENhc2UuY29kZUxvY2F0
aW9uKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTEyODQs
NyArMTI4NCw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgaWYgKCFzdGF0aWNfY2FzdDxi
b29sPihmaXJzdENhc2UudmFsdWUoKSkpIHsKLSAgICAgICAgICAgICAgICBzZXRFcnJvcigpOwor
ICAgICAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3QgZGVmaW5lIG11bHRpcGxlIGRl
ZmF1bHQgY2FzZXMgaW4gc3dpdGNoIHN0YXRlbWVudC4iLCBzZWNvbmRDYXNlLmNvZGVMb2NhdGlv
bigpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCkBAIC0xMzE2
LDcgKzEzMTYsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAg
ICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAg
ICAgICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3QgZGVmaW5lIGR1cGxpY2F0ZSBjYXNlIHN0YXRl
bWVudHMgaW4gYSBzd2l0Y2guIiwgc2Vjb25kQ2FzZS5jb2RlTG9jYXRpb24oKSkpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTM1Niw3ICsx
MzU2LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlN3aXRjaFN0YXRlbWVudAogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgaWYg
KCFzdWNjZXNzKSB7Ci0gICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAg
ICBzZXRFcnJvcihFcnJvcigiU3dpdGNoIGNhc2VzIG11c3QgYmUgZXhoYXVzdGl2ZSBvciB5b3Ug
bXVzdCBkZWZpbmUgYSBkZWZhdWx0IGNhc2UuIiwgc3dpdGNoU3RhdGVtZW50LmNvZGVMb2NhdGlv
bigpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9
IGVsc2UgewpAQCAtMTM3MSw3ICsxMzcxLDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlN3
aXRjaFN0YXRlbWVudAogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChhdXRvJiBlbnVt
ZXJhdGlvbk1lbWJlciA6IGRvd25jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPigqdmFs
dWVUeXBlKS5lbnVtZXJhdGlvbk1lbWJlcnMoKSkgewogICAgICAgICAgICAgICAgIGlmICghdmFs
dWVzLmNvbnRhaW5zKCZlbnVtZXJhdGlvbk1lbWJlci5nZXQoKSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIlN3
aXRjaCBjYXNlcyBvdmVyIGFuIGVudW0gbXVzdCBiZSBleGhhdXN0aXZlIG9yIHlvdSBtdXN0IGRl
ZmluZSBhIGRlZmF1bHQgY2FzZS4iLCBzd2l0Y2hTdGF0ZW1lbnQuY29kZUxvY2F0aW9uKCkpKTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KQEAgLTEzODMsNyArMTM4Myw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpDb21t
YUV4cHJlc3Npb24KIHsKICAgICBBU1NFUlQoY29tbWFFeHByZXNzaW9uLmxpc3QoKS5zaXplKCkg
PiAwKTsKICAgICBWaXNpdG9yOjp2aXNpdChjb21tYUV4cHJlc3Npb24pOwotICAgIGlmIChlcnJv
cigpKQorICAgIGlmIChoYXNFcnJvcigpKQogICAgICAgICByZXR1cm47CiAgICAgYXV0byBsYXN0
SW5mbyA9IGdldEluZm8oY29tbWFFeHByZXNzaW9uLmxpc3QoKS5sYXN0KCkpOwogICAgIGZvcndh
cmRUeXBlKGNvbW1hRXhwcmVzc2lvbiwgbGFzdEluZm8tPnJlc29sdmluZ1R5cGUpOwpAQCAtMTQw
MCw3ICsxNDAwLDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaQog
ICAgIAogICAgIGF1dG8gcmVzdWx0VHlwZSA9IG1hdGNoQW5kQ29tbWl0KGJvZHlJbmZvLT5yZXNv
bHZpbmdUeXBlLCBlbHNlSW5mby0+cmVzb2x2aW5nVHlwZSk7CiAgICAgaWYgKCFyZXN1bHRUeXBl
KSB7Ci0gICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJsaHMgYW5k
IHJocyBvZiBhIHRlcm5hcnkgZXhwcmVzc2lvbiBtdXN0IG1hdGNoLiIsIHRlcm5hcnlFeHByZXNz
aW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE0MzEs
MTkgKzE0MzEsMTkgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJgog
ICAgICAgICB9CiAgICAgfQogICAgIGlmICghZnVuY3Rpb25zKSB7Ci0gICAgICAgIHNldEVycm9y
KCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3QgcmVzb2x2ZSBmdW5jdGlvbiBjYWxs
IHRvIGEgY29uY3JldGUgY2FsbGVlLiBNYWtlIHN1cmUgeW91IGFyZSB1c2luZyBjb21wYXRpYmxl
IHR5cGVzLiIsIGNhbGxFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBhdXRvKiBmdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbihtX3Byb2dy
YW0sIGZ1bmN0aW9ucywgdHlwZXMsIGNhbGxFeHByZXNzaW9uLm5hbWUoKSwgY2FsbEV4cHJlc3Np
b24uY29kZUxvY2F0aW9uKCksIG1faW50cmluc2ljcywgY2FsbEV4cHJlc3Npb24uY2FzdFJldHVy
blR5cGUoKSk7CiAgICAgaWYgKCFmdW5jdGlvbikgewotICAgICAgICBzZXRFcnJvcigpOworICAg
ICAgICBzZXRFcnJvcihFcnJvcigiQ2Fubm90IHJlc29sdmUgZnVuY3Rpb24gY2FsbCB0byBhIGNv
bmNyZXRlIGNhbGxlZS4gTWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgY29tcGF0aWJsZSB0eXBlcy4i
LCBjYWxsRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbi0+cGFyYW1ldGVycygpLnNp
emUoKTsgKytpKSB7CiAgICAgICAgIGlmICghbWF0Y2hBbmRDb21taXQodHlwZXNbaV0uZ2V0KCks
ICpmdW5jdGlvbi0+cGFyYW1ldGVycygpW2ldLT50eXBlKCkpKSB7Ci0gICAgICAgICAgICBzZXRF
cnJvcigpOworICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3IobWFrZVN0cmluZygiSW52YWxpZCB0
eXBlIGZvciBwYXJhbWV0ZXIgbnVtYmVyICIsIGkgKyAxLCAiIGluIGZ1bmN0aW9uIGNhbGwuIiks
IGNhbGxFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICB9CkBAIC0xNDUzLDEyICsxNDUzLDEyIEBAIHZvaWQgQ2hlY2tlcjo6dmlz
aXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYKICAgICBhc3NpZ25UeXBlKGNhbGxFeHByZXNzaW9uLCBm
dW5jdGlvbi0+dHlwZSgpLmNsb25lKCkpOwogfQogCi1ib29sIGNoZWNrKFByb2dyYW0mIHByb2dy
YW0pCitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gY2hlY2soUHJvZ3JhbSYgcHJvZ3JhbSkKIHsKICAg
ICBDaGVja2VyIGNoZWNrZXIocHJvZ3JhbS5pbnRyaW5zaWNzKCksIHByb2dyYW0pOwogICAgIGNo
ZWNrZXIuY2hlY2tFcnJvckFuZFZpc2l0KHByb2dyYW0pOwotICAgIGlmIChjaGVja2VyLmVycm9y
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoY2hlY2tlci5oYXNFcnJvcigpKQor
ICAgICAgICByZXR1cm4gY2hlY2tlci5leHBlY3RlZEVycm9yKCk7CiAgICAgcmV0dXJuIGNoZWNr
ZXIuYXNzaWduVHlwZXMoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xDaGVja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNywxMyArMjcsMTYgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNs
dWRlICJXSExTTEVycm9yLmgiCisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAogY2xhc3MgUHJvZ3JhbTsKIAotYm9v
bCBjaGVjayhQcm9ncmFtJik7CitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gY2hlY2soUHJvZ3JhbSYp
OwogCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
Q29kZUxvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xDb2RlTG9jYXRpb24uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENvZGVMb2NhdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsK
Kworc3RydWN0IFRva2VuOworCitjbGFzcyBDb2RlTG9jYXRpb24geworcHVibGljOgorICAgIENv
ZGVMb2NhdGlvbigpID0gZGVmYXVsdDsKKyAgICBDb2RlTG9jYXRpb24odW5zaWduZWQgc3RhcnRP
ZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKKyAgICAgICAgOiBtX3N0YXJ0T2Zmc2V0KHN0YXJ0
T2Zmc2V0KQorICAgICAgICAsIG1fZW5kT2Zmc2V0KGVuZE9mZnNldCkKKyAgICB7IH0KKyAgICBD
b2RlTG9jYXRpb24oY29uc3QgVG9rZW4mKTsKKyAgICBDb2RlTG9jYXRpb24oY29uc3QgQ29kZUxv
Y2F0aW9uJiBsb2NhdGlvbjEsIGNvbnN0IENvZGVMb2NhdGlvbiYgbG9jYXRpb24yKQorICAgICAg
ICA6IG1fc3RhcnRPZmZzZXQobG9jYXRpb24xLnN0YXJ0T2Zmc2V0KCkpCisgICAgICAgICwgbV9l
bmRPZmZzZXQobG9jYXRpb24yLmVuZE9mZnNldCgpKQorICAgIHsgfQorCisgICAgdW5zaWduZWQg
c3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0T2Zmc2V0OyB9CisgICAgdW5zaWdu
ZWQgZW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9lbmRPZmZzZXQ7IH0KKworICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBDb2RlTG9jYXRpb24mIG90aGVyKSBjb25zdCAKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3N0YXJ0T2Zmc2V0ID09IG90aGVyLm1fc3RhcnRPZmZzZXQKKyAgICAgICAg
ICAgICYmIG1fZW5kT2Zmc2V0ID09IG90aGVyLm1fZW5kT2Zmc2V0OworICAgIH0KKyAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgQ29kZUxvY2F0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7IH0KKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyBy
ZXR1cm4gKnRoaXMgIT0gQ29kZUxvY2F0aW9uKCk7IH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25l
ZCBtX3N0YXJ0T2Zmc2V0IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07
CisgICAgdW5zaWduZWQgbV9lbmRPZmZzZXQgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdITFNMCisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENvbXB1dGVEaW1lbnNpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENvbXB1dGVE
aW1lbnNpb25zLmNwcAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDb21wdXRlRGltZW5zaW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY1LDcgKzY1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgIH0pLCBmdW5jdGlvbkF0dHJpYnV0ZSk7CiAgICAgICAgICAgICBpZiAoIXN1
Y2Nlc3MpIHsKLSAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgIHNl
dEVycm9yKEVycm9yKCJDYW5ub3QgZGVjbGFyZSBtdWx0aXBsZSBudW10aHJlYWQgYXR0cmlidXRl
cy4iLCBmdW5jdGlvbkRlY2xhcmF0aW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC03OSw3ICs3OSw3IEBAIE9w
dGlvbmFsPENvbXB1dGVEaW1lbnNpb25zPiBjb21wdXRlRGltZW4KIHsKICAgICBDb21wdXRlRGlt
ZW5zaW9uc1Zpc2l0b3IgY29tcHV0ZURpbWVuc2lvbnMoZW50cnlQb2ludCk7CiAgICAgY29tcHV0
ZURpbWVuc2lvbnMuVmlzaXRvcjo6dmlzaXQocHJvZ3JhbSk7Ci0gICAgaWYgKGNvbXB1dGVEaW1l
bnNpb25zLmVycm9yKCkpCisgICAgaWYgKGNvbXB1dGVEaW1lbnNpb25zLmhhc0Vycm9yKCkpCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcmV0dXJuIGNvbXB1dGVEaW1lbnNpb25z
LmNvbXB1dGVEaW1lbnNpb25zKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTEVycm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xFcnJvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMRXJyb3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
V0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNh
dGVuYXRlTnVtYmVycy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIEVycm9yIHsKK3B1
YmxpYzoKKyAgICBFcnJvcihTdHJpbmcmJiBtZXNzYWdlLCBDb2RlTG9jYXRpb24gY29kZUxvY2F0
aW9uKQorICAgICAgICA6IG1fbWVzc2FnZShXVEZNb3ZlKG1lc3NhZ2UpKQorICAgICAgICAsIG1f
bG9jYXRpb24oY29kZUxvY2F0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICBFcnJvcihTdHJpbmcm
JiBtZXNzYWdlKQorICAgICAgICA6IG1fbWVzc2FnZShXVEZNb3ZlKG1lc3NhZ2UpKQorICAgIHsK
KyAgICB9CisKKyAgICBDb2RlTG9jYXRpb24gY29kZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9sb2NhdGlvbjsgfQorICAgIFN0cmluZyBtZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9tZXNz
YWdlOyB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fbWVzc2FnZTsKKyAgICBDb2RlTG9jYXRp
b24gbV9sb2NhdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdITFNMCisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEZ1
bmN0aW9uU3RhZ2VDaGVja2VyLmNwcAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xGdW5jdGlvblN0YWdlQ2hlY2tlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDEyICs1MCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCB2aXNpdChB
U1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikgb3ZlcnJpZGUKICAgICB7CiAgICAg
ICAgIGlmICgoJmNhbGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkgPT0gbV9pbnRyaW5zaWNzLmRkeCgp
IHx8ICZjYWxsRXhwcmVzc2lvbi5mdW5jdGlvbigpID09IG1faW50cmluc2ljcy5kZHkoKSkgJiYg
bV9lbnRyeVBvaW50VHlwZSAhPSBBU1Q6OkVudHJ5UG9pbnRUeXBlOjpGcmFnbWVudCkgewotICAg
ICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3Qg
dXNlIGRkeCBvciBkZHkgaW4gYSBub24tZnJhZ21lbnQgc2hhZGVyLiIsIGNhbGxFeHByZXNzaW9u
LmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKCgmY2FsbEV4cHJlc3Npb24uZnVuY3Rpb24oKSA9PSBtX2ludHJpbnNpY3MuYWxsTWVt
b3J5QmFycmllcigpIHx8ICZjYWxsRXhwcmVzc2lvbi5mdW5jdGlvbigpID09IG1faW50cmluc2lj
cy5kZXZpY2VNZW1vcnlCYXJyaWVyKCkgfHwgJmNhbGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkgPT0g
bV9pbnRyaW5zaWNzLmdyb3VwTWVtb3J5QmFycmllcigpKQogICAgICAgICAgICAgJiYgbV9lbnRy
eVBvaW50VHlwZSAhPSBBU1Q6OkVudHJ5UG9pbnRUeXBlOjpDb21wdXRlKSB7Ci0gICAgICAgICAg
ICBzZXRFcnJvcigpOworICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5vdCB1c2UgbWVt
b3J5IGJhcnJpZXIgaW4gYSBub24tY29tcHV0ZSBzaGFkZXIuIiwgY2FsbEV4cHJlc3Npb24uY29k
ZUxvY2F0aW9uKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBW
aXNpdG9yOjp2aXNpdChjYWxsRXhwcmVzc2lvbi5mdW5jdGlvbigpKTsKQEAgLTY1LDE3ICs2NSwx
NyBAQCBwdWJsaWM6CiAgICAgY29uc3QgSW50cmluc2ljcyYgbV9pbnRyaW5zaWNzOwogfTsKIAot
Ym9vbCBjaGVja0Z1bmN0aW9uU3RhZ2VzKFByb2dyYW0mIHByb2dyYW0pCitFeHBlY3RlZDx2b2lk
LCBFcnJvcj4gY2hlY2tGdW5jdGlvblN0YWdlcyhQcm9ncmFtJiBwcm9ncmFtKQogewogICAgIGZv
ciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25z
KCkpIHsKICAgICAgICAgaWYgKCFmdW5jdGlvbkRlZmluaXRpb24tPmVudHJ5UG9pbnRUeXBlKCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgRnVuY3Rpb25TdGFnZUNoZWNrZXIgZnVu
Y3Rpb25TdGFnZUNoZWNrZXIoKmZ1bmN0aW9uRGVmaW5pdGlvbi0+ZW50cnlQb2ludFR5cGUoKSwg
cHJvZ3JhbS5pbnRyaW5zaWNzKCkpOwogICAgICAgICBmdW5jdGlvblN0YWdlQ2hlY2tlci5WaXNp
dG9yOjp2aXNpdChmdW5jdGlvbkRlZmluaXRpb24pOwotICAgICAgICBpZiAoZnVuY3Rpb25TdGFn
ZUNoZWNrZXIuZXJyb3IoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYg
KGZ1bmN0aW9uU3RhZ2VDaGVja2VyLmhhc0Vycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoZnVuY3Rpb25TdGFnZUNoZWNrZXIuZXhwZWN0ZWRFcnJvcigpLmVycm9yKCkp
OwogICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEZ1bmN0aW9uU3RhZ2VD
aGVja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xGdW5jdGlvblN0YWdlQ2hlY2tlci5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEZ1bmN0aW9uU3RhZ2VDaGVja2Vy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEzICsyNywxNiBAQAogCiAjaWYgRU5BQkxFKFdFQkdQ
VSkKIAorI2luY2x1ZGUgIldITFNMRXJyb3IuaCIKKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4K
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCiBjbGFzcyBQcm9n
cmFtOwogCi1ib29sIGNoZWNrRnVuY3Rpb25TdGFnZXMoUHJvZ3JhbSYpOworRXhwZWN0ZWQ8dm9p
ZCwgRXJyb3I+IGNoZWNrRnVuY3Rpb25TdGFnZXMoUHJvZ3JhbSYpOwogCiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0
ZW1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0
ZW1zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCByZXNldCgpCiAgICAgewogICAgICAgICBtX2N1cnJlbnRTZW1hbnRpYyA9IG51bGxwdHI7Cisg
ICAgICAgIG1fY3VycmVudFZhcmlhYmxlTG9jYXRpb24gPSB7IH07CiAgICAgfQogCiAgICAgVmVj
dG9yPEVudHJ5UG9pbnRJdGVtPiB0YWtlRW50cnlQb2ludEl0ZW1zKCkKQEAgLTY4LDcgKzY5LDcg
QEAgcHVibGljOgogICAgIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mKQog
ICAgIHsKICAgICAgICAgaWYgKCFtX2N1cnJlbnRTZW1hbnRpYykgewotICAgICAgICAgICAgc2V0
RXJyb3IoKTsKKyAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJFeHBlY3RlZCBzZW1hbnRpYyBm
b3IgZW50cnlwb2ludCBhcmd1bWVudC4iLCBtX2N1cnJlbnRWYXJpYWJsZUxvY2F0aW9uKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbV9lbnRyeVBvaW50SXRlbXMu
YXBwZW5kKEVudHJ5UG9pbnRJdGVtKG1fdHlwZVJlZmVyZW5jZXMubGFzdCgpLmdldCgpLCAqbV9j
dXJyZW50U2VtYW50aWMsIG1fcGF0aCkpOwpAQCAtNzcsMTEgKzc4LDExIEBAIHB1YmxpYzoKICAg
ICB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFy
YXRpb24pCiAgICAgewogICAgICAgICBpZiAoIW1fY3VycmVudFNlbWFudGljKSB7Ci0gICAgICAg
ICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkV4cGVjdGVkIHNl
bWFudGljIGZvciBlbnRyeXBvaW50IGFyZ3VtZW50LiIsIG1fY3VycmVudFZhcmlhYmxlTG9jYXRp
b24pKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAobWF0Y2hl
cyhuYXRpdmVUeXBlRGVjbGFyYXRpb24sIG1faW50cmluc2ljcy52b2lkVHlwZSgpKSkgewotICAg
ICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJVbmV4cGVj
dGVkIHZvaWQgdHlwZSBmb3IgZW50cnlwb2ludCBhcmd1bWVudC4iLCBtX2N1cnJlbnRWYXJpYWJs
ZUxvY2F0aW9uKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtOTEsNyAr
OTIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24m
IHN0cnVjdHVyZURlZmluaXRpb24pCiAgICAgewogICAgICAgICBpZiAobV9jdXJyZW50U2VtYW50
aWMpIHsKLSAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICBzZXRFcnJvcihFcnJv
cigiVW5leHBlY3RlZCBzZW1hbnRpYyBmb3Igc3RydWN0IGVudHJ5cG9pbnQgYXJndW1lbnQuIiwg
bV9jdXJyZW50VmFyaWFibGVMb2NhdGlvbikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKQEAgLTEyMSw3ICsxMjIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB2aXNpdChBU1Q6OlBv
aW50ZXJUeXBlJiBwb2ludGVyVHlwZSkKICAgICB7CiAgICAgICAgIGlmICghbV9jdXJyZW50U2Vt
YW50aWMpIHsKLSAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICBzZXRFcnJvcihF
cnJvcigiRXhwZWN0ZWQgc2VtYW50aWMgZm9yIGVudHJ5cG9pbnQgYXJndW1lbnQuIiwgbV9jdXJy
ZW50VmFyaWFibGVMb2NhdGlvbikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShwb2ludGVyVHlw
ZSwgKm1fY3VycmVudFNlbWFudGljLCBtX3BhdGgpKTsKQEAgLTEzMCw3ICsxMzEsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYgYXJyYXlSZWZlcmVu
Y2VUeXBlKQogICAgIHsKICAgICAgICAgaWYgKCFtX2N1cnJlbnRTZW1hbnRpYykgewotICAgICAg
ICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJFeHBlY3RlZCBz
ZW1hbnRpYyBmb3IgZW50cnlwb2ludCBhcmd1bWVudC4iLCBtX2N1cnJlbnRWYXJpYWJsZUxvY2F0
aW9uKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbV9lbnRyeVBv
aW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKGFycmF5UmVmZXJlbmNlVHlwZSwgKm1fY3Vy
cmVudFNlbWFudGljLCBtX3BhdGgpKTsKQEAgLTEzOSw3ICsxNDAsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCB2aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBlKQogICAgIHsKICAgICAgICAgaWYg
KCFtX2N1cnJlbnRTZW1hbnRpYykgewotICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAg
ICAgIHNldEVycm9yKEVycm9yKCJFeHBlY3RlZCBzZW1hbnRpYyBmb3IgZW50cnlwb2ludCBhcmd1
bWVudC4iLCBtX2N1cnJlbnRWYXJpYWJsZUxvY2F0aW9uKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgbV9lbnRyeVBvaW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJ
dGVtKGFycmF5VHlwZSwgKm1fY3VycmVudFNlbWFudGljLCBtX3BhdGgpKTsKQEAgLTE0OCw2ICsx
NDksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24m
IHZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAgewogICAgICAgICBBU1NFUlQoIW1fY3VycmVudFNl
bWFudGljKTsKKyAgICAgICAgbV9jdXJyZW50VmFyaWFibGVMb2NhdGlvbiA9IHZhcmlhYmxlRGVj
bGFyYXRpb24uY29kZUxvY2F0aW9uKCk7CiAgICAgICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9u
LnNlbWFudGljKCkpCiAgICAgICAgICAgICBtX2N1cnJlbnRTZW1hbnRpYyA9IHZhcmlhYmxlRGVj
bGFyYXRpb24uc2VtYW50aWMoKTsKICAgICAgICAgQVNTRVJUKHZhcmlhYmxlRGVjbGFyYXRpb24u
dHlwZSgpKTsKQEAgLTE2MCwyNSArMTYyLDI2IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFN0cmlu
Zz4gbV9wYXRoOwogICAgIGNvbnN0IEludHJpbnNpY3MmIG1faW50cmluc2ljczsKICAgICBBU1Q6
OlNlbWFudGljKiBtX2N1cnJlbnRTZW1hbnRpYyB7IG51bGxwdHIgfTsKKyAgICBDb2RlTG9jYXRp
b24gbV9jdXJyZW50VmFyaWFibGVMb2NhdGlvbjsKICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxBU1Q6OlR5cGVSZWZlcmVuY2U+PiBtX3R5cGVSZWZlcmVuY2VzOwogICAgIFZlY3Rv
cjxFbnRyeVBvaW50SXRlbT4gbV9lbnRyeVBvaW50SXRlbXM7CiB9OwogCi1PcHRpb25hbDxFbnRy
eVBvaW50SXRlbXM+IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhjb25zdCBJbnRyaW5zaWNzJiBpbnRy
aW5zaWNzLCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQorRXhw
ZWN0ZWQ8RW50cnlQb2ludEl0ZW1zLCBFcnJvcj4gZ2F0aGVyRW50cnlQb2ludEl0ZW1zKGNvbnN0
IEludHJpbnNpY3MmIGludHJpbnNpY3MsIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlv
bkRlZmluaXRpb24pCiB7CiAgICAgQVNTRVJUKGZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBvaW50
VHlwZSgpKTsKICAgICBHYXRoZXJlciBpbnB1dEdhdGhlcmVyKGludHJpbnNpY3MpOwogICAgIGZv
ciAoYXV0byYgcGFyYW1ldGVyIDogZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKSkgewog
ICAgICAgICBpbnB1dEdhdGhlcmVyLnJlc2V0KCk7CiAgICAgICAgIGlucHV0R2F0aGVyZXIuY2hl
Y2tFcnJvckFuZFZpc2l0KHBhcmFtZXRlcik7Ci0gICAgICAgIGlmIChpbnB1dEdhdGhlcmVyLmVy
cm9yKCkpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBpZiAoaW5w
dXRHYXRoZXJlci5oYXNFcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGlucHV0R2F0aGVyZXIuZXhwZWN0ZWRFcnJvcigpLmVycm9yKCkpOwogICAgIH0KICAgICBHYXRo
ZXJlciBvdXRwdXRHYXRoZXJlcihpbnRyaW5zaWNzLCBmdW5jdGlvbkRlZmluaXRpb24uc2VtYW50
aWMoKSk7CiAgICAgaWYgKCpmdW5jdGlvbkRlZmluaXRpb24uZW50cnlQb2ludFR5cGUoKSAhPSBB
U1Q6OkVudHJ5UG9pbnRUeXBlOjpDb21wdXRlKQogICAgICAgICBvdXRwdXRHYXRoZXJlci5jaGVj
a0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSk7Ci0gICAgaWYgKG91dHB1
dEdhdGhlcmVyLmVycm9yKCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaWYg
KG91dHB1dEdhdGhlcmVyLmhhc0Vycm9yKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChvdXRwdXRHYXRoZXJlci5leHBlY3RlZEVycm9yKCkuZXJyb3IoKSk7CiAKICAgICByZXR1cm4g
e3sgaW5wdXRHYXRoZXJlci50YWtlRW50cnlQb2ludEl0ZW1zKCksIG91dHB1dEdhdGhlcmVyLnRh
a2VFbnRyeVBvaW50SXRlbXMoKSB9fTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50
SXRlbXMuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMRXJy
b3IuaCIKICNpbmNsdWRlICJXSExTTFNlbWFudGljLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNjIsNyArNjMsNyBAQCBzdHJ1
Y3QgRW50cnlQb2ludEl0ZW1zIHsKICAgICBWZWN0b3I8RW50cnlQb2ludEl0ZW0+IG91dHB1dHM7
CiB9OwogCi1PcHRpb25hbDxFbnRyeVBvaW50SXRlbXM+IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhj
b25zdCBJbnRyaW5zaWNzJiwgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKTsKK0V4cGVjdGVkPEVu
dHJ5UG9pbnRJdGVtcywgRXJyb3I+IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhjb25zdCBJbnRyaW5z
aWNzJiwgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKTsKIAogfSAvLyBuYW1lc3BhY2UgV0hMU0wK
IApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xMZXhlci5jcHAJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTgsMTYgKzQ5
OCw2IEBAIGF1dG8gTGV4ZXI6OmNvbnN1bWVUb2tlbkZyb21TdHJlYW0oKSAtPiAKICAgICByZXR1
cm4gcHJlcGFyZShtX29mZnNldCwgVG9rZW46OlR5cGU6OkludmFsaWQpOwogfQogCi11bnNpZ25l
ZCBMZXhlcjo6bGluZU51bWJlckZyb21PZmZzZXQodW5zaWduZWQgdGFyZ2V0T2Zmc2V0KQotewot
ICAgIC8vIENvdW50aW5nIGZyb20gMSB0byBtYXRjaCBtb3N0IHRleHQgZWRpdG9ycy4KLSAgICB1
bnNpZ25lZCBsaW5lTnVtYmVyID0gMTsKLSAgICBmb3IgKHVuc2lnbmVkIG9mZnNldCA9IDA7IG9m
ZnNldCA8IHRhcmdldE9mZnNldDsgKytvZmZzZXQpIHsKLSAgICAgICAgaWYgKG1fc3RyaW5nVmll
d1tvZmZzZXRdID09ICdcbicpCi0gICAgICAgICAgICArK2xpbmVOdW1iZXI7Ci0gICAgfQotICAg
IHJldHVybiBsaW5lTnVtYmVyOwotfQogCiAvLyBXZSBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgdHdv
IHByb3BlcnRpZXMgb2YgVW5pY29kZToKIC8vIDEuIFRoZSBjb25zaXR1dGVudCBVVEYtMTYgY29k
ZSB1bml0cyBmb3IgYWxsIG5vbi1CTVAgY29kZSBwb2ludHMgYXJlIHN1cnJvZ2F0ZXMsCkBAIC01
MzksNiArNTI5LDMxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc05ld2xpbmUoVUNoYXIgY29kZVUK
ICAgICB9CiB9CiAKKworYXV0byBMZXhlcjo6bGluZUFuZENvbHVtbk51bWJlckZyb21PZmZzZXQo
Y29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldywgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0KSAtPiBM
aW5lQW5kQ29sdW1uCit7CisgICAgLy8gQ291bnRpbmcgZnJvbSAxIHRvIG1hdGNoIG1vc3QgdGV4
dCBlZGl0b3JzLgorICAgIHVuc2lnbmVkIGxpbmVOdW1iZXIgPSAxOworICAgIHVuc2lnbmVkIGNv
bHVtbk51bWJlciA9IDE7CisgICAgZm9yICh1bnNpZ25lZCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBz
dGQ6Om1pbihzdHJpbmdWaWV3Lmxlbmd0aCgpLCB0YXJnZXRPZmZzZXQpOyArK29mZnNldCkgewor
ICAgICAgICArK2NvbHVtbk51bWJlcjsKKyAgICAgICAgaWYgKGlzTmV3bGluZShzdHJpbmdWaWV3
W29mZnNldF0pKSB7CisgICAgICAgICAgICArK2xpbmVOdW1iZXI7CisgICAgICAgICAgICBjb2x1
bW5OdW1iZXIgPSAxOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB7IGxpbmVOdW1iZXIs
IGNvbHVtbk51bWJlciB9OworfQorCitTdHJpbmcgTGV4ZXI6OmVycm9yU3RyaW5nKGNvbnN0IFN0
cmluZ1ZpZXcmIHNvdXJjZSwgRXJyb3IgZXJyb3IpCit7CisgICAgaWYgKGVycm9yLmNvZGVMb2Nh
dGlvbigpKSB7CisgICAgICAgIGF1dG8gbGluZUFuZENvbHVtbiA9IGxpbmVBbmRDb2x1bW5OdW1i
ZXJGcm9tT2Zmc2V0KHNvdXJjZSwgZXJyb3IuY29kZUxvY2F0aW9uKCkuc3RhcnRPZmZzZXQoKSk7
CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKGxpbmVBbmRDb2x1bW4ubGluZSwgJzonLCBsaW5l
QW5kQ29sdW1uLmNvbHVtbiwgIjogIiwgZXJyb3IubWVzc2FnZSgpKTsKKyAgICB9CisgICAgcmV0
dXJuIGVycm9yLm1lc3NhZ2UoKTsKK30KKwogdm9pZCBMZXhlcjo6c2tpcFdoaXRlc3BhY2VBbmRD
b21tZW50cygpCiB7CiAgICAgd2hpbGUgKG1fb2Zmc2V0IDwgbV9zdHJpbmdWaWV3Lmxlbmd0aCgp
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xMZXhlci5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTExleGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAK
IAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgog
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgpAQCAtMzgsMzcgKzM5LDEwIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAotc3RydWN0IFRva2VuOwot
Ci1uYW1lc3BhY2UgQVNUIHsKLQotY2xhc3MgQ29kZUxvY2F0aW9uIHsKLXB1YmxpYzoKLSAgICBD
b2RlTG9jYXRpb24oKSA9IGRlZmF1bHQ7Ci0gICAgQ29kZUxvY2F0aW9uKHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCi0gICAgICAgIDogbV9zdGFydE9mZnNldChzdGFy
dE9mZnNldCkKLSAgICAgICAgLCBtX2VuZE9mZnNldChlbmRPZmZzZXQpCi0gICAgeyB9Ci0gICAg
aW5saW5lIENvZGVMb2NhdGlvbihjb25zdCBUb2tlbiYpOwotICAgIENvZGVMb2NhdGlvbihjb25z
dCBDb2RlTG9jYXRpb24mIGxvY2F0aW9uMSwgY29uc3QgQ29kZUxvY2F0aW9uJiBsb2NhdGlvbjIp
Ci0gICAgICAgIDogbV9zdGFydE9mZnNldChsb2NhdGlvbjEuc3RhcnRPZmZzZXQoKSkKLSAgICAg
ICAgLCBtX2VuZE9mZnNldChsb2NhdGlvbjIuZW5kT2Zmc2V0KCkpCi0gICAgeyB9Ci0KLSAgICB1
bnNpZ25lZCBzdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRPZmZzZXQ7IH0KLSAg
ICB1bnNpZ25lZCBlbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2VuZE9mZnNldDsgfQotCi1w
cml2YXRlOgotICAgIHVuc2lnbmVkIG1fc3RhcnRPZmZzZXQgeyAwIH07Ci0gICAgdW5zaWduZWQg
bV9lbmRPZmZzZXQgeyAwIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBBU1QKLQogY2xhc3MgTGV4
ZXI7CiAKIHN0cnVjdCBUb2tlbiB7Ci0gICAgQVNUOjpDb2RlTG9jYXRpb24gY29kZUxvY2F0aW9u
OworICAgIENvZGVMb2NhdGlvbiBjb2RlTG9jYXRpb247CiAgICAgZW51bSBjbGFzcyBUeXBlIDog
dWludDhfdCB7CiAgICAgICAgIEludExpdGVyYWwsCiAgICAgICAgIFVpbnRMaXRlcmFsLApAQCAt
MTg5LDcgKzE2Myw3IEBAIHN0cnVjdCBUb2tlbiB7CiAgICAgfQogfTsKIAotQVNUOjpDb2RlTG9j
YXRpb246OkNvZGVMb2NhdGlvbihjb25zdCBUb2tlbiYgdG9rZW4pCitpbmxpbmUgQ29kZUxvY2F0
aW9uOjpDb2RlTG9jYXRpb24oY29uc3QgVG9rZW4mIHRva2VuKQogICAgIDogbV9zdGFydE9mZnNl
dCh0b2tlbi5jb2RlTG9jYXRpb24uc3RhcnRPZmZzZXQoKSkKICAgICAsIG1fZW5kT2Zmc2V0KHRv
a2VuLmNvZGVMb2NhdGlvbi5lbmRPZmZzZXQoKSkKIHsgfQpAQCAtMjczLDE2ICsyNDcsMjIgQEAg
cHVibGljOgogCiAgICAgU3RyaW5nIGVycm9yU3RyaW5nKGNvbnN0IFRva2VuJiB0b2tlbiwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlBh
cnNlIGVycm9yIGF0IGxpbmUgIiwgbGluZU51bWJlckZyb21PZmZzZXQodG9rZW4uc3RhcnRPZmZz
ZXQoKSksICI6ICIsIG1lc3NhZ2UpOworICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiUGFyc2Ug
ZXJyb3IgYXQgbGluZSAiLCBsaW5lQW5kQ29sdW1uTnVtYmVyRnJvbU9mZnNldChtX3N0cmluZ1Zp
ZXcsIHRva2VuLnN0YXJ0T2Zmc2V0KCkpLmxpbmUsICI6ICIsIG1lc3NhZ2UpOwogICAgIH0KIAor
ICAgIHN0YXRpYyBTdHJpbmcgZXJyb3JTdHJpbmcoY29uc3QgU3RyaW5nVmlldyYgc291cmNlLCBF
cnJvcik7CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIHN0cnVjdCBUb2tlbjsKICAgICBUb2tlbiBj
b25zdW1lVG9rZW5Gcm9tU3RyZWFtKCk7CiAKICAgICB2b2lkIHNraXBXaGl0ZXNwYWNlQW5kQ29t
bWVudHMoKTsKIAotICAgIHVuc2lnbmVkIGxpbmVOdW1iZXJGcm9tT2Zmc2V0KHVuc2lnbmVkIG9m
ZnNldCk7CisgICAgc3RydWN0IExpbmVBbmRDb2x1bW4geworICAgICAgICB1bnNpZ25lZCBsaW5l
OworICAgICAgICB1bnNpZ25lZCBjb2x1bW47CisgICAgfTsKKyAgICBzdGF0aWMgTGluZUFuZENv
bHVtbiBsaW5lQW5kQ29sdW1uTnVtYmVyRnJvbU9mZnNldChjb25zdCBTdHJpbmdWaWV3JiwgdW5z
aWduZWQgb2Zmc2V0KTsKIAogICAgIE9wdGlvbmFsPFRva2VuOjpUeXBlPiByZWNvZ25pemVLZXl3
b3JkKHVuc2lnbmVkIGVuZCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDI0
NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJl
c29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsMjcgKzYyLDI3IEBAIE5hbWVSZXNvbHZl
cjo6TmFtZVJlc29sdmVyKE5hbWVSZXNvbHZlciYKIAogTmFtZVJlc29sdmVyOjp+TmFtZVJlc29s
dmVyKCkKIHsKLSAgICBpZiAoZXJyb3IoKSAmJiBtX3BhcmVudE5hbWVSZXNvbHZlcikKLSAgICAg
ICAgbV9wYXJlbnROYW1lUmVzb2x2ZXItPnNldEVycm9yKCk7CisgICAgaWYgKGhhc0Vycm9yKCkg
JiYgbV9wYXJlbnROYW1lUmVzb2x2ZXIpCisgICAgICAgIG1fcGFyZW50TmFtZVJlc29sdmVyLT5z
ZXRFcnJvcihleHBlY3RlZEVycm9yKCkuZXJyb3IoKSk7CiB9CiAKIHZvaWQgTmFtZVJlc29sdmVy
Ojp2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpCiB7CiAgICAgU2NvcGVk
U2V0QWRkZXI8QVNUOjpUeXBlUmVmZXJlbmNlKj4gYWRkZXIobV90eXBlUmVmZXJlbmNlcywgJnR5
cGVSZWZlcmVuY2UpOwogICAgIGlmICghYWRkZXIuaXNOZXdFbnRyeSgpKSB7Ci0gICAgICAgIHNl
dEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3QgdXNlIHJlY3Vyc2l2ZSB0
eXBlIGFyZ3VtZW50cy4iLCB0eXBlUmVmZXJlbmNlLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBWaXNpdG9yOjp2aXNpdCh0eXBlUmVmZXJlbmNlKTsKLSAg
ICBpZiAoZXJyb3IoKSkKKyAgICBpZiAoaGFzRXJyb3IoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IGlmICh0eXBlUmVmZXJlbmNlLm1heWJlUmVzb2x2ZWRUeXBlKCkpIC8vIEZJWE1FOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTYxIFNob3VsZG4ndCB3ZSBrbm93
IGJ5IG5vdyB3aGV0aGVyIHRoZSB0eXBlIGhhcyBiZWVuIHJlc29sdmVkIG9yIG5vdD8KICAgICAg
ICAgcmV0dXJuOwogCiAgICAgYXV0byogY2FuZGlkYXRlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlw
ZXModHlwZVJlZmVyZW5jZS5uYW1lKCkpOwogICAgIGlmIChjYW5kaWRhdGVzID09IG51bGxwdHIp
IHsKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5vdCBm
aW5kIHR5cGUgcmVmZXJlbmNlLiIsIHR5cGVSZWZlcmVuY2UuY29kZUxvY2F0aW9uKCkpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBmb3IgKGF1dG8mIGNhbmRpZGF0ZSA6ICpjYW5kaWRh
dGVzKQpAQCAtOTAsNyArOTAsNyBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpUeXBl
UmVmZXJlCiAgICAgaWYgKGF1dG8gcmVzdWx0ID0gcmVzb2x2ZVR5cGVPdmVybG9hZEltcGwoKmNh
bmRpZGF0ZXMsIHR5cGVSZWZlcmVuY2UudHlwZUFyZ3VtZW50cygpKSkKICAgICAgICAgdHlwZVJl
ZmVyZW5jZS5zZXRSZXNvbHZlZFR5cGUoKnJlc3VsdCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHNl
dEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3QgcmVzb2x2ZSB0eXBlIGFy
Z3VtZW50cy4iLCB0eXBlUmVmZXJlbmNlLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiB9CkBAIC0xMDAsNyArMTAwLDcgQEAgdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0
KEFTVDo6RnVuY3Rpb25EZQogICAgIE5hbWVDb250ZXh0IG5ld05hbWVDb250ZXh0KCZtX25hbWVD
b250ZXh0KTsKICAgICBOYW1lUmVzb2x2ZXIgbmV3TmFtZVJlc29sdmVyKCp0aGlzLCBuZXdOYW1l
Q29udGV4dCk7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBl
KCkpOwotICAgIGlmIChlcnJvcigpKQorICAgIGlmIChoYXNFcnJvcigpKQogICAgICAgICByZXR1
cm47CiAgICAgZm9yIChhdXRvJiBwYXJhbWV0ZXIgOiBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1l
dGVycygpKQogICAgICAgICBuZXdOYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KHBhcmFt
ZXRlcik7CkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6
QmxvY2smIGJsbwogdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmIGlm
U3RhdGVtZW50KQogewogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVudC5jb25kaXRp
b25hbCgpKTsKLSAgICBpZiAoZXJyb3IoKSkKKyAgICBpZiAoaGFzRXJyb3IoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgewpAQCAtMTI1LDcgKzEyNSw3IEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2
aXNpdChBU1Q6OklmU3RhdGVtZW4KICAgICAgICAgTmFtZVJlc29sdmVyIG5ld05hbWVSZXNvbHZl
cigqdGhpcywgbmFtZUNvbnRleHQpOwogICAgICAgICBuZXdOYW1lUmVzb2x2ZXIuY2hlY2tFcnJv
ckFuZFZpc2l0KGlmU3RhdGVtZW50LmJvZHkoKSk7CiAgICAgfQotICAgIGlmIChlcnJvcigpKQor
ICAgIGlmIChoYXNFcnJvcigpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaWZTdGF0ZW1l
bnQuZWxzZUJvZHkoKSkgewpAQCAtMTM4LDcgKzEzOCw3IEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2
aXNpdChBU1Q6OklmU3RhdGVtZW4KIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OldoaWxl
TG9vcCYgd2hpbGVMb29wKQogewogICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuY29u
ZGl0aW9uYWwoKSk7Ci0gICAgaWYgKGVycm9yKCkpCisgICAgaWYgKGhhc0Vycm9yKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0
KTsKQEAgLTE2Nyw3ICsxNjcsNyBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpGb3JM
b29wJiBmCiB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
JiB2YXJpYWJsZURlY2xhcmF0aW9uKQogewogICAgIGlmICghbV9uYW1lQ29udGV4dC5hZGQodmFy
aWFibGVEZWNsYXJhdGlvbikpIHsKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgc2V0RXJy
b3IoRXJyb3IoIkNhbm5vdCBkZWNsYXJlIGR1cGxpY2F0ZSB2YXJpYWJsZXMuIiwgdmFyaWFibGVE
ZWNsYXJhdGlvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IFZpc2l0b3I6OnZpc2l0KHZhcmlhYmxlRGVjbGFyYXRpb24pOwpAQCAtMTgxLDcgKzE4MSw3IEBA
IHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlZhcmlhYmxlUmUKICAgICBpZiAoYXV0byog
dmFyaWFibGUgPSBtX25hbWVDb250ZXh0LmdldFZhcmlhYmxlKHZhcmlhYmxlUmVmZXJlbmNlLm5h
bWUoKSkpCiAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLnNldFZhcmlhYmxlKCp2YXJpYWJsZSk7
CiAgICAgZWxzZSB7Ci0gICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9y
KCJDYW5ub3QgZmluZCB0aGUgdmFyaWFibGUgZGVjbGFyYXRpb24uIiwgdmFyaWFibGVSZWZlcmVu
Y2UuY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KQEAgLTIwMSw3
ICsyMDEsNyBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzCiAgICAg
ICAgICAgICAgICAgICAgIEFTVDo6cmVwbGFjZVdpdGg8QVNUOjpFbnVtZXJhdGlvbk1lbWJlckxp
dGVyYWw+KGRvdEV4cHJlc3Npb24sIFdURk1vdmUoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSk7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICBzZXRFcnJvcihFcnJvcigiTm8g
ZW51bSBtZW1iZXIgbWF0Y2hlcyB0aGUgdXNlZCBuYW1lLiIsIGRvdEV4cHJlc3Npb24uY29kZUxv
Y2F0aW9uKCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpF
bnVtZXJhdGlvCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgc2V0RXJyb3IoKTsKKyAgICBz
ZXRFcnJvcihFcnJvcigiQ2Fubm90IHJlc29sdmUgZW51bWVyYXRpb24gbWVtYmVyIGxpdGVyYWwu
IiwgZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmNvZGVMb2NhdGlvbigpKSk7CiB9CiAKIHZvaWQg
TmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCkBAIC0yMzksNDQgKzIzOSw0NCBAQCB2b2lkIE5hbWVSZXNv
bHZlcjo6dmlzaXQoQVNUOjpOYXRpdmVGdW5jCiAKIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY3IE1ha2Ugc3VyZSBhbGwgdGhlIG5hbWVzIGhh
dmUgYmVlbiByZXNvbHZlZC4KIAotYm9vbCByZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mIHBy
b2dyYW0sIE5hbWVSZXNvbHZlciYgbmFtZVJlc29sdmVyKQorRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+
IHJlc29sdmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYgcHJvZ3JhbSwgTmFtZVJlc29sdmVyJiBuYW1l
UmVzb2x2ZXIpCiB7CiAgICAgZm9yIChhdXRvJiB0eXBlRGVmaW5pdGlvbiA6IHByb2dyYW0udHlw
ZURlZmluaXRpb25zKCkpIHsKICAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNp
dCh0eXBlRGVmaW5pdGlvbik7Ci0gICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5oYXNFcnJv
cigpKQorICAgICAgICAgICAgcmV0dXJuIG5hbWVSZXNvbHZlci5leHBlY3RlZEVycm9yKCk7CiAg
ICAgfQogICAgIGZvciAoYXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA6IHByb2dyYW0uc3RydWN0
dXJlRGVmaW5pdGlvbnMoKSkgewogICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZp
c2l0KHN0cnVjdHVyZURlZmluaXRpb24pOwotICAgICAgICBpZiAobmFtZVJlc29sdmVyLmVycm9y
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIu
aGFzRXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBuYW1lUmVzb2x2ZXIuZXhwZWN0ZWRFcnJv
cigpOwogICAgIH0KICAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHByb2dy
YW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKSB7CiAgICAgICAgIG5hbWVSZXNvbHZlci5jaGVj
a0Vycm9yQW5kVmlzaXQoZW51bWVyYXRpb25EZWZpbml0aW9uKTsKLSAgICAgICAgaWYgKG5hbWVS
ZXNvbHZlci5lcnJvcigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
bmFtZVJlc29sdmVyLmhhc0Vycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gbmFtZVJlc29sdmVy
LmV4cGVjdGVkRXJyb3IoKTsKICAgICB9CiAgICAgZm9yIChhdXRvJiBuYXRpdmVUeXBlRGVjbGFy
YXRpb24gOiBwcm9ncmFtLm5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKSkgewogICAgICAgICBuYW1l
UmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7Ci0gICAg
ICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5oYXNFcnJvcigpKQorICAgICAgICAgICAgcmV0dXJu
IG5hbWVSZXNvbHZlci5leHBlY3RlZEVycm9yKCk7CiAgICAgfQotICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgcmVzb2x2ZVR5cGVOYW1lc0luRnVuY3Rpb25zKFBy
b2dyYW0mIHByb2dyYW0sIE5hbWVSZXNvbHZlciYgbmFtZVJlc29sdmVyKQorRXhwZWN0ZWQ8dm9p
ZCwgRXJyb3I+IHJlc29sdmVUeXBlTmFtZXNJbkZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtLCBO
YW1lUmVzb2x2ZXImIG5hbWVSZXNvbHZlcikKIHsKICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVm
aW5pdGlvbiA6IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKSB7CiAgICAgICAgIG5hbWVS
ZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKLSAgICAgICAg
aWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpZiAobmFtZVJlc29sdmVyLmhhc0Vycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gbmFt
ZVJlc29sdmVyLmV4cGVjdGVkRXJyb3IoKTsKICAgICB9CiAgICAgZm9yIChhdXRvJiBuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygp
KSB7CiAgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbik7Ci0gICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5oYXNFcnJvcigp
KQorICAgICAgICAgICAgcmV0dXJuIG5hbWVSZXNvbHZlci5leHBlY3RlZEVycm9yKCk7CiAgICAg
fQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdITFNMCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5h
bWVSZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDggKzI3LDEwIEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVk
ZSAiV0hMU0xFcnJvci5oIgogI2luY2x1ZGUgIldITFNMTmFtZUNvbnRleHQuaCIKICNpbmNsdWRl
ICJXSExTTFZpc2l0b3IuaCIKKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02Myw4ICs2NSw4IEBAIHBy
aXZhdGU6CiAgICAgTmFtZVJlc29sdmVyKiBtX3BhcmVudE5hbWVSZXNvbHZlciB7IG51bGxwdHIg
fTsKIH07CiAKLWJvb2wgcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiwgTmFtZVJlc29sdmVy
Jik7Ci1ib29sIHJlc29sdmVUeXBlTmFtZXNJbkZ1bmN0aW9ucyhQcm9ncmFtJiwgTmFtZVJlc29s
dmVyJik7CitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFt
JiwgTmFtZVJlc29sdmVyJik7CitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gcmVzb2x2ZVR5cGVOYW1l
c0luRnVuY3Rpb25zKFByb2dyYW0mLCBOYW1lUmVzb2x2ZXImKTsKIAogfSAvLyBuYW1lc3BhY2Ug
V0hMU0wKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUGFyc2VyLmNwcAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
OSw3ICs1OSw3IEBAIG5hbWVzcGFjZSBXSExTTCB7CiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PEVycm9yPihuYW1lLmVycm9yKCkpOwogCiAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5NTY4MiBSZXR1cm4gYSBiZXR0ZXIgZXJyb3IgY29kZSBmcm9t
IHRoaXMsIGFuZCByZXBvcnQgaXQgdG8gSmF2YVNjcmlwdC4KLWF1dG8gUGFyc2VyOjpwYXJzZShQ
cm9ncmFtJiBwcm9ncmFtLCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0
aW9uYWw8RXJyb3I+CithdXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYgcHJvZ3JhbSwgU3RyaW5n
VmlldyBzdHJpbmdWaWV3LCBNb2RlIG1vZGUpIC0+IEV4cGVjdGVkPHZvaWQsIEVycm9yPgogewog
ICAgIG1fbGV4ZXIgPSBMZXhlcihzdHJpbmdWaWV3KTsKICAgICBtX21vZGUgPSBtb2RlOwpAQCAt
NjgsMjggKzY4LDI4IEBAIGF1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiBwcm9ncmFtLCBTdHIK
ICAgICAgICAgYXV0byB0b2tlbiA9IG1fbGV4ZXIucGVlaygpOwogICAgICAgICBzd2l0Y2ggKHRv
a2VuLnR5cGUpIHsKICAgICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6SW52YWxpZDoKLSAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAg
ICBjYXNlIFRva2VuOjpUeXBlOjpTZW1pY29sb246CiAgICAgICAgICAgICBtX2xleGVyLmNvbnN1
bWVUb2tlbigpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGNhc2UgVG9rZW46OlR5
cGU6OlR5cGVkZWY6IHsKICAgICAgICAgICAgIGF1dG8gdHlwZURlZmluaXRpb24gPSBwYXJzZVR5
cGVEZWZpbml0aW9uKCk7CiAgICAgICAgICAgICBpZiAoIXR5cGVEZWZpbml0aW9uKQotICAgICAg
ICAgICAgICAgIHJldHVybiB0eXBlRGVmaW5pdGlvbi5lcnJvcigpOworICAgICAgICAgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCh0eXBlRGVmaW5pdGlvbi5lcnJvcigpKTsKICAgICAgICAg
ICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKnR5cGVEZWZpbml0aW9uKSk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpTdHJ1Y3Q6
IHsKICAgICAgICAgICAgIGF1dG8gc3RydWN0dXJlRGVmaW5pdGlvbiA9IHBhcnNlU3RydWN0dXJl
RGVmaW5pdGlvbigpOwogICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmVEZWZpbml0aW9uKQotICAg
ICAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVEZWZpbml0aW9uLmVycm9yKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHN0cnVjdHVyZURlZmluaXRpb24uZXJyb3Io
KSk7CiAgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpzdHJ1Y3R1cmVEZWZpbml0
aW9uKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBjYXNlIFRv
a2VuOjpUeXBlOjpFbnVtOiB7CiAgICAgICAgICAgICBhdXRvIGVudW1lcmF0aW9uRGVmaW5pdGlv
biA9IHBhcnNlRW51bWVyYXRpb25EZWZpbml0aW9uKCk7CiAgICAgICAgICAgICBpZiAoIWVudW1l
cmF0aW9uRGVmaW5pdGlvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gZW51bWVyYXRpb25EZWZp
bml0aW9uLmVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVu
dW1lcmF0aW9uRGVmaW5pdGlvbi5lcnJvcigpKTsKICAgICAgICAgICAgIHByb2dyYW0uYXBwZW5k
KFdURk1vdmUoKmVudW1lcmF0aW9uRGVmaW5pdGlvbikpOwogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KQEAgLTk3LDMxICs5NywzMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3Jh
bSYgcHJvZ3JhbSwgU3RyCiAgICAgICAgICAgICBBU1NFUlQobV9tb2RlID09IE1vZGU6OlN0YW5k
YXJkTGlicmFyeSk7CiAgICAgICAgICAgICBhdXRvIGZ1cnRoZXJUb2tlbiA9IHBlZWtGdXJ0aGVy
KCk7CiAgICAgICAgICAgICBpZiAoIWZ1cnRoZXJUb2tlbikKLSAgICAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAg
ICBpZiAoZnVydGhlclRva2VuLT50eXBlID09IFRva2VuOjpUeXBlOjpUeXBlZGVmKSB7CiAgICAg
ICAgICAgICAgICAgYXV0byBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBwYXJzZU5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbigpOwogICAgICAgICAgICAgICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0aW9u
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmF0aXZlVHlwZURlY2xhcmF0aW9uLmVycm9y
KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChuYXRpdmVUeXBl
RGVjbGFyYXRpb24uZXJyb3IoKSk7CiAgICAgICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RG
TW92ZSgqbmF0aXZlVHlwZURlY2xhcmF0aW9uKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBhdXRvIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24gPSBwYXJzZU5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oKTsKICAgICAgICAgICAgIGlmICgh
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5lcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmVycm9yKCkpOwogICAgICAgICAg
ICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOwog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDogewogICAg
ICAgICAgICAgYXV0byBmdW5jdGlvbkRlZmluaXRpb24gPSBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlv
bigpOwogICAgICAgICAgICAgaWYgKCFmdW5jdGlvbkRlZmluaXRpb24pCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uRGVmaW5pdGlvbi5lcnJvcigpOworICAgICAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChmdW5jdGlvbkRlZmluaXRpb24uZXJyb3IoKSk7CiAgICAgICAg
ICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpmdW5jdGlvbkRlZmluaXRpb24pKTsKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiB7IH07CiB9CiAKIGF1dG8gUGFyc2VyOjpmYWls
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgVHJ5VG9QZWVrIHRyeVRvUGVlaykgLT4gVW5leHBlY3Rl
ZDxFcnJvcj4KQEAgLTI0MSw3ICsyNDEsNyBAQCBzdGF0aWMgaW50IGRpZ2l0VmFsdWUoVUNoYXIg
Y2hhcmFjdGVyKQogICAgIHJldHVybiBjaGFyYWN0ZXIgLSAnQScgKyAxMDsKIH0KIAotc3RhdGlj
IEV4cGVjdGVkPGludCwgUGFyc2VyOjpFcnJvcj4gaW50TGl0ZXJhbFRvSW50KFN0cmluZ1ZpZXcg
dGV4dCkKK3N0YXRpYyBFeHBlY3RlZDxpbnQsIEVycm9yPiBpbnRMaXRlcmFsVG9JbnQoU3RyaW5n
VmlldyB0ZXh0KQogewogICAgIGJvb2wgbmVnYXRlID0gZmFsc2U7CiAgICAgaWYgKHRleHQuc3Rh
cnRzV2l0aCgiLSJfc3RyKSkgewpAQCAtMjYwLDIxICsyNjAsMjEgQEAgc3RhdGljIEV4cGVjdGVk
PGludCwgUGFyc2VyOjpFcnJvcj4gaW50TAogICAgICAgICBhdXRvIHByZXZpb3VzID0gcmVzdWx0
OwogICAgICAgICByZXN1bHQgPSByZXN1bHQgKiBiYXNlICsgZGlnaXQ7CiAgICAgICAgIGlmIChy
ZXN1bHQgPCBwcmV2aW91cykKLSAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPFBhcnNlcjo6
RXJyb3I+KFBhcnNlcjo6RXJyb3IobWFrZVN0cmluZygiaW50IGxpdGVyYWwgIiwgdGV4dCwgIiBp
cyBvdXQgb2YgYm91bmRzIikpKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChF
cnJvcihtYWtlU3RyaW5nKCJpbnQgbGl0ZXJhbCAiLCB0ZXh0LCAiIGlzIG91dCBvZiBib3VuZHMi
KSkpOwogICAgIH0KICAgICBpZiAobmVnYXRlKSB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6
ZW9mKGludDY0X3QpID4gc2l6ZW9mKHVuc2lnbmVkKSAmJiBzaXplb2YoaW50NjRfdCkgPiBzaXpl
b2YoaW50KSwgIlRoaXMgY29kZSB3b3VsZCBiZSB3cm9uZyBvdGhlcndpc2UiKTsKICAgICAgICAg
aW50NjRfdCBpbnRSZXN1bHQgPSAtc3RhdGljX2Nhc3Q8aW50NjRfdD4ocmVzdWx0KTsKICAgICAg
ICAgaWYgKGludFJlc3VsdCA8IHN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6bWluKCkpKQotICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UGFyc2VyOjpF
cnJvcj4oUGFyc2VyOjpFcnJvcihtYWtlU3RyaW5nKCJpbnQgbGl0ZXJhbCAiLCB0ZXh0LCAiIGlz
IG91dCBvZiBib3VuZHMiKSkpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVy
cm9yKG1ha2VTdHJpbmcoImludCBsaXRlcmFsICIsIHRleHQsICIgaXMgb3V0IG9mIGJvdW5kcyIp
KSk7CiAgICAgICAgIHJldHVybiB7IHN0YXRpY19jYXN0PGludD4oaW50UmVzdWx0KSB9OwogICAg
IH0KICAgICBpZiAocmVzdWx0ID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWF4KCkpKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxQYXJzZXI6OkVy
cm9yPihQYXJzZXI6OkVycm9yKG1ha2VTdHJpbmcoImludCBsaXRlcmFsICIsIHRleHQsICIgaXMg
b3V0IG9mIGJvdW5kcyIpKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvciht
YWtlU3RyaW5nKCJpbnQgbGl0ZXJhbCAiLCB0ZXh0LCAiIGlzIG91dCBvZiBib3VuZHMiKSkpOwog
ICAgIHJldHVybiB7IHN0YXRpY19jYXN0PGludD4ocmVzdWx0KSB9OwogfQogCi1zdGF0aWMgRXhw
ZWN0ZWQ8dW5zaWduZWQsIFBhcnNlcjo6RXJyb3I+IHVpbnRMaXRlcmFsVG9VaW50KFN0cmluZ1Zp
ZXcgdGV4dCkKK3N0YXRpYyBFeHBlY3RlZDx1bnNpZ25lZCwgRXJyb3I+IHVpbnRMaXRlcmFsVG9V
aW50KFN0cmluZ1ZpZXcgdGV4dCkKIHsKICAgICB1bnNpZ25lZCBiYXNlID0gMTA7CiAgICAgaWYg
KHRleHQuc3RhcnRzV2l0aCgiMHgiX3N0cikpIHsKQEAgLTI4OSwxNyArMjg5LDE3IEBAIHN0YXRp
YyBFeHBlY3RlZDx1bnNpZ25lZCwgUGFyc2VyOjpFcnJvcj4KICAgICAgICAgYXV0byBwcmV2aW91
cyA9IHJlc3VsdDsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogYmFzZSArIGRpZ2l0OwogICAg
ICAgICBpZiAocmVzdWx0IDwgcHJldmlvdXMpCi0gICAgICAgICAgICByZXR1cm4gVW5leHBlY3Rl
ZDxQYXJzZXI6OkVycm9yPihQYXJzZXI6OkVycm9yKG1ha2VTdHJpbmcoInVpbnQgbGl0ZXJhbCAi
LCB0ZXh0LCAiIGlzIG91dCBvZiBib3VuZHMiKSkpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKEVycm9yKG1ha2VTdHJpbmcoInVpbnQgbGl0ZXJhbCAiLCB0ZXh0LCAiIGlzIG91
dCBvZiBib3VuZHMiKSkpOwogICAgIH0KICAgICByZXR1cm4geyByZXN1bHQgfTsKIH0KIAotc3Rh
dGljIEV4cGVjdGVkPGZsb2F0LCBQYXJzZXI6OkVycm9yPiBmbG9hdExpdGVyYWxUb0Zsb2F0KFN0
cmluZ1ZpZXcgdGV4dCkKK3N0YXRpYyBFeHBlY3RlZDxmbG9hdCwgRXJyb3I+IGZsb2F0TGl0ZXJh
bFRvRmxvYXQoU3RyaW5nVmlldyB0ZXh0KQogewogICAgIHNpemVfdCBwYXJzZWRMZW5ndGg7CiAg
ICAgYXV0byByZXN1bHQgPSBwYXJzZURvdWJsZSh0ZXh0LCBwYXJzZWRMZW5ndGgpOwogICAgIGlm
IChwYXJzZWRMZW5ndGggIT0gdGV4dC5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWQ8UGFyc2VyOjpFcnJvcj4oUGFyc2VyOjpFcnJvcihtYWtlU3RyaW5nKCJDYW5ub3QgcGFyc2Ug
ZmxvYXQgIiwgdGV4dCkpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKG1h
a2VTdHJpbmcoIkNhbm5vdCBwYXJzZSBmbG9hdCAiLCB0ZXh0KSkpOwogICAgIHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4ocmVzdWx0KTsKIH0KIApAQCAtMzQzLDE4ICszNDMsMTggQEAgYXV0byBQ
YXJzZXI6OmNvbnN1bWVOb25OZWdhdGl2ZUludGVncmFsTAogICAgIHJldHVybiBmYWlsKCJpbnQg
bGl0ZXJhbCBpcyBuZWdhdGl2ZSJfc3RyKTsKIH0KIAotc3RhdGljIEV4cGVjdGVkPHVuc2lnbmVk
LCBQYXJzZXI6OkVycm9yPiByZWNvZ25pemVTaW1wbGVVbnNpZ25lZEludGVnZXIoU3RyaW5nVmll
dyBzdHJpbmdWaWV3KQorc3RhdGljIEV4cGVjdGVkPHVuc2lnbmVkLCBFcnJvcj4gcmVjb2duaXpl
U2ltcGxlVW5zaWduZWRJbnRlZ2VyKFN0cmluZ1ZpZXcgc3RyaW5nVmlldykKIHsKICAgICB1bnNp
Z25lZCByZXN1bHQgPSAwOwogICAgIGlmIChzdHJpbmdWaWV3Lmxlbmd0aCgpIDwgMSkKLSAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UGFyc2VyOjpFcnJvcj4oUGFyc2VyOjpFcnJvcihtYWtlU3Ry
aW5nKCJTaW1wbGUgdW5zaWduZWQgbGl0ZXJhbCAiLCBzdHJpbmdWaWV3LCAiIGlzIHRvbyBzaG9y
dCIpKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcihtYWtlU3RyaW5nKCJT
aW1wbGUgdW5zaWduZWQgbGl0ZXJhbCAiLCBzdHJpbmdWaWV3LCAiIGlzIHRvbyBzaG9ydCIpKSk7
CiAgICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHN0cmluZ1ZpZXcuY29kZVBvaW50cygpKSB7CiAg
ICAgICAgIGlmIChjb2RlUG9pbnQgPCAnMCcgfHwgY29kZVBvaW50ID4gJzknKQotICAgICAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UGFyc2VyOjpFcnJvcj4oUGFyc2VyOjpFcnJvcihtYWtlU3Ry
aW5nKCJTaW1wbGUgdW5zaWduZWQgbGl0ZXJhbCAiLCBzdHJpbmdWaWV3LCAiIGlzbid0IG9mIHRo
ZSBmb3JtIFswLTldKyIpKSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJy
b3IobWFrZVN0cmluZygiU2ltcGxlIHVuc2lnbmVkIGxpdGVyYWwgIiwgc3RyaW5nVmlldywgIiBp
c24ndCBvZiB0aGUgZm9ybSBbMC05XSsiKSkpOwogICAgICAgICBhdXRvIHByZXZpb3VzID0gcmVz
dWx0OwogICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAxMCArIChjb2RlUG9pbnQgLSAnMCcpOwog
ICAgICAgICBpZiAocmVzdWx0IDwgcHJldmlvdXMpCi0gICAgICAgICAgICByZXR1cm4gVW5leHBl
Y3RlZDxQYXJzZXI6OkVycm9yPihQYXJzZXI6OkVycm9yKG1ha2VTdHJpbmcoIlNpbXBsZSB1bnNp
Z25lZCBsaXRlcmFsICIsIHN0cmluZ1ZpZXcsICIgaXMgb3V0IG9mIGJvdW5kcyIpKSk7CisgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IobWFrZVN0cmluZygiU2ltcGxlIHVu
c2lnbmVkIGxpdGVyYWwgIiwgc3RyaW5nVmlldywgIiBpcyBvdXQgb2YgYm91bmRzIikpKTsKICAg
ICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQxNSw3ICs0MTUsNyBAQCBhdXRvIFBhcnNl
cjo6cGFyc2VUeXBlQXJndW1lbnQoKSAtPiBFeHBlCiAgICAgICAgIHJldHVybiBBU1Q6OlR5cGVB
cmd1bWVudChXVEZNb3ZlKCpjb25zdGFudEV4cHJlc3Npb24pKTsKICAgICB9CiAgICAgQ09OU1VN
RV9UWVBFKHJlc3VsdCwgSWRlbnRpZmllcik7Ci0gICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRp
b24oKnJlc3VsdCk7CisgICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9uKCpyZXN1bHQpOwogICAgIHJl
dHVybiBBU1Q6OlR5cGVBcmd1bWVudChtYWtlVW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4o
bG9jYXRpb24sIHJlc3VsdC0+c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpLCBBU1Q6OlR5
cGVBcmd1bWVudHMoKSkpOwogfQogCkBAIC01MzQsNyArNTM0LDcgQEAgYXV0byBQYXJzZXI6OnBh
cnNlVHlwZSgpIC0+IEV4cGVjdGVkPFVuaQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeEFiYnJldmlhdGVkID0gWyZdKGNv
bnN0IFR5cGVTdWZmaXhBYmJyZXZpYXRlZCYgdHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBVbmlxdWVS
ZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiBwcmV2aW91cykgLT4gVW5pcXVlUmVmPEFTVDo6VW5uYW1l
ZFR5cGU+IHsKLSAgICAgICAgICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uKCphZGRyZXNz
U3BhY2VUb2tlbiwgdHlwZVN1ZmZpeEFiYnJldmlhdGVkLmxvY2F0aW9uKTsKKyAgICAgICAgICAg
IENvZGVMb2NhdGlvbiBsb2NhdGlvbigqYWRkcmVzc1NwYWNlVG9rZW4sIHR5cGVTdWZmaXhBYmJy
ZXZpYXRlZC5sb2NhdGlvbik7CiAgICAgICAgICAgICBzd2l0Y2ggKHR5cGVTdWZmaXhBYmJyZXZp
YXRlZC50b2tlbi50eXBlKSB7CiAgICAgICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpTdGFyOgog
ICAgICAgICAgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4o
bG9jYXRpb24sIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpIH07CkBAIC01NjUsNyAr
NTY1LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlVHlwZSgpIC0+IEV4cGVjdGVkPFVuaQogICAgIH0K
IAogICAgIGF1dG8gY29uc3RydWN0VHlwZUZyb21TdWZmaXhOb25BYmJyZXZpYXRlZCA9IFsmXShj
b25zdCBUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQmIHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCwg
VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYgcHJldmlvdXMpIC0+IFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPiB7Ci0gICAgICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uKCpuYW1l
LCB0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQubG9jYXRpb24pOworICAgICAgICBDb2RlTG9jYXRp
b24gbG9jYXRpb24oKm5hbWUsIHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC5sb2NhdGlvbik7CiAg
ICAgICAgIHN3aXRjaCAodHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLnRva2VuLnR5cGUpIHsKICAg
ICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6U3RhcjoKICAgICAgICAgICAgIHJldHVybiB7IG1ha2VV
bmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4obG9jYXRpb24sICp0eXBlU3VmZml4Tm9uQWJicmV2
aWF0ZWQuYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSkgfTsKQEAgLTExODYsNyArMTE4
Niw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUZvckxvb3AoKSAtPiBFeHBlY3RlZDwKICAgICAgICAg
fQogCiAgICAgICAgIFBBUlNFKGJvZHksIFN0YXRlbWVudCk7Ci0gICAgICAgIEFTVDo6Q29kZUxv
Y2F0aW9uIGxvY2F0aW9uKG9yaWdpbi0+Y29kZUxvY2F0aW9uLCAgKCpib2R5KS0+Y29kZUxvY2F0
aW9uKCkpOworICAgICAgICBDb2RlTG9jYXRpb24gbG9jYXRpb24ob3JpZ2luLT5jb2RlTG9jYXRp
b24sICAoKmJvZHkpLT5jb2RlTG9jYXRpb24oKSk7CiAgICAgICAgIHJldHVybiBBU1Q6OkZvckxv
b3AobG9jYXRpb24sIFdURk1vdmUoaW5pdGlhbGl6YXRpb24pLCBXVEZNb3ZlKGNvbmRpdGlvbiks
IFdURk1vdmUoaW5jcmVtZW50KSwgV1RGTW92ZSgqYm9keSkpOwogICAgIH07CiAKQEAgLTEyMTEs
NyArMTIxMSw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVdoaWxlTG9vcCgpIC0+IEV4cGVjdGUKICAg
ICBDT05TVU1FX1RZUEUocmlnaHRQYXJlbnRoZXNpcywgUmlnaHRQYXJlbnRoZXNpcyk7CiAgICAg
UEFSU0UoYm9keSwgU3RhdGVtZW50KTsKIAotICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9u
KG9yaWdpbi0+Y29kZUxvY2F0aW9uLCAgKCpib2R5KS0+Y29kZUxvY2F0aW9uKCkpOworICAgIENv
ZGVMb2NhdGlvbiBsb2NhdGlvbihvcmlnaW4tPmNvZGVMb2NhdGlvbiwgICgqYm9keSktPmNvZGVM
b2NhdGlvbigpKTsKICAgICByZXR1cm4gQVNUOjpXaGlsZUxvb3AobG9jYXRpb24sIFdURk1vdmUo
KmNvbmRpdGlvbmFsKSwgV1RGTW92ZSgqYm9keSkpOwogfQogCkBAIC0xMzg5LDcgKzEzODksNyBA
QCBhdXRvIFBhcnNlcjo6cGFyc2VFZmZlY3RmdWxFeHByZXNzaW9uKCkgCiAgICAgaWYgKGV4cHJl
c3Npb25zLnNpemUoKSA9PSAxKQogICAgICAgICByZXR1cm4gV1RGTW92ZShleHByZXNzaW9uc1sw
XSk7CiAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gbV9sZXhlci5wZWVrKCkuc3RhcnRPZmZzZXQo
KTsKLSAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2NhdGlvbihvcmlnaW4tPnN0YXJ0T2Zmc2V0KCks
IGVuZE9mZnNldCk7CisgICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9uKG9yaWdpbi0+c3RhcnRPZmZz
ZXQoKSwgZW5kT2Zmc2V0KTsKICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6Q29tbWFF
eHByZXNzaW9uPihsb2NhdGlvbiwgV1RGTW92ZShleHByZXNzaW9ucykpIH07CiB9CiAKQEAgLTE0
MzMsMTQgKzE0MzMsMTQgQEAgYXV0byBQYXJzZXI6OnBhcnNlTGltaXRlZFN1ZmZpeE9wZXJhdG9y
KAogICAgICAgICBhdXRvIGlkZW50aWZpZXIgPSBjb25zdW1lVHlwZShUb2tlbjo6VHlwZTo6SWRl
bnRpZmllcik7CiAgICAgICAgIGlmICghaWRlbnRpZmllcikKICAgICAgICAgICAgIHJldHVybiBT
dWZmaXhFeHByZXNzaW9uKFdURk1vdmUocHJldmlvdXMpLCBmYWxzZSk7Ci0gICAgICAgIEFTVDo6
Q29kZUxvY2F0aW9uIGxvY2F0aW9uKHByZXZpb3VzLT5jb2RlTG9jYXRpb24oKSwgKmlkZW50aWZp
ZXIpOworICAgICAgICBDb2RlTG9jYXRpb24gbG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2NhdGlv
bigpLCAqaWRlbnRpZmllcik7CiAgICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKG1ha2VV
bmlxdWVSZWY8QVNUOjpEb3RFeHByZXNzaW9uPihsb2NhdGlvbiwgV1RGTW92ZShwcmV2aW91cyks
IGlkZW50aWZpZXItPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSksIHRydWUpOwogICAg
IH0KICAgICBjYXNlIFRva2VuOjpUeXBlOjpBcnJvdzogewogICAgICAgICBhdXRvIGlkZW50aWZp
ZXIgPSBjb25zdW1lVHlwZShUb2tlbjo6VHlwZTo6SWRlbnRpZmllcik7CiAgICAgICAgIGlmICgh
aWRlbnRpZmllcikKICAgICAgICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKFdURk1vdmUo
cHJldmlvdXMpLCBmYWxzZSk7Ci0gICAgICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uKHBy
ZXZpb3VzLT5jb2RlTG9jYXRpb24oKSwgKmlkZW50aWZpZXIpOworICAgICAgICBDb2RlTG9jYXRp
b24gbG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2NhdGlvbigpLCAqaWRlbnRpZmllcik7CiAgICAg
ICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKG1ha2VVbmlxdWVSZWY8QVNUOjpEb3RFeHByZXNz
aW9uPihsb2NhdGlvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4o
bG9jYXRpb24sIFdURk1vdmUocHJldmlvdXMpKSwgaWRlbnRpZmllci0+c3RyaW5nVmlldyhtX2xl
eGVyKS50b1N0cmluZygpKSwgdHJ1ZSk7CiAgICAgfQogICAgIGRlZmF1bHQ6IHsKQEAgLTE0NDks
NyArMTQ0OSw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUxpbWl0ZWRTdWZmaXhPcGVyYXRvcigKICAg
ICAgICAgaWYgKCFleHByZXNzaW9uKQogICAgICAgICAgICAgcmV0dXJuIFN1ZmZpeEV4cHJlc3Np
b24oV1RGTW92ZShwcmV2aW91cyksIGZhbHNlKTsKICAgICAgICAgaWYgKGF1dG8gcmlnaHRTcXVh
cmVCcmFja2V0ID0gY29uc3VtZVR5cGUoVG9rZW46OlR5cGU6OlJpZ2h0U3F1YXJlQnJhY2tldCkp
IHsKLSAgICAgICAgICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uKHByZXZpb3VzLT5jb2Rl
TG9jYXRpb24oKSwgKnJpZ2h0U3F1YXJlQnJhY2tldCk7CisgICAgICAgICAgICBDb2RlTG9jYXRp
b24gbG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2NhdGlvbigpLCAqcmlnaHRTcXVhcmVCcmFja2V0
KTsKICAgICAgICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKG1ha2VVbmlxdWVSZWY8QVNU
OjpJbmRleEV4cHJlc3Npb24+KGxvY2F0aW9uLCBXVEZNb3ZlKHByZXZpb3VzKSwgV1RGTW92ZSgq
ZXhwcmVzc2lvbikpLCB0cnVlKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gU3VmZml4RXhw
cmVzc2lvbihXVEZNb3ZlKHByZXZpb3VzKSwgZmFsc2UpOwpAQCAtMTQ3MywxNCArMTQ3MywxNCBA
QCBhdXRvIFBhcnNlcjo6cGFyc2VTdWZmaXhPcGVyYXRvcihVbmlxdWVSCiAgICAgICAgIGF1dG8g
aWRlbnRpZmllciA9IGNvbnN1bWVUeXBlKFRva2VuOjpUeXBlOjpJZGVudGlmaWVyKTsKICAgICAg
ICAgaWYgKCFpZGVudGlmaWVyKQogICAgICAgICAgICAgcmV0dXJuIFN1ZmZpeEV4cHJlc3Npb24o
V1RGTW92ZShwcmV2aW91cyksIGZhbHNlKTsKLSAgICAgICAgQVNUOjpDb2RlTG9jYXRpb24gbG9j
YXRpb24ocHJldmlvdXMtPmNvZGVMb2NhdGlvbigpLCAqaWRlbnRpZmllcik7CisgICAgICAgIENv
ZGVMb2NhdGlvbiBsb2NhdGlvbihwcmV2aW91cy0+Y29kZUxvY2F0aW9uKCksICppZGVudGlmaWVy
KTsKICAgICAgICAgcmV0dXJuIFN1ZmZpeEV4cHJlc3Npb24obWFrZVVuaXF1ZVJlZjxBU1Q6OkRv
dEV4cHJlc3Npb24+KGxvY2F0aW9uLCBXVEZNb3ZlKHByZXZpb3VzKSwgaWRlbnRpZmllci0+c3Ry
aW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpKSwgdHJ1ZSk7CiAgICAgfQogICAgIGNhc2UgVG9r
ZW46OlR5cGU6OkFycm93OiB7CiAgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IGNvbnN1bWVUeXBl
KFRva2VuOjpUeXBlOjpJZGVudGlmaWVyKTsKICAgICAgICAgaWYgKCFpZGVudGlmaWVyKQogICAg
ICAgICAgICAgcmV0dXJuIFN1ZmZpeEV4cHJlc3Npb24oV1RGTW92ZShwcmV2aW91cyksIGZhbHNl
KTsKLSAgICAgICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2Nh
dGlvbigpLCAqaWRlbnRpZmllcik7CisgICAgICAgIENvZGVMb2NhdGlvbiBsb2NhdGlvbihwcmV2
aW91cy0+Y29kZUxvY2F0aW9uKCksICppZGVudGlmaWVyKTsKICAgICAgICAgcmV0dXJuIFN1ZmZp
eEV4cHJlc3Npb24obWFrZVVuaXF1ZVJlZjxBU1Q6OkRvdEV4cHJlc3Npb24+KGxvY2F0aW9uLCBt
YWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihXVEZNb3ZlKCpzdWZmaXgp
LCBXVEZNb3ZlKHByZXZpb3VzKSksIGlkZW50aWZpZXItPnN0cmluZ1ZpZXcobV9sZXhlcikudG9T
dHJpbmcoKSksIHRydWUpOwogICAgIH0KICAgICBjYXNlIFRva2VuOjpUeXBlOjpMZWZ0U3F1YXJl
QnJhY2tldDogewpAQCAtMTQ4OCwxMyArMTQ4OCwxMyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VTdWZm
aXhPcGVyYXRvcihVbmlxdWVSCiAgICAgICAgIGlmICghZXhwcmVzc2lvbikKICAgICAgICAgICAg
IHJldHVybiBTdWZmaXhFeHByZXNzaW9uKFdURk1vdmUocHJldmlvdXMpLCBmYWxzZSk7CiAgICAg
ICAgIGlmIChhdXRvIHJpZ2h0U3F1YXJlQnJhY2tldCA9IGNvbnN1bWVUeXBlKFRva2VuOjpUeXBl
OjpSaWdodFNxdWFyZUJyYWNrZXQpKSB7Ci0gICAgICAgICAgICBBU1Q6OkNvZGVMb2NhdGlvbiBs
b2NhdGlvbihwcmV2aW91cy0+Y29kZUxvY2F0aW9uKCksICpyaWdodFNxdWFyZUJyYWNrZXQpOwor
ICAgICAgICAgICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9uKHByZXZpb3VzLT5jb2RlTG9jYXRpb24o
KSwgKnJpZ2h0U3F1YXJlQnJhY2tldCk7CiAgICAgICAgICAgICByZXR1cm4gU3VmZml4RXhwcmVz
c2lvbihtYWtlVW5pcXVlUmVmPEFTVDo6SW5kZXhFeHByZXNzaW9uPihsb2NhdGlvbiwgV1RGTW92
ZShwcmV2aW91cyksIFdURk1vdmUoKmV4cHJlc3Npb24pKSwgdHJ1ZSk7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIFN1ZmZpeEV4cHJlc3Npb24oV1RGTW92ZShwcmV2aW91cyksIGZhbHNlKTsK
ICAgICB9CiAgICAgY2FzZSBUb2tlbjo6VHlwZTo6UGx1c1BsdXM6IHsKLSAgICAgICAgQVNUOjpD
b2RlTG9jYXRpb24gbG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2NhdGlvbigpLCAqc3VmZml4KTsK
KyAgICAgICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9uKHByZXZpb3VzLT5jb2RlTG9jYXRpb24oKSwg
KnN1ZmZpeCk7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uOjpjcmVhdGUobG9jYXRpb24sIFdURk1vdmUocHJldmlvdXMpKTsKICAgICAgICAgVmVj
dG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBjYWxsQXJndW1lbnRzOwogICAgICAgICBj
YWxsQXJndW1lbnRzLmFwcGVuZChyZXN1bHQtPm9sZFZhcmlhYmxlUmVmZXJlbmNlKCkpOwpAQCAt
MTUwNCw3ICsxNTA0LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlU3VmZml4T3BlcmF0b3IoVW5pcXVl
UgogICAgIH0KICAgICBkZWZhdWx0OiB7CiAgICAgICAgIEFTU0VSVChzdWZmaXgtPnR5cGUgPT0g
VG9rZW46OlR5cGU6Ok1pbnVzTWludXMpOwotICAgICAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2Nh
dGlvbihwcmV2aW91cy0+Y29kZUxvY2F0aW9uKCksICpzdWZmaXgpOworICAgICAgICBDb2RlTG9j
YXRpb24gbG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2NhdGlvbigpLCAqc3VmZml4KTsKICAgICAg
ICAgYXV0byByZXN1bHQgPSBBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb246OmNyZWF0ZShs
b2NhdGlvbiwgV1RGTW92ZShwcmV2aW91cykpOwogICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFT
VDo6RXhwcmVzc2lvbj4+IGNhbGxBcmd1bWVudHM7CiAgICAgICAgIGNhbGxBcmd1bWVudHMuYXBw
ZW5kKHJlc3VsdC0+b2xkVmFyaWFibGVSZWZlcmVuY2UoKSk7CkBAIC0xNTMwLDcgKzE1MzAsNyBA
QCBhdXRvIFBhcnNlcjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gRXhwZWN0CiAgICAgaWYgKGV4cHJl
c3Npb25zLnNpemUoKSA9PSAxKQogICAgICAgICByZXR1cm4gV1RGTW92ZShleHByZXNzaW9uc1sw
XSk7CiAgICAgYXV0byBlbmRPZmZzZXQgPSBtX2xleGVyLnBlZWsoKS5zdGFydE9mZnNldCgpOwot
ICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwor
ICAgIENvZGVMb2NhdGlvbiBsb2NhdGlvbihzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKICAgICBy
ZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6Q29tbWFFeHByZXNzaW9uPihsb2NhdGlvbiwgV1RG
TW92ZShleHByZXNzaW9ucykpIH07CiB9CiAKQEAgLTE1NDEsMTEgKzE1NDEsMTEgQEAgYXV0byBQ
YXJzZXI6OmNvbXBsZXRlVGVybmFyeUNvbmRpdGlvbmFsKAogICAgIENPTlNVTUVfVFlQRShjb2xv
biwgQ29sb24pOwogICAgIFBBUlNFKGVsc2VFeHByZXNzaW9uLCBQb3NzaWJsZVRlcm5hcnlDb25k
aXRpb25hbCk7CiAKLSAgICBBU1Q6OkNvZGVMb2NhdGlvbiBwcmVkaWNhdGVMb2NhdGlvbiA9IHBy
ZWRpY2F0ZS0+Y29kZUxvY2F0aW9uKCk7CisgICAgQ29kZUxvY2F0aW9uIHByZWRpY2F0ZUxvY2F0
aW9uID0gcHJlZGljYXRlLT5jb2RlTG9jYXRpb24oKTsKICAgICBWZWN0b3I8VW5pcXVlUmVmPEFT
VDo6RXhwcmVzc2lvbj4+IGNhc3RBcmd1bWVudHM7CiAgICAgY2FzdEFyZ3VtZW50cy5hcHBlbmQo
V1RGTW92ZShwcmVkaWNhdGUpKTsKICAgICBhdXRvIGJvb2xDYXN0ID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6OkNhbGxFeHByZXNzaW9uPihwcmVkaWNhdGVMb2NhdGlvbiwgImJvb2wiX3N0ciwgV1RGTW92
ZShjYXN0QXJndW1lbnRzKSk7Ci0gICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24ocHJlZGlj
YXRlTG9jYXRpb24sICgqZWxzZUV4cHJlc3Npb24pLT5jb2RlTG9jYXRpb24oKSk7CisgICAgQ29k
ZUxvY2F0aW9uIGxvY2F0aW9uKHByZWRpY2F0ZUxvY2F0aW9uLCAoKmVsc2VFeHByZXNzaW9uKS0+
Y29kZUxvY2F0aW9uKCkpOwogICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpUZXJuYXJ5
RXhwcmVzc2lvbj4obG9jYXRpb24sIFdURk1vdmUoYm9vbENhc3QpLCBXVEZNb3ZlKCpib2R5RXhw
cmVzc2lvbiksIFdURk1vdmUoKmVsc2VFeHByZXNzaW9uKSkgfTsKIH0KIApAQCAtMTU2Nyw3ICsx
NTY3LDcgQEAgYXV0byBQYXJzZXI6OmNvbXBsZXRlQXNzaWdubWVudChVbmlxdWVSZQogICAgICAg
ICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oYXNzaWdubWVudE9wZXJhdG9yLmVycm9yKCkpOwog
CiAgICAgUEFSU0UocmlnaHQsIFBvc3NpYmxlVGVybmFyeUNvbmRpdGlvbmFsKTsKLSAgICBBU1Q6
OkNvZGVMb2NhdGlvbiBsb2NhdGlvbiA9IHsgbGVmdC0+Y29kZUxvY2F0aW9uKCksICgqcmlnaHQp
LT5jb2RlTG9jYXRpb24oKSB9OworICAgIENvZGVMb2NhdGlvbiBsb2NhdGlvbiA9IHsgbGVmdC0+
Y29kZUxvY2F0aW9uKCksICgqcmlnaHQpLT5jb2RlTG9jYXRpb24oKSB9OwogCiAgICAgaWYgKGFz
c2lnbm1lbnRPcGVyYXRvci0+dHlwZSA9PSBUb2tlbjo6VHlwZTo6RXF1YWxzU2lnbikKICAgICAg
ICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihsb2Nh
dGlvbiwgV1RGTW92ZShsZWZ0KSwgV1RGTW92ZSgqcmlnaHQpKX07CkBAIC0xNjc2LDcgKzE2NzYs
NyBAQCBhdXRvIFBhcnNlcjo6Y29tcGxldGVQb3NzaWJsZUxvZ2ljYWxCaW5hCiAgICAgICAgIFRv
a2VuOjpUeXBlOjpBbmQKICAgICAgICAgPigpKSB7CiAgICAgICAgIFBBUlNFKG5leHQsIFBvc3Np
YmxlUmVsYXRpb25hbEJpbmFyeU9wZXJhdGlvbik7Ci0gICAgICAgIEFTVDo6Q29kZUxvY2F0aW9u
IGxvY2F0aW9uKHByZXZpb3VzLT5jb2RlTG9jYXRpb24oKSwgKCpuZXh0KS0+Y29kZUxvY2F0aW9u
KCkpOworICAgICAgICBDb2RlTG9jYXRpb24gbG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2NhdGlv
bigpLCAoKm5leHQpLT5jb2RlTG9jYXRpb24oKSk7CiAKICAgICAgICAgc3dpdGNoIChsb2dpY2Fs
QmluYXJ5T3BlcmF0aW9uLT50eXBlKSB7CiAgICAgICAgIGNhc2UgVG9rZW46OlR5cGU6Ok9yT3I6
CkBAIC0xNzMwLDcgKzE3MzAsNyBAQCBhdXRvIFBhcnNlcjo6Y29tcGxldGVQb3NzaWJsZVJlbGF0
aW9uYWxCCiAgICAgICAgIFRva2VuOjpUeXBlOjpOb3RFcXVhbAogICAgICAgICA+KCkpIHsKICAg
ICAgICAgUEFSU0UobmV4dCwgUG9zc2libGVTaGlmdCk7Ci0gICAgICAgIEFTVDo6Q29kZUxvY2F0
aW9uIGxvY2F0aW9uKHByZXZpb3VzLT5jb2RlTG9jYXRpb24oKSwgKCpuZXh0KS0+Y29kZUxvY2F0
aW9uKCkpOworICAgICAgICBDb2RlTG9jYXRpb24gbG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2Nh
dGlvbigpLCAoKm5leHQpLT5jb2RlTG9jYXRpb24oKSk7CiAKICAgICAgICAgVmVjdG9yPFVuaXF1
ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBjYWxsQXJndW1lbnRzOwogICAgICAgICBjYWxsQXJndW1l
bnRzLmFwcGVuZChXVEZNb3ZlKHByZXZpb3VzKSk7CkBAIC0xNzgyLDcgKzE3ODIsNyBAQCBhdXRv
IFBhcnNlcjo6Y29tcGxldGVQb3NzaWJsZVNoaWZ0KFVuaXF1CiAgICAgICAgIFRva2VuOjpUeXBl
OjpSaWdodFNoaWZ0CiAgICAgICAgID4oKSkgewogICAgICAgICBQQVJTRShuZXh0LCBQb3NzaWJs
ZUFkZCk7Ci0gICAgICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uKHByZXZpb3VzLT5jb2Rl
TG9jYXRpb24oKSwgKCpuZXh0KS0+Y29kZUxvY2F0aW9uKCkpOworICAgICAgICBDb2RlTG9jYXRp
b24gbG9jYXRpb24ocHJldmlvdXMtPmNvZGVMb2NhdGlvbigpLCAoKm5leHQpLT5jb2RlTG9jYXRp
b24oKSk7CiAKICAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBjYWxs
QXJndW1lbnRzOwogICAgICAgICBjYWxsQXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKHByZXZpb3Vz
KSk7CkBAIC0xODE3LDcgKzE4MTcsNyBAQCBhdXRvIFBhcnNlcjo6Y29tcGxldGVQb3NzaWJsZUFk
ZChVbmlxdWVSCiAgICAgICAgIFRva2VuOjpUeXBlOjpNaW51cwogICAgICAgICA+KCkpIHsKICAg
ICAgICAgUEFSU0UobmV4dCwgUG9zc2libGVNdWx0aXBseSk7Ci0gICAgICAgIEFTVDo6Q29kZUxv
Y2F0aW9uIGxvY2F0aW9uKHByZXZpb3VzLT5jb2RlTG9jYXRpb24oKSwgKCpuZXh0KS0+Y29kZUxv
Y2F0aW9uKCkpOworICAgICAgICBDb2RlTG9jYXRpb24gbG9jYXRpb24ocHJldmlvdXMtPmNvZGVM
b2NhdGlvbigpLCAoKm5leHQpLT5jb2RlTG9jYXRpb24oKSk7CiAKICAgICAgICAgVmVjdG9yPFVu
aXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBjYWxsQXJndW1lbnRzOwogICAgICAgICBjYWxsQXJn
dW1lbnRzLmFwcGVuZChXVEZNb3ZlKHByZXZpb3VzKSk7CkBAIC0xODUzLDcgKzE4NTMsNyBAQCBh
dXRvIFBhcnNlcjo6Y29tcGxldGVQb3NzaWJsZU11bHRpcGx5KFVuCiAgICAgICAgIFRva2VuOjpU
eXBlOjpNb2QKICAgICAgICAgPigpKSB7CiAgICAgICAgIFBBUlNFKG5leHQsIFBvc3NpYmxlUHJl
Zml4KTsKLSAgICAgICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24ocHJldmlvdXMtPmNvZGVM
b2NhdGlvbigpLCAoKm5leHQpLT5jb2RlTG9jYXRpb24oKSk7CisgICAgICAgIENvZGVMb2NhdGlv
biBsb2NhdGlvbihwcmV2aW91cy0+Y29kZUxvY2F0aW9uKCksICgqbmV4dCktPmNvZGVMb2NhdGlv
bigpKTsKIAogICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGNhbGxB
cmd1bWVudHM7CiAgICAgICAgIGNhbGxBcmd1bWVudHMuYXBwZW5kKFdURk1vdmUocHJldmlvdXMp
KTsKQEAgLTE4OTMsNyArMTg5Myw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVBvc3NpYmxlUHJlZml4
KGJvb2wgKmkKICAgICAgICAgVG9rZW46OlR5cGU6OlN0YXIKICAgICA+KCkpIHsKICAgICAgICAg
UEFSU0UobmV4dCwgUG9zc2libGVQcmVmaXgpOwotICAgICAgICBBU1Q6OkNvZGVMb2NhdGlvbiBs
b2NhdGlvbigqcHJlZml4LCAoKm5leHQpLT5jb2RlTG9jYXRpb24oKSk7CisgICAgICAgIENvZGVM
b2NhdGlvbiBsb2NhdGlvbigqcHJlZml4LCAoKm5leHQpLT5jb2RlTG9jYXRpb24oKSk7CiAKICAg
ICAgICAgc3dpdGNoIChwcmVmaXgtPnR5cGUpIHsKICAgICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6
UGx1c1BsdXM6IHsKQEAgLTIwMTEsNyArMjAxMSw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUNhbGxF
eHByZXNzaW9uKCkgLT4gRXgKICAgICB9CiAKICAgICBDT05TVU1FX1RZUEUocmlnaHRQYXJlbnRo
ZXNpcywgUmlnaHRQYXJlbnRoZXNpcyk7Ci0gICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24o
Km5hbWUsICpyaWdodFBhcmVudGhlc2lzKTsKKyAgICBDb2RlTG9jYXRpb24gbG9jYXRpb24oKm5h
bWUsICpyaWdodFBhcmVudGhlc2lzKTsKIAogICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNU
OjpDYWxsRXhwcmVzc2lvbj4obG9jYXRpb24sIFdURk1vdmUoY2FsbE5hbWUpLCBXVEZNb3ZlKGFy
Z3VtZW50cykpIH07CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUGFyc2VyLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJXSExTTEVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1l
bnQuaCIKICNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIgogI2luY2x1ZGUg
IldITFNMRW51bWVyYXRpb25NZW1iZXIuaCIKKyNpbmNsdWRlICJXSExTTEVycm9yLmgiCiAjaW5j
bHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xGYWxsdGhyb3VnaC5oIgog
I2luY2x1ZGUgIldITFNMRmxvYXRMaXRlcmFsLmgiCkBAIC0xMDYsMjEgKzEwNyw3IEBAIHB1Ymxp
YzoKICAgICAgICAgVXNlcgogICAgIH07CiAKLSAgICBzdHJ1Y3QgRXJyb3IgewotICAgICAgICBF
cnJvcihTdHJpbmcmJiBlcnJvcikKLSAgICAgICAgICAgIDogZXJyb3IoV1RGTW92ZShlcnJvcikp
Ci0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBlcnJvcjsKLQotICAgICAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAg
ICAgb3V0LnByaW50KGVycm9yKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBPcHRpb25hbDxF
cnJvcj4gcGFyc2UoUHJvZ3JhbSYsIFN0cmluZ1ZpZXcsIE1vZGUpOworICAgIEV4cGVjdGVkPHZv
aWQsIEVycm9yPiBwYXJzZShQcm9ncmFtJiwgU3RyaW5nVmlldywgTW9kZSk7CiAKIHByaXZhdGU6
CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgbmVlZCB0aGlzCkBAIC0xNTgsMTMgKzE0NSwx
MyBAQCBwcml2YXRlOgogICAgIEV4cGVjdGVkPEFTVDo6VHlwZUFyZ3VtZW50LCBFcnJvcj4gcGFy
c2VUeXBlQXJndW1lbnQoKTsKICAgICBFeHBlY3RlZDxBU1Q6OlR5cGVBcmd1bWVudHMsIEVycm9y
PiBwYXJzZVR5cGVBcmd1bWVudHMoKTsKICAgICBzdHJ1Y3QgVHlwZVN1ZmZpeEFiYnJldmlhdGVk
IHsKLSAgICAgICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb247CisgICAgICAgIENvZGVMb2Nh
dGlvbiBsb2NhdGlvbjsKICAgICAgICAgVG9rZW4gdG9rZW47CiAgICAgICAgIE9wdGlvbmFsPHVu
c2lnbmVkPiBudW1FbGVtZW50czsKICAgICB9OwogICAgIEV4cGVjdGVkPFR5cGVTdWZmaXhBYmJy
ZXZpYXRlZCwgRXJyb3I+IHBhcnNlVHlwZVN1ZmZpeEFiYnJldmlhdGVkKCk7CiAgICAgc3RydWN0
IFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCB7Ci0gICAgICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxv
Y2F0aW9uOworICAgICAgICBDb2RlTG9jYXRpb24gbG9jYXRpb247CiAgICAgICAgIFRva2VuIHRv
a2VuOwogICAgICAgICBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1NwYWNlOwog
ICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gbnVtRWxlbWVudHM7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAJKHJl
dmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUHJlcGFyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDEwICs5NSwxMSBAQCBzdGF0aWMg
Ym9vbCBkdW1wQVNUQXRFbmRJZk5lZWRlZChQcm9ncmFtCiAjZGVmaW5lIENIRUNLX1BBU1MocGFz
cywgLi4uKSBcCiAgICAgZG8geyBcCiAgICAgICAgIGR1bXBBU1RCZXR3ZWVuRWFjaFBhc3NJZk5l
ZWRlZChwcm9ncmFtLCAiQVNUIGJlZm9yZSAiICMgcGFzcyk7IFwKLSAgICAgICAgaWYgKCFwYXNz
KF9fVkFfQVJHU19fKSkgeyBcCisgICAgICAgIGF1dG8gcmVzdWx0ID0gcGFzcyhfX1ZBX0FSR1Nf
Xyk7IFwKKyAgICAgICAgaWYgKCFyZXN1bHQpIHsgXAogICAgICAgICAgICAgaWYgKGR1bXBQYXNz
RmFpbHVyZSkgXAotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiZmFpbGVkIHBhc3M6ICIgIyBw
YXNzKTsgXAotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsgXAorICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbigiZmFpbGVkIHBhc3M6ICIgIyBwYXNzLCAiICIsIExleGVyOjplcnJvclN0
cmluZyh3aGxzbFNvdXJjZSwgcmVzdWx0LmVycm9yKCkpKTsgXAorICAgICAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKExleGVyOjplcnJvclN0cmluZyh3aGxzbFNvdXJjZSwgcmVzdWx0LmVy
cm9yKCkpKTsgXAogICAgICAgICB9IFwKICAgICB9IHdoaWxlICgwKQogCkBAIC0xMDgsMTQgKzEw
OSwxNSBAQCBzdGF0aWMgYm9vbCBkdW1wQVNUQXRFbmRJZk5lZWRlZChQcm9ncmFtCiAgICAgICAg
IHBhc3MoX19WQV9BUkdTX18pOyBcCiAgICAgfSB3aGlsZSAoMCkKIAotc3RhdGljIE9wdGlvbmFs
PFByb2dyYW0+IHByZXBhcmVTaGFyZWQoU3RyaW5nJiB3aGxzbFNvdXJjZSkKK3N0YXRpYyBFeHBl
Y3RlZDxQcm9ncmFtLCBTdHJpbmc+IHByZXBhcmVTaGFyZWQoU3RyaW5nJiB3aGxzbFNvdXJjZSkK
IHsKICAgICBQcm9ncmFtIHByb2dyYW07CiAgICAgUGFyc2VyIHBhcnNlcjsKLSAgICBpZiAoYXV0
byBwYXJzZUZhaWx1cmUgPSBwYXJzZXIucGFyc2UocHJvZ3JhbSwgd2hsc2xTb3VyY2UsIFBhcnNl
cjo6TW9kZTo6VXNlcikpIHsKKyAgICBhdXRvIHBhcnNlUmVzdWx0ID0gcGFyc2VyLnBhcnNlKHBy
b2dyYW0sIHdobHNsU291cmNlLCBQYXJzZXI6Ok1vZGU6OlVzZXIpOworICAgIGlmICghcGFyc2VS
ZXN1bHQpIHsKICAgICAgICAgaWYgKGR1bXBQYXNzRmFpbHVyZSkKLSAgICAgICAgICAgIGRhdGFM
b2dMbigiZmFpbGVkIHRvIHBhcnNlIHRoZSBwcm9ncmFtOiAiLCAqcGFyc2VGYWlsdXJlKTsKLSAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiZmFpbGVk
IHRvIHBhcnNlIHRoZSBwcm9ncmFtOiAiLCBMZXhlcjo6ZXJyb3JTdHJpbmcod2hsc2xTb3VyY2Us
IHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKExl
eGVyOjplcnJvclN0cmluZyh3aGxzbFNvdXJjZSwgcGFyc2VSZXN1bHQuZXJyb3IoKSkpOwogICAg
IH0KICAgICBpbmNsdWRlU3RhbmRhcmRMaWJyYXJ5KHByb2dyYW0sIHBhcnNlciwgcGFyc2VGdWxs
U3RhbmRhcmRMaWJyYXJ5KTsKIApAQCAtMTQ5LDE0ICsxNTEsMTQgQEAgc3RhdGljIE9wdGlvbmFs
PFByb2dyYW0+IHByZXBhcmVTaGFyZWQoUwogICAgIHJldHVybiBwcm9ncmFtOwogfQogCi1PcHRp
b25hbDxSZW5kZXJQcmVwYXJlUmVzdWx0PiBwcmVwYXJlKFN0cmluZyYgd2hsc2xTb3VyY2UsIFJl
bmRlclBpcGVsaW5lRGVzY3JpcHRvciYgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKQorRXhwZWN0
ZWQ8UmVuZGVyUHJlcGFyZVJlc3VsdCwgU3RyaW5nPiBwcmVwYXJlKFN0cmluZyYgd2hsc2xTb3Vy
Y2UsIFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKQog
ewogICAgIGF1dG8gcHJvZ3JhbSA9IHByZXBhcmVTaGFyZWQod2hsc2xTb3VyY2UpOwogICAgIGlm
ICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKHByb2dyYW0uZXJyb3IoKSk7CiAgICAgYXV0byBtYXRjaGVkU2VtYW50
aWNzID0gbWF0Y2hTZW1hbnRpY3MoKnByb2dyYW0sIHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7
CiAgICAgaWYgKCFtYXRjaGVkU2VtYW50aWNzKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoTGV4ZXI6OmVycm9yU3RyaW5nKHdobHNs
U291cmNlLCBFcnJvcigiQ291bGQgbm90IG1hdGNoIHNlbWFudGljcyJfc3RyKSkpOwogCiAgICAg
YXV0byBnZW5lcmF0ZWRDb2RlID0gTWV0YWw6OmdlbmVyYXRlTWV0YWxDb2RlKCpwcm9ncmFtLCBX
VEZNb3ZlKCptYXRjaGVkU2VtYW50aWNzKSwgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLmxheW91
dCk7CiAKQEAgLTE2NywxNyArMTY5LDE3IEBAIE9wdGlvbmFsPFJlbmRlclByZXBhcmVSZXN1bHQ+
IHByZXBhcmUoU3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1PcHRpb25hbDxDb21wdXRlUHJl
cGFyZVJlc3VsdD4gcHJlcGFyZShTdHJpbmcmIHdobHNsU291cmNlLCBDb21wdXRlUGlwZWxpbmVE
ZXNjcmlwdG9yJiBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKQorRXhwZWN0ZWQ8Q29tcHV0ZVBy
ZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFyZShTdHJpbmcmIHdobHNsU291cmNlLCBDb21wdXRl
UGlwZWxpbmVEZXNjcmlwdG9yJiBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKQogewogICAgIGF1
dG8gcHJvZ3JhbSA9IHByZXBhcmVTaGFyZWQod2hsc2xTb3VyY2UpOwogICAgIGlmICghcHJvZ3Jh
bSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKHByb2dyYW0uZXJyb3IoKSk7CiAgICAgYXV0byBtYXRjaGVkU2VtYW50aWNzID0gbWF0
Y2hTZW1hbnRpY3MoKnByb2dyYW0sIGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOwogICAgIGlm
ICghbWF0Y2hlZFNlbWFudGljcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKExleGVyOjplcnJvclN0cmluZyh3aGxzbFNvdXJjZSwg
RXJyb3IoIkNvdWxkIG5vdCBtYXRjaCBzZW1hbnRpY3MiX3N0cikpKTsKICAgICBhdXRvIGNvbXB1
dGVEaW1lbnNpb25zID0gV0hMU0w6OmNvbXB1dGVEaW1lbnNpb25zKCpwcm9ncmFtLCAqbWF0Y2hl
ZFNlbWFudGljcy0+c2hhZGVyKTsKICAgICBpZiAoIWNvbXB1dGVEaW1lbnNpb25zKQotICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoTGV4
ZXI6OmVycm9yU3RyaW5nKHdobHNsU291cmNlLCBFcnJvcigiQ291bGQgbm90IG1hdGNoIGNvbXB1
dGUgZGltZW5zaW9ucyJfc3RyKSkpOwogCiAgICAgYXV0byBnZW5lcmF0ZWRDb2RlID0gTWV0YWw6
OmdlbmVyYXRlTWV0YWxDb2RlKCpwcm9ncmFtLCBXVEZNb3ZlKCptYXRjaGVkU2VtYW50aWNzKSwg
Y29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvci5sYXlvdXQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuaAkocmV2aXNpb24g
MjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVw
YXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJH
UFUpCiAKKyNpbmNsdWRlICJXSExTTEVycm9yLmgiCiAjaW5jbHVkZSAiV0hMU0xQaXBlbGluZURl
c2NyaXB0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMzQsMTMg
KzM1LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAotLy8g
RklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU2ODIgR2Vu
ZXJhdGUgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZXMgYW5kIHJldHVybiB0aGVtIGhlcmUuCiBz
dHJ1Y3QgUmVuZGVyUHJlcGFyZVJlc3VsdCB7CiAgICAgU3RyaW5nIG1ldGFsU291cmNlOwogICAg
IFN0cmluZyBtYW5nbGVkVmVydGV4RW50cnlQb2ludE5hbWU7CiAgICAgU3RyaW5nIG1hbmdsZWRG
cmFnbWVudEVudHJ5UG9pbnROYW1lOwogfTsKLU9wdGlvbmFsPFJlbmRlclByZXBhcmVSZXN1bHQ+
IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJik7
CitFeHBlY3RlZDxSZW5kZXJQcmVwYXJlUmVzdWx0LCBTdHJpbmc+IHByZXBhcmUoU3RyaW5nJiB3
aGxzbFNvdXJjZSwgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJik7CiAKIHN0cnVjdCBDb21wdXRl
RGltZW5zaW9ucyB7CiAgICAgdW5zaWduZWQgd2lkdGg7CkBAIC01Myw3ICs1Myw3IEBAIHN0cnVj
dCBDb21wdXRlUHJlcGFyZVJlc3VsdCB7CiAgICAgU3RyaW5nIG1hbmdsZWRFbnRyeVBvaW50TmFt
ZTsKICAgICBDb21wdXRlRGltZW5zaW9ucyBjb21wdXRlRGltZW5zaW9uczsKIH07Ci1PcHRpb25h
bDxDb21wdXRlUHJlcGFyZVJlc3VsdD4gcHJlcGFyZShTdHJpbmcmIHdobHNsU291cmNlLCBDb21w
dXRlUGlwZWxpbmVEZXNjcmlwdG9yJik7CitFeHBlY3RlZDxDb21wdXRlUHJlcGFyZVJlc3VsdCwg
U3RyaW5nPiBwcmVwYXJlKFN0cmluZyYgd2hsc2xTb3VyY2UsIENvbXB1dGVQaXBlbGluZURlc2Ny
aXB0b3ImKTsKIAogfSAvLyBuYW1lc3BhY2UgV0hMU0wKIApJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVz
b2x2ZXIuY3BwCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NzcsNyArMjc3LDcgQEAgc3RydWN0IE1vZGlmaWNhdGlvblJlc3VsdCB7CiAgICAgVmVjdG9yPFVu
aXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBleHByZXNzaW9uczsKICAgICBVbmlxdWVSZWY8QVNU
OjpFeHByZXNzaW9uPiByZXN1bHQ7CiB9Owotc3RhdGljIE9wdGlvbmFsPE1vZGlmeVJlc3VsdD4g
bW9kaWZ5KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24sIHN0ZDo6ZnVuY3Rpb248T3B0aW9uYWw8TW9kaWZpY2F0aW9uUmVzdWx0PihPcHRpb25h
bDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4mJik+IG1vZGlmaWNhdGlvbikKK3N0YXRpYyBF
eHBlY3RlZDxNb2RpZnlSZXN1bHQsIEVycm9yPiBtb2RpZnkoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiwgc3RkOjpmdW5jdGlvbjxPcHRpb25h
bDxNb2RpZmljYXRpb25SZXN1bHQ+KE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+
PiYmKT4gbW9kaWZpY2F0aW9uKQogewogICAgIC8vIENvbnNpZGVyIGEuYi5jLmQrKzsKICAgICAv
LyBUaGlzIHdvdWxkIGdldCB0cmFuc2Zvcm1lZCBpbnRvOgpAQCAtNDI4LDcgKzQyOCw3IEBAIHN0
YXRpYyBPcHRpb25hbDxNb2RpZnlSZXN1bHQ+IG1vZGlmeShBU1QKICAgICAgICAgYXV0byBjYWxs
RXhwcmVzc2lvbiA9IGdldHRlckNhbGwocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCByZWxldmFu
dEFuZGVyLCBwcmV2aW91c0xlZnRWYWx1ZSwgaW5kZXhWYXJpYWJsZSA/ICYqaW5kZXhWYXJpYWJs
ZSA6IG51bGxwdHIpOwogCiAgICAgICAgIGlmICghY2FsbEV4cHJlc3Npb24pCi0gICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KEVycm9yKCJDb3VsZCBub3QgcmVzb2x2ZSBnZXR0ZXIgY2FsbC4iLCBwcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24uY29kZUxvY2F0aW9uKCkpKTsKIAogICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJl
bmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxl
UmVmZXJlbmNlOjp3cmFwKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgQVNTRVJUKHZh
cmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKQEAgLTQ1MCw3ICs0NTAsNyBAQCBzdGF0aWMgT3B0
aW9uYWw8TW9kaWZ5UmVzdWx0PiBtb2RpZnkoQVNUCiAgICAgLy8gU3RlcCAzOgogICAgIGF1dG8g
bW9kaWZpY2F0aW9uUmVzdWx0ID0gbW9kaWZpY2F0aW9uKFdURk1vdmUobGFzdEdldHRlckNhbGxF
eHByZXNzaW9uKSk7CiAgICAgaWYgKCFtb2RpZmljYXRpb25SZXN1bHQpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiQ291
bGQgbm90IGVtaXQgbW9kaWZjYXRpb24uIiwgY2hhaW5bMF0uZ2V0KCkuY29kZUxvY2F0aW9uKCkp
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1vZGlmaWNhdGlvblJlc3VsdC0+ZXhwcmVz
c2lvbnMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKG1v
ZGlmaWNhdGlvblJlc3VsdC0+ZXhwcmVzc2lvbnNbaV0pKTsKIApAQCAtNDcxLDcgKzQ3MSw3IEBA
IHN0YXRpYyBPcHRpb25hbDxNb2RpZnlSZXN1bHQ+IG1vZGlmeShBU1QKICAgICAgICAgfSwgaW5k
ZXhWYXJpYWJsZSA/ICYqaW5kZXhWYXJpYWJsZSA6IG51bGxwdHIpOwogCiAgICAgICAgIGlmICgh
YXNzaWdubWVudEV4cHJlc3Npb24pCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJDb3VsZCBub3QgZW1pdCBz
ZXR0ZXIuIiwgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpKSk7CiAKICAg
ICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoKmFzc2lnbm1lbnRFeHByZXNzaW9uKSk7
CiAKQEAgLTQ5OCw3ICs0OTgsNyBAQCBzdGF0aWMgT3B0aW9uYWw8TW9kaWZ5UmVzdWx0PiBtb2Rp
ZnkoQVNUCiAgICAgICAgIH0sIGluZGV4VmFyaWFibGVzW2luZGV4VmFyaWFibGVzLnNpemUoKSAt
IDFdID8gJiooaW5kZXhWYXJpYWJsZXNbaW5kZXhWYXJpYWJsZXMuc2l6ZSgpIC0gMV0pIDogbnVs
bHB0cik7CiAKICAgICAgICAgaWYgKCFhc3NpZ25tZW50RXhwcmVzc2lvbikKLSAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
RXJyb3IoIkNvdWxkIG5vdCBlbWl0IHNldHRlci4iLCBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
Y29kZUxvY2F0aW9uKCkpKTsKIAogICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZSgq
YXNzaWdubWVudEV4cHJlc3Npb24pKTsKICAgICB9CkBAIC01MzMsNyArNTMzLDcgQEAgdm9pZCBQ
cm9wZXJ0eVJlc29sdmVyOjp2aXNpdChBU1Q6OkFzc2lnbgogICAgIH0pOwogCiAgICAgaWYgKCFt
b2RpZnlSZXN1bHQpIHsKLSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgc2V0RXJyb3IobW9k
aWZ5UmVzdWx0LmVycm9yKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHNpbXBsaWZ5
TGVmdFZhbHVlKG1vZGlmeVJlc3VsdC0+aW5uZXJMZWZ0VmFsdWUpOwpAQCAtNTUwLDcgKzU1MCw3
IEBAIHZvaWQgUHJvcGVydHlSZXNvbHZlcjo6dmlzaXQoQVNUOjpBc3NpZ24KIHZvaWQgUHJvcGVy
dHlSZXNvbHZlcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJiByZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uKQogewogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlRXhwcmVzc2lvbigpKTsKLSAgICBpZiAoZXJyb3IoKSkK
KyAgICBpZiAoaGFzRXJyb3IoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBsb2NhdGlv
biA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCk7CkBAIC02NjIsNyAr
NjYyLDcgQEAgdm9pZCBQcm9wZXJ0eVJlc29sdmVyOjp2aXNpdChBU1Q6OlJlYWRNbwogCiAgICAg
QVNTRVJUKCFyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnR5cGVBbm5vdGF0
aW9uKCkuaXNSaWdodFZhbHVlKCkpOwogICAgIGlmICghaXM8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24+KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkpKSB7Ci0gICAg
ICAgIHNldEVycm9yKCk7CisgICAgICAgIHNldEVycm9yKEVycm9yKCJVbmV4cGVjdGVkIGxocyB2
YWx1ZSBmb3IgcmVhZCBtb2RpZnkgd3JpdGUgZXhwcmVzc2lvbi4iLCByZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uLmxlZnRWYWx1ZSgpLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgYXV0byBtb2RpZnlSZXN1bHQgPSBtb2RpZnkoZG93bmNhc3Q8QVNUOjpQcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24+KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVl
KCkpLCBbJl0oT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+JiYgbGFzdEdldHRl
ckNhbGxFeHByZXNzaW9uKSAtPiBPcHRpb25hbDxNb2RpZmljYXRpb25SZXN1bHQ+IHsKQEAgLTcw
Myw3ICs3MDMsNyBAQCB2b2lkIFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6UmVhZE1vCiAg
ICAgfSk7CiAKICAgICBpZiAoIW1vZGlmeVJlc3VsdCkgewotICAgICAgICBzZXRFcnJvcigpOwor
ICAgICAgICBzZXRFcnJvcihtb2RpZnlSZXN1bHQuZXJyb3IoKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgc2ltcGxpZnlMZWZ0VmFsdWUobW9kaWZ5UmVzdWx0LT5pbm5lckxlZnRWYWx1
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vy
c2lvbkNoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUmVjdXJzaW9uQ2hlY2tlci5jcHAJKHJldmlzaW9uIDI0NzcwMCkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaW9uQ2hlY2tl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgcHJpdmF0ZToKIAogICAgICAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fc3RhcnRlZFZpc2l0aW5nLmFkZCgmZnVuY3Rpb25EZWZpbml0
aW9uKTsKICAgICAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAg
c2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3QgdXNlIHJlY3Vy
c2lvbiBpbiB0aGUgY2FsbCBncmFwaC4iLCBmdW5jdGlvbkRlZmluaXRpb24uY29kZUxvY2F0aW9u
KCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC03NywxMSArNzcsMTEg
QEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uKj4gbV9maW5p
c2hlZFZpc2l0aW5nOwogfTsKIAotYm9vbCBjaGVja1JlY3Vyc2lvbihQcm9ncmFtJiBwcm9ncmFt
KQorRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IGNoZWNrUmVjdXJzaW9uKFByb2dyYW0mIHByb2dyYW0p
CiB7CiAgICAgUmVjdXJzaW9uQ2hlY2tlciByZWN1cnNpb25DaGVja2VyOwogICAgIHJlY3Vyc2lv
bkNoZWNrZXIuVmlzaXRvcjo6dmlzaXQocHJvZ3JhbSk7Ci0gICAgcmV0dXJuICFyZWN1cnNpb25D
aGVja2VyLmVycm9yKCk7CisgICAgcmV0dXJuIHJlY3Vyc2lvbkNoZWNrZXIuZXhwZWN0ZWRFcnJv
cigpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFJlY3Vyc2lvbkNoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2lvbkNoZWNrZXIuaAkocmV2aXNpb24gMjQ3NzAw
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpb25D
aGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEzICsyNywxNiBAQAogCiAjaWYgRU5BQkxF
KFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMRXJyb3IuaCIKKyNpbmNsdWRlIDx3dGYvRXhwZWN0
ZWQuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCiBjbGFz
cyBQcm9ncmFtOwogCi1ib29sIGNoZWNrUmVjdXJzaW9uKFByb2dyYW0mKTsKK0V4cGVjdGVkPHZv
aWQsIEVycm9yPiBjaGVja1JlY3Vyc2lvbihQcm9ncmFtJik7CiAKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5jcHAJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIGRvIHsgXAogICAgICAgICByZXR1cm47
IFwKICAgICBhdXRvIHJlc3VsdFN0YXJ0ZWRWaXNpdGluZyA9IG1fc3RhcnRlZFZpc2l0aW5nLmFk
ZCh0KTsgXAogICAgIGlmICghcmVzdWx0U3RhcnRlZFZpc2l0aW5nLmlzTmV3RW50cnkpIHsgXAot
ICAgICAgICBzZXRFcnJvcigpOyBcCisgICAgICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3QgZGVj
bGFyZSByZWN1cnNpdmUgdHlwZXMuIiwgKHQpLT5jb2RlTG9jYXRpb24oKSkpOyBcCiAgICAgICAg
IHJldHVybjsgXAogICAgIH0gXAogfSB3aGlsZSAoZmFsc2UpOwpAQCAtMTAyLDE0ICsxMDIsMTQg
QEAgdm9pZCBSZWN1cnNpdmVUeXBlQ2hlY2tlcjo6dmlzaXQoQVNUOjpSZQogewogfQogCi1ib29s
IGNoZWNrUmVjdXJzaXZlVHlwZXMoUHJvZ3JhbSYgcHJvZ3JhbSkKK0V4cGVjdGVkPHZvaWQsIEVy
cm9yPiBjaGVja1JlY3Vyc2l2ZVR5cGVzKFByb2dyYW0mIHByb2dyYW0pCiB7CiAgICAgUmVjdXJz
aXZlVHlwZUNoZWNrZXIgcmVjdXJzaXZlVHlwZUNoZWNrZXI7CiAgICAgZm9yIChhdXRvJiB0eXBl
RGVmaW5pdGlvbiA6IHByb2dyYW0udHlwZURlZmluaXRpb25zKCkpCiAgICAgICAgIHJlY3Vyc2l2
ZVR5cGVDaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlRGVmaW5pdGlvbik7CiAgICAgZm9y
IChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9u
cygpKQogICAgICAgICByZWN1cnNpdmVUeXBlQ2hlY2tlci5jaGVja0Vycm9yQW5kVmlzaXQoc3Ry
dWN0dXJlRGVmaW5pdGlvbik7Ci0gICAgcmV0dXJuICFyZWN1cnNpdmVUeXBlQ2hlY2tlci5lcnJv
cigpOworICAgIHJldHVybiByZWN1cnNpdmVUeXBlQ2hlY2tlci5leHBlY3RlZEVycm9yKCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdITFNMCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tl
ci5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDggQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTEVycm9yLmgi
CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
MzQsNyArMzYsNyBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBjbGFzcyBQcm9ncmFtOwogCi1ib29s
IGNoZWNrUmVjdXJzaXZlVHlwZXMoUHJvZ3JhbSYpOworRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IGNo
ZWNrUmVjdXJzaXZlVHlwZXMoUHJvZ3JhbSYpOwogCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRMaWJyYXJ5VXRpbGl0aWVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0
YW5kYXJkTGlicmFyeVV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRMaWJyYXJ5VXRpbGl0aWVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksOCArNzksOSBAQCB2b2lkIGluY2x1ZGVTdGFuZGFy
ZExpYnJhcnkoUHJvZ3JhbSYgcHJvCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmlu
Zz4gc3RhbmRhcmRMaWJyYXJ5KGRlY29tcHJlc3NBbmREZWNvZGVTdGFuZGFyZExpYnJhcnkoKSk7
CiAgICAgaWYgKHBhcnNlRnVsbFN0YW5kYXJkTGlicmFyeSkgewotICAgICAgICBpZiAoYXV0byBw
YXJzZUZhaWx1cmUgPSBwYXJzZXIucGFyc2UocHJvZ3JhbSwgc3RhbmRhcmRMaWJyYXJ5LmdldCgp
LCBQYXJzZXI6Ok1vZGU6OlN0YW5kYXJkTGlicmFyeSkpIHsKLSAgICAgICAgICAgIGRhdGFMb2dM
bigiZmFpbGVkIHRvIHBhcnNlIHRoZSAoZnVsbCkgc3RhbmRhcmQgbGlicmFyeTogIiwgKnBhcnNl
RmFpbHVyZSk7CisgICAgICAgIGF1dG8gcGFyc2VSZXN1bHQgPSBwYXJzZXIucGFyc2UocHJvZ3Jh
bSwgc3RhbmRhcmRMaWJyYXJ5LmdldCgpLCBQYXJzZXI6Ok1vZGU6OlN0YW5kYXJkTGlicmFyeSk7
CisgICAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiZmFp
bGVkIHRvIHBhcnNlIHRoZSAoZnVsbCkgc3RhbmRhcmQgbGlicmFyeTogIiwgTGV4ZXI6OmVycm9y
U3RyaW5nKFN0cmluZ1ZpZXcoc3RhbmRhcmRMaWJyYXJ5KSwgcGFyc2VSZXN1bHQuZXJyb3IoKSkp
OwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuOwpAQCAtODksOCArOTAsOCBAQCB2b2lkIGluY2x1ZGVTdGFuZGFyZExpYnJhcnkoUHJv
Z3JhbSYgcHJvCiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCBTdWJz
dHJpbmdMb2NhdGlvbj4+IHN0YW5kYXJkTGlicmFyeUZ1bmN0aW9uTWFwKGNvbXB1dGVTdGFuZGFy
ZExpYnJhcnlGdW5jdGlvbk1hcCgpKTsKIAogICAgIGF1dG8gc3RyaW5nVmlldyA9IFN0cmluZ1Zp
ZXcoc3RhbmRhcmRMaWJyYXJ5LmdldCgpKS5zdWJzdHJpbmcoMCwgZmlyc3RGdW5jdGlvbk9mZnNl
dEluU3RhbmRhcmRMaWJyYXJ5KCkpOwotICAgIGF1dG8gcGFyc2VGYWlsdXJlID0gcGFyc2VyLnBh
cnNlKHByb2dyYW0sIHN0cmluZ1ZpZXcsIFBhcnNlcjo6TW9kZTo6U3RhbmRhcmRMaWJyYXJ5KTsK
LSAgICBBU1NFUlRfVU5VU0VEKHBhcnNlRmFpbHVyZSwgIXBhcnNlRmFpbHVyZSk7CisgICAgYXV0
byBwYXJzZVJlc3VsdCA9IHBhcnNlci5wYXJzZShwcm9ncmFtLCBzdHJpbmdWaWV3LCBQYXJzZXI6
Ok1vZGU6OlN0YW5kYXJkTGlicmFyeSk7CisgICAgQVNTRVJUX1VOVVNFRChwYXJzZVJlc3VsdCwg
cGFyc2VSZXN1bHQpOwogCiAgICAgTmFtZUZpbmRlciBuYW1lRmluZGVyOwogICAgIG5hbWVGaW5k
ZXIuVmlzaXRvcjo6dmlzaXQocHJvZ3JhbSk7CkBAIC0xMDksOCArMTEwLDkgQEAgdm9pZCBpbmNs
dWRlU3RhbmRhcmRMaWJyYXJ5KFByb2dyYW0mIHBybwogICAgICAgICAgICAgaWYgKGl0ZXJhdG9y
ID09IHN0YW5kYXJkTGlicmFyeUZ1bmN0aW9uTWFwLmdldCgpLmVuZCgpKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgYXV0byBzdHJpbmdWaWV3ID0gU3RyaW5nVmlldyhz
dGFuZGFyZExpYnJhcnkuZ2V0KCkpLnN1YnN0cmluZyhpdGVyYXRvci0+dmFsdWUuc3RhcnQsIGl0
ZXJhdG9yLT52YWx1ZS5lbmQgLSBpdGVyYXRvci0+dmFsdWUuc3RhcnQpOwotICAgICAgICAgICAg
aWYgKGF1dG8gcGFyc2VGYWlsdXJlID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHN0cmluZ1ZpZXcs
IFBhcnNlcjo6TW9kZTo6U3RhbmRhcmRMaWJyYXJ5KSkgewotICAgICAgICAgICAgICAgIGRhdGFM
b2dMbigiZmFpbGVkIHRvIHBhcnNlIHRoZSAocGFydGlhbCkgc3RhbmRhcmQgbGlicmFyeTogIiwg
KnBhcnNlRmFpbHVyZSk7CisgICAgICAgICAgICBhdXRvIHBhcnNlUmVzdWx0ID0gcGFyc2VyLnBh
cnNlKHByb2dyYW0sIHN0cmluZ1ZpZXcsIFBhcnNlcjo6TW9kZTo6U3RhbmRhcmRMaWJyYXJ5KTsK
KyAgICAgICAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9n
TG4oImZhaWxlZCB0byBwYXJzZSB0aGUgKHBhcnRpYWwpIHN0YW5kYXJkIGxpYnJhcnk6ICIsIExl
eGVyOjplcnJvclN0cmluZyhzdHJpbmdWaWV3LCBwYXJzZVJlc3VsdC5lcnJvcigpKSk7CiAgICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhdGVtZW50QmVoYXZpb3JDaGVj
a2VyLmNwcAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05Miw3ICs5Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB2aXNpdChBU1Q6OkRvV2hpbGVM
b29wJiBkb1doaWxlTG9vcCkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChkb1doaWxlTG9vcC5ib2R5KCkpOwotICAgICAgICBpZiAoZXJyb3IoKSkKKyAgICAgICAg
aWYgKGhhc0Vycm9yKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGF1dG8gYiA9IG1f
c3RhY2sudGFrZUxhc3QoKTsKICAgICAgICAgYi5yZW1vdmUoQmVoYXZpb3I6OkJyZWFrKTsKQEAg
LTEwNyw3ICsxMDcsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyBzbyB3ZSBjYW4ganVzdCBpZ25v
cmUgdGhlIGluaXRpYWxpemF0aW9uLgogCiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmb3JM
b29wLmJvZHkoKSk7Ci0gICAgICAgIGlmIChlcnJvcigpKQorICAgICAgICBpZiAoaGFzRXJyb3Io
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYXV0byBiID0gbV9zdGFjay50YWtlTGFz
dCgpOwogICAgICAgICBiLnJlbW92ZShCZWhhdmlvcjo6QnJlYWspOwpAQCAtMTE5LDcgKzExOSw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCB2aXNpdChBU1Q6OldoaWxlTG9vcCYgd2hpbGVMb29wKSBv
dmVycmlkZQogICAgIHsKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5ib2R5
KCkpOwotICAgICAgICBpZiAoZXJyb3IoKSkKKyAgICAgICAgaWYgKGhhc0Vycm9yKCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIGF1dG8gYiA9IG1fc3RhY2sudGFrZUxhc3QoKTsKICAg
ICAgICAgYi5yZW1vdmUoQmVoYXZpb3I6OkJyZWFrKTsKQEAgLTE0MywxMyArMTQzLDEzIEBAIHBy
aXZhdGU6CiAgICAgICAgIE9wdGlvblNldDxCZWhhdmlvcj4gcmVkdWN0aW9uID0geyB9OwogICAg
ICAgICBmb3IgKGF1dG8mIHN3aXRjaENhc2UgOiBzd2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMo
KSkgewogICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3aXRjaENhc2UpOwotICAgICAg
ICAgICAgaWYgKGVycm9yKCkpCisgICAgICAgICAgICBpZiAoaGFzRXJyb3IoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBhdXRvIGIgPSBtX3N0YWNrLnRha2VMYXN0KCk7
CiAgICAgICAgICAgICByZWR1Y3Rpb24gPSByZWR1Y3Rpb24gfCBiOwogICAgICAgICB9CiAgICAg
ICAgIGlmIChyZWR1Y3Rpb24uY29udGFpbnMoQmVoYXZpb3I6Ok5vdGhpbmcpKSB7Ci0gICAgICAg
ICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIlN3aXRjaCBzdGF0
ZW1lbnQgbXVzdCBlbmQgaW4gYSBicmVhay9mYWxsdGhyb3VnaC9yZXR1cm4iLCBzd2l0Y2hTdGF0
ZW1lbnQuY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICByZWR1Y3Rpb24ucmVtb3ZlKEJlaGF2aW9yOjpCcmVhayk7CkBAIC0xNjEsMTMgKzE2
MSwxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgdmlzaXQoQVNUOjpJZlN0YXRlbWVudCYgaWZTdGF0
ZW1lbnQpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoaWZTdGF0
ZW1lbnQuYm9keSgpKTsKLSAgICAgICAgaWYgKGVycm9yKCkpCisgICAgICAgIGlmIChoYXNFcnJv
cigpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBhdXRvIGIgPSBtX3N0YWNrLnRha2VM
YXN0KCk7CiAgICAgICAgIE9wdGlvblNldDxCZWhhdmlvcj4gYlByaW1lOwogICAgICAgICBpZiAo
aWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSkgewogICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KCppZlN0YXRlbWVudC5lbHNlQm9keSgpKTsKLSAgICAgICAgICAgIGlmIChlcnJvcigpKQorICAg
ICAgICAgICAgaWYgKGhhc0Vycm9yKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgYlByaW1lID0gbV9zdGFjay50YWtlTGFzdCgpOwogICAgICAgICB9IGVsc2UKQEAgLTE5
MCwyMiArMTkwLDIyIEBAIHByaXZhdGU6CiAgICAgICAgIE9wdGlvblNldDxCZWhhdmlvcj4gcmVk
dWN0aW9uID0geyB9OwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLnN0YXRl
bWVudHMoKS5zaXplKCkgLSAxOyArK2kpIHsKICAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChibG9jay5zdGF0ZW1lbnRzKClbaV0pOwotICAgICAgICAgICAgaWYgKGVycm9yKCkpCisgICAg
ICAgICAgICBpZiAoaGFzRXJyb3IoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICBhdXRvIGIgPSBtX3N0YWNrLnRha2VMYXN0KCk7CiAgICAgICAgICAgICBpZiAoIWIuY29u
dGFpbnMoQmVoYXZpb3I6Ok5vdGhpbmcpKSB7Ci0gICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsK
KyAgICAgICAgICAgICAgICBzZXRFcnJvcihFcnJvcigiU3RhdGVtZW50IGluc2lkZSBhbiBpbm5l
ciBibG9jayBtdXN0IGJlIHJlYWNoYWJsZS4iLCBibG9jay5zdGF0ZW1lbnRzKClbaV0tPmNvZGVM
b2NhdGlvbigpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgYi5yZW1vdmUoQmVoYXZpb3I6Ok5vdGhpbmcpOwogICAgICAgICAgICAgaWYgKGIu
Y29udGFpbnMoQmVoYXZpb3I6OkZhbGx0aHJvdWdoKSkgewotICAgICAgICAgICAgICAgIHNldEVy
cm9yKCk7CisgICAgICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkZhbGx0aHJvdWdoIG11c3Qg
YmUgdGhlIGxhc3Qgc3RhdGVtZW50IGluIGEgYmxvY2suIiwgYmxvY2suc3RhdGVtZW50cygpW2ld
LT5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIHJlZHVjdGlvbiA9IHJlZHVjdGlvbiB8IGI7CiAgICAgICAgIH0KICAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGJsb2NrLnN0YXRlbWVudHMoKVtibG9jay5zdGF0ZW1l
bnRzKCkuc2l6ZSgpIC0gMV0pOwotICAgICAgICBpZiAoZXJyb3IoKSkKKyAgICAgICAgaWYgKGhh
c0Vycm9yKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGF1dG8gYiA9IG1fc3RhY2su
dGFrZUxhc3QoKTsKICAgICAgICAgbV9zdGFjay5hcHBlbmQocmVkdWN0aW9uIHwgYik7CkBAIC0y
MTksMjUgKzIxOSwyNSBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxPcHRpb25TZXQ8QmVoYXZpb3I+
PiBtX3N0YWNrOwogfTsKIAotYm9vbCBjaGVja1N0YXRlbWVudEJlaGF2aW9yKFByb2dyYW0mIHBy
b2dyYW0pCitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gY2hlY2tTdGF0ZW1lbnRCZWhhdmlvcihQcm9n
cmFtJiBwcm9ncmFtKQogewogICAgIFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlciBzdGF0ZW1lbnRC
ZWhhdmlvckNoZWNrZXI7CiAgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9n
cmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkgewogICAgICAgICBzdGF0ZW1lbnRCZWhhdmlvckNo
ZWNrZXIuVmlzaXRvcjo6dmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKLSAgICAgICAgaWYgKHN0
YXRlbWVudEJlaGF2aW9yQ2hlY2tlci5lcnJvcigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoc3RhdGVtZW50QmVoYXZpb3JDaGVja2VyLmhhc0Vycm9yKCkpCisgICAg
ICAgICAgICByZXR1cm4gc3RhdGVtZW50QmVoYXZpb3JDaGVja2VyLmV4cGVjdGVkRXJyb3IoKTsK
ICAgICAgICAgYXV0byBiZWhhdmlvciA9IHN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlci50YWtlRnVu
Y3Rpb25CZWhhdmlvcigpOwogICAgICAgICBpZiAobWF0Y2hlcyhmdW5jdGlvbkRlZmluaXRpb24t
PnR5cGUoKSwgcHJvZ3JhbS5pbnRyaW5zaWNzKCkudm9pZFR5cGUoKSkpIHsKICAgICAgICAgICAg
IGJlaGF2aW9yLnJlbW92ZShTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXI6OkJlaGF2aW9yOjpSZXR1
cm4pOwogICAgICAgICAgICAgYmVoYXZpb3IucmVtb3ZlKFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tl
cjo6QmVoYXZpb3I6Ok5vdGhpbmcpOwogICAgICAgICAgICAgaWYgKGJlaGF2aW9yICE9IE9wdGlv
blNldDxTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXI6OkJlaGF2aW9yPigpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
RXJyb3IoInZvaWQgZnVuY3Rpb25zIG11c3QgcmV0dXJuIG5vdGhpbmcuIikpOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgaWYgKGJlaGF2aW9yICE9IFN0YXRlbWVudEJlaGF2aW9yQ2hl
Y2tlcjo6QmVoYXZpb3I6OlJldHVybikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJOb24tdm9pZCBmdW5j
dGlvbnMgbXVzdCByZXR1cm4gc29tZXRoaW5nLiIpKTsKICAgICAgICAgfQogICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXSExTTApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGF0ZW1lbnRC
ZWhhdmlvckNoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlci5oCShyZXZpc2lvbiAyNDc3
MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YXRlbWVu
dEJlaGF2aW9yQ2hlY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMyArMjcsMTYgQEAKIAog
I2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTEVycm9yLmgiCisjaW5jbHVkZSA8
d3RmL0V4cGVjdGVkLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNM
IHsKIAogY2xhc3MgUHJvZ3JhbTsKIAotYm9vbCBjaGVja1N0YXRlbWVudEJlaGF2aW9yKFByb2dy
YW0mKTsKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBjaGVja1N0YXRlbWVudEJlaGF2aW9yKFByb2dy
YW0mKTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJh
dG9yTGVuZ3RoLmNwcAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkFycmF5VHlwZT4+IG1fYXJyYXlUeXBlczsKIH07CiAKLWJv
b2wgc3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgoUHJvZ3JhbSYgcHJvZ3JhbSkKK0V4cGVj
dGVkPHZvaWQsIEVycm9yPiBzeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aChQcm9ncmFtJiBw
cm9ncmFtKQogewogICAgIEZpbmRBcnJheVR5cGVzIGZpbmRBcnJheVR5cGVzOwogICAgIGZpbmRB
cnJheVR5cGVzLmNoZWNrRXJyb3JBbmRWaXNpdChwcm9ncmFtKTsKQEAgLTcxLDkgKzcxLDkgQEAg
Ym9vbCBzeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aChQcm9ncgogICAgICAgICBwYXJhbWV0
ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgQVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6
bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBwcm9ncmFtLmludHJp
bnNpY3MoKS51aW50VHlwZSgpKSwgIm9wZXJhdG9yLmxlbmd0aCJfc3RyLCBXVEZNb3ZlKHBhcmFt
ZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CiAgICAgICAgIGlmICghcHJvZ3JhbS5hcHBl
bmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkNhbm5v
dCBzeW50aGVzaXplIG9wZXJhdG9yLmxlbmd0aCBmb3IgYXJyYXkgdHlwZS4iKSk7CiAgICAgfQot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdI
TFNMCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRo
ZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5o
CShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDEzICsyNywxNiBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNM
RXJyb3IuaCIKKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBuYW1lc3BhY2UgV0hMU0wgewogCiBjbGFzcyBQcm9ncmFtOwogCi1ib29sIHN5bnRoZXNp
emVBcnJheU9wZXJhdG9yTGVuZ3RoKFByb2dyYW0mKTsKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBz
eW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aChQcm9ncmFtJik7CiAKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0
b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwCShyZXZpc2lvbiAyNDc3MDApCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1
Y3RvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNyArMTQ1LDcgQEAgcHJpdmF0ZToKICAg
ICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4+IG1fbmFtZWRU
eXBlczsKIH07CiAKLWJvb2wgc3ludGhlc2l6ZUNvbnN0cnVjdG9ycyhQcm9ncmFtJiBwcm9ncmFt
KQorRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMoUHJvZ3JhbSYg
cHJvZ3JhbSkKIHsKICAgICBGaW5kQWxsVHlwZXMgZmluZEFsbFR5cGVzOwogICAgIGZpbmRBbGxU
eXBlcy5jaGVja0Vycm9yQW5kVmlzaXQocHJvZ3JhbSk7CkBAIC0xNTgsMTUgKzE1OCwxNyBAQCBi
b29sIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMoUHJvZ3JhbSYgcHJvCiAgICAgICAgIGF1dG8mIHVu
bmFtZWRUeXBlID0gdW5uYW1lZFR5cGVLZXkudW5uYW1lZFR5cGUoKTsKICAgICAgICAgYXV0byBs
b2NhdGlvbiA9IHVubmFtZWRUeXBlLmNvZGVMb2NhdGlvbigpOwogCi0gICAgICAgIGF1dG8gdmFy
aWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
Pihsb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCksIHVubmFtZWRUeXBlLmNsb25lKCksIFN0cmlu
ZygpLCBudWxscHRyLCBudWxscHRyKTsKLSAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
cyBwYXJhbWV0ZXJzOwotICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxl
RGVjbGFyYXRpb24pKTsKLSAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGNv
cHlDb25zdHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0
cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCB1bm5hbWVkVHlwZS5jbG9uZSgpLCAib3BlcmF0
b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7
Ci0gICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUoY29weUNvbnN0cnVjdG9yKSk7CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihsb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzKCks
IHVubmFtZWRUeXBlLmNsb25lKCksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICAg
ICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAg
IHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAg
ICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGNvcHlDb25zdHJ1Y3RvcihBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RG
OjpudWxsb3B0LCB1bm5hbWVkVHlwZS5jbG9uZSgpLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CisgICAgICAgICAgICBwcm9n
cmFtLmFwcGVuZChXVEZNb3ZlKGNvcHlDb25zdHJ1Y3RvcikpOworICAgICAgICB9CiAKICAgICAg
ICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGRlZmF1bHRDb25zdHJ1Y3RvcihBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9jYXRpb24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RG
OjpudWxsb3B0LCB1bm5hbWVkVHlwZS5jbG9uZSgpLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb25zKCksIG51bGxwdHIsIGlzT3BlcmF0b3IpKTsKICAgICAgICAg
aWYgKCFwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKGRlZmF1bHRDb25zdHJ1Y3RvcikpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVy
cm9yKCJDb3VsZCBub3Qgc3ludGhlc2l6ZSBkZWZhdWx0IGNvbnN0cnVjdG9yIikpOwogICAgIH0K
IAogICAgIGZvciAoYXV0byYgbmFtZWRUeXBlIDogbmFtZWRUeXBlcykgewpAQCAtMTkwLDkgKzE5
Miw5IEBAIGJvb2wgc3ludGhlc2l6ZUNvbnN0cnVjdG9ycyhQcm9ncmFtJiBwcm8KICAgICAgICAg
fQogICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gZGVmYXVsdENvbnN0cnVj
dG9yKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9j
aygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChsb2NhdGlvbiwgbmFt
ZWRUeXBlLmdldCgpKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9ucygpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CiAgICAgICAgIGlmICghcHJvZ3JhbS5hcHBl
bmQoV1RGTW92ZShkZWZhdWx0Q29uc3RydWN0b3IpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiQ291bGQgbm90IHN5
bnRoZXNpemUgZGVmYXVsdCBjb25zdHJ1Y3RvciIpKTsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIHsgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV0hMU0wKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9y
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTMgKzI3LDE2IEBACiAKICNpZiBFTkFCTEUoV0VCR1BV
KQogCisjaW5jbHVkZSAiV0hMU0xFcnJvci5oIgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7CiAKIGNsYXNzIFByb2dy
YW07CiAKLWJvb2wgc3ludGhlc2l6ZUNvbnN0cnVjdG9ycyhQcm9ncmFtJik7CitFeHBlY3RlZDx2
b2lkLCBFcnJvcj4gc3ludGhlc2l6ZUNvbnN0cnVjdG9ycyhQcm9ncmFtJik7CiAKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51
bWVyYXRpb25GdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcAko
cmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsK
IAotYm9vbCBzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSkK
K0V4cGVjdGVkPHZvaWQsIEVycm9yPiBzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMoUHJv
Z3JhbSYgcHJvZ3JhbSkKIHsKICAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOwogICAgIGZvciAo
YXV0byYgZW51bWVyYXRpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRp
b25zKCkpIHsKQEAgLTQ5LDcgKzQ5LDcgQEAgYm9vbCBzeW50aGVzaXplRW51bWVyYXRpb25GdW5j
dGlvbnMoUHJvZwogICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJs
ZURlY2xhcmF0aW9uMikpOwogICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxv
Y2F0aW9uLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVm
ZXJlbmNlOjp3cmFwKGxvY2F0aW9uLCBwcm9ncmFtLmludHJpbnNpY3MoKS5ib29sVHlwZSgpKSwg
Im9wZXJhdG9yPT0iX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgbnVsbHB0ciwgaXNPcGVyYXRv
cikpOwogICAgICAgICAgICAgaWYgKCFwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24pKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJDYW5ub3QgY3JlYXRlIG9wZXJh
dG9yPT0gZm9yIGVudW0gdHlwZS4iKSk7CiAgICAgICAgIH0KIAogICAgICAgICB7CkBAIC01OCw3
ICs1OCw3IEBAIGJvb2wgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2cKICAgICAg
ICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwog
ICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKGxvY2F0aW9uLCBBU1Q6OkF0dHJp
YnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCku
Y2xvbmUoKSwgIm9wZXJhdG9yLnZhbHVlIl9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIG51bGxw
dHIsIGlzT3BlcmF0b3IpKTsKICAgICAgICAgICAgIGlmICghcHJvZ3JhbS5hcHBlbmQoV1RGTW92
ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiQ2Fubm90
IGNyZWF0ZSBvcGVyYXRvci52YWx1ZSBmb3IgZW51bSB0eXBlLiIpKTsKICAgICAgICAgfQogCiAg
ICAgICAgIHsKQEAgLTY3LDcgKzY3LDcgQEAgYm9vbCBzeW50aGVzaXplRW51bWVyYXRpb25GdW5j
dGlvbnMoUHJvZwogICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJs
ZURlY2xhcmF0aW9uKSk7CiAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24obG9j
YXRpb24sIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBlbnVtZXJhdGlvbkRl
ZmluaXRpb24tPnR5cGUoKS5jbG9uZSgpLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CiAgICAgICAgICAgICBpZiAoIXByb2dy
YW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoRXJyb3IoIkNhbm5vdCBjcmVhdGUgY29weSBjb25zdHJ1Y3RvciBmb3IgZW51bSB0eXBlLiIp
KTsKICAgICAgICAgfQogCiAgICAgICAgIHsKQEAgLTc2LDEwICs3NiwxMCBAQCBib29sIHN5bnRo
ZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9nCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFw
cGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgICAgIEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbihsb2NhdGlvbiwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51
bGxvcHQsIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6Ondy
YXAobG9jYXRpb24sIGVudW1lcmF0aW9uRGVmaW5pdGlvbikpLCAib3BlcmF0b3IgY2FzdCJfc3Ry
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBudWxscHRyLCBpc09wZXJhdG9yKSk7CiAgICAgICAgICAg
ICBpZiAoIXByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikp
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkNhbm5vdCBjcmVhdGUgJ29wZXJhdG9yIGNhc3QnIGZvciBl
bnVtIHR5cGUuIikpOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiB7IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdITFNMCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmgJKHJldmlzaW9uIDI0NzcwMCkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1l
cmF0aW9uRnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEzICsyNywxNiBAQAogCiAj
aWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMRXJyb3IuaCIKKyNpbmNsdWRlIDx3
dGYvRXhwZWN0ZWQuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wg
ewogCiBjbGFzcyBQcm9ncmFtOwogCi1ib29sIHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9u
cyhQcm9ncmFtJik7CitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gc3ludGhlc2l6ZUVudW1lcmF0aW9u
RnVuY3Rpb25zKFByb2dyYW0mKTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhl
c2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vz
c29ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCi1ib29sIHN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nl
c3NvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBzeW50aGVzaXpl
U3RydWN0dXJlQWNjZXNzb3JzKFByb2dyYW0mIHByb2dyYW0pCiB7CiAgICAgYm9vbCBpc09wZXJh
dG9yID0gdHJ1ZTsKICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZURlZmluaXRpb24gOiBwcm9ncmFt
LnN0cnVjdHVyZURlZmluaXRpb25zKCkpIHsKQEAgLTU4LDEwICs1OCwxMCBAQCBib29sIHN5bnRo
ZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMoUHJvZ3JhCiAgICAgICAgICAgICAgICAgfHwgIXByb2dy
YW0uYXBwZW5kKGNyZWF0ZUFuZGVyKEFTVDo6QWRkcmVzc1NwYWNlOjpEZXZpY2UpKQogICAgICAg
ICAgICAgICAgIHx8ICFwcm9ncmFtLmFwcGVuZChjcmVhdGVBbmRlcihBU1Q6OkFkZHJlc3NTcGFj
ZTo6VGhyZWFkZ3JvdXApKQogICAgICAgICAgICAgICAgIHx8ICFwcm9ncmFtLmFwcGVuZChjcmVh
dGVBbmRlcihBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkKSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigi
Q2FuIG5vdCBjcmVhdGUgYW5kZXIiKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV0hMU0wKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVy
ZUFjY2Vzc29ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oCShyZXZpc2lvbiAyNDc3
MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTMgKzI3LDE2IEBA
CiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAiV0hMU0xFcnJvci5oIgorI2luY2x1
ZGUgPHd0Zi9FeHBlY3RlZC5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBX
SExTTCB7CiAKIGNsYXNzIFByb2dyYW07CiAKLWJvb2wgc3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vz
c29ycyhQcm9ncmFtJik7CitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gc3ludGhlc2l6ZVN0cnVjdHVy
ZUFjY2Vzc29ycyhQcm9ncmFtJik7CiAKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmgJKHJldmlzaW9uIDI0NzcwMCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNywxMSBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAor
I2luY2x1ZGUgIldITFNMRXJyb3IuaCIKICNpbmNsdWRlICJXSExTTEZ1bmN0aW9uQXR0cmlidXRl
LmgiCiAjaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgogI2luY2x1ZGUgIldITFNMVHlwZUFyZ3Vt
ZW50LmgiCisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtMTc4LDIzICsxODAsMjQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OlRlcm5hcnlFeHByZXNzaW9uJik7CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VmFy
aWFibGVSZWZlcmVuY2UmKTsKIAotICAgIGJvb2wgZXJyb3IoKSBjb25zdCB7IHJldHVybiBtX2Vy
cm9yOyB9CisgICAgYm9vbCBoYXNFcnJvcigpIGNvbnN0IHsgcmV0dXJuICFtX2V4cGVjdGVkRXJy
b3I7IH0KKyAgICBFeHBlY3RlZDx2b2lkLCBFcnJvcj4gZXhwZWN0ZWRFcnJvcigpIHsgcmV0dXJu
IG1fZXhwZWN0ZWRFcnJvcjsgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBjaGVj
a0Vycm9yQW5kVmlzaXQoVCYgeCkKICAgICB7Ci0gICAgICAgIGlmICghbV9lcnJvcikKKyAgICAg
ICAgaWYgKCFoYXNFcnJvcigpKQogICAgICAgICAgICAgdmlzaXQoeCk7CiAgICAgfQogCiBwcm90
ZWN0ZWQ6Ci0gICAgdm9pZCBzZXRFcnJvcigpCisgICAgdm9pZCBzZXRFcnJvcihFcnJvciBlcnJv
cikKICAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9lcnJvcik7Ci0gICAgICAgIG1fZXJyb3IgPSB0
cnVlOworICAgICAgICBBU1NFUlQoIWhhc0Vycm9yKCkpOworICAgICAgICBtX2V4cGVjdGVkRXJy
b3IgPSBtYWtlVW5leHBlY3RlZChlcnJvcik7CiAgICAgfQogCiBwcml2YXRlOgotICAgIGJvb2wg
bV9lcnJvciB7IGZhbHNlIH07IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk1NjgyIE1pZ3JhdGUgdGhpcyB0byBiZSBzb21lIHNvcnQgb2YgZGVzY3Jp
cHRpdmUgc3RyaW5nLgorICAgIEV4cGVjdGVkPHZvaWQsIEVycm9yPiBtX2V4cGVjdGVkRXJyb3I7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXSExTTApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlSZWZl
cmVuY2VUeXBlLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hM
U0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hM
U0xSZWZlcmVuY2VUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmgJKHJldmlzaW9uIDI0
NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFy
cmF5VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUo
V0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMQ29kZUxv
Y2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKICNpbmNsdWRlICJXSExT
TFVubmFtZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXNzaWdubWVudEV4cHJlc3Np
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBc3NpZ25tZW50RXhwcmVz
c2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgRU5BQkxFKFdFQkdQ
VSkKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJhc2VGdW5j
dGlvbkF0dHJpYnV0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEJhc2VGdW5jdGlvbkF0dHJpYnV0ZS5oCShyZXZpc2lvbiAyNDc3
MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCYXNl
RnVuY3Rpb25BdHRyaWJ1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogCiAj
aWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJX
SExTTENvZGVMb2NhdGlvbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJhc2VTZW1hbnRpYy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEJhc2VTZW1hbnRpYy5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCYXNlU2VtYW50aWMuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsOCArMjcsOCBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNM
Q29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xFbnRyeVBvaW50VHlwZS5oIgotI2luY2x1
ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xCbG9jay5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hM
U0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hM
U0xTdGF0ZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJvb2xlYW5MaXRlcmFsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
Qm9vbGVhbkxpdGVyYWwuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQm9vbGVhbkxpdGVyYWwuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNyArMjgsNiBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExT
TEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMQnJlYWsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xCcmVhay5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCcmVhay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xM
ZXhlci5oIgorI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xT
dGF0ZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJ
blNlbWFudGljLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMQmFz
ZVNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMQ29k
ZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TENhbGxFeHByZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMQ2FsbEV4cHJlc3Npb24uaAkocmV2aXNpb24gMjQ3NzAwKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ2FsbEV4cHJl
c3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSAiV0hM
U0xFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCi0j
aW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQ29tbWFFeHByZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29tbWFFeHByZXNzaW9uLmgJKHJldmlz
aW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTENvbW1hRXhwcmVzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAj
aWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgotI2luY2x1
ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xDb250aW51ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnRpbnVlLmgJKHJldmlzaW9uIDI0NzcwMCkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnRpbnVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAK
LSNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIK
ICNpbmNsdWRlICJXSExTTFN0YXRlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xEZXJlZmVyZW5j
ZUV4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xEZXJlZmVyZW5jZUV4cHJlc3Npb24uaAkocmV2aXNpb24gMjQ3NzAw
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRGVyZWZl
cmVuY2VFeHByZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBF
TkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAi
V0hMU0xMZXhlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRG9XaGlsZUxvb3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xEb1doaWxlTG9vcC5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xEb1doaWxlTG9vcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAog
I2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNp
bmNsdWRlICJXSExTTFN0YXRlbWVudC5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhw
cmVzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTERvdEV4cHJlc3Npb24uaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0j
aW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNMUHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0NvbmNhdGVuYXRlLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRWZmZWN0
ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFZmZlY3RmdWxFeHByZXNzaW9uU3Rh
dGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoV0VC
R1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhl
ci5oIgogI2luY2x1ZGUgIldITFNMU3RhdGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJl
Zi5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaAkocmV2
aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3
LDggQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlv
bi5oIgogI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25NZW1iZXIuaCIKLSNpbmNsdWRlICJXSExT
TExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKICNpbmNsdWRlICJXSExTTFVu
bmFtZWRUeXBlLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25NZW1iZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJh
dGlvbk1lbWJlci5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw4ICsyNyw4IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAiV0hM
U0xDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJXSExTTENvbnN0YW50RXhwcmVzc2lvbi5oIgot
I2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlv
bk1lbWJlckxpdGVyYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaAkocmV2aXNpb24g
MjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcg
QEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5j
bHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaAkocmV2aXNp
b24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRXhwcmVzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgRU5B
QkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMQWRkcmVzc1NwYWNlLmgiCi0jaW5jbHVkZSAi
V0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAi
V0hMU0xVbm5hbWVkVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUg
PHd0Zi9VbmlxdWVSZWYuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEZhbGx0aHJvdWdoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmFsbHRocm91Z2guaAkocmV2aXNpb24gMjQ3
NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmFs
bHRocm91Z2guaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxF
KFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTENvZGVM
b2NhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMU3RhdGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEZsb2F0TGl0ZXJhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbC5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSAiV0hMU0xFeHBy
ZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xGbG9hdExpdGVyYWxUeXBlLmgiCi0jaW5jbHVkZSAi
V0hMU0xMZXhlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZvckxvb3AuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGb3JMb29wLmgJ
KHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEZvckxvb3AuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2lm
IEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKLSNpbmNsdWRl
ICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJX
SExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmgiCiAjaW5jbHVkZSA8bWVtb3J5PgpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rp
b25EZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMjQ3NzAw
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rp
b25EZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNyw5IEBACiAKICNpZiBF
TkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRl
ICJXSExTTEVudHJ5UG9pbnRUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkF0dHJpYnV0
ZS5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFNlbWFudGljLmgi
CiAjaW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlwZS5oIgogI2luY2x1ZGUgIldITFNMVmFyaWFibGVE
ZWNsYXJhdGlvbi5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMR2xvYmFsVmFyaWFibGVSZWZlcmVuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xHbG9iYWxWYXJpYWJsZVJlZmVy
ZW5jZS5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xHbG9iYWxWYXJpYWJsZVJlZmVyZW5jZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw3ICsyNyw2IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hM
U0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRWxlbWVudC5oIgogI2luY2x1ZGUg
PHd0Zi9VbmlxdWVSZWYuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMSWZTdGF0ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJZlN0YXRlbWVudC5oCShyZXZpc2lvbiAy
NDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJ
ZlN0YXRlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgRU5BQkxF
KFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNM
TGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFN0YXRlbWVudC5oIgogI2luY2x1ZGUgPG1lbW9yeT4K
ICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Np
b24uaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcg
KzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTExleGVyLmgi
CisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJXSExTTFByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIApJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVy
YWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24u
aCIKICNpbmNsdWRlICJXSExTTEludGVnZXJMaXRlcmFsVHlwZS5oIgotI2luY2x1ZGUgIldITFNM
TGV4ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xMb2dpY2FsRXhwcmVzc2lvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTExvZ2lj
YWxFeHByZXNzaW9uLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTExvZ2ljYWxFeHByZXNzaW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hM
U0xFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgPHd0Zi9V
bmlxdWVSZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTG9naWNhbE5vdEV4cHJlc3Npb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xM
b2dpY2FsTm90RXhwcmVzc2lvbi5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2lu
Y2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNs
dWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVyZW5j
ZUV4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgJKHJldmlzaW9u
IDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyAr
MjgsNiBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24u
aCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4
cHJlc3Npb24uaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hM
U0xFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgPHd0Zi9V
bmlxdWVSZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZWRUeXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZWRUeXBlLmgJ
KHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTE5hbWVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAK
ICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUg
IldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBlLmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUg
IldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUg
IldITFNMTmFtZWRUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKICNpbmNs
dWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTnVsbExpdGVyYWwuaAkocmV2
aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMTnVsbExpdGVyYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2lm
IEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKLSNpbmNsdWRl
ICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xOdWxsTGl0ZXJhbFR5cGUuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQb2ludGVyVHlwZS5oCShyZXZpc2lvbiAyNDc3
MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQb2lu
dGVyVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUo
V0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMQ29kZUxv
Y2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xSZWZlcmVuY2VUeXBlLmgiCiAjaW5jbHVkZSA8d3Rm
L1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgJKHJldmlzaW9uIDI0Nzcw
MCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAK
ICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVj
bGFyYXRpb24uaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1
ZVJlZi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xRdWFsaWZpZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xRdWFsaWZpZXIuaAkocmV2
aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMUXVhbGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lm
IEVOQUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hM
U0xDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJXSExTTFR5cGUuaCIKICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCShyZXZpc2lvbiAyNDc3MDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNp
ZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCi0jaW5jbHVk
ZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgog
I2luY2x1ZGUgIldITFNMVmFyaWFibGVSZWZlcmVuY2UuaCIKICNpbmNsdWRlIDxtZW1vcnk+Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVu
Y2VUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMUmVmZXJlbmNlVHlwZS5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5j
bHVkZSAiV0hMU0xBZGRyZXNzU3BhY2UuaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5j
bHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgi
CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
UmVzb3VyY2VTZW1hbnRpYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMuaAkocmV2aXNpb24gMjQ3NzAw
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3Vy
Y2VTZW1hbnRpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgRU5BQkxF
KFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMQmFzZVNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hM
U0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMUmV0dXJuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUmV0dXJuLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJldHVybi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldI
TFNMRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExT
TFN0YXRlbWVudC5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVm
Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xT
cGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50
U2VtYW50aWMuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5j
bHVkZSAiV0hMU0xCYXNlU2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5j
bHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGFnZUluT3V0
U2VtYW50aWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuaAkocmV2aXNpb24gMjQ3NzAwKQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhZ2VJbk91dFNl
bWFudGljLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VC
R1BVKQogCiAjaW5jbHVkZSAiV0hMU0xCYXNlU2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExTTExl
eGVyLmgiCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xTdGF0ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xTdGF0ZW1lbnQuaAkocmV2aXNpb24gMjQ3NzAwKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhdGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNs
dWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKICNpbmNs
dWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YXRlbWVudExpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xTdGF0ZW1lbnRMaXN0LmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YXRlbWVudExpc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldI
TFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldI
TFNMU3RhdGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUp
CiAKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24u
aCIKICNpbmNsdWRlICJXSExTTE5hbWVkVHlwZS5oIgogI2luY2x1ZGUgIldITFNMU3RydWN0dXJl
RWxlbWVudC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZUVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1
Y3R1cmVFbGVtZW50LmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZUVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldI
TFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldI
TFNMUXVhbGlmaWVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgogI2luY2x1ZGUgIldI
TFNMVHlwZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMU3dpdGNoQ2FzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFN3aXRjaENhc2UuaAkocmV2aXNpb24gMjQ3NzAwKQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3dpdGNoQ2FzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAog
I2luY2x1ZGUgIldITFNMQmxvY2suaCIKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgog
I2luY2x1ZGUgIldITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhl
ci5oIgogI2luY2x1ZGUgIldITFNMU3RhdGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFN3aXRjaFN0YXRlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFN3aXRjaFN0YXRlbWVudC5oCShyZXZpc2lvbiAyNDc3MDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTd2l0Y2hT
dGF0ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2lmIEVOQUJMRShX
RUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTExl
eGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJXSExTTFN3aXRj
aENhc2UuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUZXJuYXJ5RXhwcmVzc2lvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFRl
cm5hcnlFeHByZXNzaW9uLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFRlcm5hcnlFeHByZXNzaW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAi
V0hMU0xFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgPHd0
Zi9VbmlxdWVSZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFy
Z3VtZW50LmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFR5cGVBcmd1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw2IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMQ29uc3RhbnRF
eHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgPHd0Zi9Vbmlx
dWVSZWYuaD4KICNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5
cGVEZWZpbml0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMVHlwZURlZmluaXRpb24uaAkocmV2aXNpb24gMjQ3NzAwKQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZURlZmluaXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQ
VSkKIAotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlv
bi5oIgogI2luY2x1ZGUgIldITFNMTmFtZWRUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xVbm5hbWVk
VHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVm
ZXJlbmNlLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMTmFtZWRU
eXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKICNpbmNsdWRlICJXSExTTFVu
bmFtZWRUeXBlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xVbm5hbWVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlLmgJKHJldmlzaW9uIDI0NzcwMCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJH
UFUpCiAKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRp
b24uaCIKICNpbmNsdWRlICJXSExTTFR5cGUuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5oCShyZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQog
CiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgog
I2luY2x1ZGUgIldITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaAkocmV2
aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2
IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgot
I2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFF1YWxpZmllci5oIgogI2lu
Y2x1ZGUgIldITFNMU2VtYW50aWMuaCIKICNpbmNsdWRlICJXSExTTFR5cGUuaCIKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFy
YXRpb25zU3RhdGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaAkocmV2
aXNpb24gMjQ3NzAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMTGV4
ZXIuaCIKKyNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMU3Rh
dGVtZW50LmgiCiAjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMVmFyaWFibGVSZWZlcmVuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oCShy
ZXZpc2lvbiAyNDc3MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2
IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgot
I2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRp
b24uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMV2hpbGVMb29wLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMV2hpbGVM
b29wLmgJKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFdoaWxlTG9vcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2
IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgot
I2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFN0YXRlbWVudC5oIgogI2lu
Y2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjQ3NzAwKQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC02MzkxLDYgKzYzOTEsNyBAQAogCQkxQ0FGMzQ3RTBBNkM0MDUyMDBBQkUwNkUgLyog
V2ViU2NyaXB0T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNj
cmlwdE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0FGMzQ3RjBBNkM0
MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViU2NyaXB0T2JqZWN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQ0FGMzQ4MDBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0UHJp
dmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTY3JpcHRPYmplY3RQ
cml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQjVGRTg4MjJERUJDOEIw
MDk0NDBFMiAvKiBXSExTTEVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMRXJyb3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNCNjlCMzIyMURFRDQwQjAwNkU4NDZBIC8qIFdI
TFNMUmVzb2x2YWJsZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xSZXNvbHZhYmxlVHlwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0I2OUIzNDIxREVENjNBMDA2RTg0NkEg
LyogV0hMU0xGbG9hdExpdGVyYWxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMRmxvYXRMaXRl
cmFsVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0I2OUIzNTIxREVENjQ5
MDA2RTg0NkEgLyogV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hM
U0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgz
MjMsNiArODMyNCw3IEBACiAJCTUxRkI2N0RBMUFFNkI1RTQwMEQwNkM1QSAvKiBDb250ZW50RXh0
ZW5zaW9uU3R5bGVTaGVldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250
ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MjEzMUU1QTFDNEYxNTYxMDAzM0Y4MDIgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjE1ODYyQzIy
OTM3N0I3MDA1OTI1RUYgLyogV0hMU0xBU1QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xBU1QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTIyQkFCOTYyMkU2QTM2MjAwQzU0Q0U5IC8q
IFdITFNMQ29kZUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQ29kZUxvY2F0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyMkRBM0QzMjI5RTFEMzkwMDQyRDE1MSAv
KiBXSExTTEdsb2JhbFZhcmlhYmxlUmVmZXJlbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMR2xv
YmFsVmFyaWFibGVSZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTIy
RTFBMTcyMjk3RDZENDAwRTVEMzZBIC8qIFdITFNMUHJlc2VydmVWYXJpYWJsZUxpZmV0aW1lcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFByZXNlcnZlVmFyaWFibGVMaWZldGltZXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjJFMUExOTIyOTdENkQ0MDBFNUQzNkEg
LyogV0hMU0xQcmVzZXJ2ZVZhcmlhYmxlTGlmZXRpbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNM
UHJlc2VydmVWYXJpYWJsZUxpZmV0aW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjU1MTgsOCArMjU1MjAsMTAgQEAKIAkJCQkxQzg0MEI5NzIxRUM0MDA3MDBEMDUwMEQgLyog
V0hMU0xDaGVja2VyLmggKi8sCiAJCQkJMUMyODFDNkQyMkI4N0I5ODAwNjkxQzAwIC8qIFdITFNM
Q2hlY2tUZXh0dXJlUmVmZXJlbmNlcy5jcHAgKi8sCiAJCQkJMUMyODFDNkUyMkI4N0I5ODAwNjkx
QzAwIC8qIFdITFNMQ2hlY2tUZXh0dXJlUmVmZXJlbmNlcy5oICovLAorCQkJCTUyMkJBQjk2MjJF
NkEzNjIwMEM1NENFOSAvKiBXSExTTENvZGVMb2NhdGlvbi5oICovLAogCQkJCTFDODZDQTRCMjJB
QTE5RkYwMDFCRjk2MSAvKiBXSExTTENvbXB1dGVEaW1lbnNpb25zLmNwcCAqLywKIAkJCQkxQzg2
Q0E0QzIyQUExOUZGMDAxQkY5NjEgLyogV0hMU0xDb21wdXRlRGltZW5zaW9ucy5oICovLAorCQkJ
CTFDQjVGRTg4MjJERUJDOEIwMDk0NDBFMiAvKiBXSExTTEVycm9yLmggKi8sCiAJCQkJMUNBMEMy
RTQyMUVFRDEyQTAwQTExODYwIC8qIFdITFNMRnVuY3Rpb25TdGFnZUNoZWNrZXIuY3BwICovLAog
CQkJCTFDQTBDMkU1MjFFRUQxMkEwMEExMTg2MCAvKiBXSExTTEZ1bmN0aW9uU3RhZ2VDaGVja2Vy
LmggKi8sCiAJCQkJMUM4NDBCOTkyMUVDNDAwODAwRDA1MDBEIC8qIFdITFNMR2F0aGVyRW50cnlQ
b2ludEl0ZW1zLmNwcCAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5l
TWV0YWwubW0JKHJldmlzaW9uIDI0NzcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbQkod29ya2luZyBjb3B5
KQpAQCAtNzYsNyArNzYsNyBAQCBzdGF0aWMgT3B0aW9uYWw8V0hMU0w6OkNvbXB1dGVEaW1lbnNp
b25zCiAKICAgICAgICAgYXV0byB3aGxzbENvbXBpbGVSZXN1bHQgPSBXSExTTDo6cHJlcGFyZSh3
aGxzbFNvdXJjZSwgKndobHNsRGVzY3JpcHRvcik7CiAgICAgICAgIGlmICghd2hsc2xDb21waWxl
UmVzdWx0KSB7Ci0gICAgICAgICAgICBlcnJvclNjb3Blcy5nZW5lcmF0ZUVycm9yKG1ha2VTdHJp
bmcoZnVuY3Rpb25OYW1lLCAiOiBXSExTTCBjb21waWxhdGlvbiBmYWlsZWQhIikpOworICAgICAg
ICAgICAgZXJyb3JTY29wZXMuZ2VuZXJhdGVFcnJvcihtYWtlU3RyaW5nKCJXSExTTCBjb21waWxh
dGlvbiBmYWlsZWQuICIsIHdobHNsQ29tcGlsZVJlc3VsdC5lcnJvcigpKSk7CiAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAK
</data>
<flag name="review"
          id="390495"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
    <flag name="commit-queue"
          id="390502"
          type_id="3"
          status="-"
          setter="mmaxfield"
    />
          </attachment>
      

    </bug>

</bugzilla>