<?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>193360</bug_id>
          
          <creation_ts>2019-01-11 13:05:05 -0800</creation_ts>
          <short_desc>[WHLSL] Add native function synthesis passes</short_desc>
          <delta_ts>2019-01-12 15:36:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>192826</dependson>
          <blocked>193080</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jonlee</cc>
    
    <cc>justin_fan</cc>
    
    <cc>rmorisset</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1493769</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-11 13:05:05 -0800</bug_when>
    <thetext>[WHLSL] Add native function synthesis passes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493771</commentid>
    <comment_count>1</comment_count>
      <attachid>358932</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-11 13:10:08 -0800</bug_when>
    <thetext>Created attachment 358932
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493772</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-11 13:12:10 -0800</bug_when>
    <thetext>Attachment 358932 did not pass style-queue:


ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLIntrinsics.cpp:52:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLSynthesizeEnumerationFunctions.cpp:43:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLSynthesizeEnumerationFunctions.cpp:55:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLSynthesizeStructureAccessors.cpp:47:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 4 in 20 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>1493777</commentid>
    <comment_count>3</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-11 13:19:39 -0800</bug_when>
    <thetext>Style failures are false negatives.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493846</commentid>
    <comment_count>4</comment_count>
      <attachid>358932</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-01-11 14:59:54 -0800</bug_when>
    <thetext>Comment on attachment 358932
Patch

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

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLCheckDuplicateFunctions.cpp:48
&gt; +    std::sort(functions.begin(), functions.end(), [](const AST::FunctionDeclaration&amp; a, const AST::FunctionDeclaration&amp; b) -&gt; bool {

Do we need to actually sort all functions by alphabetic order, or just to sort them in any order to find duplicates?
If the later, I think I would switch the order of the check, sorting by length first:
if (a.name().length() &lt; b.name.length())
  return true;
if (a.name().length() &gt; b.name.length())
  return false;
for (unsigned i = 0; i &lt; a.name().length(); ++i) {
  if (a.name()[i] &lt; b.name()[i])
    return true;
  if (a.name()[i] &gt; b.name()[i])
     return false;
 }
return false;

It is probably premature optimization on my part though, feel free to ignore it.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLCheckDuplicateFunctions.cpp:65
&gt; +            if (functions[i].get().isCast()) {

I think this case and the next could be merged and simplified
if (functions[i].get().isCast() &amp;&amp; !matches(functions[i].get().type(), functions[j].get().type()))
  continue;
bool same = true;
for (...
if (same)
  return false

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLCheckDuplicateFunctions.cpp:92
&gt; +        if (functions[i].get().name() == &quot;operator&amp;[]&quot; &amp;&amp; functions[i].get().parameters().size() == 2

I&apos;m not super fond of these special cases for native functions.
In particular, it seems easy to forget one, if we add more native functions.
For example, are we currently correctly dealing with getters and setters to structure fields?
I don&apos;t really have a suggestion for a cleaner approach though.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLRecursiveTypeChecker.cpp:45
&gt; +        if (addResult.isNewEntry) {

Do we really want to error and return early when adding a new entry?
I would have expected us to do it when there is already an entry, so when !addResult.isNewEntry.
Same comment about the other versions of visit in this file.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLRecursiveTypeChecker.cpp:64
&gt; +        checkErrorAndVisit(structureDefinition);

I may have misunderstood the interface to your visitor, but I would have expected doing the recursion on each field of the struct, and not on the definition itself.
Same comment about the other versions of visit in this file.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLSynthesizeArrayOperatorLength.cpp:44
&gt; +    void visit(AST::ArrayType&amp; arrayType) override

Does this implementation recurse throughout the entire AST, just to find some declarations?
It seems wasteful to for example go into deep expressions.  Is there any case where it is actually required?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493918</commentid>
    <comment_count>5</comment_count>
      <attachid>358932</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-01-11 17:44:06 -0800</bug_when>
    <thetext>Comment on attachment 358932
Patch

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

&gt; Source/WebCore/ChangeLog:21
&gt; +        - CheckDuplicateFunctions which makes sure the same function isn&apos;t defined twice
&gt; +        - Intrinsics, which remembers all of the native types so they can be referred to by the
&gt; +          rest of the compiler
&gt; +        - RecursiveTypeChecker which makes sure types don&apos;t refer to themselves
&gt; +        - SynthesizeArrayOperatorLength which creates operator.length() functions for arrays
&gt; +        - SynthesizeConstructors which creates copy constructors and default constructors for all
&gt; +          types
&gt; +        - SynthesizeEnumerationFunctions which provides cast operators between enum types and their
&gt; +          base types
&gt; +        - SynthesizeStructureAccessors which provides getters, setters, and anders for each member
&gt; +          of a struct

While it would be annoying, I wish these were in separate patches.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLIntrinsics.cpp:61
&gt; +    : m_textureTypeNames { String(&quot;Texture1D&quot;, String::ConstructFromLiteral),
&gt; +        String(&quot;RWTexture1D&quot;, String::ConstructFromLiteral),
&gt; +        String(&quot;Texture1DArray&quot;, String::ConstructFromLiteral),
&gt; +        String(&quot;RWTexture1DArray&quot;, String::ConstructFromLiteral),
&gt; +        String(&quot;Texture2D&quot;, String::ConstructFromLiteral),
&gt; +        String(&quot;RWTexture2D&quot;, String::ConstructFromLiteral),
&gt; +        String(&quot;Texture2DArray&quot;, String::ConstructFromLiteral),
&gt; +        String(&quot;RWTexture2DArray&quot;, String::ConstructFromLiteral),
&gt; +        String(&quot;Texture3D&quot;, String::ConstructFromLiteral),
&gt; +        String(&quot;RWTexture3D&quot;, String::ConstructFromLiteral),
&gt; +        String(&quot;TextureCube&quot;,  String::ConstructFromLiteral) }
&gt; +    , m_textureInnerTypeNames { String(&quot;uchar&quot;, String::ConstructFromLiteral),
&gt; +        String(&quot;ushort&quot;, String::ConstructFromLiteral),
&gt; +        String(&quot;uint&quot;, String::ConstructFromLiteral),
&gt; +        String(&quot;char&quot;, String::ConstructFromLiteral),
&gt; +        String(&quot;short&quot;, String::ConstructFromLiteral),
&gt; +        String(&quot;int&quot;, String::ConstructFromLiteral),
&gt; +        String(&quot;half&quot;, String::ConstructFromLiteral),
&gt; +        String(&quot;float&quot;, String::ConstructFromLiteral) }
&gt; +    , m_depthTextureInnerTypes { String(&quot;half&quot;, String::ConstructFromLiteral),
&gt; +        String(&quot;float&quot;, String::ConstructFromLiteral) }

You can use &quot;foo&quot;_s for all these.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLIntrinsics.cpp:78
&gt; +    if (nativeTypeDeclaration.name() == &quot;void&quot;)

Maybe we should have static consts for these strings, rather than using the raw text?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLIntrinsics.h:135
&gt; +    Vector&lt;String&gt; m_textureTypeNames;
&gt; +    Vector&lt;String&gt; m_textureInnerTypeNames;

Do these ever change? Can they be static?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLIntrinsics.h:139
&gt; +    Vector&lt;String&gt; m_depthTextureInnerTypes;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493956</commentid>
    <comment_count>6</comment_count>
      <attachid>358932</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-11 23:06:02 -0800</bug_when>
    <thetext>Comment on attachment 358932
Patch

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

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLCheckDuplicateFunctions.cpp:48
&gt;&gt; +    std::sort(functions.begin(), functions.end(), [](const AST::FunctionDeclaration&amp; a, const AST::FunctionDeclaration&amp; b) -&gt; bool {
&gt; 
&gt; Do we need to actually sort all functions by alphabetic order, or just to sort them in any order to find duplicates?
&gt; If the later, I think I would switch the order of the check, sorting by length first:
&gt; if (a.name().length() &lt; b.name.length())
&gt;   return true;
&gt; if (a.name().length() &gt; b.name.length())
&gt;   return false;
&gt; for (unsigned i = 0; i &lt; a.name().length(); ++i) {
&gt;   if (a.name()[i] &lt; b.name()[i])
&gt;     return true;
&gt;   if (a.name()[i] &gt; b.name()[i])
&gt;      return false;
&gt;  }
&gt; return false;
&gt; 
&gt; It is probably premature optimization on my part though, feel free to ignore it.

I can see why this would be faster if many of the strings shared prefixes, but it would be slower if all the strings were the same length and placed evenly along the search space. I suppose we have a lot of operators, which would share a prefix, so presumably this would be a performance optimization. It&apos;s probably premature, but it&apos;s pretty simple so I&apos;ll just do it.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLCheckDuplicateFunctions.cpp:92
&gt;&gt; +        if (functions[i].get().name() == &quot;operator&amp;[]&quot; &amp;&amp; functions[i].get().parameters().size() == 2
&gt; 
&gt; I&apos;m not super fond of these special cases for native functions.
&gt; In particular, it seems easy to forget one, if we add more native functions.
&gt; For example, are we currently correctly dealing with getters and setters to structure fields?
&gt; I don&apos;t really have a suggestion for a cleaner approach though.

Yeah, these match _resolveByInstantiation() inside CallExpression. The idea is that if a function is dynamically generated at runtime, it shouldn&apos;t be overridable by the user. This gives it the appearance that those functions were present all along (though the error message will be different).

Perhaps moving both this code and the _resolveByInstantiation() code into the same file would help? What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493957</commentid>
    <comment_count>7</comment_count>
      <attachid>358984</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-11 23:08:54 -0800</bug_when>
    <thetext>Created attachment 358984
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493958</commentid>
    <comment_count>8</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-11 23:11:22 -0800</bug_when>
    <thetext>Attachment 358984 did not pass style-queue:


ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLSynthesizeEnumerationFunctions.cpp:43:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLSynthesizeEnumerationFunctions.cpp:55:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLIntrinsics.cpp:42:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLSynthesizeStructureAccessors.cpp:47:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 4 in 25 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>1493984</commentid>
    <comment_count>9</comment_count>
      <attachid>358932</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-12 10:21:52 -0800</bug_when>
    <thetext>Comment on attachment 358932
Patch

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

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLIntrinsics.cpp:78
&gt;&gt; +    if (nativeTypeDeclaration.name() == &quot;void&quot;)
&gt; 
&gt; Maybe we should have static consts for these strings, rather than using the raw text?

Aha! I tried this when writing it, but it didn&apos;t work because I didn&apos;t know about https://stackoverflow.com/questions/4891067/weird-undefined-symbols-of-static-constants-inside-a-struct-class. Now that I did that, it works!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493986</commentid>
    <comment_count>10</comment_count>
      <attachid>358932</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-12 10:32:50 -0800</bug_when>
    <thetext>Comment on attachment 358932
Patch

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

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLRecursiveTypeChecker.cpp:45
&gt;&gt; +        if (addResult.isNewEntry) {
&gt; 
&gt; Do we really want to error and return early when adding a new entry?
&gt; I would have expected us to do it when there is already an entry, so when !addResult.isNewEntry.
&gt; Same comment about the other versions of visit in this file.

Argh, this must have gotten messed up during the various iterations of this patch. Good catch.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLRecursiveTypeChecker.cpp:64
&gt;&gt; +        checkErrorAndVisit(structureDefinition);
&gt; 
&gt; I may have misunderstood the interface to your visitor, but I would have expected doing the recursion on each field of the struct, and not on the definition itself.
&gt; Same comment about the other versions of visit in this file.

Right, this got messed up when I was refactoring Visitor. I really need to finish enough of this compiler so I can start running the test suite....

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLSynthesizeArrayOperatorLength.cpp:44
&gt;&gt; +    void visit(AST::ArrayType&amp; arrayType) override
&gt; 
&gt; Does this implementation recurse throughout the entire AST, just to find some declarations?
&gt; It seems wasteful to for example go into deep expressions.  Is there any case where it is actually required?

I think it does need to for casts, since a cast can hold an ArrayType and can be arbitrarily deep within an expression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493987</commentid>
    <comment_count>11</comment_count>
      <attachid>358994</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-12 10:36:42 -0800</bug_when>
    <thetext>Created attachment 358994
Patch for committing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493988</commentid>
    <comment_count>12</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-12 10:38:38 -0800</bug_when>
    <thetext>Attachment 358994 did not pass style-queue:


ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLSynthesizeEnumerationFunctions.cpp:43:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLSynthesizeEnumerationFunctions.cpp:55:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLSynthesizeStructureAccessors.cpp:47:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 3 in 25 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>1493992</commentid>
    <comment_count>13</comment_count>
      <attachid>358932</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-12 12:29:51 -0800</bug_when>
    <thetext>Comment on attachment 358932
Patch

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

&gt;&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLCheckDuplicateFunctions.cpp:48
&gt;&gt;&gt; +    std::sort(functions.begin(), functions.end(), [](const AST::FunctionDeclaration&amp; a, const AST::FunctionDeclaration&amp; b) -&gt; bool {
&gt;&gt; 
&gt;&gt; Do we need to actually sort all functions by alphabetic order, or just to sort them in any order to find duplicates?
&gt;&gt; If the later, I think I would switch the order of the check, sorting by length first:
&gt;&gt; if (a.name().length() &lt; b.name.length())
&gt;&gt;   return true;
&gt;&gt; if (a.name().length() &gt; b.name.length())
&gt;&gt;   return false;
&gt;&gt; for (unsigned i = 0; i &lt; a.name().length(); ++i) {
&gt;&gt;   if (a.name()[i] &lt; b.name()[i])
&gt;&gt;     return true;
&gt;&gt;   if (a.name()[i] &gt; b.name()[i])
&gt;&gt;      return false;
&gt;&gt;  }
&gt;&gt; return false;
&gt;&gt; 
&gt;&gt; It is probably premature optimization on my part though, feel free to ignore it.
&gt; 
&gt; I can see why this would be faster if many of the strings shared prefixes, but it would be slower if all the strings were the same length and placed evenly along the search space. I suppose we have a lot of operators, which would share a prefix, so presumably this would be a performance optimization. It&apos;s probably premature, but it&apos;s pretty simple so I&apos;ll just do it.

That being said, most of the operators have names that are the same length...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493998</commentid>
    <comment_count>14</comment_count>
      <attachid>358994</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-12 12:56:44 -0800</bug_when>
    <thetext>Comment on attachment 358994
Patch for committing

Clearing flags on attachment: 358994

Committed r239902: &lt;https://trac.webkit.org/changeset/239902&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494004</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-01-12 15:36:29 -0800</bug_when>
    <thetext>&lt;rdar://problem/47234790&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358932</attachid>
            <date>2019-01-11 13:10:08 -0800</date>
            <delta_ts>2019-01-11 17:44:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193360-20190111131008.patch</filename>
            <type>text/plain</type>
            <size>87906</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5ODY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGUyYzg5ZWVmNDBlZGE4
NmJhNTg0Mjg5ZWMzMTU3NGE0NDFmMjY2NC4uZjI4NDc4N2YyYjMxMzU3MGU1ODVlM2QwNGZlMGM2
MGMwYTYyNDc1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDE5LTAxLTExICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBB
ZGQgbmF0aXZlIGZ1bmN0aW9uIHN5bnRoZXNpcyBwYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MzM2MAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW5jbHVkZXMgYWxsIHRoZSBw
YXNzZXMgaW4gcHJlcGFyZSgpIHRoYXQgYXJlIGJldHdlZW4gdGhlIG5hbWUgcmVzb2x2ZXIgYW5k
IHRoZQorICAgICAgICB0eXBlIGNoZWNrZXIuIEl0IGludm9sdmVzIGEgZmV3IHNtYWxsIHBpZWNl
czoKKworICAgICAgICAtIENoZWNrRHVwbGljYXRlRnVuY3Rpb25zIHdoaWNoIG1ha2VzIHN1cmUg
dGhlIHNhbWUgZnVuY3Rpb24gaXNuJ3QgZGVmaW5lZCB0d2ljZQorICAgICAgICAtIEludHJpbnNp
Y3MsIHdoaWNoIHJlbWVtYmVycyBhbGwgb2YgdGhlIG5hdGl2ZSB0eXBlcyBzbyB0aGV5IGNhbiBi
ZSByZWZlcnJlZCB0byBieSB0aGUKKyAgICAgICAgICByZXN0IG9mIHRoZSBjb21waWxlcgorICAg
ICAgICAtIFJlY3Vyc2l2ZVR5cGVDaGVja2VyIHdoaWNoIG1ha2VzIHN1cmUgdHlwZXMgZG9uJ3Qg
cmVmZXIgdG8gdGhlbXNlbHZlcworICAgICAgICAtIFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVu
Z3RoIHdoaWNoIGNyZWF0ZXMgb3BlcmF0b3IubGVuZ3RoKCkgZnVuY3Rpb25zIGZvciBhcnJheXMK
KyAgICAgICAgLSBTeW50aGVzaXplQ29uc3RydWN0b3JzIHdoaWNoIGNyZWF0ZXMgY29weSBjb25z
dHJ1Y3RvcnMgYW5kIGRlZmF1bHQgY29uc3RydWN0b3JzIGZvciBhbGwKKyAgICAgICAgICB0eXBl
cworICAgICAgICAtIFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyB3aGljaCBwcm92aWRl
cyBjYXN0IG9wZXJhdG9ycyBiZXR3ZWVuIGVudW0gdHlwZXMgYW5kIHRoZWlyCisgICAgICAgICAg
YmFzZSB0eXBlcworICAgICAgICAtIFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMgd2hpY2gg
cHJvdmlkZXMgZ2V0dGVycywgc2V0dGVycywgYW5kIGFuZGVycyBmb3IgZWFjaCBtZW1iZXIKKyAg
ICAgICAgICBvZiBhIHN0cnVjdAorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIGl0IGlz
bid0IGhvb2tlZCB1cCB5ZXQuIE5vdCBlbm91Z2ggb2YgdGhlIGNvbXBpbGVyIGV4aXN0cyB0byBo
YXZlIGFueSBtZWFuaW5nZnVsIHNvcnQKKyAgICAgICAgb2YgdGVzdC4gV2hlbiBlbm91Z2ggb2Yg
dGhlIGNvbXBpbGVyIGlzIHByZXNlbnQsIEknbGwgcG9ydCB0aGUgcmVmZXJlbmNlIGltcGxlbWVu
dGF0aW9uJ3MgdGVzdCBzdWl0ZS4KKworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNU
OjpCdWlsdEluU2VtYW50aWM6OmlzQWNjZXB0YWJsZVR5cGUgY29uc3QpOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6UmVzb3VyY2VTZW1hbnRpYzo6aXNBY2NlcHRhYmxlVHlw
ZSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxp
Y2F0ZUZ1bmN0aW9ucy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmNoZWNr
RHVwbGljYXRlRnVuY3Rpb25zKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMuY3BwLgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmluc2ljcy5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OkludHJpbnNpY3M6OkludHJpbnNpY3MpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkludHJpbnNpY3M6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6SW50cmluc2ljczo6YWRkUHJpbWl0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpJ
bnRyaW5zaWNzOjphZGRWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkludHJpbnNp
Y3M6OmFkZE1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6SW50cmluc2ljczo6YWRk
RnVsbFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkludHJpbnNpY3M6OmFkZERl
cHRoVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6SW50cmluc2ljczo6YWRkVGV4
dHVyZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNzLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkludHJpbnNpY3M6OnZvaWRUeXBlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpJbnRyaW5zaWNzOjpib29sVHlwZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6SW50cmluc2ljczo6aW50VHlwZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6SW50cmluc2ljczo6dWludFR5cGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkludHJpbnNpY3M6OnNhbXBsZXJUeXBlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpJbnRyaW5zaWNzOjpmbG9hdFR5cGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkludHJpbnNpY3M6OmZsb2F0M1R5cGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkludHJpbnNpY3M6OmZsb2F0NFR5cGUgY29uc3QpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvZ3JhbS5oOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OlByb2dyYW06OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6UHJvZ3JhbTo6aW50cmluc2ljcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OmNoZWNrUmVjdXJzaXZlVHlwZXMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHAuCisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRv
ckxlbmd0aC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkZpbmRBcnJheVR5
cGVzOjp0YWtlQXJyYXlUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6c3ludGhlc2l6
ZUFycmF5T3BlcmF0b3JMZW5ndGgpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHAu
CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0
b3JzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6RmluZEFsbFR5cGVzOjp0
YWtlVW5uYW1lZFR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpGaW5kQWxsVHlwZXM6
OnRha2VOYW1lZFR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpzeW50aGVzaXplQ29u
c3RydWN0b3JzKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVDb25zdHJ1Y3RvcnMuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHAuCisgICAgICAgICogTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpzeW50aGVzaXplRW51bWVyYXRpb25GdW5j
dGlvbnMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVu
dW1lcmF0aW9uRnVuY3Rpb25zLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMuY3BwLgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nl
c3NvcnMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0
cnVjdHVyZUFjY2Vzc29ycy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcC4KKyAgICAgICAgKiBTb3Vy
Y2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisK
IDIwMTktMDEtMTEgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAg
ICAgICAgSW50cm9kdWNlIElETCBmaWxlcyBmb3IgcnVudGltZS1lbmFibGVkIFVuZG9NYW5hZ2Vy
IGFuZCBVbmRvSXRlbSBKYXZhU2NyaXB0IEFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5j
cHAKaW5kZXggZTQyZWU0Nzk5MjE1OTRlZWMyZTEyZTFmMzEyNjY3MjMxODU1OTczNS4uNDE0YmQ0
NWE5YTJhZjc1NWE3ZjQ0MGIxZmIwMzQzNDAzOTA3MzEzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdElu
U2VtYW50aWMuY3BwCkBAIC0yOSw2ICsyOSw4IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2lu
Y2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5
cGVzLmgiCisjaW5jbHVkZSAiV0hMU0xJbnRyaW5zaWNzLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBl
UmVmZXJlbmNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM3LDEwICszOSwzOCBAQCBu
YW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotYm9vbCBCdWlsdEluU2VtYW50
aWM6OmlzQWNjZXB0YWJsZVR5cGUoY29uc3QgVW5uYW1lZFR5cGUmLCBjb25zdCBJbnRyaW5zaWNz
JikgY29uc3QKK2Jvb2wgQnVpbHRJblNlbWFudGljOjppc0FjY2VwdGFibGVUeXBlKGNvbnN0IFVu
bmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykgY29u
c3QKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBzd2l0Y2ggKG1fdmFyaWFibGUpIHsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVkluc3RhbmNlSUQ6
CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRUeXBl
KCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWVmVydGV4SUQ6CisgICAgICAgIHJldHVybiBtYXRj
aGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFi
bGU6OlBTaXplOgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2lj
cy5mbG9hdFR5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZQb3NpdGlvbjoKKyAgICAgICAg
cmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MuZmxvYXQ0VHlwZSgpKTsKKyAg
ICBjYXNlIFZhcmlhYmxlOjpTVklzRnJvbnRGYWNlOgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1
bm5hbWVkVHlwZSwgaW50cmluc2ljcy5ib29sVHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpT
VlNhbXBsZUluZGV4OgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmlu
c2ljcy51aW50VHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVklubmVyQ292ZXJhZ2U6Cisg
ICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkp
OworICAgIGNhc2UgVmFyaWFibGU6OlNWVGFyZ2V0OgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1
bm5hbWVkVHlwZSwgaW50cmluc2ljcy5mbG9hdDRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6
OlNWRGVwdGg6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNz
LmZsb2F0VHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVkNvdmVyYWdlOgorICAgICAgICBy
ZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy51aW50VHlwZSgpKTsKKyAgICBj
YXNlIFZhcmlhYmxlOjpTVkRpc3BhdGNoVGhyZWFkSUQ6CisgICAgICAgIHJldHVybiBtYXRjaGVz
KHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0M1R5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJs
ZTo6U1ZHcm91cElEOgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmlu
c2ljcy5mbG9hdDNUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWR3JvdXBJbmRleDoKKyAg
ICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MudWludFR5cGUoKSk7
CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZHcm91cFRocmVhZElEOgorICAgICAgICByZXR1cm4gbWF0
Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy5mbG9hdDNUeXBlKCkpOworICAgIH0KIH0KIAog
Ym9vbCBCdWlsdEluU2VtYW50aWM6OmlzQWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24o
U2hhZGVySXRlbURpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEZ1bmN0aW9uRGVmaW5pdGlvbiYg
ZnVuY3Rpb25EZWZpbml0aW9uKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmNw
cAppbmRleCA2NWZiYjMzZDM5ZDEzYmU0MjgxOTRhMWRhNDFmNjI0YmYyM2JkYTk5Li44NDQwOTYw
YzZlM2I0ODcyZDllOTM0NDNmYjg4YzczNThlZDM2Y2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJj
ZVNlbWFudGljLmNwcApAQCAtMjksNiArMjksOCBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNp
bmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgorI2luY2x1ZGUgIldITFNMSW5mZXJUeXBlcy5oIgor
I2luY2x1ZGUgIldITFNMSW50cmluc2ljcy5oIgogI2luY2x1ZGUgIldITFNMUmVmZXJlbmNlVHlw
ZS5oIgogI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgogCkBAIC0zOCwxMCArNDAsNDIg
QEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWJvb2wgUmVzb3VyY2VT
ZW1hbnRpYzo6aXNBY2NlcHRhYmxlVHlwZShjb25zdCBVbm5hbWVkVHlwZSYsIGNvbnN0IEludHJp
bnNpY3MmKSBjb25zdAorYm9vbCBSZXNvdXJjZVNlbWFudGljOjppc0FjY2VwdGFibGVUeXBlKGNv
bnN0IFVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2lj
cykgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICBzd2l0Y2ggKG1fbW9kZSkgeworICAgIGNhc2UgTW9kZTo6VW5vcmRlcmVkQWNjZXNz
VmlldzoKKyAgICAgICAgaWYgKGlzPFJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkgeworICAg
ICAgICAgICAgYXV0byYgcmVmZXJlbmNlVHlwZSA9IGRvd25jYXN0PFJlZmVyZW5jZVR5cGU+KHVu
bmFtZWRUeXBlKTsKKyAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VUeXBlLmFkZHJlc3NTcGFj
ZSgpID09IFJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQgfHwgcmVmZXJlbmNl
VHlwZS5hZGRyZXNzU3BhY2UoKSA9PSBSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkRldmlj
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXM8QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGlzPFR5cGVSZWZlcmVuY2U+KHVu
bmFtZWRUeXBlKSkgeworICAgICAgICAgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IGRvd25jYXN0
PFR5cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKTsKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlUmVm
ZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgICAgIGlmIChpczxOYXRpdmVUeXBlRGVj
bGFyYXRpb24+KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZS5y
ZXNvbHZlZFR5cGUoKSkuaXNUZXh0dXJlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGNhc2UgTW9kZTo6VGV4dHVyZToKKyAgICAgICAgaWYgKGlzPFJlZmVyZW5jZVR5
cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZWZlcmVuY2VU
eXBlPih1bm5hbWVkVHlwZSkuYWRkcmVzc1NwYWNlKCkgPT0gUmVmZXJlbmNlVHlwZTo6QWRkcmVz
c1NwYWNlOjpDb25zdGFudDsKKyAgICAgICAgaWYgKGlzPEFycmF5VHlwZT4odW5uYW1lZFR5cGUp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChpczxUeXBlUmVmZXJlbmNl
Pih1bm5hbWVkVHlwZSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBkb3du
Y2FzdDxUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSk7CisgICAgICAgICAgICBBU1NFUlQodHlw
ZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgICAgICBpZiAoaXM8TmF0aXZlVHlw
ZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVu
Y2UucmVzb2x2ZWRUeXBlKCkpLmlzVGV4dHVyZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBjYXNlIE1vZGU6OkJ1ZmZlcjoKKyAgICAgICAgaWYgKGlzPFJlZmVyZW5j
ZVR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZWZlcmVu
Y2VUeXBlPih1bm5hbWVkVHlwZSkuYWRkcmVzc1NwYWNlKCkgPT0gUmVmZXJlbmNlVHlwZTo6QWRk
cmVzc1NwYWNlOjpDb25zdGFudDsKKyAgICAgICAgcmV0dXJuIGlzPEFycmF5VHlwZT4odW5uYW1l
ZFR5cGUpOworICAgIGNhc2UgTW9kZTo6U2FtcGxlcjoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXMo
dW5uYW1lZFR5cGUsIGludHJpbnNpY3Muc2FtcGxlclR5cGUoKSk7CisgICAgfQogfQogCiBib29s
IFJlc291cmNlU2VtYW50aWM6OmlzQWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hh
ZGVySXRlbURpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEZ1bmN0aW9uRGVmaW5pdGlvbiYpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVm
YmYwZTY3NjhhYjc0MGEwOGQyNGNiMWEyYmJlZWNhMGNmOGFkMTAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRl
RnVuY3Rpb25zLmNwcApAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmgiCisKKyNp
ZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCIK
KyNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgorI2luY2x1ZGUgIldITFNMSW5mZXJUeXBlcy5o
IgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2Jvb2wgY2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMoY29u
c3QgUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxjb25zdCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+PiBmdW5jdGlvbnM7CisgICAgZm9yIChh
dXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkK
KyAgICAgICAgZnVuY3Rpb25zLmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OkZ1bmN0aW9u
RGVmaW5pdGlvbiY+KGZ1bmN0aW9uRGVmaW5pdGlvbikpOworICAgIGZvciAoYXV0byYgbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMo
KSkKKyAgICAgICAgZnVuY3Rpb25zLmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCBBU1Q6Ok5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24mPihuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisKKyAg
ICBzdGQ6OnNvcnQoZnVuY3Rpb25zLmJlZ2luKCksIGZ1bmN0aW9ucy5lbmQoKSwgW10oY29uc3Qg
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBhLCBjb25zdCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24mIGIpIC0+IGJvb2wgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RkOjpt
aW4oYS5uYW1lKCkubGVuZ3RoKCksIGIubmFtZSgpLmxlbmd0aCgpKTsgKytpKSB7CisgICAgICAg
ICAgICBpZiAoYS5uYW1lKClbaV0gPCBiLm5hbWUoKVtpXSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChhLm5hbWUoKVtpXSA+IGIubmFtZSgpW2ldKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYS5u
YW1lKCkubGVuZ3RoKCkgPCBiLm5hbWUoKS5sZW5ndGgoKTsKKyAgICB9KTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGZ1bmN0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBmb3IgKHNp
emVfdCBqID0gaSArIDE7IGogPCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkubmFtZSgpICE9IGZ1bmN0aW9uc1tqXS5nZXQoKS5uYW1l
KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uPihmdW5jdGlvbnNbaV0uZ2V0KCkpICYmIGlzPEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4oZnVuY3Rpb25zW2pdLmdldCgpKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1l
dGVycygpLnNpemUoKSAhPSBmdW5jdGlvbnNbal0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbnNbaV0u
Z2V0KCkuaXNDYXN0KCkpIHsKKyAgICAgICAgICAgICAgICBib29sIHNhbWUgPSB0cnVlOworICAg
ICAgICAgICAgICAgIGlmICghbWF0Y2hlcyhmdW5jdGlvbnNbaV0uZ2V0KCkudHlwZSgpLCBmdW5j
dGlvbnNbal0uZ2V0KCkudHlwZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgc2FtZSA9IGZhbHNl
OworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBrID0gMDsgayA8IGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2sp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlcygqZnVuY3Rpb25zW2ldLmdl
dCgpLnBhcmFtZXRlcnMoKVtrXS50eXBlKCksICpmdW5jdGlvbnNbal0uZ2V0KCkucGFyYW1ldGVy
cygpW2tdLnR5cGUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1lID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKHNhbWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYm9vbCBzYW1lID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8IGZ1bmN0aW9uc1tpXS5nZXQo
KS5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2spIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFt
YXRjaGVzKCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpW2tdLnR5cGUoKSwgKmZ1bmN0
aW9uc1tqXS5nZXQoKS5wYXJhbWV0ZXJzKClba10udHlwZSgpKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgc2FtZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKHNhbWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5u
YW1lKCkgPT0gIm9wZXJhdG9yJltdIiAmJiBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygp
LnNpemUoKSA9PSAyCisgICAgICAgICAgICAmJiBpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4o
c3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCku
cGFyYW1ldGVycygpWzBdLnR5cGUoKSkpKSB7CisgICAgICAgICAgICBhdXRvJiB0eXBlID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFy
YW1ldGVycygpWzFdLnR5cGUoKSk7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpUeXBlUmVmZXJl
bmNlPih0eXBlKSkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvKiByZXNvbHZlZFR5cGUgPSBk
b3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpLnJlc29sdmVkVHlwZSgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnJlc29s
dmVkVHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqcmVzb2x2ZWRU
eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24u
bmFtZSgpID09ICJ1aW50IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLm5hbWUoKSA9PSAib3Bl
cmF0b3IubGVuZ3RoIiAmJiBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKSA9
PSAxCisgICAgICAgICAgICAmJiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0YXRpY19j
YXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRl
cnMoKVswXS50eXBlKCkpKQorICAgICAgICAgICAgfHwgaXM8QVNUOjpBcnJheVR5cGU+KHN0YXRp
Y19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFt
ZXRlcnMoKVswXS50eXBlKCkpKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGVsc2UgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkgPT0gIm9wZXJhdG9yPT0iCisgICAg
ICAgICAgICAmJiBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKSA9PSAyCisg
ICAgICAgICAgICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFT
VDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBl
KCkpKQorICAgICAgICAgICAgJiYgaXM8QVNUOjpSZWZlcmVuY2VUeXBlPihzdGF0aWNfY2FzdDxj
b25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClb
MV0udHlwZSgpKSkKKyAgICAgICAgICAgICYmIG1hdGNoZXMoc3RhdGljX2Nhc3Q8Y29uc3QgQVNU
OjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUo
KSksIHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdl
dCgpLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNh
dGVGdW5jdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
Q2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMWNhZjU1YzU2ZGI4YzVmMWJi
YjQ3MTkwMDM5NGM0M2UzNDAxOTZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oCkBAIC0w
LDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJH
UFUpCisKKyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgV0hMU0wgeworCitib29sIGNoZWNrRHVwbGljYXRlRnVuY3Rpb25zKGNvbnN0
IFByb2dyYW0mKTsKKworfQorCit9CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNzLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42YzMzNzgyZTk0YjEwOGM1MmVhMGQwYTE5MDVkZDNjMTNmNzJiMThhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNz
LmNwcApAQCAtMCwwICsxLDQ0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXSExTTEludHJpbnNpY3MuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNp
bmNsdWRlICJXSExTTENvbnN0YW50RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMVHlwZUFy
Z3VtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSA8YWxn
b3JpdGhtPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK0lu
dHJpbnNpY3M6OkludHJpbnNpY3MoKQorICAgIDogbV90ZXh0dXJlVHlwZU5hbWVzIHsgU3RyaW5n
KCJUZXh0dXJlMUQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgU3Ry
aW5nKCJSV1RleHR1cmUxRCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAg
ICBTdHJpbmcoIlRleHR1cmUxREFycmF5IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCks
CisgICAgICAgIFN0cmluZygiUldUZXh0dXJlMURBcnJheSIsIFN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpLAorICAgICAgICBTdHJpbmcoIlRleHR1cmUyRCIsIFN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpLAorICAgICAgICBTdHJpbmcoIlJXVGV4dHVyZTJEIiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgIFN0cmluZygiVGV4dHVyZTJEQXJyYXkiLCBTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgU3RyaW5nKCJSV1RleHR1cmUyREFy
cmF5IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgIFN0cmluZygiVGV4
dHVyZTNEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgIFN0cmluZygi
UldUZXh0dXJlM0QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgU3Ry
aW5nKCJUZXh0dXJlQ3ViZSIsICBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSB9CisgICAg
LCBtX3RleHR1cmVJbm5lclR5cGVOYW1lcyB7IFN0cmluZygidWNoYXIiLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgU3RyaW5nKCJ1c2hvcnQiLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgU3RyaW5nKCJ1aW50IiwgU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgIFN0cmluZygiY2hhciIsIFN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpLAorICAgICAgICBTdHJpbmcoInNob3J0IiwgU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCksCisgICAgICAgIFN0cmluZygiaW50IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCksCisgICAgICAgIFN0cmluZygiaGFsZiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpLAorICAgICAgICBTdHJpbmcoImZsb2F0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCkgfQorICAgICwgbV9kZXB0aFRleHR1cmVJbm5lclR5cGVzIHsgU3RyaW5nKCJoYWxmIiwg
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgIFN0cmluZygiZmxvYXQiLCBT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSB9Cit7CisgICAgQVNTRVJUKG1fdGV4dHVyZVR5
cGVOYW1lcy5zaXplKCkgPT0gMTEpOyAvLyBmdWxsVGV4dHVyZXMgaGFyZGNvZGVzIHRoZSBsZW5n
dGggb2YgdGhpcyBhcnJheS4KKyAgICBBU1NFUlQobV90ZXh0dXJlSW5uZXJUeXBlTmFtZXMuc2l6
ZSgpID09IDgpOyAvLyBmdWxsVGV4dHVyZXMgaGFyZGNvZGVzIHRoZSBsZW5ndGggb2YgdGhpcyBh
cnJheS4KKyAgICBBU1NFUlQobV9kZXB0aFRleHR1cmVJbm5lclR5cGVzLnNpemUoKSA9PSAyKTsg
Ly8gdGV4dHVyZURlcHRoMkQgJiBmcmllbmRzIGhhcmRjb2RlcyB0aGUgbGVuZ3RoIG9mIHRoaXMg
YXJyYXkuCit9CisKK3ZvaWQgSW50cmluc2ljczo6YWRkKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbiYpCit7CisgICAgLy8gRklYTUU6IFBvcHVsYXRlIHRoaXMuCit9CisKK2Jvb2wgSW50
cmluc2ljczo6YWRkUHJpbWl0aXZlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVU
eXBlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJn
dW1lbnRzKCkuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobmF0aXZl
VHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAidm9pZCIpCisgICAgICAgIG1fdm9pZFR5cGUgPSAm
bmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5uYW1lKCkgPT0gImJvb2wiKQorICAgICAgICBtX2Jvb2xUeXBlID0gJm5hdGl2ZVR5cGVEZWNs
YXJhdGlvbjsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ1
Y2hhciIpIHsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzSW50KCk7CisgICAg
ICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc051bWJlcigpOworICAgICAgICBuYXRpdmVU
eXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50SW50ZWdlcihbXShpbnQgeCkgeworICAgICAg
ICAgICAgcmV0dXJuIHggPj0gMCAmJiB4IDw9IDB4RkY7CisgICAgICAgIH0pOworICAgICAgICBu
YXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKFtdKHVu
c2lnbmVkIHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4IDw9IDB4RkY7CisgICAgICAgIH0pOwor
ICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50RmxvYXQoW10oZmxv
YXQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0aWNfY2Fz
dDx1aW50OF90Pih4KSkgPT0geDsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5zZXRTdWNjZXNzb3IoW10oaW50NjRfdCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90Pih4ICsgMSk7CisgICAgICAgIH0pOworICAg
ICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0VmFsdWVGcm9tSW50ZWdlcihbXShp
bnQgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhf
dD4oeCk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9y
bWF0VmFsdWVGcm9tVW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgpIC0+IGludDY0X3Qgewor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHgpOworICAgICAgICB9KTsK
KyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEl0ZXJhdGVBbGxWYWx1ZXMoW10oY29u
c3Qgc3RkOjpmdW5jdGlvbjxib29sKGludDY0X3QpPiYgY2FsbGJhY2spIHsKKyAgICAgICAgICAg
IGZvciAoaW50NjRfdCBpID0gMDsgaSA8IDB4MTAwOyArK2kpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoY2FsbGJhY2soaSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9KTsKKyAgICAgICAgbV91Y2hhclR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0
aW9uOworICAgIH0gZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAidXNo
b3J0IikgeworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNJbnQoKTsKKyAgICAg
ICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzTnVtYmVyKCk7CisgICAgICAgIG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRJbnRlZ2VyKFtdKGludCB4KSB7CisgICAgICAg
ICAgICByZXR1cm4geCA+PSAwICYmIHggPD0gMHhGRkZGOworICAgICAgICB9KTsKKyAgICAgICAg
bmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcihbXSh1
bnNpZ25lZCB4KSB7CisgICAgICAgICAgICByZXR1cm4geCA8PSAweEZGRkY7CisgICAgICAgIH0p
OworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50RmxvYXQoW10o
ZmxvYXQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0aWNf
Y2FzdDx1aW50MTZfdD4oeCkpID09IHg7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBl
RGVjbGFyYXRpb24uc2V0U3VjY2Vzc29yKFtdKGludDY0X3QgeCkgLT4gaW50NjRfdCB7CisgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHggKyAxKTsKKyAgICAgICAgfSk7
CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21JbnRlZ2Vy
KFtdKGludCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1
aW50MTZfdD4oeCk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24u
c2V0Rm9ybWF0VmFsdWVGcm9tVW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgpIC0+IGludDY0
X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQxNl90Pih4KTsKKyAgICAg
ICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJdGVyYXRlQWxsVmFsdWVz
KFtdKGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChpbnQ2NF90KT4mIGNhbGxiYWNrKSB7CisgICAg
ICAgICAgICBmb3IgKGludDY0X3QgaSA9IDA7IGkgPCAweDEwMDAwOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoY2FsbGJhY2soaSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgbV91c2hvcnRUeXBlID0gJm5hdGl2ZVR5
cGVEZWNsYXJhdGlvbjsKKyAgICB9IGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1l
KCkgPT0gInVpbnQiKSB7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc0ludCgp
OworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNOdW1iZXIoKTsKKyAgICAgICAg
bmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudEludGVnZXIoW10oaW50IHgpIHsK
KyAgICAgICAgICAgIHJldHVybiB4ID49IDA7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVU
eXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVk
KSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRGbG9hdChbXShmbG9hdCB4KSB7CisgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PHVpbnQzMl90Pih4
KSkgPT0geDsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRT
dWNjZXNzb3IoW10oaW50NjRfdCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1aW50MzJfdD4oeCArIDEpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZl
VHlwZURlY2xhcmF0aW9uLnNldEZvcm1hdFZhbHVlRnJvbUludGVnZXIoW10oaW50IHgpIC0+IGlu
dDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pih4KTsKKyAg
ICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZy
b21VbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAg
bmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEl0ZXJhdGVBbGxWYWx1ZXMoW10oY29uc3Qgc3RkOjpm
dW5jdGlvbjxib29sKGludDY0X3QpPiYgY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGZvciAoaW50
NjRfdCBpID0gMDsgaSA8IDB4MTAwMDAwMDAwOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAo
Y2FsbGJhY2soaSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9KTsKKyAgICAgICAgbV91aW50VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247
CisgICAgfSBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJjaGFyIikg
eworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNJbnQoKTsKKyAgICAgICAgbmF0
aXZlVHlwZURlY2xhcmF0aW9uLnNldElzTnVtYmVyKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5zZXRJc1NpZ25lZCgpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0
Q2FuUmVwcmVzZW50SW50ZWdlcihbXShpbnQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHggPj0g
LTEyOCAmJiB4IDw9IDEyNzsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5zZXRDYW5SZXByZXNlbnRVbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQgeCkgeworICAg
ICAgICAgICAgcmV0dXJuIHggPD0gMTI3OworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlw
ZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudEZsb2F0KFtdKGZsb2F0IHgpIHsKKyAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8aW50OF90Pih4KSkgPT0g
eDsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRTdWNjZXNz
b3IoW10oaW50NjRfdCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQ4X3Q+KHggKyAxKTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21JbnRlZ2VyKFtdKGludCB4KSAtPiBpbnQ2NF90IHsK
KyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHgpOworICAgICAgICB9KTsK
KyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEZvcm1hdFZhbHVlRnJvbVVuc2lnbmVk
SW50ZWdlcihbXSh1bnNpZ25lZCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ4X3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnNldEl0ZXJhdGVBbGxWYWx1ZXMoW10oY29uc3Qgc3RkOjpmdW5jdGlvbjxib29s
KGludDY0X3QpPiYgY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGZvciAoaW50NjRfdCBpID0gLTEy
ODsgaSA8IDEyODsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGkpKQorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAg
ICAgIG1fY2hhclR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIH0gZWxzZSBpZiAo
bmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAic2hvcnQiKSB7CisgICAgICAgIG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc0ludCgpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRp
b24uc2V0SXNOdW1iZXIoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzU2ln
bmVkKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRJbnRl
Z2VyKFtdKGludCB4KSB7CisgICAgICAgICAgICByZXR1cm4geCA+PSAtMzI3NjggJiYgeCA8PSAz
Mjc2NzsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5S
ZXByZXNlbnRVbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQgeCkgeworICAgICAgICAgICAgcmV0
dXJuIHggPD0gMzI3Njc7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRp
b24uc2V0Q2FuUmVwcmVzZW50RmxvYXQoW10oZmxvYXQgeCkgeworICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGZsb2F0PihzdGF0aWNfY2FzdDxpbnQxNl90Pih4KSkgPT0geDsKKyAgICAg
ICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRTdWNjZXNzb3IoW10oaW50
NjRfdCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQx
Nl90Pih4ICsgMSk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24u
c2V0Rm9ybWF0VmFsdWVGcm9tSW50ZWdlcihbXShpbnQgeCkgLT4gaW50NjRfdCB7CisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MTZfdD4oeCk7CisgICAgICAgIH0pOworICAgICAg
ICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0VmFsdWVGcm9tVW5zaWduZWRJbnRlZ2Vy
KFtdKHVuc2lnbmVkIHgpIC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGludDE2X3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0
aW9uLnNldEl0ZXJhdGVBbGxWYWx1ZXMoW10oY29uc3Qgc3RkOjpmdW5jdGlvbjxib29sKGludDY0
X3QpPiYgY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGZvciAoaW50NjRfdCBpID0gLTMyNzY4OyBp
IDwgMzI3Njg7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhpKSkKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAg
ICBtX3Nob3J0VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgfSBlbHNlIGlmIChu
YXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJpbnQiKSB7CisgICAgICAgIG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5zZXRJc0ludCgpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24u
c2V0SXNOdW1iZXIoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzU2lnbmVk
KCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRJbnRlZ2Vy
KFtdKGludCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAgICAg
ICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKFtd
KHVuc2lnbmVkIHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4IDw9IDIxNDc0ODM2NDc7CisgICAg
ICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50Rmxv
YXQoW10oZmxvYXQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pihz
dGF0aWNfY2FzdDxpbnQzMl90Pih4KSkgPT0geDsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5zZXRTdWNjZXNzb3IoW10oaW50NjRfdCB4KSAtPiBpbnQ2NF90IHsK
KyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Pih4ICsgMSk7CisgICAgICAg
IH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0VmFsdWVGcm9tSW50
ZWdlcihbXShpbnQgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50MzJfdD4oeCk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRp
b24uc2V0Rm9ybWF0VmFsdWVGcm9tVW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgpIC0+IGlu
dDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KHgpOworICAg
ICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEl0ZXJhdGVBbGxWYWx1
ZXMoW10oY29uc3Qgc3RkOjpmdW5jdGlvbjxib29sKGludDY0X3QpPiYgY2FsbGJhY2spIHsKKyAg
ICAgICAgICAgIGZvciAoaW50NjRfdCBpID0gLTIxNDc0ODM2NDc7IGkgPCAyMTQ3NDgzNjQ4OyAr
K2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2soaSkpCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgbV9pbnRUeXBl
ID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICB9IGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5uYW1lKCkgPT0gImhhbGYiKSB7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5zZXRJc051bWJlcigpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNGbG9h
dGluZygpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50SW50
ZWdlcihbXShpbnQpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKKyAg
ICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdl
cihbXSh1bnNpZ25lZCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOwor
ICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50RmxvYXQoW10oZmxv
YXQpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgbV9o
YWxmVHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgfSBlbHNlIGlmIChuYXRpdmVU
eXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJmbG9hdCIpIHsKKyAgICAgICAgbmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnNldElzTnVtYmVyKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5z
ZXRJc0Zsb2F0aW5nKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXBy
ZXNlbnRJbnRlZ2VyKFtdKGludCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50VW5zaWdu
ZWRJbnRlZ2VyKFtdKHVuc2lnbmVkKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRGbG9h
dChbXShmbG9hdCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAg
ICAgICBtX2Zsb2F0VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgfSBlbHNlIGlm
IChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJhdG9taWNfaW50IikKKyAgICAgICAg
bV9hdG9taWNJbnRUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBlbHNlIGlmIChu
YXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJhdG9taWNfdWludCIpCisgICAgICAgIG1f
YXRvbWljVWludFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInNhbXBsZXIiKQorICAgICAgICBtX3NhbXBs
ZXJUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBlbHNlCisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEludHJpbnNpY3M6
OmFkZFZlY3RvcihBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0
aW9uKQoreworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpICE9ICJ2ZWN0b3Ii
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQobmF0aXZlVHlwZURlY2xhcmF0
aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMik7CisgICAgQVNTRVJUKFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8VW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5
cGVBcmd1bWVudHMoKVsxXSkpOworICAgIGF1dG8mIGlubmVyVHlwZSA9IHN0YXRpY19jYXN0PEFT
VDo6VHlwZVJlZmVyZW5jZSY+KFdURjo6Z2V0PFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+
PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgYXV0byYg
bGVuZ3RoRXhwcmVzc2lvbiA9IFdURjo6Z2V0PEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRp
dmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzFdKTsKKyAgICBBU1NFUlQoIWlubmVy
VHlwZS50eXBlQXJndW1lbnRzKCkuc2l6ZSgpKTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbioqIGFycmF5OworICAgIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJib29sIikKKyAgICAg
ICAgYXJyYXkgPSBtX3ZlY3RvckJvb2w7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9
PSAidWNoYXIiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9yVWNoYXI7CisgICAgZWxzZSBpZiAo
aW5uZXJUeXBlLm5hbWUoKSA9PSAidXNob3J0IikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3RvclVz
aG9ydDsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJ1aW50IikKKyAgICAgICAg
YXJyYXkgPSBtX3ZlY3RvclVpbnQ7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAi
Y2hhciIpCisgICAgICAgIGFycmF5ID0gbV92ZWN0b3JDaGFyOworICAgIGVsc2UgaWYgKGlubmVy
VHlwZS5uYW1lKCkgPT0gInNob3J0IikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3RvclNob3J0Owor
ICAgIGVsc2UgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gImludCIpCisgICAgICAgIGFycmF5ID0g
bV92ZWN0b3JJbnQ7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiaGFsZiIpCisg
ICAgICAgIGFycmF5ID0gbV92ZWN0b3JIYWxmOworICAgIGVsc2UgaWYgKGlubmVyVHlwZS5uYW1l
KCkgPT0gImZsb2F0IikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3RvckZsb2F0OworICAgIGVsc2UK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgaW50IGxlbmd0aCA9IGxlbmd0aEV4
cHJlc3Npb24uaW50ZWdlckxpdGVyYWwoKS52YWx1ZSgpOworICAgIEFTU0VSVChsZW5ndGggPj0g
MiAmJiBsZW5ndGggPD0gNCk7CisgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzVmVjdG9y
KCk7CisgICAgYXJyYXlbbGVuZ3RoIC0gMl0gPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIEludHJpbnNpY3M6OmFkZE1hdHJpeChBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQoreworICAgIGlmIChuYXRp
dmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpICE9ICJtYXRyaXgiKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBBU1NFUlQobmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5z
aXplKCkgPT0gMyk7CisgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VW5pcXVlUmVm
PEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRz
KClbMF0pKTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OkNvbnN0YW50
RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsxXSkpOwor
ICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6Q29uc3RhbnRFeHByZXNzaW9u
PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzJdKSk7CisgICAgYXV0byYg
aW5uZXJUeXBlID0gc3RhdGljX2Nhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlJj4oV1RGOjpnZXQ8VW5p
cXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJn
dW1lbnRzKClbMF0pKTsKKyAgICBhdXRvJiByb3dFeHByZXNzaW9uID0gV1RGOjpnZXQ8QVNUOjpD
b25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClb
MV0pOworICAgIGF1dG8mIGNvbHVtbkV4cHJlc3Npb24gPSBXVEY6OmdldDxBU1Q6OkNvbnN0YW50
RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsyXSk7Cisg
ICAgQVNTRVJUKCFpbm5lclR5cGUudHlwZUFyZ3VtZW50cygpLnNpemUoKSk7CisgICAgQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24qICgqYXJyYXkpWzNdOworICAgIGlmIChpbm5lclR5cGUubmFt
ZSgpID09ICJoYWxmIikKKyAgICAgICAgYXJyYXkgPSBtX21hdHJpeEhhbGY7CisgICAgaWYgKGlu
bmVyVHlwZS5uYW1lKCkgPT0gImZsb2F0IikKKyAgICAgICAgYXJyYXkgPSBtX21hdHJpeEZsb2F0
OworICAgIGludCByb3cgPSByb3dFeHByZXNzaW9uLmludGVnZXJMaXRlcmFsKCkudmFsdWUoKTsK
KyAgICBBU1NFUlQocm93ID49IDIgJiYgcm93IDw9IDQpOworICAgIGludCBjb2x1bW4gPSBjb2x1
bW5FeHByZXNzaW9uLmludGVnZXJMaXRlcmFsKCkudmFsdWUoKTsKKyAgICBBU1NFUlQoY29sdW1u
ID49IDIgJiYgY29sdW1uIDw9IDQpOworICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc01h
dHJpeCgpOworICAgIGFycmF5W3JvdyAtIDJdW2NvbHVtbiAtIDJdID0gJm5hdGl2ZVR5cGVEZWNs
YXJhdGlvbjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnRyaW5zaWNzOjphZGRGdWxs
VGV4dHVyZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9u
LCBBU1Q6OlR5cGVSZWZlcmVuY2UmIGlubmVyVHlwZSkKK3sKKyAgICB1bnNpZ25lZCB0ZXh0dXJl
VHlwZUluZGV4ID0gbV90ZXh0dXJlVHlwZU5hbWVzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV90ZXh0dXJlVHlwZU5hbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlm
IChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09IG1fdGV4dHVyZVR5cGVOYW1lc1tpXSkK
KyAgICAgICAgICAgIHRleHR1cmVUeXBlSW5kZXggPSBpOworICAgIH0KKyAgICBpZiAodGV4dHVy
ZVR5cGVJbmRleCA9PSBtX3RleHR1cmVUeXBlTmFtZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICB1bnNpZ25lZCBpbm5lclR5cGVJbmRleCA9IG1fdGV4dHVyZUlubmVyVHlw
ZU5hbWVzLnNpemUoKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGg7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGlmIChpbm5lclR5cGUubmFtZSgpLnN0YXJ0c1dpdGgobV90ZXh0dXJlSW5uZXJUeXBl
TmFtZXNbaV0pKSB7CisgICAgICAgICAgICB0ZXh0dXJlVHlwZUluZGV4ID0gaTsKKyAgICAgICAg
ICAgIGlmIChpbm5lclR5cGUubmFtZSgpID09IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzW2ldKQor
ICAgICAgICAgICAgICAgIHZlY3Rvckxlbmd0aCA9IDE7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoaW5uZXJUeXBlLm5hbWUoKS5sZW5ndGgoKSA9PSBtX3RleHR1
cmVJbm5lclR5cGVOYW1lc1tpXS5sZW5ndGgoKSArIDEpOworICAgICAgICAgICAgICAgIEFTU0VS
VChpbm5lclR5cGUubmFtZSgpW2lubmVyVHlwZS5uYW1lKCkubGVuZ3RoKCkgLSAxXSA9PSAnMicK
KyAgICAgICAgICAgICAgICAgICAgfHwgaW5uZXJUeXBlLm5hbWUoKVtpbm5lclR5cGUubmFtZSgp
Lmxlbmd0aCgpIC0gMV0gPT0gJzMnCisgICAgICAgICAgICAgICAgICAgIHx8IGlubmVyVHlwZS5u
YW1lKClbaW5uZXJUeXBlLm5hbWUoKS5sZW5ndGgoKSAtIDFdID09ICc0Jyk7CisgICAgICAgICAg
ICAgICAgdmVjdG9yTGVuZ3RoID0gaW5uZXJUeXBlLm5hbWUoKVtpbm5lclR5cGUubmFtZSgpLmxl
bmd0aCgpIC0gMV0gLSAnMCc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
QVNTRVJUKGlubmVyVHlwZUluZGV4ICE9IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzLnNpemUoKSk7
CisgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzVGV4dHVyZSgpOworICAgIG1fZnVsbFRl
eHR1cmVzW3RleHR1cmVUeXBlSW5kZXhdW2lubmVyVHlwZUluZGV4XVt2ZWN0b3JMZW5ndGggLSAx
XSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
SW50cmluc2ljczo6YWRkRGVwdGhUZXh0dXJlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBu
YXRpdmVUeXBlRGVjbGFyYXRpb24sIEFTVDo6VHlwZVJlZmVyZW5jZSYgaW5uZXJUeXBlKQorewor
ICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiogdGV4dHVyZTsKKyAgICBpZiAobmF0aXZl
VHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiVGV4dHVyZURlcHRoMkQiKQorICAgICAgICB0ZXh0
dXJlID0gbV90ZXh0dXJlRGVwdGgyRDsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRp
b24ubmFtZSgpID09ICJSV1RleHR1cmVEZXB0aDJEIikKKyAgICAgICAgdGV4dHVyZSA9IG1fcndU
ZXh0dXJlRGVwdGgyRDsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJUZXh0dXJlRGVwdGgyREFycmF5IikKKyAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZURl
cHRoMkRBcnJheTsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09
ICJSV1RleHR1cmVEZXB0aDJEQXJyYXkiKQorICAgICAgICB0ZXh0dXJlID0gbV9yd1RleHR1cmVE
ZXB0aDJEQXJyYXk7CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9
PSAiVGV4dHVyZURlcHRoQ3ViZSIpCisgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVEZXB0aEN1
YmU7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB1bnNpZ25l
ZCBpbm5lclR5cGVJbmRleCA9IG1fZGVwdGhUZXh0dXJlSW5uZXJUeXBlcy5zaXplKCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZGVwdGhUZXh0dXJlSW5uZXJUeXBlcy5zaXplKCk7
ICsraSkgeworICAgICAgICBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSBtX2RlcHRoVGV4dHVyZUlu
bmVyVHlwZXNbaV0pCisgICAgICAgICAgICBpbm5lclR5cGVJbmRleCA9IGk7CisgICAgfQorICAg
IEFTU0VSVChpbm5lclR5cGVJbmRleCAhPSBtX2RlcHRoVGV4dHVyZUlubmVyVHlwZXMuc2l6ZSgp
KTsKKyAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNUZXh0dXJlKCk7CisgICAgdGV4dHVy
ZVtpbm5lclR5cGVJbmRleF0gPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIEludHJpbnNpY3M6OmFkZFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBBU1NFUlQobmF0aXZlVHlw
ZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMSk7CisgICAgQVNTRVJUKFdU
Rjo6aG9sZHNfYWx0ZXJuYXRpdmU8VW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKKyAgICBhdXRvJiBpbm5lclR5
cGUgPSBzdGF0aWNfY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2UmPihXVEY6OmdldDxVbmlxdWVSZWY8
QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMo
KVswXSkpOworICAgIEFTU0VSVCghaW5uZXJUeXBlLnR5cGVBcmd1bWVudHMoKS5zaXplKCkpOwor
ICAgIGlmIChhZGRGdWxsVGV4dHVyZShuYXRpdmVUeXBlRGVjbGFyYXRpb24sIGlubmVyVHlwZSkp
IHsKKyAgICAgICAgbV90ZXh0dXJlU2V0LmFkZCgmbmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYWRkRGVwdGhUZXh0dXJlKG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiwgaW5uZXJUeXBlKSkKKyAgICAgICAgbV90ZXh0dXJlU2V0LmFkZCgmbmF0aXZl
VHlwZURlY2xhcmF0aW9uKTsKK30KKwordm9pZCBJbnRyaW5zaWNzOjphZGQoQVNUOjpOYXRpdmVU
eXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAoYWRkUHJp
bWl0aXZlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAo
YWRkVmVjdG9yKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoYWRkTWF0cml4KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpCisgICAgICAgIHJldHVybjsKKyAg
ICBhZGRUZXh0dXJlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7Cit9CisKK30KKworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
SW50cmluc2ljcy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJ
bnRyaW5zaWNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWQzNmYyODEwODdhY2Q4ZGE2MDEyNTY3MTRhNGZmNDUx
MmZkMTU4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMSW50cmluc2ljcy5oCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFy
YXRpb24uaCIKKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitu
YW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBJbnRyaW5zaWNzIHsKK3B1YmxpYzoKKyAgICBJbnRy
aW5zaWNzKCk7CisKKyAgICB2b2lkIGFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24m
KTsKKyAgICB2b2lkIGFkZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworCisgICAgQVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIHZvaWRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX3ZvaWRUeXBlKTsKKyAgICAgICAgcmV0dXJuICptX3ZvaWRUeXBlOworICAgIH0K
KworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBib29sVHlwZSgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQobV9ib29sVHlwZSk7CisgICAgICAgIHJldHVybiAqbV9ib29sVHlw
ZTsKKyAgICB9CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgaW50VHlwZSgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9pbnRUeXBlKTsKKyAgICAgICAgcmV0dXJuICpt
X2ludFR5cGU7CisgICAgfQorCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIHVpbnRU
eXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3VpbnRUeXBlKTsKKyAgICAgICAg
cmV0dXJuICptX3VpbnRUeXBlOworICAgIH0KKworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uJiBzYW1wbGVyVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9zYW1wbGVy
VHlwZSk7CisgICAgICAgIHJldHVybiAqbV9zYW1wbGVyVHlwZTsKKyAgICB9CisKKyAgICBBU1Q6
Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgZmxvYXRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX2Zsb2F0VHlwZSk7CisgICAgICAgIHJldHVybiAqbV9mbG9hdFR5cGU7CisgICAg
fQorCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIGZsb2F0M1R5cGUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdmVjdG9yRmxvYXRbMV0pOworICAgICAgICByZXR1cm4g
Km1fdmVjdG9yRmxvYXRbMV07CisgICAgfQorCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24mIGZsb2F0NFR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdmVjdG9yRmxv
YXRbMl0pOworICAgICAgICByZXR1cm4gKm1fdmVjdG9yRmxvYXRbMl07CisgICAgfQorCitwcml2
YXRlOgorICAgIGJvb2wgYWRkUHJpbWl0aXZlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7
CisgICAgYm9vbCBhZGRWZWN0b3IoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKKyAgICBi
b29sIGFkZE1hdHJpeChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworICAgIGJvb2wgYWRk
RnVsbFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mLCBBU1Q6OlR5cGVSZWZlcmVu
Y2UmKTsKKyAgICBib29sIGFkZERlcHRoVGV4dHVyZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
biYsIEFTVDo6VHlwZVJlZmVyZW5jZSYpOworICAgIHZvaWQgYWRkVGV4dHVyZShBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiYpOworCisgICAgSGFzaFNldDxjb25zdCBBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbio+IG1fdGV4dHVyZVNldDsKKworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uKiBtX3ZvaWRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2Jvb2xU
eXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3VjaGFyVHlwZTsKKyAgICBB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV91c2hvcnRUeXBlOworICAgIEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uKiBtX3VpbnRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uKiBtX2NoYXJUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3Nob3J0
VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9pbnRUeXBlOworICAgIEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2hhbGZUeXBlOworICAgIEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uKiBtX2Zsb2F0VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
biogbV9hdG9taWNJbnRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2F0
b21pY1VpbnRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3NhbXBsZXJU
eXBlOworCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9yQm9vbFszXTsK
KyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JVY2hhclszXTsKKyAgICBB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JVc2hvcnRbM107CisgICAgQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9yVWludFszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JDaGFyWzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uKiBtX3ZlY3RvclNob3J0WzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
KiBtX3ZlY3RvckludFszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0
b3JIYWxmWzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvckZsb2F0
WzNdOworCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fbWF0cml4SGFsZlszXVsz
XTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9tYXRyaXhGbG9hdFszXVszXTsK
KworICAgIFZlY3RvcjxTdHJpbmc+IG1fdGV4dHVyZVR5cGVOYW1lczsKKyAgICBWZWN0b3I8U3Ry
aW5nPiBtX3RleHR1cmVJbm5lclR5cGVOYW1lczsKKworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uKiBtX2Z1bGxUZXh0dXJlc1sxMV1bOF1bNF07CisKKyAgICBWZWN0b3I8U3RyaW5nPiBt
X2RlcHRoVGV4dHVyZUlubmVyVHlwZXM7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24q
IG1fdGV4dHVyZURlcHRoMkRbMl07CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1f
cndUZXh0dXJlRGVwdGgyRFsyXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV90
ZXh0dXJlRGVwdGgyREFycmF5WzJdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBt
X3J3VGV4dHVyZURlcHRoMkRBcnJheVsyXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
biogbV90ZXh0dXJlRGVwdGhDdWJlWzJdOworfTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb2dyYW0uaAppbmRl
eCBhNjllODQzYzEwZmQ3Y2NhMzE5NTUzNzUwMjI3YWFiZWNjZmRhNzliLi4zZGYzM2I3MTZhMWRl
NDFhNjdhOGI4Zjk3OGJlYWM0YjVmMTUxOGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb2dyYW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb2dyYW0uaApAQCAtMjksNiArMjksNyBAQAogCiAj
aW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCIKICNpbmNsdWRlICJXSExTTEZ1
bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMSW50cmluc2ljcy5oIgogI2luY2x1
ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMTmF0
aXZlVHlwZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9u
LmgiCkBAIC03MSwxNSArNzIsMTggQEAgcHVibGljOgogICAgIGJvb2wgYXBwZW5kKEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYmIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCiAgICAg
ewogICAgICAgICBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zLmFwcGVuZChtYWtlVW5pcXVl
UmVmPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4oV1RGTW92ZShuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uKSkpOworICAgICAgICBtX2ludHJpbnNpY3MuYWRkKHN0YXRpY19jYXN0PEFT
VDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiY+KG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bnMubGFzdCgpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGJvb2wgYXBw
ZW5kKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQog
ICAgIHsKICAgICAgICAgbV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zLmFwcGVuZChtYWtlVW5pcXVl
UmVmPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihXVEZNb3ZlKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbikpKTsKKyAgICAgICAgbV9pbnRyaW5zaWNzLmFkZChzdGF0aWNfY2FzdDxBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiY+KG1fbmF0aXZlVHlwZURlY2xhcmF0aW9ucy5sYXN0KCkpKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgSW50cmluc2ljcyYgaW50cmluc2ljcygp
IHsgcmV0dXJuIG1faW50cmluc2ljczsgfQogICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpUeXBl
RGVmaW5pdGlvbj4+JiB0eXBlRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX3R5cGVEZWZpbml0aW9u
czsgfQogICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPj4mIHN0
cnVjdHVyZURlZmluaXRpb25zKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVEZWZpbml0aW9uczsgfQog
ICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+PiYgZW51bWVy
YXRpb25EZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fZW51bWVyYXRpb25EZWZpbml0aW9uczsgfQpA
QCAtOTAsNiArOTQsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbj4+JiBuYXRpdmVUeXBlRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9u
YXRpdmVUeXBlRGVjbGFyYXRpb25zOyB9CiAKIHByaXZhdGU6CisgICAgSW50cmluc2ljcyBtX2lu
dHJpbnNpY3M7CiAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OlR5cGVEZWZpbml0aW9uPj4gbV90
eXBlRGVmaW5pdGlvbnM7CiAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OlN0cnVjdHVyZURlZmlu
aXRpb24+PiBtX3N0cnVjdHVyZURlZmluaXRpb25zOwogICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNU
OjpFbnVtZXJhdGlvbkRlZmluaXRpb24+PiBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnM7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2
ZVR5cGVDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYxMTE4ZDBhOTU2ZWI1ODBl
NDlkNWJiYTM3NWVmMmU0NjE4ZWIwM2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNwcApAQCAt
MCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisj
aW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBSZWN1cnNpdmVU
eXBlQ2hlY2tlciA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICB+UmVjdXJzaXZlVHlw
ZUNoZWNrZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZURlZmluaXRp
b24mIHR5cGVEZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byBhZGRSZXN1
bHQgPSBtX3R5cGVzLmFkZCgmdHlwZURlZmluaXRpb24pOworICAgICAgICBpZiAoYWRkUmVzdWx0
LmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZURlZmluaXRp
b24pOworCisgICAgICAgIGF1dG8gc3VjY2VzcyA9IG1fdHlwZXMucmVtb3ZlKCZ0eXBlRGVmaW5p
dGlvbik7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisgICAgfQor
CisgICAgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmlu
aXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZXMu
YWRkKCZzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0Vu
dHJ5KSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0cnVjdHVyZURlZmluaXRpb24p
OworCisgICAgICAgIGF1dG8gc3VjY2VzcyA9IG1fdHlwZXMucmVtb3ZlKCZzdHJ1Y3R1cmVEZWZp
bml0aW9uKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICB9
CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlcy5hZGQoJnR5cGVS
ZWZlcmVuY2UpOworICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAg
ICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBmb3IgKGF1dG8mIHR5cGVBcmd1bWVudCA6IHR5cGVSZWZlcmVuY2UudHlwZUFyZ3VtZW50cygp
KQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVBcmd1bWVudCk7CisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdCgqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisKKyAg
ICAgICAgYXV0byBzdWNjZXNzID0gbV90eXBlcy5yZW1vdmUoJnR5cGVSZWZlcmVuY2UpOworICAg
ICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgIH0KKworICAgIHZvaWQg
dmlzaXQoQVNUOjpSZWZlcmVuY2VUeXBlJikgb3ZlcnJpZGUKKyAgICB7CisgICAgfQorCitwcml2
YXRlOgorICAgIEhhc2hTZXQ8QVNUOjpUeXBlKj4gbV90eXBlczsKK307CisKK2Jvb2wgY2hlY2tS
ZWN1cnNpdmVUeXBlcyhQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIFJlY3Vyc2l2ZVR5cGVDaGVj
a2VyIHJlY3Vyc2l2ZVR5cGVDaGVja2VyOworICAgIHJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNoZWNr
RXJyb3JBbmRWaXNpdChwcm9ncmFtKTsKKyAgICByZXR1cm4gcmVjdXJzaXZlVHlwZUNoZWNrZXIu
ZXJyb3IoKTsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmZjOTcwYzcyNDk2NmQxMzkxMGFiMmFhYWUxNTY3ZDdjMTA1YTMzOTQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFByb2dyYW07CisKK2Jvb2wgY2hlY2tS
ZWN1cnNpdmVUeXBlcyhQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5
T3BlcmF0b3JMZW5ndGguY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTNmYTAw
MDU0YTYxMTkzMTBlZjgxYTM2ZWQzZmVjNGI5MTk0Y2RmNwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3Bl
cmF0b3JMZW5ndGguY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5o
IgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgiCisj
aW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgi
CisjaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFt
ZXNwYWNlIFdITFNMIHsKKworY2xhc3MgRmluZEFycmF5VHlwZXMgOiBwdWJsaWMgVmlzaXRvciB7
CitwdWJsaWM6CisgICAgfkZpbmRBcnJheVR5cGVzKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2
aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
bV9hcnJheVR5cGVzLmFwcGVuZChhcnJheVR5cGUpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoYXJyYXlUeXBlKTsKKyAgICB9CisKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxBU1Q6OkFycmF5VHlwZT4+JiYgdGFrZUFycmF5VHlwZXMoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFdURk1vdmUobV9hcnJheVR5cGVzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpBcnJheVR5cGU+PiBtX2FycmF5VHlwZXM7Cit9
OworCit2b2lkIHN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoKFByb2dyYW0mIHByb2dyYW0p
Cit7CisgICAgRmluZEFycmF5VHlwZXMgZmluZEFycmF5VHlwZXM7CisgICAgZmluZEFycmF5VHlw
ZXMuY2hlY2tFcnJvckFuZFZpc2l0KHByb2dyYW0pOworICAgIGF1dG8gYXJyYXlUeXBlcyA9IGZp
bmRBcnJheVR5cGVzLnRha2VBcnJheVR5cGVzKCk7CisKKyAgICBib29sIGlzT3BlcmF0b3IgPSB0
cnVlOworICAgIGJvb2wgaXNSZXN0cmljdGVkID0gZmFsc2U7CisKKyAgICBmb3IgKGF1dG8mIGFy
cmF5VHlwZSA6IGFycmF5VHlwZXMpIHsKKyAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
IHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGFycmF5VHlwZS5nZXQoKS5vcmlnaW4o
KSksIEFTVDo6UXVhbGlmaWVycygpLCB7IGFycmF5VHlwZS5nZXQoKS5jbG9uZSgpIH0sIFN0cmlu
ZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgIEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92
ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
bihMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVC
bG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9r
ZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwgcHJvZ3JhbS5pbnRyaW5zaWNzKCkudWludFR5
cGUoKSksIFN0cmluZygib3BlcmF0b3IubGVuZ3RoIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlz
UmVzdHJpY3RlZCk7CisgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbikpOworICAgIH0KK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJy
YXlPcGVyYXRvckxlbmd0aC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIwMTJmMmIw
MTAyYWNhYzUxMzYwYjE5ZWNiOTNhZTVlYjA4YTU2OGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJh
dG9yTGVuZ3RoLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ug
V0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCit2b2lkIHN5bnRoZXNpemVBcnJheU9wZXJhdG9y
TGVuZ3RoKFByb2dyYW0mKTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3Jz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6
ZUNvbnN0cnVjdG9ycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjNkNjNhNjU5ZWIyN2QxY2ZmZTM1OWEwNmZh
ZjMxZTdhOTlmNjBjNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAKQEAgLTAsMCArMSwx
MzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xT
eW50aGVzaXplQ29uc3RydWN0b3JzLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVk
ZSAiV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9n
cmFtLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hMU0xW
YXJpYWJsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgRmluZEFsbFR5cGVz
IDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAgIH5GaW5kQWxsVHlwZXMoKSA9IGRlZmF1
bHQ7CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6UG9pbnRlclR5cGUmIHBvaW50ZXJUeXBlKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgbV91bm5hbWVkVHlwZXMuYXBwZW5kKHBvaW50ZXJUeXBlKTsK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHBvaW50ZXJUeXBlKTsKKyAgICB9CisKKyAgICB2
b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJiBhcnJheVJlZmVyZW5jZVR5cGUpIG92
ZXJyaWRlCisgICAgeworICAgICAgICBtX3VubmFtZWRUeXBlcy5hcHBlbmQoYXJyYXlSZWZlcmVu
Y2VUeXBlKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFycmF5UmVmZXJlbmNlVHlwZSk7
CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBlKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgbV91bm5hbWVkVHlwZXMuYXBwZW5kKGFycmF5VHlwZSk7Cisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhcnJheVR5cGUpOworICAgIH0KKworICAgIHZvaWQg
dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fbmFtZWRUeXBlcy5hcHBlbmQoZW51bWVyYXRpb25E
ZWZpbml0aW9uKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGVudW1lcmF0aW9uRGVmaW5p
dGlvbik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24m
IHN0cnVjdHVyZURlZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX25hbWVkVHlw
ZXMuYXBwZW5kKHN0cnVjdHVyZURlZmluaXRpb24pOworICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgbV9uYW1lZFR5cGVzLmFwcGVuZChuYXRpdmVUeXBlRGVjbGFyYXRpb24pOwor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKKyAgICB9
CisKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlVubmFtZWRUeXBlPj4m
JiB0YWtlVW5uYW1lZFR5cGVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fdW5u
YW1lZFR5cGVzKTsKKyAgICB9CisKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxB
U1Q6Ok5hbWVkVHlwZT4+JiYgdGFrZU5hbWVkVHlwZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFdURk1vdmUobV9uYW1lZFR5cGVzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpVbm5hbWVkVHlwZT4+IG1fdW5uYW1lZFR5cGVzOwor
ICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPj4gbV9uYW1l
ZFR5cGVzOworfTsKKwordm9pZCBzeW50aGVzaXplQ29uc3RydWN0b3JzKFByb2dyYW0mIHByb2dy
YW0pCit7CisgICAgRmluZEFsbFR5cGVzIGZpbmRBbGxUeXBlczsKKyAgICBmaW5kQWxsVHlwZXMu
Y2hlY2tFcnJvckFuZFZpc2l0KHByb2dyYW0pOworICAgIGF1dG8gbV91bm5hbWVkVHlwZXMgPSBm
aW5kQWxsVHlwZXMudGFrZVVubmFtZWRUeXBlcygpOworICAgIGF1dG8gbV9uYW1lZFR5cGVzID0g
ZmluZEFsbFR5cGVzLnRha2VOYW1lZFR5cGVzKCk7CisKKyAgICBib29sIGlzT3BlcmF0b3IgPSB0
cnVlOworICAgIGJvb2wgaXNSZXN0cmljdGVkID0gZmFsc2U7CisKKyAgICBmb3IgKGF1dG8mIHVu
bmFtZWRUeXBlIDogbV91bm5hbWVkVHlwZXMpIHsKKyAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBlLmdldCgp
Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgdW5uYW1lZFR5cGUuZ2V0KCkuY2xvbmUo
KSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICBBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgIHBhcmFtZXRlcnMuYXBw
ZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICBBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24gY29weUNvbnN0cnVjdG9yKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
bihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0
ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgdW5uYW1lZFR5cGUuZ2V0KCkuY2xvbmUoKSwgU3RyaW5n
KCJvcGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUo
cGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7Cisg
ICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUoY29weUNvbnN0cnVjdG9yKSk7CisKKyAgICAg
ICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGRlZmF1bHRDb25zdHJ1Y3RvcihBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBlLmdldCgpLm9yaWdp
bigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIHVubmFtZWRUeXBlLmdl
dCgpLmNsb25lKCksIFN0cmluZygib3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpLCBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zKCksIFdURjo6bnVsbG9wdCwgaXNP
cGVyYXRvciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUo
ZGVmYXVsdENvbnN0cnVjdG9yKSk7CisgICAgfQorCisgICAgZm9yIChhdXRvJiBuYW1lZFR5cGUg
OiBtX25hbWVkVHlwZXMpIHsKKyAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlh
YmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIEFT
VDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4o
bmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgbmFtZWRUeXBlLmdldCgpKSB9LCBTdHJpbmcoKSwg
V1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFy
aWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24gY29weUNvbnN0cnVjdG9yKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4o
bmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51
bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdl
dCgpLm9yaWdpbigpKSwgbmFtZWRUeXBlLmdldCgpKSwgU3RyaW5nKCJvcGVyYXRvciBjYXN0Iiwg
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6
bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgIHByb2dyYW0uYXBw
ZW5kKFdURk1vdmUoY29weUNvbnN0cnVjdG9yKSk7CisKKyAgICAgICAgQVNUOjpOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uIGRlZmF1bHRDb25zdHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24oTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRl
QmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRv
a2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIG5hbWVkVHlwZS5nZXQoKSksIFN0cmluZygi
b3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb25zKCksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3Rl
ZCk7CisgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUoZGVmYXVsdENvbnN0cnVjdG9yKSk7
CisgICAgfQorfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVj
dG9ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjE5YTA1YmVhNjIzYTliOWIwYTljZmY0YjRmNDJmZjcwMWRlYmQ0
MzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaApAQCAtMCwwICsxLDQyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFByb2dyYW07CisKK3ZvaWQgc3lu
dGhlc2l6ZUNvbnN0cnVjdG9ycyhQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6
ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lZWQ5NDQwZmE5M2VhZTJjOTEyZGU2MmJhMTlkMGUyZWQ4MmI2MjQ2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXpl
RW51bWVyYXRpb25GdW5jdGlvbnMuY3BwCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25G
dW5jdGlvbnMuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFByb2dy
YW0uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCit2b2lkIHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1
bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIGJvb2wgaXNPcGVyYXRvciA9IHRydWU7
CisgICAgYm9vbCBpc1Jlc3RyaWN0ZWQgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIGVudW1lcmF0
aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKSB7CisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xh
cmF0aW9uMShMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFT
VDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4o
ZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIHN0YXRpY19jYXN0PEFTVDo6RW51bWVy
YXRpb25EZWZpbml0aW9uJj4oZW51bWVyYXRpb25EZWZpbml0aW9uKSkgfSwgU3RyaW5nKCksIFdU
Rjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZp
bml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5j
ZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIHN0
YXRpY19jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJj4oZW51bWVyYXRpb25EZWZpbml0
aW9uKSkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAg
ICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAgIHBh
cmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjEpKTsKKyAgICAgICAg
ICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjIpKTsKKyAg
ICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRp
b25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxs
b3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVm
aW5pdGlvbi0+b3JpZ2luKCkpLCBwcm9ncmFtLmludHJpbnNpY3MoKS5ib29sVHlwZSgpKSwgU3Ry
aW5nKCJvcGVyYXRvcj09IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUo
cGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7Cisg
ICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24pKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5
cGUoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBhIG51bGwgYmFzZSB0eXBlLgor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2
YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9y
aWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExl
eGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgc3RhdGljX2Nhc3Q8
QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mPihlbnVtZXJhdGlvbkRlZmluaXRpb24pKSB9LCBT
dHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICAgICAgICAgIEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAg
ICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVm
aW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwg
ZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCktPmNsb25lKCksIFN0cmluZygib3BlcmF0b3Iu
dmFsdWUiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJz
KSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAgICAg
ICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJh
dGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgQVNUOjpUeXBl
UmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdp
bigpKSwgc3RhdGljX2Nhc3Q8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mPihlbnVtZXJhdGlv
bkRlZmluaXRpb24pKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwor
ICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAg
ICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRp
b24pKTsKKyAgICAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRv
a2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2Nr
KCksIFdURjo6bnVsbG9wdCwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCktPmNsb25lKCks
IFN0cmluZygib3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0
ZWQpOworICAgICAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbikpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4
ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmll
cnMoKSwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCktPmNsb25lKCksIFN0cmluZygpLCBX
VEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBw
ZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAgICAgIEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5v
cmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCB7IEFTVDo6VHlw
ZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmln
aW4oKSksIHN0YXRpY19jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJj4oZW51bWVyYXRp
b25EZWZpbml0aW9uKSkgfSwgU3RyaW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVy
YXRvciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RG
TW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rp
b25zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIxMjdmZDExNTI0YzFjODMyODI4
M2M1YmFlOTIzZGZlZjAxZGY1YWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5o
CkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKwor
Y2xhc3MgUHJvZ3JhbTsKKwordm9pZCBzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMoUHJv
Z3JhbSYpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3Ry
dWN0dXJlQWNjZXNzb3JzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMzQyMmRkYjM1OWI1ZGFhZjVkMTkyZDU0
NzU1ZjZlODZkNzk3ODU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcApAQCAt
MCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oIgorCisjaWYgRU5BQkxFKFdFQkdQ
VSkKKworI2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFByb2dy
YW0uaCIKKyNpbmNsdWRlICJXSExTTFJlZmVyZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFR5
cGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCit2b2lkIHN5bnRoZXNp
emVTdHJ1Y3R1cmVBY2Nlc3NvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBib29sIGlzT3Bl
cmF0b3IgPSB0cnVlOworICAgIGJvb2wgaXNSZXN0cmljdGVkID0gZmFsc2U7CisgICAgZm9yIChh
dXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygp
KSB7CisgICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJlRWxlbWVudCA6IHN0cnVjdHVyZURlZmlu
aXRpb24tPnN0cnVjdHVyZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAvLyBUaGUgZ2V0dGVyOiBvcGVyYXRvci5maWVsZAorICAgICAgICAgICAgICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihzdHJ1
Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgQVNUOjpUeXBlUmVm
ZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgc3Rh
dGljX2Nhc3Q8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJj4oc3RydWN0dXJlRGVmaW5pdGlvbikp
IH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICAg
ICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICAgICAgICAg
IHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAg
ICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJl
RWxlbWVudC5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBz
dHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpLCBTdHJpbmc6OmZvcm1hdCgib3BlcmF0b3Iu
JXMiLCBzdHJ1Y3R1cmVFbGVtZW50Lm5hbWUoKS51dGY4KCkuZGF0YSgpKSwgV1RGTW92ZShwYXJh
bWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAg
ICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24pKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8v
IFRoZSBzZXR0ZXI6IG9wZXJhdG9yLmZpZWxkPQorICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMShMZXhlcjo6VG9rZW4oc3RydWN0dXJl
RWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5j
ZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIHN0YXRpY19j
YXN0PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiY+KHN0cnVjdHVyZURlZmluaXRpb24pKSB9LCBT
dHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICAgICAgICAgIEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMihMZXhlcjo6VG9rZW4o
c3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IHN0cnVjdHVy
ZUVsZW1lbnQudHlwZSgpLmNsb25lKCkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpu
dWxsb3B0KTsKKyAgICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFt
ZXRlcnM7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJs
ZURlY2xhcmF0aW9uMSkpOworICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1v
dmUodmFyaWFibGVEZWNsYXJhdGlvbjIpKTsKKyAgICAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6
OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFw
KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgc3RhdGljX2Nhc3Q8QVNU
OjpTdHJ1Y3R1cmVEZWZpbml0aW9uJj4oc3RydWN0dXJlRGVmaW5pdGlvbikpLCBTdHJpbmc6OmZv
cm1hdCgib3BlcmF0b3IuJXM9Iiwgc3RydWN0dXJlRWxlbWVudC5uYW1lKCkudXRmOCgpLmRhdGEo
KSksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVz
dHJpY3RlZCk7CisgICAgICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRo
ZSBhbmRlcjogb3BlcmF0b3ImLmZpZWxkCisgICAgICAgICAgICBhdXRvIGNyZWF0ZUFuZGVyID0g
WyZdKEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSkgLT4gQVNU
OjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHsKKyAgICAgICAgICAgICAgICBhdXRvIGFyZ3Vt
ZW50VHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHN0
cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBhZGRyZXNzU3BhY2UsIEFTVDo6VHlwZVJlZmVyZW5j
ZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIHN0YXRpY19j
YXN0PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiY+KHN0cnVjdHVyZURlZmluaXRpb24pKSk7Cisg
ICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRp
b24oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmll
cnMoKSwgeyBXVEZNb3ZlKGFyZ3VtZW50VHlwZSkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwg
V1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25z
IHBhcmFtZXRlcnM7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2
YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICAgICAgYXV0byByZXR1cm5UeXBlID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxl
bWVudC5vcmlnaW4oKSksIGFkZHJlc3NTcGFjZSwgc3RydWN0dXJlRWxlbWVudC50eXBlKCkuY2xv
bmUoKSk7CisgICAgICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpU
b2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBX
VEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRv
ciYuJXMiLCBzdHJ1Y3R1cmVFbGVtZW50Lm5hbWUoKS51dGY4KCkuZGF0YSgpKSwgV1RGTW92ZShw
YXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbjsKKyAgICAgICAg
ICAgIH07CisgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChjcmVhdGVBbmRlcihBU1Q6OlJlZmVy
ZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQpKTsKKyAgICAgICAgICAgIHByb2dyYW0u
YXBwZW5kKGNyZWF0ZUFuZGVyKEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpEZXZp
Y2UpKTsKKyAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKGNyZWF0ZUFuZGVyKEFTVDo6UmVmZXJl
bmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpUaHJlYWRncm91cCkpOworICAgICAgICAgICAgcHJvZ3Jh
bS5hcHBlbmQoY3JlYXRlQW5kZXIoQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRo
cmVhZCkpOworICAgICAgICB9CisgICAgfQorfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVT
dHJ1Y3R1cmVBY2Nlc3NvcnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiOWYyYjlh
ZDM5OGEwZWJmNzk0OGI1NmFkOWM0ZDkzMDQ0MDhjYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVB
Y2Nlc3NvcnMuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoV0VCR1BVKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBX
SExTTCB7CisKK2NsYXNzIFByb2dyYW07CisKK3ZvaWQgc3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vz
c29ycyhQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNDkx
NDgyYWFjNWFhNWE5M2U4ZTcyOGRmZjFhNjVmZWNiOWRlMzA2Ni4uM2Q1MDAxODY1OGZkNzY2MTQz
ZGVkMTM5MWZhZTNlOTdmZDVjZTdiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTMwOCw2ICszMDgsMTMg
QEAgTW9kdWxlcy93ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNw
cAogTW9kdWxlcy93ZWJncHUvRE9NV2luZG93V2ViR1BVLmNwcAogTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xMZXhlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAor
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAKK01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwCitNb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcAorTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcAorTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwCitN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3Bw
CitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuY3BwCiBNb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xCdWlsdEluU2VtYW50aWMuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xSZXNvdXJjZVNlbWFudGljLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGZmMzVhODg2ZTE1M2JmNGYxZTE3YzVjYzZkNjNm
YTc2ZDUzZDEzNjYuLjJlYWQ3MTdlOGIxZmI2ZjQwMTEwYmRmYzhhNzg1YTIwYzU0MmU5MDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTEzMzI1LDYgKzEzMzI1LDIwIEBACiAJCUMyMUJGNzQ1MjFDRDk2OTgwMDIyNzk3OSAvKiBX
SExTTFN0YW5kYXJkTGlicmFyeS50eHQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0OyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFERjJFNzFEOUU0RTk5MDBGNUIyNEMgLyog
Q1NTRm9udFZhcmlhdGlvblZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENTU0ZvbnRWYXJpYXRpb25WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUMyMURGMkU4MUQ5RTRFOTkwMEY1QjI0QyAvKiBDU1NGb250VmFyaWF0aW9uVmFsdWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRm9udFZhcmlhdGlvblZhbHVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMzRBOUE5MjFFOTJDMTcwMDNDOTg0
RCAvKiBXSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDMjM0QTlBQjIxRTkyQzE4MDAzQzk4NEQgLyogV0hMU0xSZWN1
cnNpdmVUeXBlQ2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFJlY3Vyc2l2ZVR5cGVDaGVj
a2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMzRBOUFDMjFFOTJDMTkwMDND
OTg0RCAvKiBXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDMjM0QTlBRDIxRTkyQzE5MDAzQzk4NEQgLyogV0hMU0xSZWN1cnNp
dmVUeXBlQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFJlY3Vyc2l2ZVR5cGVD
aGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIzNEE5QUUyMUU5MkMx
QTAwM0M5ODREIC8qIFdITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDMjM0QTlBRjIxRTkyQzFCMDAzQzk4NEQgLyogV0hMU0xTeW50aGVzaXplQXJyYXlP
cGVyYXRvckxlbmd0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN5bnRoZXNpemVBcnJheU9wZXJh
dG9yTGVuZ3RoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMzRBOUIwMjFFOTJD
MUMwMDNDOTg0RCAvKiBXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQzIzNEE5QjEyMUU5MkMxRDAwM0M5ODREIC8qIFdITFNMU3ludGhlc2l6
ZUNvbnN0cnVjdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3Rv
cnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIzNEE5QjIyMUU5MkMxRjAwM0M5
ODREIC8qIFdITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUMyMzRBOUIzMjFFOTJDMjEwMDNDOTg0RCAvKiBXSExTTFN5bnRoZXNpemVFbnVt
ZXJhdGlvbkZ1bmN0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFN5bnRoZXNpemVF
bnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMy
MzRBOUI0MjFFOTJDMjIwMDNDOTg0RCAvKiBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3Nv
cnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNz
b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIzNEE5QjUyMUU5MkMyMzAw
M0M5ODREIC8qIFdITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQzIzNEE5QjYyMUU5MkNDMDAwM0M5ODREIC8qIFdITFNMSW50cmluc2lj
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEludHJpbnNpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQzIzNEE5QjcyMUU5MkNDMTAwM0M5ODREIC8qIFdITFNMSW50cmluc2ljcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEludHJpbnNpY3MuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDMjQ1OEU2MTFGRTg5NzlFMDA1OTQ3NTkgLyogRm9udENhY2hlQ29y
ZVRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udENhY2hlQ29yZVRleHQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQzI2MDE3QTExQzcyREM5OTAwRjc0QTE2IC8qIENTU0ZvbnRGYWNl
U2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZvbnRGYWNl
U2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI2MDE3QTIxQzcyREM5OTAw
Rjc0QTE2IC8qIENTU0ZvbnRGYWNlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENTU0ZvbnRGYWNlU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTM4
OCwxMiArMjU0MDIsMjYgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJ
CQkJQzIxQkY2RjEyMUNEODk4RDAwMjI3OTc5IC8qIEFTVCAqLywKKwkJCQlDMjM0QTlCMjIxRTky
QzFGMDAzQzk4NEQgLyogV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAgKi8sCisJCQkJ
QzIzNEE5QUUyMUU5MkMxQTAwM0M5ODREIC8qIFdITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMu
aCAqLywKKwkJCQlDMjM0QTlCNzIxRTkyQ0MxMDAzQzk4NEQgLyogV0hMU0xJbnRyaW5zaWNzLmNw
cCAqLywKKwkJCQlDMjM0QTlCNjIxRTkyQ0MwMDAzQzk4NEQgLyogV0hMU0xJbnRyaW5zaWNzLmgg
Ki8sCiAJCQkJQzIxMEU5MTEyMUI0QkQxMDAwQjdGODNEIC8qIFdITFNMTGV4ZXIuY3BwICovLAog
CQkJCUMyMTBFOTEyMjFCNEJEMTAwMEI3RjgzRCAvKiBXSExTTExleGVyLmggKi8sCiAJCQkJQzIx
QkY3MzcyMUNEOEEwMjAwMjI3OTc5IC8qIFdITFNMUGFyc2VyLmNwcCAqLywKIAkJCQlDMjFCRjcz
ODIxQ0Q4QTAzMDAyMjc5NzkgLyogV0hMU0xQYXJzZXIuaCAqLywKIAkJCQlDMjFCRjczQTIxQ0Q4
RDcwMDAyMjc5NzkgLyogV0hMU0xQcm9ncmFtLmggKi8sCisJCQkJQzIzNEE5QUQyMUU5MkMxOTAw
M0M5ODREIC8qIFdITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwICovLAorCQkJCUMyMzRBOUFC
MjFFOTJDMTgwMDNDOTg0RCAvKiBXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmggKi8sCiAJCQkJ
QzIxQkY3NDUyMUNEOTY5ODAwMjI3OTc5IC8qIFdITFNMU3RhbmRhcmRMaWJyYXJ5LnR4dCAqLywK
KwkJCQlDMjM0QTlBOTIxRTkyQzE3MDAzQzk4NEQgLyogV0hMU0xTeW50aGVzaXplQXJyYXlPcGVy
YXRvckxlbmd0aC5jcHAgKi8sCisJCQkJQzIzNEE5QUYyMUU5MkMxQjAwM0M5ODREIC8qIFdITFNM
U3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaCAqLywKKwkJCQlDMjM0QTlCMDIxRTkyQzFD
MDAzQzk4NEQgLyogV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcCAqLywKKwkJCQlDMjM0
QTlCMTIxRTkyQzFEMDAzQzk4NEQgLyogV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmggKi8s
CisJCQkJQzIzNEE5QjMyMUU5MkMyMTAwM0M5ODREIC8qIFdITFNMU3ludGhlc2l6ZUVudW1lcmF0
aW9uRnVuY3Rpb25zLmNwcCAqLywKKwkJCQlDMjM0QTlBQzIxRTkyQzE5MDAzQzk4NEQgLyogV0hM
U0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaCAqLywKKwkJCQlDMjM0QTlCNDIxRTky
QzIyMDAzQzk4NEQgLyogV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcCAqLywK
KwkJCQlDMjM0QTlCNTIxRTkyQzIzMDAzQzk4NEQgLyogV0hMU0xTeW50aGVzaXplU3RydWN0dXJl
QWNjZXNzb3JzLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IFdITFNMOwogCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsK
</data>
<flag name="review"
          id="375747"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358984</attachid>
            <date>2019-01-11 23:08:54 -0800</date>
            <delta_ts>2019-01-12 10:36:56 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-193360-20190111230853.patch</filename>
            <type>text/plain</type>
            <size>91001</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5ODk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzU2NzMwYTdjNGM1ODli
NTM5NzVlMjVmZDNkNGVkNTYyMDI0NzlkZi4uN2NiZTAwYmM1NGFlN2MxMWQ0MWMzYzgwOTlhNGI5
NTZhOWJmMTlkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDE5LTAxLTExICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBB
ZGQgbmF0aXZlIGZ1bmN0aW9uIHN5bnRoZXNpcyBwYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MzM2MAorCisgICAgICAgIFJldmlld2VkIGJ5
IERlYW4gSmFja3Nvbi4KKworICAgICAgICBUaGlzIHBhdGNoIGluY2x1ZGVzIGFsbCB0aGUgcGFz
c2VzIGluIHByZXBhcmUoKSB0aGF0IGFyZSBiZXR3ZWVuIHRoZSBuYW1lIHJlc29sdmVyIGFuZCB0
aGUKKyAgICAgICAgdHlwZSBjaGVja2VyLiBJdCBpbnZvbHZlcyBhIGZldyBzbWFsbCBwaWVjZXM6
CisKKyAgICAgICAgLSBDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyB3aGljaCBtYWtlcyBzdXJlIHRo
ZSBzYW1lIGZ1bmN0aW9uIGlzbid0IGRlZmluZWQgdHdpY2UKKyAgICAgICAgLSBJbnRyaW5zaWNz
LCB3aGljaCByZW1lbWJlcnMgYWxsIG9mIHRoZSBuYXRpdmUgdHlwZXMgc28gdGhleSBjYW4gYmUg
cmVmZXJyZWQgdG8gYnkgdGhlCisgICAgICAgICAgcmVzdCBvZiB0aGUgY29tcGlsZXIKKyAgICAg
ICAgLSBSZWN1cnNpdmVUeXBlQ2hlY2tlciB3aGljaCBtYWtlcyBzdXJlIHR5cGVzIGRvbid0IHJl
ZmVyIHRvIHRoZW1zZWx2ZXMKKyAgICAgICAgLSBTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0
aCB3aGljaCBjcmVhdGVzIG9wZXJhdG9yLmxlbmd0aCgpIGZ1bmN0aW9ucyBmb3IgYXJyYXlzCisg
ICAgICAgIC0gU3ludGhlc2l6ZUNvbnN0cnVjdG9ycyB3aGljaCBjcmVhdGVzIGNvcHkgY29uc3Ry
dWN0b3JzIGFuZCBkZWZhdWx0IGNvbnN0cnVjdG9ycyBmb3IgYWxsCisgICAgICAgICAgdHlwZXMK
KyAgICAgICAgLSBTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMgd2hpY2ggcHJvdmlkZXMg
Y2FzdCBvcGVyYXRvcnMgYmV0d2VlbiBlbnVtIHR5cGVzIGFuZCB0aGVpcgorICAgICAgICAgIGJh
c2UgdHlwZXMKKyAgICAgICAgLSBTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzIHdoaWNoIHBy
b3ZpZGVzIGdldHRlcnMsIHNldHRlcnMsIGFuZCBhbmRlcnMgZm9yIGVhY2ggbWVtYmVyCisgICAg
ICAgICAgb2YgYSBzdHJ1Y3QKKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBpdCBpc24n
dCBob29rZWQgdXAgeWV0LiBOb3QgZW5vdWdoIG9mIHRoZSBjb21waWxlciBleGlzdHMgdG8gaGF2
ZSBhbnkgbWVhbmluZ2Z1bCBzb3J0CisgICAgICAgIG9mIHRlc3QuIFdoZW4gZW5vdWdoIG9mIHRo
ZSBjb21waWxlciBpcyBwcmVzZW50LCBJJ2xsIHBvcnQgdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRh
dGlvbidzIHRlc3Qgc3VpdGUuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xCdWlsdEluU2VtYW50aWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6
QnVpbHRJblNlbWFudGljOjppc0FjY2VwdGFibGVUeXBlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlc291cmNlU2VtYW50aWM6OmlzQWNjZXB0YWJsZVR5cGUg
Y29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNh
dGVGdW5jdGlvbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpjaGVja0R1
cGxpY2F0ZUZ1bmN0aW9ucyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xD
aGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcC4KKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpJbnRyaW5zaWNzOjpJbnRyaW5zaWNzKToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpJbnRyaW5zaWNzOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OkludHJpbnNpY3M6OmFkZFByaW1pdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6SW50
cmluc2ljczo6YWRkVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpJbnRyaW5zaWNz
OjphZGRNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkludHJpbnNpY3M6OmFkZEZ1
bGxUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpJbnRyaW5zaWNzOjphZGREZXB0
aFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkludHJpbnNpY3M6OmFkZFRleHR1
cmUpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmluc2ljcy5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpJbnRyaW5zaWNzOjp2b2lkVHlwZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6SW50cmluc2ljczo6Ym9vbFR5cGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkludHJpbnNpY3M6OmludFR5cGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkludHJpbnNpY3M6OnVpbnRUeXBlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpJbnRyaW5zaWNzOjpzYW1wbGVyVHlwZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6SW50cmluc2ljczo6ZmxvYXRUeXBlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpJbnRyaW5zaWNzOjpmbG9hdDNUeXBlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpJbnRyaW5zaWNzOjpmbG9hdDRUeXBlIGNvbnN0KToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb2dyYW0uaDoKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpQcm9ncmFtOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OlByb2dyYW06OmludHJpbnNpY3MpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpjaGVja1JlY3Vyc2l2ZVR5cGVzKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMuY3BwLgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JM
ZW5ndGguY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpGaW5kQXJyYXlUeXBl
czo6dGFrZUFycmF5VHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnN5bnRoZXNpemVB
cnJheU9wZXJhdG9yTGVuZ3RoKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMuY3BwLgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9y
cy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkZpbmRBbGxUeXBlczo6dGFr
ZVVubmFtZWRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6RmluZEFsbFR5cGVzOjp0
YWtlTmFtZWRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6c3ludGhlc2l6ZUNvbnN0
cnVjdG9ycyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXpl
Q29uc3RydWN0b3JzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMuY3BwLgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6c3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rp
b25zKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVt
ZXJhdGlvbkZ1bmN0aW9ucy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcC4KKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpzeW50aGVzaXplU3RydWN0dXJlQWNjZXNz
b3JzKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1
Y3R1cmVBY2Nlc3NvcnMuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHAuCisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAy
MDE5LTAxLTExICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAg
ICAgICAgW1dITFNMXSBJbXBsZW1lbnQgdGhlIE5hbWVSZXNvbHZlcgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGlj
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0
SW5TZW1hbnRpYy5jcHAKaW5kZXggZTQyZWU0Nzk5MjE1OTRlZWMyZTEyZTFmMzEyNjY3MjMxODU1
OTczNS4uNDE0YmQ0NWE5YTJhZjc1NWE3ZjQ0MGIxZmIwMzQzNDAzOTA3MzEzYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNl
bWFudGljLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xCdWlsdEluU2VtYW50aWMuY3BwCkBAIC0yOSw2ICsyOSw4IEBACiAjaWYgRU5BQkxFKFdF
QkdQVSkKIAogI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAi
V0hMU0xJbmZlclR5cGVzLmgiCisjaW5jbHVkZSAiV0hMU0xJbnRyaW5zaWNzLmgiCiAjaW5jbHVk
ZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM3LDEw
ICszOSwzOCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotYm9vbCBC
dWlsdEluU2VtYW50aWM6OmlzQWNjZXB0YWJsZVR5cGUoY29uc3QgVW5uYW1lZFR5cGUmLCBjb25z
dCBJbnRyaW5zaWNzJikgY29uc3QKK2Jvb2wgQnVpbHRJblNlbWFudGljOjppc0FjY2VwdGFibGVU
eXBlKGNvbnN0IFVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgY29uc3QgSW50cmluc2ljcyYgaW50
cmluc2ljcykgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICBzd2l0Y2ggKG1fdmFyaWFibGUpIHsKKyAgICBjYXNlIFZhcmlhYmxlOjpT
Vkluc3RhbmNlSUQ6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5z
aWNzLnVpbnRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWVmVydGV4SUQ6CisgICAgICAg
IHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpOworICAg
IGNhc2UgVmFyaWFibGU6OlBTaXplOgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlw
ZSwgaW50cmluc2ljcy5mbG9hdFR5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZQb3NpdGlv
bjoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MuZmxvYXQ0
VHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVklzRnJvbnRGYWNlOgorICAgICAgICByZXR1
cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy5ib29sVHlwZSgpKTsKKyAgICBjYXNl
IFZhcmlhYmxlOjpTVlNhbXBsZUluZGV4OgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVk
VHlwZSwgaW50cmluc2ljcy51aW50VHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVklubmVy
Q292ZXJhZ2U6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNz
LnVpbnRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWVGFyZ2V0OgorICAgICAgICByZXR1
cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy5mbG9hdDRUeXBlKCkpOworICAgIGNh
c2UgVmFyaWFibGU6OlNWRGVwdGg6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBl
LCBpbnRyaW5zaWNzLmZsb2F0VHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVkNvdmVyYWdl
OgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy51aW50VHlw
ZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVkRpc3BhdGNoVGhyZWFkSUQ6CisgICAgICAgIHJl
dHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0M1R5cGUoKSk7CisgICAg
Y2FzZSBWYXJpYWJsZTo6U1ZHcm91cElEOgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVk
VHlwZSwgaW50cmluc2ljcy5mbG9hdDNUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWR3Jv
dXBJbmRleDoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3Mu
dWludFR5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZHcm91cFRocmVhZElEOgorICAgICAg
ICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy5mbG9hdDNUeXBlKCkpOwor
ICAgIH0KIH0KIAogYm9vbCBCdWlsdEluU2VtYW50aWM6OmlzQWNjZXB0YWJsZUZvclNoYWRlckl0
ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEZ1bmN0aW9u
RGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlwZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExp
dGVyYWxUeXBlLmNwcAppbmRleCAzMzI1Y2M1ZDE5NTA1YWM4MGNiOTE4MWZjYjUwOWZiNTRmY2Ri
Y2M0Li44MWM5ZGRlZWM3N2I3NjQ0ZjI0N2QyY2ZhZWI3MTBmNjE2MDg1ZWE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVy
YWxUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xGbG9hdExpdGVyYWxUeXBlLmNwcApAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgQVNU
IHsKIAogRmxvYXRMaXRlcmFsVHlwZTo6RmxvYXRMaXRlcmFsVHlwZShMZXhlcjo6VG9rZW4mJiBv
cmlnaW4sIGZsb2F0IHZhbHVlKQogICAgIDogbV92YWx1ZSh2YWx1ZSkKLSAgICAsIG1fcHJlZmVy
cmVkVHlwZShtYWtlVW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+KFdURk1vdmUob3JpZ2luKSwgU3Ry
aW5nKCJmbG9hdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBUeXBlQXJndW1lbnRz
KCkpKQorICAgICwgbV9wcmVmZXJyZWRUeXBlKG1ha2VVbmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4o
V1RGTW92ZShvcmlnaW4pLCAiZmxvYXQiX3N0ciwgVHlwZUFyZ3VtZW50cygpKSkKIHsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
SW5kZXhFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xJbmRleEV4cHJlc3Npb24uaAppbmRleCBhYjg5Nzc0MGYzZjJmZGY0YzNkY2M2YmU4
NmVmM2EwYzJkN2E0ODIwLi4yNWJhNmU3OGE1OWY3Njc4ODYyYjg0ODUwNDhmOWRlYThmMDBiNzll
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xJbmRleEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Npb24uaApAQCAtNTQsMTcgKzU0LDE3IEBAIHB1Ymxp
YzoKIAogICAgIFN0cmluZyBnZXRGdW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQogICAgIHsK
LSAgICAgICAgcmV0dXJuIFN0cmluZygib3BlcmF0b3JbXSIsIFN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOworICAgICAgICByZXR1cm4gIm9wZXJhdG9yW10iX3N0cjsKICAgICB9CiAKICAg
ICBTdHJpbmcgc2V0RnVuY3Rpb25OYW1lKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAg
IHJldHVybiBTdHJpbmcoIm9wZXJhdG9yJltdIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7CisgICAgICAgIHJldHVybiAib3BlcmF0b3ImW10iX3N0cjsKICAgICB9CiAKICAgICBTdHJp
bmcgYW5kRnVuY3Rpb25OYW1lKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHJldHVy
biBTdHJpbmcoIm9wZXJhdG9yW109IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Cisg
ICAgICAgIHJldHVybiAib3BlcmF0b3JbXT0iX3N0cjsKICAgICB9CiAKICAgICBFeHByZXNzaW9u
JiBpbmRleEV4cHJlc3Npb24oKSB7IHJldHVybiBzdGF0aWNfY2FzdDxFeHByZXNzaW9uJj4obV9p
bmRleCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwCmluZGV4IDMyMjM2
NDEzOWI3NGZiNjEwNmE3YmNmNDM1OTE1MjY0OWY5ZDA4N2MuLmU4N2FjZGFjYWI3OTI3YzQ5MTk2
ZGNiNDlmODRiNjA5YzdmMmIyMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBl
LmNwcApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgQVNUIHsKIAogSW50ZWdlckxpdGVyYWxU
eXBlOjpJbnRlZ2VyTGl0ZXJhbFR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBpbnQgdmFsdWUp
CiAgICAgOiBtX3ZhbHVlKHZhbHVlKQotICAgICwgbV9wcmVmZXJyZWRUeXBlKG1ha2VVbmlxdWVS
ZWY8VHlwZVJlZmVyZW5jZT4oV1RGTW92ZShvcmlnaW4pLCBTdHJpbmcoImludCIsIFN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBUeXBlQXJndW1lbnRzKCkpKQorICAgICwgbV9wcmVmZXJy
ZWRUeXBlKG1ha2VVbmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4oV1RGTW92ZShvcmlnaW4pLCAiaW50
Il9zdHIsIFR5cGVBcmd1bWVudHMoKSkpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1h
bnRpYy5jcHAKaW5kZXggNjVmYmIzM2QzOWQxM2JlNDI4MTk0YTFkYTQxZjYyNGJmMjNiZGE5OS4u
ODQ0MDk2MGM2ZTNiNDg3MmQ5ZTkzNDQzZmI4OGM3MzU4ZWQzNmNiZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRp
Yy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
UmVzb3VyY2VTZW1hbnRpYy5jcHAKQEAgLTI5LDYgKzI5LDggQEAKICNpZiBFTkFCTEUoV0VCR1BV
KQogCiAjaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEluZmVyVHlw
ZXMuaCIKKyNpbmNsdWRlICJXSExTTEludHJpbnNpY3MuaCIKICNpbmNsdWRlICJXSExTTFJlZmVy
ZW5jZVR5cGUuaCIKICNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKIApAQCAtMzgsMTAg
KzQwLDQyIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBBU1QgewogCi1ib29sIFJl
c291cmNlU2VtYW50aWM6OmlzQWNjZXB0YWJsZVR5cGUoY29uc3QgVW5uYW1lZFR5cGUmLCBjb25z
dCBJbnRyaW5zaWNzJikgY29uc3QKK2Jvb2wgUmVzb3VyY2VTZW1hbnRpYzo6aXNBY2NlcHRhYmxl
VHlwZShjb25zdCBVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIGNvbnN0IEludHJpbnNpY3MmIGlu
dHJpbnNpY3MpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCi0gICAgcmV0
dXJuIHRydWU7CisgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICBjYXNlIE1vZGU6OlVub3JkZXJl
ZEFjY2Vzc1ZpZXc6CisgICAgICAgIGlmIChpczxSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkp
IHsKKyAgICAgICAgICAgIGF1dG8mIHJlZmVyZW5jZVR5cGUgPSBkb3duY2FzdDxSZWZlcmVuY2VU
eXBlPih1bm5hbWVkVHlwZSk7CisgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlVHlwZS5hZGRy
ZXNzU3BhY2UoKSA9PSBSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkNvbnN0YW50IHx8IHJl
ZmVyZW5jZVR5cGUuYWRkcmVzc1NwYWNlKCkgPT0gUmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNl
OjpEZXZpY2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzPEFycmF5VHlwZT4odW5uYW1lZFR5
cGUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChpczxUeXBlUmVmZXJl
bmNlPih1bm5hbWVkVHlwZSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBk
b3duY2FzdDxUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSk7CisgICAgICAgICAgICBBU1NFUlQo
dHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgICAgICBpZiAoaXM8TmF0aXZl
VHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZl
cmVuY2UucmVzb2x2ZWRUeXBlKCkpLmlzVGV4dHVyZSgpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBjYXNlIE1vZGU6OlRleHR1cmU6CisgICAgICAgIGlmIChpczxSZWZl
cmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVm
ZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpLmFkZHJlc3NTcGFjZSgpID09IFJlZmVyZW5jZVR5cGU6
OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ7CisgICAgICAgIGlmIChpczxBcnJheVR5cGU+KHVubmFt
ZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoaXM8VHlwZVJl
ZmVyZW5jZT4odW5uYW1lZFR5cGUpKSB7CisgICAgICAgICAgICBhdXRvJiB0eXBlUmVmZXJlbmNl
ID0gZG93bmNhc3Q8VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpOworICAgICAgICAgICAgQVNT
RVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICAgICAgaWYgKGlzPE5h
dGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCp0eXBl
UmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKS5pc1RleHR1cmUoKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBNb2RlOjpCdWZmZXI6CisgICAgICAgIGlmIChpczxS
ZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8
UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpLmFkZHJlc3NTcGFjZSgpID09IFJlZmVyZW5jZVR5
cGU6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ7CisgICAgICAgIHJldHVybiBpczxBcnJheVR5cGU+
KHVubmFtZWRUeXBlKTsKKyAgICBjYXNlIE1vZGU6OlNhbXBsZXI6CisgICAgICAgIHJldHVybiBt
YXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLnNhbXBsZXJUeXBlKCkpOworICAgIH0KIH0K
IAogYm9vbCBSZXNvdXJjZVNlbWFudGljOjppc0FjY2VwdGFibGVGb3JTaGFkZXJJdGVtRGlyZWN0
aW9uKFNoYWRlckl0ZW1EaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBGdW5jdGlvbkRlZmluaXRp
b24mKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5
cGUuY3BwCmluZGV4IGJmMzFhM2M2ZTc5YWQ1MjEwMDI4M2Q3ZGZlODJiNDZmYTY2MzZmYTIuLjAx
ZjMxOTc5MTQ2YmM3YzRjZTgzNWNiOGY1ZjVkZGM0MmYwYTFlYzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxp
dGVyYWxUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHAKQEAgLTQyLDcgKzQyLDcgQEAg
bmFtZXNwYWNlIEFTVCB7CiAKIFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlOjpVbnNpZ25lZElu
dGVnZXJMaXRlcmFsVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIHVuc2lnbmVkIHZhbHVlKQog
ICAgIDogbV92YWx1ZSh2YWx1ZSkKLSAgICAsIG1fcHJlZmVycmVkVHlwZShtYWtlVW5pcXVlUmVm
PFR5cGVSZWZlcmVuY2U+KFdURk1vdmUob3JpZ2luKSwgU3RyaW5nKCJ1aW50IiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFR5cGVBcmd1bWVudHMoKSkpCisgICAgLCBtX3ByZWZlcnJl
ZFR5cGUobWFrZVVuaXF1ZVJlZjxUeXBlUmVmZXJlbmNlPihXVEZNb3ZlKG9yaWdpbiksICJ1aW50
Il9zdHIsIFR5cGVBcmd1bWVudHMoKSkpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0
ZUZ1bmN0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTdiNDYyZTBjMWYzN2FkM2NhMmM3MmM5OThlZWI1
ZDM2ZGQyY2RiOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCkBAIC0wLDAgKzEsMTEy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMQ2hl
Y2tEdXBsaWNhdGVGdW5jdGlvbnMuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRl
ICJXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgi
CisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJl
bmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworYm9v
bCBjaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyhjb25zdCBQcm9ncmFtJiBwcm9ncmFtKQoreworICAg
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPGNvbnN0IEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbj4+IGZ1bmN0aW9uczsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHBy
b2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKQorICAgICAgICBmdW5jdGlvbnMuYXBwZW5kKHN0
YXRpY19jYXN0PGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJj4oZnVuY3Rpb25EZWZpbml0
aW9uKSk7CisgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3Jh
bS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKQorICAgICAgICBmdW5jdGlvbnMuYXBwZW5k
KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiY+KG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKworICAgIHN0ZDo6c29ydChmdW5jdGlvbnMuYmVnaW4o
KSwgZnVuY3Rpb25zLmVuZCgpLCBbXShjb25zdCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGEs
IGNvbnN0IEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgYikgLT4gYm9vbCB7CisgICAgICAgIGlm
IChhLm5hbWUoKS5sZW5ndGgoKSA8IGIubmFtZSgpLmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGlmIChhLm5hbWUoKS5sZW5ndGgoKSA+IGIubmFtZSgpLmxlbmd0
aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYS5uYW1lKCkubGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGEubmFt
ZSgpW2ldIDwgYi5uYW1lKClbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICBpZiAoYS5uYW1lKClbaV0gPiBiLm5hbWUoKVtpXSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0pOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25zLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IGZ1bmN0aW9ucy5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkgIT0gZnVuY3Rpb25zW2pd
LmdldCgpLm5hbWUoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChp
czxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+KGZ1bmN0aW9uc1tpXS5nZXQoKSkgJiYg
aXM8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPihmdW5jdGlvbnNbal0uZ2V0KCkpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uc1tpXS5n
ZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IGZ1bmN0aW9uc1tqXS5nZXQoKS5wYXJhbWV0ZXJz
KCkuc2l6ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGZ1
bmN0aW9uc1tpXS5nZXQoKS5pc0Nhc3QoKSAmJiAhbWF0Y2hlcyhmdW5jdGlvbnNbaV0uZ2V0KCku
dHlwZSgpLCBmdW5jdGlvbnNbal0uZ2V0KCkudHlwZSgpKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIGJvb2wgc2FtZSA9IHRydWU7CisgICAgICAgICAgICBmb3IgKHNp
emVfdCBrID0gMDsgayA8IGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyAr
K2spIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMoKmZ1bmN0aW9uc1tpXS5nZXQoKS5w
YXJhbWV0ZXJzKClba10udHlwZSgpLCAqZnVuY3Rpb25zW2pdLmdldCgpLnBhcmFtZXRlcnMoKVtr
XS50eXBlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHNhbWUgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHNhbWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLm5hbWUoKSA9PSAi
b3BlcmF0b3ImW10iICYmIGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09
IDIKKyAgICAgICAgICAgICYmIGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihzdGF0aWNfY2Fz
dDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJz
KClbMF0udHlwZSgpKSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHR5cGUgPSBzdGF0aWNfY2FzdDxj
b25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClb
MV0udHlwZSgpKTsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHJlc29sdmVkVHlwZSA9IGRvd25jYXN0PEFT
VDo6VHlwZVJlZmVyZW5jZT4odHlwZSkucmVzb2x2ZWRUeXBlKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqcmVzb2x2ZWRUeXBlKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0g
ZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCpyZXNvbHZlZFR5cGUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0g
InVpbnQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkubmFtZSgpID09ICJvcGVyYXRvci5sZW5n
dGgiICYmIGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEKKyAgICAg
ICAgICAgICYmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3Qg
QVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5
cGUoKSkpCisgICAgICAgICAgICB8fCBpczxBU1Q6OkFycmF5VHlwZT4oc3RhdGljX2Nhc3Q8Y29u
c3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBd
LnR5cGUoKSkpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZWxzZSBpZiAo
ZnVuY3Rpb25zW2ldLmdldCgpLm5hbWUoKSA9PSAib3BlcmF0b3I9PSIKKyAgICAgICAgICAgICYm
IGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIKKyAgICAgICAgICAg
ICYmIGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVk
VHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSkpCisgICAg
ICAgICAgICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6
VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkp
KQorICAgICAgICAgICAgJiYgbWF0Y2hlcyhzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRU
eXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKSwgc3RhdGlj
X2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1l
dGVycygpWzFdLnR5cGUoKSkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9u
cy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxp
Y2F0ZUZ1bmN0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxY2FmNTVjNTZkYjhjNWYxYmJiNDcxOTAwMzk0
YzQzZTM0MDE5NmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmgKQEAgLTAsMCArMSw0MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2lu
Y2x1ZGUgIldITFNMUHJvZ3JhbS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFj
ZSBXSExTTCB7CisKK2Jvb2wgY2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMoY29uc3QgUHJvZ3JhbSYp
OworCit9CisKK30KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmluc2ljcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3YzdmZmZm
ZjFjNDQwOGJiNzdjZjg5ZjFiZDdlYTYzNzE0ZDUzNTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuY3BwCkBAIC0w
LDAgKzEsNDI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldITFNMSW50cmluc2ljcy5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldI
TFNMQ29uc3RhbnRFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIK
KyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworSW50cmluc2ljczo6
SW50cmluc2ljcygpCisgICAgOiBtX3RleHR1cmVUeXBlTmFtZXMgeyAiVGV4dHVyZTFEIl9zdHIs
ICJSV1RleHR1cmUxRCJfc3RyLCAiVGV4dHVyZTFEQXJyYXkiX3N0ciwgIlJXVGV4dHVyZTFEQXJy
YXkiX3N0ciwgIlRleHR1cmUyRCJfc3RyLCAiUldUZXh0dXJlMkQiX3N0ciwgIlRleHR1cmUyREFy
cmF5Il9zdHIsICJSV1RleHR1cmUyREFycmF5Il9zdHIsICJUZXh0dXJlM0QiX3N0ciwgIlJXVGV4
dHVyZTNEIl9zdHIsICJUZXh0dXJlQ3ViZSJfc3RyIH0KKyAgICAsIG1fdGV4dHVyZUlubmVyVHlw
ZU5hbWVzIHsgInVjaGFyIl9zdHIsICJ1c2hvcnQiX3N0ciwgICJ1aW50Il9zdHIsICJjaGFyIl9z
dHIsICJzaG9ydCJfc3RyLCAiaW50Il9zdHIsICJoYWxmIl9zdHIsICJmbG9hdCJfc3RyIH0KKyAg
ICAsIG1fZGVwdGhUZXh0dXJlSW5uZXJUeXBlcyB7ICJoYWxmIl9zdHIsICJmbG9hdCJfc3RyIH0K
K3sKKyAgICBBU1NFUlQobV90ZXh0dXJlVHlwZU5hbWVzLnNpemUoKSA9PSAxMSk7IC8vIGZ1bGxU
ZXh0dXJlcyBoYXJkY29kZXMgdGhlIGxlbmd0aCBvZiB0aGlzIGFycmF5LgorICAgIEFTU0VSVCht
X3RleHR1cmVJbm5lclR5cGVOYW1lcy5zaXplKCkgPT0gOCk7IC8vIGZ1bGxUZXh0dXJlcyBoYXJk
Y29kZXMgdGhlIGxlbmd0aCBvZiB0aGlzIGFycmF5LgorICAgIEFTU0VSVChtX2RlcHRoVGV4dHVy
ZUlubmVyVHlwZXMuc2l6ZSgpID09IDIpOyAvLyB0ZXh0dXJlRGVwdGgyRCAmIGZyaWVuZHMgaGFy
ZGNvZGVzIHRoZSBsZW5ndGggb2YgdGhpcyBhcnJheS4KK30KKwordm9pZCBJbnRyaW5zaWNzOjph
ZGQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJikKK3sKKyAgICAvLyBGSVhNRTogUG9w
dWxhdGUgdGhpcy4KK30KKworYm9vbCBJbnRyaW5zaWNzOjphZGRQcmltaXRpdmUoQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAobmF0
aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ2b2lk
IikKKyAgICAgICAgbV92b2lkVHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxz
ZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYm9vbCIpCisgICAgICAgIG1f
Ym9vbFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInVjaGFyIikgeworICAgICAgICBuYXRpdmVUeXBlRGVj
bGFyYXRpb24uc2V0SXNJbnQoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElz
TnVtYmVyKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRJ
bnRlZ2VyKFtdKGludCB4KSB7CisgICAgICAgICAgICByZXR1cm4geCA+PSAwICYmIHggPD0gMHhG
RjsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXBy
ZXNlbnRVbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQgeCkgeworICAgICAgICAgICAgcmV0dXJu
IHggPD0gMHhGRjsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5z
ZXRDYW5SZXByZXNlbnRGbG9hdChbXShmbG9hdCB4KSB7CisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHgpKSA9PSB4OworICAgICAgICB9
KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldFN1Y2Nlc3NvcihbXShpbnQ2NF90
IHgpIC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KHggKyAxKTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRG
b3JtYXRWYWx1ZUZyb21JbnRlZ2VyKFtdKGludCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90Pih4KTsKKyAgICAgICAgfSk7CisgICAgICAgIG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21VbnNpZ25lZEludGVnZXIoW10o
dW5zaWduZWQgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
dWludDhfdD4oeCk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24u
c2V0SXRlcmF0ZUFsbFZhbHVlcyhbXShjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2woaW50NjRfdCk+
JiBjYWxsYmFjaykgeworICAgICAgICAgICAgZm9yIChpbnQ2NF90IGkgPSAwOyBpIDwgMHgxMDA7
ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhpKSkKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBtX3VjaGFy
VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgfSBlbHNlIGlmIChuYXRpdmVUeXBl
RGVjbGFyYXRpb24ubmFtZSgpID09ICJ1c2hvcnQiKSB7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5zZXRJc0ludCgpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNO
dW1iZXIoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudElu
dGVnZXIoW10oaW50IHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4ID49IDAgJiYgeCA8PSAweEZG
RkY7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVw
cmVzZW50VW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgpIHsKKyAgICAgICAgICAgIHJldHVy
biB4IDw9IDB4RkZGRjsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5zZXRDYW5SZXByZXNlbnRGbG9hdChbXShmbG9hdCB4KSB7CisgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PHVpbnQxNl90Pih4KSkgPT0geDsKKyAgICAg
ICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRTdWNjZXNzb3IoW10oaW50
NjRfdCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50
MTZfdD4oeCArIDEpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9u
LnNldEZvcm1hdFZhbHVlRnJvbUludGVnZXIoW10oaW50IHgpIC0+IGludDY0X3QgeworICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQxNl90Pih4KTsKKyAgICAgICAgfSk7CisgICAg
ICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21VbnNpZ25lZEludGVn
ZXIoW10odW5zaWduZWQgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8dWludDE2X3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xh
cmF0aW9uLnNldEl0ZXJhdGVBbGxWYWx1ZXMoW10oY29uc3Qgc3RkOjpmdW5jdGlvbjxib29sKGlu
dDY0X3QpPiYgY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGZvciAoaW50NjRfdCBpID0gMDsgaSA8
IDB4MTAwMDA7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhpKSkKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAg
ICBtX3VzaG9ydFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIH0gZWxzZSBpZiAo
bmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAidWludCIpIHsKKyAgICAgICAgbmF0aXZl
VHlwZURlY2xhcmF0aW9uLnNldElzSW50KCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5zZXRJc051bWJlcigpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVw
cmVzZW50SW50ZWdlcihbXShpbnQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHggPj0gMDsKKyAg
ICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRV
bnNpZ25lZEludGVnZXIoW10odW5zaWduZWQpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2Vu
dEZsb2F0KFtdKGZsb2F0IHgpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9h
dD4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHgpKSA9PSB4OworICAgICAgICB9KTsKKyAgICAgICAg
bmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldFN1Y2Nlc3NvcihbXShpbnQ2NF90IHgpIC0+IGludDY0
X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pih4ICsgMSk7Cisg
ICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0VmFsdWVG
cm9tSW50ZWdlcihbXShpbnQgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnNldEZvcm1hdFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdlcihbXSh1bnNpZ25lZCB4
KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
eCk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXRlcmF0
ZUFsbFZhbHVlcyhbXShjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2woaW50NjRfdCk+JiBjYWxsYmFj
aykgeworICAgICAgICAgICAgZm9yIChpbnQ2NF90IGkgPSAwOyBpIDwgMHgxMDAwMDAwMDA7ICsr
aSkgeworICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhpKSkKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBtX3VpbnRUeXBl
ID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICB9IGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5uYW1lKCkgPT0gImNoYXIiKSB7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5zZXRJc0ludCgpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNOdW1iZXIo
KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzU2lnbmVkKCk7CisgICAgICAg
IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRJbnRlZ2VyKFtdKGludCB4KSB7
CisgICAgICAgICAgICByZXR1cm4geCA+PSAtMTI4ICYmIHggPD0gMTI3OworICAgICAgICB9KTsK
KyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudFVuc2lnbmVkSW50
ZWdlcihbXSh1bnNpZ25lZCB4KSB7CisgICAgICAgICAgICByZXR1cm4geCA8PSAxMjc7CisgICAg
ICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50Rmxv
YXQoW10oZmxvYXQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pihz
dGF0aWNfY2FzdDxpbnQ4X3Q+KHgpKSA9PSB4OworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZl
VHlwZURlY2xhcmF0aW9uLnNldFN1Y2Nlc3NvcihbXShpbnQ2NF90IHgpIC0+IGludDY0X3Qgewor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDhfdD4oeCArIDEpOworICAgICAgICB9
KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEZvcm1hdFZhbHVlRnJvbUludGVn
ZXIoW10oaW50IHgpIC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGludDhfdD4oeCk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24u
c2V0Rm9ybWF0VmFsdWVGcm9tVW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgpIC0+IGludDY0
X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDhfdD4oeCk7CisgICAgICAg
IH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXRlcmF0ZUFsbFZhbHVlcyhb
XShjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2woaW50NjRfdCk+JiBjYWxsYmFjaykgeworICAgICAg
ICAgICAgZm9yIChpbnQ2NF90IGkgPSAtMTI4OyBpIDwgMTI4OyArK2kpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoY2FsbGJhY2soaSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgbV9jaGFyVHlwZSA9ICZuYXRpdmVUeXBlRGVj
bGFyYXRpb247CisgICAgfSBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09
ICJzaG9ydCIpIHsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzSW50KCk7Cisg
ICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc051bWJlcigpOworICAgICAgICBuYXRp
dmVUeXBlRGVjbGFyYXRpb24uc2V0SXNTaWduZWQoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xh
cmF0aW9uLnNldENhblJlcHJlc2VudEludGVnZXIoW10oaW50IHgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB4ID49IC0zMjc2OCAmJiB4IDw9IDMyNzY3OworICAgICAgICB9KTsKKyAgICAgICAgbmF0
aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcihbXSh1bnNp
Z25lZCB4KSB7CisgICAgICAgICAgICByZXR1cm4geCA8PSAzMjc2NzsKKyAgICAgICAgfSk7Cisg
ICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRGbG9hdChbXShmbG9h
dCB4KSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0
PGludDE2X3Q+KHgpKSA9PSB4OworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xh
cmF0aW9uLnNldFN1Y2Nlc3NvcihbXShpbnQ2NF90IHgpIC0+IGludDY0X3QgeworICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDE2X3Q+KHggKyAxKTsKKyAgICAgICAgfSk7CisgICAg
ICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21JbnRlZ2VyKFtdKGlu
dCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQxNl90
Pih4KTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3Jt
YXRWYWx1ZUZyb21VbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQgeCkgLT4gaW50NjRfdCB7Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MTZfdD4oeCk7CisgICAgICAgIH0pOwor
ICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXRlcmF0ZUFsbFZhbHVlcyhbXShjb25z
dCBzdGQ6OmZ1bmN0aW9uPGJvb2woaW50NjRfdCk+JiBjYWxsYmFjaykgeworICAgICAgICAgICAg
Zm9yIChpbnQ2NF90IGkgPSAtMzI3Njg7IGkgPCAzMjc2ODsgKytpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGNhbGxiYWNrKGkpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIG1fc2hvcnRUeXBlID0gJm5hdGl2ZVR5cGVEZWNs
YXJhdGlvbjsKKyAgICB9IGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0g
ImludCIpIHsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzSW50KCk7CisgICAg
ICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc051bWJlcigpOworICAgICAgICBuYXRpdmVU
eXBlRGVjbGFyYXRpb24uc2V0SXNTaWduZWQoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0
aW9uLnNldENhblJlcHJlc2VudEludGVnZXIoW10oaW50KSB7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5S
ZXByZXNlbnRVbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQgeCkgeworICAgICAgICAgICAgcmV0
dXJuIHggPD0gMjE0NzQ4MzY0NzsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5zZXRDYW5SZXByZXNlbnRGbG9hdChbXShmbG9hdCB4KSB7CisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PGludDMyX3Q+KHgpKSA9PSB4Owor
ICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldFN1Y2Nlc3Nvcihb
XShpbnQ2NF90IHgpIC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGludDMyX3Q+KHggKyAxKTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21JbnRlZ2VyKFtdKGludCB4KSAtPiBpbnQ2NF90IHsKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Pih4KTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21VbnNpZ25lZElu
dGVnZXIoW10odW5zaWduZWQgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oeCk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVj
bGFyYXRpb24uc2V0SXRlcmF0ZUFsbFZhbHVlcyhbXShjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2wo
aW50NjRfdCk+JiBjYWxsYmFjaykgeworICAgICAgICAgICAgZm9yIChpbnQ2NF90IGkgPSAtMjE0
NzQ4MzY0NzsgaSA8IDIxNDc0ODM2NDg7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChjYWxs
YmFjayhpKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0pOworICAgICAgICBtX2ludFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAg
IH0gZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiaGFsZiIpIHsKKyAg
ICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzTnVtYmVyKCk7CisgICAgICAgIG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc0Zsb2F0aW5nKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5zZXRDYW5SZXByZXNlbnRJbnRlZ2VyKFtdKGludCkgeworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0
Q2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5z
ZXRDYW5SZXByZXNlbnRGbG9hdChbXShmbG9hdCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0pOworICAgICAgICBtX2hhbGZUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlv
bjsKKyAgICB9IGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImZsb2F0
IikgeworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNOdW1iZXIoKTsKKyAgICAg
ICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzRmxvYXRpbmcoKTsKKyAgICAgICAgbmF0aXZl
VHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudEludGVnZXIoW10oaW50KSB7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5zZXRDYW5SZXByZXNlbnRVbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xh
cmF0aW9uLnNldENhblJlcHJlc2VudEZsb2F0KFtdKGZsb2F0KSB7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIG1fZmxvYXRUeXBlID0gJm5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbjsKKyAgICB9IGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkg
PT0gImF0b21pY19pbnQiKQorICAgICAgICBtX2F0b21pY0ludFR5cGUgPSAmbmF0aXZlVHlwZURl
Y2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0g
ImF0b21pY191aW50IikKKyAgICAgICAgbV9hdG9taWNVaW50VHlwZSA9ICZuYXRpdmVUeXBlRGVj
bGFyYXRpb247CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
c2FtcGxlciIpCisgICAgICAgIG1fc2FtcGxlclR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9u
OworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgSW50cmluc2ljczo6YWRkVmVjdG9yKEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5uYW1lKCkgIT0gInZlY3RvciIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEFTU0VSVChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAy
KTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8QVNUOjpUeXBl
UmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOwor
ICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6Q29uc3RhbnRFeHByZXNzaW9u
PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzFdKSk7CisgICAgYXV0byYg
aW5uZXJUeXBlID0gc3RhdGljX2Nhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlJj4oV1RGOjpnZXQ8VW5p
cXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJn
dW1lbnRzKClbMF0pKTsKKyAgICBhdXRvJiBsZW5ndGhFeHByZXNzaW9uID0gV1RGOjpnZXQ8QVNU
OjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRz
KClbMV0pOworICAgIEFTU0VSVCghaW5uZXJUeXBlLnR5cGVBcmd1bWVudHMoKS5zaXplKCkpOwor
ICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiogYXJyYXk7CisgICAgaWYgKGlubmVyVHlw
ZS5uYW1lKCkgPT0gImJvb2wiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9yQm9vbDsKKyAgICBl
bHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJ1Y2hhciIpCisgICAgICAgIGFycmF5ID0gbV92
ZWN0b3JVY2hhcjsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJ1c2hvcnQiKQor
ICAgICAgICBhcnJheSA9IG1fdmVjdG9yVXNob3J0OworICAgIGVsc2UgaWYgKGlubmVyVHlwZS5u
YW1lKCkgPT0gInVpbnQiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9yVWludDsKKyAgICBlbHNl
IGlmIChpbm5lclR5cGUubmFtZSgpID09ICJjaGFyIikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3Rv
ckNoYXI7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAic2hvcnQiKQorICAgICAg
ICBhcnJheSA9IG1fdmVjdG9yU2hvcnQ7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9
PSAiaW50IikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3RvckludDsKKyAgICBlbHNlIGlmIChpbm5l
clR5cGUubmFtZSgpID09ICJoYWxmIikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3RvckhhbGY7Cisg
ICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiZmxvYXQiKQorICAgICAgICBhcnJheSA9
IG1fdmVjdG9yRmxvYXQ7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICBpbnQgbGVuZ3RoID0gbGVuZ3RoRXhwcmVzc2lvbi5pbnRlZ2VyTGl0ZXJhbCgpLnZhbHVl
KCk7CisgICAgQVNTRVJUKGxlbmd0aCA+PSAyICYmIGxlbmd0aCA8PSA0KTsKKyAgICBuYXRpdmVU
eXBlRGVjbGFyYXRpb24uc2V0SXNWZWN0b3IoKTsKKyAgICBhcnJheVtsZW5ndGggLSAyXSA9ICZu
YXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW50cmlu
c2ljczo6YWRkTWF0cml4KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVj
bGFyYXRpb24pCit7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgIT0gIm1h
dHJpeCIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChuYXRpdmVUeXBlRGVj
bGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAzKTsKKyAgICBBU1NFUlQoV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlw
ZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOworICAgIEFTU0VSVChXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRp
b24udHlwZUFyZ3VtZW50cygpWzFdKSk7CisgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJn
dW1lbnRzKClbMl0pKTsKKyAgICBhdXRvJiBpbm5lclR5cGUgPSBzdGF0aWNfY2FzdDxBU1Q6OlR5
cGVSZWZlcmVuY2UmPihXVEY6OmdldDxVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0
aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOworICAgIGF1dG8mIHJvd0V4
cHJlc3Npb24gPSBXVEY6OmdldDxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsxXSk7CisgICAgYXV0byYgY29sdW1uRXhwcmVzc2lv
biA9IFdURjo6Z2V0PEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRp
b24udHlwZUFyZ3VtZW50cygpWzJdKTsKKyAgICBBU1NFUlQoIWlubmVyVHlwZS50eXBlQXJndW1l
bnRzKCkuc2l6ZSgpKTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogKCphcnJheSlb
M107CisgICAgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gImhhbGYiKQorICAgICAgICBhcnJheSA9
IG1fbWF0cml4SGFsZjsKKyAgICBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiZmxvYXQiKQorICAg
ICAgICBhcnJheSA9IG1fbWF0cml4RmxvYXQ7CisgICAgaW50IHJvdyA9IHJvd0V4cHJlc3Npb24u
aW50ZWdlckxpdGVyYWwoKS52YWx1ZSgpOworICAgIEFTU0VSVChyb3cgPj0gMiAmJiByb3cgPD0g
NCk7CisgICAgaW50IGNvbHVtbiA9IGNvbHVtbkV4cHJlc3Npb24uaW50ZWdlckxpdGVyYWwoKS52
YWx1ZSgpOworICAgIEFTU0VSVChjb2x1bW4gPj0gMiAmJiBjb2x1bW4gPD0gNCk7CisgICAgbmF0
aXZlVHlwZURlY2xhcmF0aW9uLnNldElzTWF0cml4KCk7CisgICAgYXJyYXlbcm93IC0gMl1bY29s
dW1uIC0gMl0gPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIEludHJpbnNpY3M6OmFkZEZ1bGxUZXh0dXJlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24sIEFTVDo6VHlwZVJlZmVyZW5jZSYgaW5uZXJUeXBl
KQoreworICAgIHVuc2lnbmVkIHRleHR1cmVUeXBlSW5kZXggPSBtX3RleHR1cmVUeXBlTmFtZXMu
c2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RleHR1cmVUeXBlTmFtZXMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkg
PT0gbV90ZXh0dXJlVHlwZU5hbWVzW2ldKQorICAgICAgICAgICAgdGV4dHVyZVR5cGVJbmRleCA9
IGk7CisgICAgfQorICAgIGlmICh0ZXh0dXJlVHlwZUluZGV4ID09IG1fdGV4dHVyZVR5cGVOYW1l
cy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVuc2lnbmVkIGlubmVyVHlw
ZUluZGV4ID0gbV90ZXh0dXJlSW5uZXJUeXBlTmFtZXMuc2l6ZSgpOworICAgIHVuc2lnbmVkIHZl
Y3Rvckxlbmd0aDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90ZXh0dXJlSW5uZXJU
eXBlTmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGlubmVyVHlwZS5uYW1lKCkuc3Rh
cnRzV2l0aChtX3RleHR1cmVJbm5lclR5cGVOYW1lc1tpXSkpIHsKKyAgICAgICAgICAgIHRleHR1
cmVUeXBlSW5kZXggPSBpOworICAgICAgICAgICAgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gbV90
ZXh0dXJlSW5uZXJUeXBlTmFtZXNbaV0pCisgICAgICAgICAgICAgICAgdmVjdG9yTGVuZ3RoID0g
MTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChpbm5lclR5cGUu
bmFtZSgpLmxlbmd0aCgpID09IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzW2ldLmxlbmd0aCgpICsg
MSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlubmVyVHlwZS5uYW1lKClbaW5uZXJUeXBlLm5h
bWUoKS5sZW5ndGgoKSAtIDFdID09ICcyJworICAgICAgICAgICAgICAgICAgICB8fCBpbm5lclR5
cGUubmFtZSgpW2lubmVyVHlwZS5uYW1lKCkubGVuZ3RoKCkgLSAxXSA9PSAnMycKKyAgICAgICAg
ICAgICAgICAgICAgfHwgaW5uZXJUeXBlLm5hbWUoKVtpbm5lclR5cGUubmFtZSgpLmxlbmd0aCgp
IC0gMV0gPT0gJzQnKTsKKyAgICAgICAgICAgICAgICB2ZWN0b3JMZW5ndGggPSBpbm5lclR5cGUu
bmFtZSgpW2lubmVyVHlwZS5uYW1lKCkubGVuZ3RoKCkgLSAxXSAtICcwJzsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQoaW5uZXJUeXBlSW5kZXggIT0gbV90ZXh0
dXJlSW5uZXJUeXBlTmFtZXMuc2l6ZSgpKTsKKyAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0
SXNUZXh0dXJlKCk7CisgICAgbV9mdWxsVGV4dHVyZXNbdGV4dHVyZVR5cGVJbmRleF1baW5uZXJU
eXBlSW5kZXhdW3ZlY3Rvckxlbmd0aCAtIDFdID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnRyaW5zaWNzOjphZGREZXB0aFRleHR1cmUoQVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiwgQVNUOjpUeXBl
UmVmZXJlbmNlJiBpbm5lclR5cGUpCit7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24q
KiB0ZXh0dXJlOworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJUZXh0
dXJlRGVwdGgyRCIpCisgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVEZXB0aDJEOworICAgIGVs
c2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlJXVGV4dHVyZURlcHRoMkQi
KQorICAgICAgICB0ZXh0dXJlID0gbV9yd1RleHR1cmVEZXB0aDJEOworICAgIGVsc2UgaWYgKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlRleHR1cmVEZXB0aDJEQXJyYXkiKQorICAg
ICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlRGVwdGgyREFycmF5OworICAgIGVsc2UgaWYgKG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlJXVGV4dHVyZURlcHRoMkRBcnJheSIpCisgICAg
ICAgIHRleHR1cmUgPSBtX3J3VGV4dHVyZURlcHRoMkRBcnJheTsKKyAgICBlbHNlIGlmIChuYXRp
dmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJUZXh0dXJlRGVwdGhDdWJlIikKKyAgICAgICAg
dGV4dHVyZSA9IG1fdGV4dHVyZURlcHRoQ3ViZTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHVuc2lnbmVkIGlubmVyVHlwZUluZGV4ID0gbV9kZXB0aFRleHR1
cmVJbm5lclR5cGVzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9kZXB0
aFRleHR1cmVJbm5lclR5cGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChpbm5lclR5cGUu
bmFtZSgpID09IG1fZGVwdGhUZXh0dXJlSW5uZXJUeXBlc1tpXSkKKyAgICAgICAgICAgIGlubmVy
VHlwZUluZGV4ID0gaTsKKyAgICB9CisgICAgQVNTRVJUKGlubmVyVHlwZUluZGV4ICE9IG1fZGVw
dGhUZXh0dXJlSW5uZXJUeXBlcy5zaXplKCkpOworICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5z
ZXRJc1RleHR1cmUoKTsKKyAgICB0ZXh0dXJlW2lubmVyVHlwZUluZGV4XSA9ICZuYXRpdmVUeXBl
RGVjbGFyYXRpb247CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSW50cmluc2ljczo6YWRk
VGV4dHVyZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9u
KQoreworICAgIEFTU0VSVChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNp
emUoKSA9PSAxKTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8
QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMo
KVswXSkpOworICAgIGF1dG8mIGlubmVyVHlwZSA9IHN0YXRpY19jYXN0PEFTVDo6VHlwZVJlZmVy
ZW5jZSY+KFdURjo6Z2V0PFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBl
RGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgQVNTRVJUKCFpbm5lclR5cGUu
dHlwZUFyZ3VtZW50cygpLnNpemUoKSk7CisgICAgaWYgKGFkZEZ1bGxUZXh0dXJlKG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbiwgaW5uZXJUeXBlKSkgeworICAgICAgICBtX3RleHR1cmVTZXQuYWRkKCZu
YXRpdmVUeXBlRGVjbGFyYXRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChh
ZGREZXB0aFRleHR1cmUobmF0aXZlVHlwZURlY2xhcmF0aW9uLCBpbm5lclR5cGUpKQorICAgICAg
ICBtX3RleHR1cmVTZXQuYWRkKCZuYXRpdmVUeXBlRGVjbGFyYXRpb24pOworfQorCit2b2lkIElu
dHJpbnNpY3M6OmFkZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xh
cmF0aW9uKQoreworICAgIGlmIChhZGRQcmltaXRpdmUobmF0aXZlVHlwZURlY2xhcmF0aW9uKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChhZGRWZWN0b3IobmF0aXZlVHlwZURlY2xhcmF0aW9u
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChhZGRNYXRyaXgobmF0aXZlVHlwZURlY2xhcmF0
aW9uKSkKKyAgICAgICAgcmV0dXJuOworICAgIGFkZFRleHR1cmUobmF0aXZlVHlwZURlY2xhcmF0
aW9uKTsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNzLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZDM2ZjI4
MTA4N2FjZDhkYTYwMTI1NjcxNGE0ZmY0NTEyZmQxNTg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNzLmgKQEAgLTAs
MCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJH
UFUpCisKKyNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKKyNpbmNs
dWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgPGNzdHJpbmc+Cisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIEludHJp
bnNpY3MgeworcHVibGljOgorICAgIEludHJpbnNpY3MoKTsKKworICAgIHZvaWQgYWRkKEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpOworICAgIHZvaWQgYWRkKEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uJik7CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgdm9pZFR5
cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdm9pZFR5cGUpOworICAgICAgICBy
ZXR1cm4gKm1fdm9pZFR5cGU7CisgICAgfQorCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24mIGJvb2xUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2Jvb2xUeXBlKTsK
KyAgICAgICAgcmV0dXJuICptX2Jvb2xUeXBlOworICAgIH0KKworICAgIEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uJiBpbnRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2lu
dFR5cGUpOworICAgICAgICByZXR1cm4gKm1faW50VHlwZTsKKyAgICB9CisKKyAgICBBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbiYgdWludFR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fdWludFR5cGUpOworICAgICAgICByZXR1cm4gKm1fdWludFR5cGU7CisgICAgfQorCisg
ICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIHNhbXBsZXJUeXBlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX3NhbXBsZXJUeXBlKTsKKyAgICAgICAgcmV0dXJuICptX3NhbXBs
ZXJUeXBlOworICAgIH0KKworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBmbG9hdFR5
cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZmxvYXRUeXBlKTsKKyAgICAgICAg
cmV0dXJuICptX2Zsb2F0VHlwZTsKKyAgICB9CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiYgZmxvYXQzVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV92ZWN0b3JG
bG9hdFsxXSk7CisgICAgICAgIHJldHVybiAqbV92ZWN0b3JGbG9hdFsxXTsKKyAgICB9CisKKyAg
ICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgZmxvYXQ0VHlwZSgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQobV92ZWN0b3JGbG9hdFsyXSk7CisgICAgICAgIHJldHVybiAqbV92ZWN0
b3JGbG9hdFsyXTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBhZGRQcmltaXRpdmUoQVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKKyAgICBib29sIGFkZFZlY3RvcihBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiYpOworICAgIGJvb2wgYWRkTWF0cml4KEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uJik7CisgICAgYm9vbCBhZGRGdWxsVGV4dHVyZShBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiYsIEFTVDo6VHlwZVJlZmVyZW5jZSYpOworICAgIGJvb2wgYWRkRGVwdGhUZXh0dXJl
KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiwgQVNUOjpUeXBlUmVmZXJlbmNlJik7CisgICAg
dm9pZCBhZGRUZXh0dXJlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisKKyAgICBIYXNo
U2V0PGNvbnN0IEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKj4gbV90ZXh0dXJlU2V0OworCisg
ICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdm9pZFR5cGU7CisgICAgQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24qIG1fYm9vbFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24qIG1fdWNoYXJUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3Vz
aG9ydFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdWludFR5cGU7Cisg
ICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fY2hhclR5cGU7CisgICAgQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24qIG1fc2hvcnRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uKiBtX2ludFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1faGFs
ZlR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fZmxvYXRUeXBlOworICAg
IEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2F0b21pY0ludFR5cGU7CisgICAgQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fYXRvbWljVWludFR5cGU7CisgICAgQVNUOjpOYXRpdmVU
eXBlRGVjbGFyYXRpb24qIG1fc2FtcGxlclR5cGU7CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiogbV92ZWN0b3JCb29sWzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
KiBtX3ZlY3RvclVjaGFyWzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3Zl
Y3RvclVzaG9ydFszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JV
aW50WzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvckNoYXJbM107
CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9yU2hvcnRbM107CisgICAg
QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9ySW50WzNdOworICAgIEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvckhhbGZbM107CisgICAgQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24qIG1fdmVjdG9yRmxvYXRbM107CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiogbV9tYXRyaXhIYWxmWzNdWzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uKiBtX21hdHJpeEZsb2F0WzNdWzNdOworCisgICAgVmVjdG9yPFN0cmluZz4gbV90ZXh0dXJl
VHlwZU5hbWVzOworICAgIFZlY3RvcjxTdHJpbmc+IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzOwor
CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fZnVsbFRleHR1cmVzWzExXVs4XVs0
XTsKKworICAgIFZlY3RvcjxTdHJpbmc+IG1fZGVwdGhUZXh0dXJlSW5uZXJUeXBlczsKKyAgICBB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV90ZXh0dXJlRGVwdGgyRFsyXTsKKyAgICBBU1Q6
Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9yd1RleHR1cmVEZXB0aDJEWzJdOworICAgIEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3RleHR1cmVEZXB0aDJEQXJyYXlbMl07CisgICAgQVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fcndUZXh0dXJlRGVwdGgyREFycmF5WzJdOworICAg
IEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3RleHR1cmVEZXB0aEN1YmVbMl07Cit9Owor
Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKaW5kZXggNmJmMThlNjlhZmM1Yzhm
ZTUwZDc0NWU1NGQ5NjI2ZGRjMGQ1MGUwZi4uNDhmYTkzMDIyMDhhZmVmZWVlN2U2NDhjYmNmNWQz
NzM2M2I2M2UyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcApAQCAtMTk3LDcgKzE5Nyw3IEBAIHZvaWQg
TmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikK
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAoYXV0byogdHlwZXMgPSBtX25hbWVDb250
ZXh0LmdldFR5cGVzKGNhbGxFeHByZXNzaW9uLm5hbWUoKSkpIHsKICAgICAgICAgICAgICAgICBp
ZiAodHlwZXMtPnNpemUoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBm
dW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhTdHJpbmcoIm9wZXJhdG9yIGNh
c3QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGF1dG8qIGZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKCJvcGVy
YXRvciBjYXN0Il9zdHIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsRXhwcmVzc2lv
bi5zZXRDYXN0RGF0YSgoKnR5cGVzKVswXS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBjYWxsRXhwcmVzc2lvbi5zZXRPdmVybG9hZHMoKmZ1bmN0aW9ucyk7CiAgICAgICAgICAgICAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUHJvZ3JhbS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQcm9ncmFtLmgKaW5kZXggMGRjZjNmNWI4OTMzZWI0ZWRhYTczYTFhNWYxYTgyNDA1N2U4YTc5
OS4uYzkzYTc2N2Y4ZmQ5NGY4YjJjN2ViNWM3M2U1MWQ0YjMxNTE3Y2M3NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKQEAgLTI5
LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCiAj
aW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEludHJp
bnNpY3MuaCIKICNpbmNsdWRlICJXSExTTE5hbWVDb250ZXh0LmgiCiAjaW5jbHVkZSAiV0hMU0xO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVj
bGFyYXRpb24uaCIKQEAgLTcyLDE2ICs3MywxOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBhcHBlbmQo
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bikKICAgICB7CiAgICAgICAgIG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMuYXBwZW5kKG1h
a2VVbmlxdWVSZWY8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPihXVEZNb3ZlKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKSk7CisgICAgICAgIG1faW50cmluc2ljcy5hZGQoc3RhdGlj
X2Nhc3Q8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJj4obV9uYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9ucy5sYXN0KCkpKTsKICAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKHN0
YXRpY19jYXN0PEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiY+KG1fbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbnMubGFzdCgpKSk7CiAgICAgfQogCiAgICAgYm9vbCBhcHBlbmQoQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24mJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCiAgICAgewogICAg
ICAgICBtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24+KFdURk1vdmUobmF0aXZlVHlwZURlY2xhcmF0aW9uKSkpOwor
ICAgICAgICBtX2ludHJpbnNpY3MuYWRkKHN0YXRpY19jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uJj4obV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zLmxhc3QoKSkpOwogICAgICAgICByZXR1
cm4gbV9uYW1lQ29udGV4dC5hZGQoc3RhdGljX2Nhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24mPihtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnMubGFzdCgpKSk7CiAgICAgfQogCiAgICAgTmFt
ZUNvbnRleHQmIG5hbWVDb250ZXh0KCkgeyByZXR1cm4gbV9uYW1lQ29udGV4dDsgfQorICAgIElu
dHJpbnNpY3MmIGludHJpbnNpY3MoKSB7IHJldHVybiBtX2ludHJpbnNpY3M7IH0KICAgICBWZWN0
b3I8VW5pcXVlUmVmPEFTVDo6VHlwZURlZmluaXRpb24+PiYgdHlwZURlZmluaXRpb25zKCkgeyBy
ZXR1cm4gbV90eXBlRGVmaW5pdGlvbnM7IH0KICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6U3Ry
dWN0dXJlRGVmaW5pdGlvbj4+JiBzdHJ1Y3R1cmVEZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fc3Ry
dWN0dXJlRGVmaW5pdGlvbnM7IH0KICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RW51bWVyYXRp
b25EZWZpbml0aW9uPj4mIGVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX2VudW1l
cmF0aW9uRGVmaW5pdGlvbnM7IH0KQEAgLTkzLDYgKzk3LDcgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIE5hbWVDb250ZXh0IG1fbmFtZUNvbnRleHQ7CisgICAgSW50cmluc2ljcyBtX2ludHJp
bnNpY3M7CiAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OlR5cGVEZWZpbml0aW9uPj4gbV90eXBl
RGVmaW5pdGlvbnM7CiAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OlN0cnVjdHVyZURlZmluaXRp
b24+PiBtX3N0cnVjdHVyZURlZmluaXRpb25zOwogICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpF
bnVtZXJhdGlvbkRlZmluaXRpb24+PiBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnM7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5
cGVDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYxMTE4ZDBhOTU2ZWI1ODBlNDlk
NWJiYTM3NWVmMmU0NjE4ZWIwM2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNwcApAQCAtMCww
ICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
SExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5j
bHVkZSAiV0hMU0xWaXNpdG9yLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBSZWN1cnNpdmVUeXBl
Q2hlY2tlciA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICB+UmVjdXJzaXZlVHlwZUNo
ZWNrZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24m
IHR5cGVEZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQg
PSBtX3R5cGVzLmFkZCgmdHlwZURlZmluaXRpb24pOworICAgICAgICBpZiAoYWRkUmVzdWx0Lmlz
TmV3RW50cnkpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZURlZmluaXRpb24p
OworCisgICAgICAgIGF1dG8gc3VjY2VzcyA9IG1fdHlwZXMucmVtb3ZlKCZ0eXBlRGVmaW5pdGlv
bik7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisgICAgfQorCisg
ICAgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRp
b24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZXMuYWRk
KCZzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5
KSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0cnVjdHVyZURlZmluaXRpb24pOwor
CisgICAgICAgIGF1dG8gc3VjY2VzcyA9IG1fdHlwZXMucmVtb3ZlKCZzdHJ1Y3R1cmVEZWZpbml0
aW9uKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICB9CisK
KyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlcy5hZGQoJnR5cGVSZWZl
cmVuY2UpOworICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAg
IHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBm
b3IgKGF1dG8mIHR5cGVBcmd1bWVudCA6IHR5cGVSZWZlcmVuY2UudHlwZUFyZ3VtZW50cygpKQor
ICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVBcmd1bWVudCk7CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdCgqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisKKyAgICAg
ICAgYXV0byBzdWNjZXNzID0gbV90eXBlcy5yZW1vdmUoJnR5cGVSZWZlcmVuY2UpOworICAgICAg
ICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgIH0KKworICAgIHZvaWQgdmlz
aXQoQVNUOjpSZWZlcmVuY2VUeXBlJikgb3ZlcnJpZGUKKyAgICB7CisgICAgfQorCitwcml2YXRl
OgorICAgIEhhc2hTZXQ8QVNUOjpUeXBlKj4gbV90eXBlczsKK307CisKK2Jvb2wgY2hlY2tSZWN1
cnNpdmVUeXBlcyhQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIFJlY3Vyc2l2ZVR5cGVDaGVja2Vy
IHJlY3Vyc2l2ZVR5cGVDaGVja2VyOworICAgIHJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNoZWNrRXJy
b3JBbmRWaXNpdChwcm9ncmFtKTsKKyAgICByZXR1cm4gcmVjdXJzaXZlVHlwZUNoZWNrZXIuZXJy
b3IoKTsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmZjOTcwYzcyNDk2NmQxMzkxMGFiMmFhYWUxNTY3ZDdjMTA1YTMzOTQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFByb2dyYW07CisKK2Jvb2wgY2hlY2tSZWN1
cnNpdmVUeXBlcyhQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3Bl
cmF0b3JMZW5ndGguY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWQ2MjBmYTEx
YTcwNzJmODZiMGU4M2RiMzMzYjIxZGI3ZWNhMTA1MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0
b3JMZW5ndGguY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oIgor
CisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgiCisjaW5j
bHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisj
aW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNw
YWNlIFdITFNMIHsKKworY2xhc3MgRmluZEFycmF5VHlwZXMgOiBwdWJsaWMgVmlzaXRvciB7Citw
dWJsaWM6CisgICAgfkZpbmRBcnJheVR5cGVzKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2aXNp
dChBU1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9h
cnJheVR5cGVzLmFwcGVuZChhcnJheVR5cGUpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
YXJyYXlUeXBlKTsKKyAgICB9CisKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxB
U1Q6OkFycmF5VHlwZT4+JiYgdGFrZUFycmF5VHlwZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFdURk1vdmUobV9hcnJheVR5cGVzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpBcnJheVR5cGU+PiBtX2FycmF5VHlwZXM7Cit9Owor
Cit2b2lkIHN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoKFByb2dyYW0mIHByb2dyYW0pCit7
CisgICAgRmluZEFycmF5VHlwZXMgZmluZEFycmF5VHlwZXM7CisgICAgZmluZEFycmF5VHlwZXMu
Y2hlY2tFcnJvckFuZFZpc2l0KHByb2dyYW0pOworICAgIGF1dG8gYXJyYXlUeXBlcyA9IGZpbmRB
cnJheVR5cGVzLnRha2VBcnJheVR5cGVzKCk7CisKKyAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVl
OworICAgIGJvb2wgaXNSZXN0cmljdGVkID0gZmFsc2U7CisKKyAgICBmb3IgKGF1dG8mIGFycmF5
VHlwZSA6IGFycmF5VHlwZXMpIHsKKyAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZh
cmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGFycmF5VHlwZS5nZXQoKS5vcmlnaW4oKSks
IEFTVDo6UXVhbGlmaWVycygpLCB7IGFycmF5VHlwZS5nZXQoKS5jbG9uZSgpIH0sIFN0cmluZygp
LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgIEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2
YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihM
ZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9j
aygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4o
YXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwgcHJvZ3JhbS5pbnRyaW5zaWNzKCkudWludFR5cGUo
KSksICJvcGVyYXRvci5sZW5ndGgiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxs
b3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAgcHJvZ3JhbS5hcHBlbmQo
V1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgfQorfQorCit9CisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjAxMmYyYjAxMDJhY2FjNTEzNjBiMTllY2I5M2FlNWViMDhhNTY4ZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
U3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaApAQCAtMCwwICsxLDQyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFByb2dyYW07CisKK3ZvaWQgc3lu
dGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgoUHJvZ3JhbSYpOworCit9CisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5
bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NWUyYjg4
MWQ5YjQwYTM4ODVlMjkzMGNjOGNkNzFiYjM5ZDljMjA2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0
b3JzLmNwcApAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaCIKKworI2lmIEVOQUJM
RShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCIK
KyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2Uu
aCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExT
TFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgewor
CitjbGFzcyBGaW5kQWxsVHlwZXMgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgfkZp
bmRBbGxUeXBlcygpID0gZGVmYXVsdDsKKworICAgIHZvaWQgdmlzaXQoQVNUOjpQb2ludGVyVHlw
ZSYgcG9pbnRlclR5cGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3VubmFtZWRUeXBlcy5h
cHBlbmQocG9pbnRlclR5cGUpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQocG9pbnRlclR5
cGUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGFy
cmF5UmVmZXJlbmNlVHlwZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fdW5uYW1lZFR5cGVz
LmFwcGVuZChhcnJheVJlZmVyZW5jZVR5cGUpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
YXJyYXlSZWZlcmVuY2VUeXBlKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlU
eXBlJiBhcnJheVR5cGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3VubmFtZWRUeXBlcy5h
cHBlbmQoYXJyYXlUeXBlKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFycmF5VHlwZSk7
CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51
bWVyYXRpb25EZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9uYW1lZFR5cGVz
LmFwcGVuZChlbnVtZXJhdGlvbkRlZmluaXRpb24pOworICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoZW51bWVyYXRpb25EZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6
U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIG1fbmFtZWRUeXBlcy5hcHBlbmQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFy
YXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX25hbWVkVHlwZXMuYXBwZW5kKG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbik7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChuYXRpdmVUeXBl
RGVjbGFyYXRpb24pOworICAgIH0KKworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PEFTVDo6VW5uYW1lZFR5cGU+PiYmIHRha2VVbm5hbWVkVHlwZXMoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIFdURk1vdmUobV91bm5hbWVkVHlwZXMpOworICAgIH0KKworICAgIFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPj4mJiB0YWtlTmFtZWRUeXBlcygpCisg
ICAgeworICAgICAgICByZXR1cm4gV1RGTW92ZShtX25hbWVkVHlwZXMpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlVubmFtZWRUeXBl
Pj4gbV91bm5hbWVkVHlwZXM7CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNU
OjpOYW1lZFR5cGU+PiBtX25hbWVkVHlwZXM7Cit9OworCit2b2lkIHN5bnRoZXNpemVDb25zdHJ1
Y3RvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBGaW5kQWxsVHlwZXMgZmluZEFsbFR5cGVz
OworICAgIGZpbmRBbGxUeXBlcy5jaGVja0Vycm9yQW5kVmlzaXQocHJvZ3JhbSk7CisgICAgYXV0
byBtX3VubmFtZWRUeXBlcyA9IGZpbmRBbGxUeXBlcy50YWtlVW5uYW1lZFR5cGVzKCk7CisgICAg
YXV0byBtX25hbWVkVHlwZXMgPSBmaW5kQWxsVHlwZXMudGFrZU5hbWVkVHlwZXMoKTsKKworICAg
IGJvb2wgaXNPcGVyYXRvciA9IHRydWU7CisgICAgYm9vbCBpc1Jlc3RyaWN0ZWQgPSBmYWxzZTsK
KworICAgIGZvciAoYXV0byYgdW5uYW1lZFR5cGUgOiBtX3VubmFtZWRUeXBlcykgeworICAgICAg
ICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9r
ZW4odW5uYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyB1bm5h
bWVkVHlwZS5nZXQoKS5jbG9uZSgpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVs
bG9wdCk7CisgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAg
ICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7Cisg
ICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0b3IoQVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbih1bm5hbWVkVHlwZS5nZXQoKS5vcmln
aW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCB1bm5hbWVkVHlwZS5n
ZXQoKS5jbG9uZSgpLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBX
VEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICBwcm9ncmFt
LmFwcGVuZChXVEZNb3ZlKGNvcHlDb25zdHJ1Y3RvcikpOworCisgICAgICAgIEFTVDo6TmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbiBkZWZhdWx0Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKExleGVyOjpUb2tlbih1bm5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6QXR0
cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCB1bm5hbWVkVHlwZS5nZXQoKS5jbG9uZSgpLCAi
b3BlcmF0b3IgY2FzdCJfc3RyLCBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zKCksIFdURjo6bnVs
bG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgIHByb2dyYW0uYXBwZW5k
KFdURk1vdmUoZGVmYXVsdENvbnN0cnVjdG9yKSk7CisgICAgfQorCisgICAgZm9yIChhdXRvJiBu
YW1lZFR5cGUgOiBtX25hbWVkVHlwZXMpIHsKKyAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmln
aW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhl
cjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgbmFtZWRUeXBlLmdldCgpKSB9LCBT
dHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICBBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdU
Rk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24gY29weUNvbnN0cnVjdG9yKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhl
cjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygp
LCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obmFt
ZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgbmFtZWRUeXBlLmdldCgpKSwgIm9wZXJhdG9yIGNhc3Qi
X3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNS
ZXN0cmljdGVkKTsKKyAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShjb3B5Q29uc3RydWN0
b3IpKTsKKworICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gZGVmYXVsdENv
bnN0cnVjdG9yKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4obmFtZWRUeXBl
LmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFT
VDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdp
bigpKSwgbmFtZWRUeXBlLmdldCgpKSwgIm9wZXJhdG9yIGNhc3QiX3N0ciwgQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9ucygpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQp
OworICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKGRlZmF1bHRDb25zdHJ1Y3RvcikpOwor
ICAgIH0KK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3Rv
cnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xOWEwNWJlYTYyM2E5YjliMGE5Y2ZmNGI0ZjQyZmY3MDFkZWJkNDM2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCit2b2lkIHN5bnRo
ZXNpemVDb25zdHJ1Y3RvcnMoUHJvZ3JhbSYpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVF
bnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NjNmZWZiNDNkYzdlMDU5ZWExZTMyY2Q5MjhmZWFlZjZjYzk5NDYxMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVu
dW1lcmF0aW9uRnVuY3Rpb25zLmNwcApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVu
Y3Rpb25zLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFt
LmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworbmFtZXNwYWNlIFdITFNMIHsKKwordm9pZCBzeW50aGVzaXplRW51bWVyYXRpb25GdW5j
dGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOwor
ICAgIGJvb2wgaXNSZXN0cmljdGVkID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlv
bkRlZmluaXRpb24gOiBwcm9ncmFtLmVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSkgeworICAgICAg
ICB7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJh
dGlvbjEoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6
OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVu
dW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBzdGF0aWNfY2FzdDxBU1Q6OkVudW1lcmF0
aW9uRGVmaW5pdGlvbiY+KGVudW1lcmF0aW9uRGVmaW5pdGlvbikpIH0sIFN0cmluZygpLCBXVEY6
Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbjIoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5p
dGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6
OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBzdGF0
aWNfY2FzdDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiY+KGVudW1lcmF0aW9uRGVmaW5pdGlv
bikpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAg
ICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAgICBwYXJh
bWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24xKSk7CisgICAgICAgICAg
ICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24yKSk7CisgICAg
ICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9u
RGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9w
dCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmlu
aXRpb24tPm9yaWdpbigpKSwgcHJvZ3JhbS5pbnRyaW5zaWNzKCkuYm9vbFR5cGUoKSksICJvcGVy
YXRvcj09Il9zdHIsIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRv
ciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlbnVt
ZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRs
ZSBhIG51bGwgYmFzZSB0eXBlLgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVt
ZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgQVNUOjpU
eXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9y
aWdpbigpKSwgc3RhdGljX2Nhc3Q8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mPihlbnVtZXJh
dGlvbkRlZmluaXRpb24pKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQp
OworICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsK
KyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFy
YXRpb24pKTsKKyAgICAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24g
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6
OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJs
b2NrKCksIFdURjo6bnVsbG9wdCwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCktPmNsb25l
KCksICJvcGVyYXRvci52YWx1ZSJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxv
cHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICAgICAgICAgIHByb2dyYW0u
YXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlv
bi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6Ondy
YXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBzdGF0aWNf
Y2FzdDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiY+KGVudW1lcmF0aW9uRGVmaW5pdGlvbikp
IH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICAg
ICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICAgICAgICAg
IHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAg
ICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRp
b25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxs
b3B0LCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS0+Y2xvbmUoKSwgIm9wZXJhdG9yIGNh
c3QiX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwg
aXNSZXN0cmljdGVkKTsKKyAgICAgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xh
cmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNU
OjpRdWFsaWZpZXJzKCksIGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+dHlwZSgpLT5jbG9uZSgpLCBT
dHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICAgICAgICAgIEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAg
ICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVm
aW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwg
eyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5p
dGlvbi0+b3JpZ2luKCkpLCBzdGF0aWNfY2FzdDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiY+
KGVudW1lcmF0aW9uRGVmaW5pdGlvbikpIH0sICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUo
cGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7Cisg
ICAgICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK30KKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjIxMjdmZDExNTI0YzFjODMyODI4M2M1YmFlOTIzZGZlZjAxZGY1YWQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgUHJvZ3JhbTsKKwordm9pZCBz
eW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMoUHJvZ3JhbSYpOworCit9CisKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iMzQyMmRkYjM1OWI1ZGFhZjVkMTkyZDU0NzU1ZjZlODZkNzk3ODU2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50
aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMU3ludGhlc2l6ZVN0cnVjdHVy
ZUFjY2Vzc29ycy5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMUG9p
bnRlclR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXSExTTFJl
ZmVyZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRl
ICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitu
YW1lc3BhY2UgV0hMU0wgeworCit2b2lkIHN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMoUHJv
Z3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOworICAgIGJvb2wg
aXNSZXN0cmljdGVkID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9u
IDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygpKSB7CisgICAgICAgIGZvciAoYXV0byYg
c3RydWN0dXJlRWxlbWVudCA6IHN0cnVjdHVyZURlZmluaXRpb24tPnN0cnVjdHVyZUVsZW1lbnRz
KCkpIHsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgZ2V0dGVyOiBvcGVy
YXRvci5maWVsZAorICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJp
YWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwg
QVNUOjpRdWFsaWZpZXJzKCksIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tl
bihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgc3RhdGljX2Nhc3Q8QVNUOjpTdHJ1Y3R1cmVE
ZWZpbml0aW9uJj4oc3RydWN0dXJlRGVmaW5pdGlvbikpIH0sIFN0cmluZygpLCBXVEY6Om51bGxv
cHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1v
dmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6
QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5j
bG9uZSgpLCBTdHJpbmc6OmZvcm1hdCgib3BlcmF0b3IuJXMiLCBzdHJ1Y3R1cmVFbGVtZW50Lm5h
bWUoKS51dGY4KCkuZGF0YSgpKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBp
c09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAgICAgICAgICBwcm9ncmFtLmFwcGVu
ZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFRoZSBzZXR0ZXI6IG9wZXJhdG9yLmZp
ZWxkPQorICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURl
Y2xhcmF0aW9uMShMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6
UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3Ry
dWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIHN0YXRpY19jYXN0PEFTVDo6U3RydWN0dXJlRGVmaW5p
dGlvbiY+KHN0cnVjdHVyZURlZmluaXRpb24pKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBX
VEY6Om51bGxvcHQpOworICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2
YXJpYWJsZURlY2xhcmF0aW9uMihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4o
KSksIEFTVDo6UXVhbGlmaWVycygpLCB7IHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpLmNsb25lKCkg
fSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgICAg
ICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAgICAgICAg
cGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uMSkpOworICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjIp
KTsKKyAgICAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2Vu
KHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6
bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVF
bGVtZW50Lm9yaWdpbigpKSwgc3RhdGljX2Nhc3Q8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJj4o
c3RydWN0dXJlRGVmaW5pdGlvbikpLCBTdHJpbmc6OmZvcm1hdCgib3BlcmF0b3IuJXM9Iiwgc3Ry
dWN0dXJlRWxlbWVudC5uYW1lKCkudXRmOCgpLmRhdGEoKSksIFdURk1vdmUocGFyYW1ldGVycyks
IFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgICAgICAg
ICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRoZSBhbmRlcjogb3BlcmF0b3ImLmZpZWxk
CisgICAgICAgICAgICBhdXRvIGNyZWF0ZUFuZGVyID0gWyZdKEFTVDo6UmVmZXJlbmNlVHlwZTo6
QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSkgLT4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uIHsKKyAgICAgICAgICAgICAgICBhdXRvIGFyZ3VtZW50VHlwZSA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkp
LCBhZGRyZXNzU3BhY2UsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3Ry
dWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIHN0YXRpY19jYXN0PEFTVDo6U3RydWN0dXJlRGVmaW5p
dGlvbiY+KHN0cnVjdHVyZURlZmluaXRpb24pKSk7CisgICAgICAgICAgICAgICAgQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHN0cnVjdHVy
ZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBXVEZNb3ZlKGFyZ3VtZW50
VHlwZSkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAg
ICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAg
ICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7Cisg
ICAgICAgICAgICAgICAgYXV0byByZXR1cm5UeXBlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50
ZXJUeXBlPihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIGFkZHJlc3NT
cGFjZSwgc3RydWN0dXJlRWxlbWVudC50eXBlKCkuY2xvbmUoKSk7CisgICAgICAgICAgICAgICAg
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24o
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9y
aWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0
dXJuVHlwZSksIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRvciYuJXMiLCBzdHJ1Y3R1cmVFbGVtZW50
Lm5hbWUoKS51dGY4KCkuZGF0YSgpKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0
LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbjsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBwcm9n
cmFtLmFwcGVuZChjcmVhdGVBbmRlcihBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6
Q29uc3RhbnQpKTsKKyAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKGNyZWF0ZUFuZGVyKEFTVDo6
UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpEZXZpY2UpKTsKKyAgICAgICAgICAgIHByb2dy
YW0uYXBwZW5kKGNyZWF0ZUFuZGVyKEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpU
aHJlYWRncm91cCkpOworICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoY3JlYXRlQW5kZXIoQVNU
OjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZCkpOworICAgICAgICB9CisgICAg
fQorfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVy
ZUFjY2Vzc29ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiOWYyYjlhZDM5OGEwZWJmNzk0OGI1NmFkOWM0ZDkz
MDQ0MDhjYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaApAQCAtMCwwICsxLDQy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFByb2dyYW07
CisKK3ZvaWQgc3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyhQcm9ncmFtJik7CisKK30KKwor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMDZmMzJkMTlkODJiNzk1MzVlNmQ1MjNhMzNm
YzRhNzZiODRmMzI0ZC4uMGQyNTYzNTNkNzRhYmQ2MjY2MzAyNGJkODA1NGM5NTBlMDczODEwMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKQEAgLTMwOSw2ICszMDksMTMgQEAgTW9kdWxlcy93ZWJncHUvRE9NV2lu
ZG93V2ViR1BVLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcAog
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUGFyc2VyLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0
ZUZ1bmN0aW9ucy5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNo
ZWNrZXIuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJh
dG9yTGVuZ3RoLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3Ry
dWN0b3JzLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRp
b25GdW5jdGlvbnMuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1
Y3R1cmVBY2Nlc3NvcnMuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3Mu
Y3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNwcAogTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggN2E5ZTFkZjYzYmE3OGQ3MzE1ZmRjZGIy
OTY5ZGFlOTY0MzgyOTM1OC4uNjQ5Mzg0NGI4OGQ1MDY0MzQxMjUwYjRkZGQ1ZmMwNTEzNWI4Nzc3
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMTMzMzIsNiArMTMzMzIsMjAgQEAKIAkJQzIzNEE5OUEyMUU5MEY1NjAwM0M5ODRE
IC8qIFdITFNMSW5mZXJUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEluZmVyVHlw
ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjM0QTk5QjIxRTkwRjU3MDAz
Qzk4NEQgLyogV0hMU0xJbmZlclR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMSW5mZXJUeXBl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjM0QTk5RDIxRTkxMEJEMDAzQzk4
NEQgLyogV0hMU0xSZXNvbHZpbmdUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUmVzb2x2aW5n
VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjM0QTlBOTIxRTkyQzE3MDAz
Qzk4NEQgLyogV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIzNEE5QUIyMUU5MkMxODAwM0M5ODREIC8qIFdITFNM
UmVjdXJzaXZlVHlwZUNoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xSZWN1cnNpdmVUeXBl
Q2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjM0QTlBQzIxRTkyQzE5
MDAzQzk4NEQgLyogV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIzNEE5QUQyMUU5MkMxOTAwM0M5ODREIC8qIFdITFNMUmVj
dXJzaXZlVHlwZUNoZWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xSZWN1cnNpdmVU
eXBlQ2hlY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMzRBOUFFMjFF
OTJDMUEwMDNDOTg0RCAvKiBXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQzIzNEE5QUYyMUU5MkMxQjAwM0M5ODREIC8qIFdITFNMU3ludGhlc2l6ZUFy
cmF5T3BlcmF0b3JMZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xTeW50aGVzaXplQXJyYXlP
cGVyYXRvckxlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjM0QTlCMDIx
RTkyQzFDMDAzQzk4NEQgLyogV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUMyMzRBOUIxMjFFOTJDMUQwMDNDOTg0RCAvKiBXSExTTFN5bnRo
ZXNpemVDb25zdHJ1Y3RvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xTeW50aGVzaXplQ29uc3Ry
dWN0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMzRBOUIyMjFFOTJDMUYw
MDNDOTg0RCAvKiBXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDMjM0QTlCMzIxRTkyQzIxMDAzQzk4NEQgLyogV0hMU0xTeW50aGVzaXpl
RW51bWVyYXRpb25GdW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTeW50aGVz
aXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDMjM0QTlCNDIxRTkyQzIyMDAzQzk4NEQgLyogV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNj
ZXNzb3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFj
Y2Vzc29ycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMzRBOUI1MjFFOTJD
MjMwMDNDOTg0RCAvKiBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUMyMzRBOUI2MjFFOTJDQzAwMDNDOTg0RCAvKiBXSExTTEludHJp
bnNpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xJbnRyaW5zaWNzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUMyMzRBOUI3MjFFOTJDQzEwMDNDOTg0RCAvKiBXSExTTEludHJpbnNp
Y3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xJbnRyaW5zaWNzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxREYyRTcxRDlFNEU5OTAwRjVCMjRDIC8qIENTU0ZvbnRW
YXJpYXRpb25WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBD
U1NGb250VmFyaWF0aW9uVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MjFERjJFODFEOUU0RTk5MDBGNUIyNEMgLyogQ1NTRm9udFZhcmlhdGlvblZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0ZvbnRWYXJpYXRpb25WYWx1ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjM0QTk4NTIxRTg4NkE5MDAzQzk4NEQgLyogV0hM
U0xWaXNpdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMVmlzaXRvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTM5OSw4ICsyNTQxMywxMiBAQAogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQlDMjFCRjZGMTIxQ0Q4OThEMDAyMjc5Nzkg
LyogQVNUICovLAorCQkJCUMyMzRBOUIyMjFFOTJDMUYwMDNDOTg0RCAvKiBXSExTTENoZWNrRHVw
bGljYXRlRnVuY3Rpb25zLmNwcCAqLywKKwkJCQlDMjM0QTlBRTIxRTkyQzFBMDAzQzk4NEQgLyog
V0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oICovLAogCQkJCUMyMzRBOTlBMjFFOTBGNTYw
MDNDOTg0RCAvKiBXSExTTEluZmVyVHlwZXMuY3BwICovLAogCQkJCUMyMzRBOTlCMjFFOTBGNTcw
MDNDOTg0RCAvKiBXSExTTEluZmVyVHlwZXMuaCAqLywKKwkJCQlDMjM0QTlCNzIxRTkyQ0MxMDAz
Qzk4NEQgLyogV0hMU0xJbnRyaW5zaWNzLmNwcCAqLywKKwkJCQlDMjM0QTlCNjIxRTkyQ0MwMDAz
Qzk4NEQgLyogV0hMU0xJbnRyaW5zaWNzLmggKi8sCiAJCQkJQzIxMEU5MTEyMUI0QkQxMDAwQjdG
ODNEIC8qIFdITFNMTGV4ZXIuY3BwICovLAogCQkJCUMyMTBFOTEyMjFCNEJEMTAwMEI3RjgzRCAv
KiBXSExTTExleGVyLmggKi8sCiAJCQkJQzIzNEE5OEQyMUU4ODg4NDAwM0M5ODREIC8qIFdITFNM
TmFtZUNvbnRleHQuY3BwICovLApAQCAtMjU0MTAsMTAgKzI1NDI4LDIwIEBACiAJCQkJQzIxQkY3
MzcyMUNEOEEwMjAwMjI3OTc5IC8qIFdITFNMUGFyc2VyLmNwcCAqLywKIAkJCQlDMjFCRjczODIx
Q0Q4QTAzMDAyMjc5NzkgLyogV0hMU0xQYXJzZXIuaCAqLywKIAkJCQlDMjFCRjczQTIxQ0Q4RDcw
MDAyMjc5NzkgLyogV0hMU0xQcm9ncmFtLmggKi8sCisJCQkJQzIzNEE5QUQyMUU5MkMxOTAwM0M5
ODREIC8qIFdITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwICovLAorCQkJCUMyMzRBOUFCMjFF
OTJDMTgwMDNDOTg0RCAvKiBXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmggKi8sCiAJCQkJQzIz
NEE5OTkyMUU5MEYyOTAwM0M5ODREIC8qIFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAgKi8s
CiAJCQkJQzIzNEE5OTcyMUU5MEYyODAwM0M5ODREIC8qIFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1w
bC5oICovLAogCQkJCUMyMzRBOTlEMjFFOTEwQkQwMDNDOTg0RCAvKiBXSExTTFJlc29sdmluZ1R5
cGUuaCAqLywKIAkJCQlDMjFCRjc0NTIxQ0Q5Njk4MDAyMjc5NzkgLyogV0hMU0xTdGFuZGFyZExp
YnJhcnkudHh0ICovLAorCQkJCUMyMzRBOUE5MjFFOTJDMTcwMDNDOTg0RCAvKiBXSExTTFN5bnRo
ZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcCAqLywKKwkJCQlDMjM0QTlBRjIxRTkyQzFCMDAz
Qzk4NEQgLyogV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oICovLAorCQkJCUMy
MzRBOUIwMjFFOTJDMUMwMDNDOTg0RCAvKiBXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3Bw
ICovLAorCQkJCUMyMzRBOUIxMjFFOTJDMUQwMDNDOTg0RCAvKiBXSExTTFN5bnRoZXNpemVDb25z
dHJ1Y3RvcnMuaCAqLywKKwkJCQlDMjM0QTlCMzIxRTkyQzIxMDAzQzk4NEQgLyogV0hMU0xTeW50
aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwICovLAorCQkJCUMyMzRBOUFDMjFFOTJDMTkw
MDNDOTg0RCAvKiBXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oICovLAorCQkJ
CUMyMzRBOUI0MjFFOTJDMjIwMDNDOTg0RCAvKiBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nl
c3NvcnMuY3BwICovLAorCQkJCUMyMzRBOUI1MjFFOTJDMjMwMDNDOTg0RCAvKiBXSExTTFN5bnRo
ZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaCAqLywKIAkJCQlDMjM0QTk4NTIxRTg4NkE5MDAzQzk4
NEQgLyogV0hMU0xWaXNpdG9yLmNwcCAqLywKIAkJCQlDMjM0QTk4NzIxRTg4NkFEMDAzQzk4NEQg
LyogV0hMU0xWaXNpdG9yLmggKi8sCiAJCQkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358994</attachid>
            <date>2019-01-12 10:36:42 -0800</date>
            <delta_ts>2019-01-12 12:56:44 -0800</delta_ts>
            <desc>Patch for committing</desc>
            <filename>bug-193360-20190112103640.patch</filename>
            <type>text/plain</type>
            <size>91129</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5ODk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzU2NzMwYTdjNGM1ODli
NTM5NzVlMjVmZDNkNGVkNTYyMDI0NzlkZi4uN2NiZTAwYmM1NGFlN2MxMWQ0MWMzYzgwOTlhNGI5
NTZhOWJmMTlkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDE5LTAxLTExICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBB
ZGQgbmF0aXZlIGZ1bmN0aW9uIHN5bnRoZXNpcyBwYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MzM2MAorCisgICAgICAgIFJldmlld2VkIGJ5
IERlYW4gSmFja3Nvbi4KKworICAgICAgICBUaGlzIHBhdGNoIGluY2x1ZGVzIGFsbCB0aGUgcGFz
c2VzIGluIHByZXBhcmUoKSB0aGF0IGFyZSBiZXR3ZWVuIHRoZSBuYW1lIHJlc29sdmVyIGFuZCB0
aGUKKyAgICAgICAgdHlwZSBjaGVja2VyLiBJdCBpbnZvbHZlcyBhIGZldyBzbWFsbCBwaWVjZXM6
CisKKyAgICAgICAgLSBDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyB3aGljaCBtYWtlcyBzdXJlIHRo
ZSBzYW1lIGZ1bmN0aW9uIGlzbid0IGRlZmluZWQgdHdpY2UKKyAgICAgICAgLSBJbnRyaW5zaWNz
LCB3aGljaCByZW1lbWJlcnMgYWxsIG9mIHRoZSBuYXRpdmUgdHlwZXMgc28gdGhleSBjYW4gYmUg
cmVmZXJyZWQgdG8gYnkgdGhlCisgICAgICAgICAgcmVzdCBvZiB0aGUgY29tcGlsZXIKKyAgICAg
ICAgLSBSZWN1cnNpdmVUeXBlQ2hlY2tlciB3aGljaCBtYWtlcyBzdXJlIHR5cGVzIGRvbid0IHJl
ZmVyIHRvIHRoZW1zZWx2ZXMKKyAgICAgICAgLSBTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0
aCB3aGljaCBjcmVhdGVzIG9wZXJhdG9yLmxlbmd0aCgpIGZ1bmN0aW9ucyBmb3IgYXJyYXlzCisg
ICAgICAgIC0gU3ludGhlc2l6ZUNvbnN0cnVjdG9ycyB3aGljaCBjcmVhdGVzIGNvcHkgY29uc3Ry
dWN0b3JzIGFuZCBkZWZhdWx0IGNvbnN0cnVjdG9ycyBmb3IgYWxsCisgICAgICAgICAgdHlwZXMK
KyAgICAgICAgLSBTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMgd2hpY2ggcHJvdmlkZXMg
Y2FzdCBvcGVyYXRvcnMgYmV0d2VlbiBlbnVtIHR5cGVzIGFuZCB0aGVpcgorICAgICAgICAgIGJh
c2UgdHlwZXMKKyAgICAgICAgLSBTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzIHdoaWNoIHBy
b3ZpZGVzIGdldHRlcnMsIHNldHRlcnMsIGFuZCBhbmRlcnMgZm9yIGVhY2ggbWVtYmVyCisgICAg
ICAgICAgb2YgYSBzdHJ1Y3QKKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBpdCBpc24n
dCBob29rZWQgdXAgeWV0LiBOb3QgZW5vdWdoIG9mIHRoZSBjb21waWxlciBleGlzdHMgdG8gaGF2
ZSBhbnkgbWVhbmluZ2Z1bCBzb3J0CisgICAgICAgIG9mIHRlc3QuIFdoZW4gZW5vdWdoIG9mIHRo
ZSBjb21waWxlciBpcyBwcmVzZW50LCBJJ2xsIHBvcnQgdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRh
dGlvbidzIHRlc3Qgc3VpdGUuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xCdWlsdEluU2VtYW50aWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6
QnVpbHRJblNlbWFudGljOjppc0FjY2VwdGFibGVUeXBlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlc291cmNlU2VtYW50aWM6OmlzQWNjZXB0YWJsZVR5cGUg
Y29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNh
dGVGdW5jdGlvbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpjaGVja0R1
cGxpY2F0ZUZ1bmN0aW9ucyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xD
aGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcC4KKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpJbnRyaW5zaWNzOjpJbnRyaW5zaWNzKToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpJbnRyaW5zaWNzOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OkludHJpbnNpY3M6OmFkZFByaW1pdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6SW50
cmluc2ljczo6YWRkVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpJbnRyaW5zaWNz
OjphZGRNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkludHJpbnNpY3M6OmFkZEZ1
bGxUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpJbnRyaW5zaWNzOjphZGREZXB0
aFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkludHJpbnNpY3M6OmFkZFRleHR1
cmUpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmluc2ljcy5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpJbnRyaW5zaWNzOjp2b2lkVHlwZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6SW50cmluc2ljczo6Ym9vbFR5cGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkludHJpbnNpY3M6OmludFR5cGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkludHJpbnNpY3M6OnVpbnRUeXBlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpJbnRyaW5zaWNzOjpzYW1wbGVyVHlwZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6SW50cmluc2ljczo6ZmxvYXRUeXBlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpJbnRyaW5zaWNzOjpmbG9hdDNUeXBlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpJbnRyaW5zaWNzOjpmbG9hdDRUeXBlIGNvbnN0KToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb2dyYW0uaDoKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpQcm9ncmFtOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OlByb2dyYW06OmludHJpbnNpY3MpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpjaGVja1JlY3Vyc2l2ZVR5cGVzKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMuY3BwLgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JM
ZW5ndGguY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpGaW5kQXJyYXlUeXBl
czo6dGFrZUFycmF5VHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnN5bnRoZXNpemVB
cnJheU9wZXJhdG9yTGVuZ3RoKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMuY3BwLgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9y
cy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkZpbmRBbGxUeXBlczo6dGFr
ZVVubmFtZWRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6RmluZEFsbFR5cGVzOjp0
YWtlTmFtZWRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6c3ludGhlc2l6ZUNvbnN0
cnVjdG9ycyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXpl
Q29uc3RydWN0b3JzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMuY3BwLgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6c3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rp
b25zKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVt
ZXJhdGlvbkZ1bmN0aW9ucy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcC4KKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpzeW50aGVzaXplU3RydWN0dXJlQWNjZXNz
b3JzKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1
Y3R1cmVBY2Nlc3NvcnMuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHAuCisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAy
MDE5LTAxLTExICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAg
ICAgICAgW1dITFNMXSBJbXBsZW1lbnQgdGhlIE5hbWVSZXNvbHZlcgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGlj
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0
SW5TZW1hbnRpYy5jcHAKaW5kZXggZTQyZWU0Nzk5MjE1OTRlZWMyZTEyZTFmMzEyNjY3MjMxODU1
OTczNS4uNDE0YmQ0NWE5YTJhZjc1NWE3ZjQ0MGIxZmIwMzQzNDAzOTA3MzEzYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNl
bWFudGljLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xCdWlsdEluU2VtYW50aWMuY3BwCkBAIC0yOSw2ICsyOSw4IEBACiAjaWYgRU5BQkxFKFdF
QkdQVSkKIAogI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAi
V0hMU0xJbmZlclR5cGVzLmgiCisjaW5jbHVkZSAiV0hMU0xJbnRyaW5zaWNzLmgiCiAjaW5jbHVk
ZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM3LDEw
ICszOSwzOCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotYm9vbCBC
dWlsdEluU2VtYW50aWM6OmlzQWNjZXB0YWJsZVR5cGUoY29uc3QgVW5uYW1lZFR5cGUmLCBjb25z
dCBJbnRyaW5zaWNzJikgY29uc3QKK2Jvb2wgQnVpbHRJblNlbWFudGljOjppc0FjY2VwdGFibGVU
eXBlKGNvbnN0IFVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgY29uc3QgSW50cmluc2ljcyYgaW50
cmluc2ljcykgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICBzd2l0Y2ggKG1fdmFyaWFibGUpIHsKKyAgICBjYXNlIFZhcmlhYmxlOjpT
Vkluc3RhbmNlSUQ6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5z
aWNzLnVpbnRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWVmVydGV4SUQ6CisgICAgICAg
IHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpOworICAg
IGNhc2UgVmFyaWFibGU6OlBTaXplOgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlw
ZSwgaW50cmluc2ljcy5mbG9hdFR5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZQb3NpdGlv
bjoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MuZmxvYXQ0
VHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVklzRnJvbnRGYWNlOgorICAgICAgICByZXR1
cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy5ib29sVHlwZSgpKTsKKyAgICBjYXNl
IFZhcmlhYmxlOjpTVlNhbXBsZUluZGV4OgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVk
VHlwZSwgaW50cmluc2ljcy51aW50VHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVklubmVy
Q292ZXJhZ2U6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNz
LnVpbnRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWVGFyZ2V0OgorICAgICAgICByZXR1
cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy5mbG9hdDRUeXBlKCkpOworICAgIGNh
c2UgVmFyaWFibGU6OlNWRGVwdGg6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBl
LCBpbnRyaW5zaWNzLmZsb2F0VHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVkNvdmVyYWdl
OgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy51aW50VHlw
ZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVkRpc3BhdGNoVGhyZWFkSUQ6CisgICAgICAgIHJl
dHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0M1R5cGUoKSk7CisgICAg
Y2FzZSBWYXJpYWJsZTo6U1ZHcm91cElEOgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVk
VHlwZSwgaW50cmluc2ljcy5mbG9hdDNUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWR3Jv
dXBJbmRleDoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3Mu
dWludFR5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZHcm91cFRocmVhZElEOgorICAgICAg
ICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy5mbG9hdDNUeXBlKCkpOwor
ICAgIH0KIH0KIAogYm9vbCBCdWlsdEluU2VtYW50aWM6OmlzQWNjZXB0YWJsZUZvclNoYWRlckl0
ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEZ1bmN0aW9u
RGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlwZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExp
dGVyYWxUeXBlLmNwcAppbmRleCAzMzI1Y2M1ZDE5NTA1YWM4MGNiOTE4MWZjYjUwOWZiNTRmY2Ri
Y2M0Li44MWM5ZGRlZWM3N2I3NjQ0ZjI0N2QyY2ZhZWI3MTBmNjE2MDg1ZWE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVy
YWxUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xGbG9hdExpdGVyYWxUeXBlLmNwcApAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgQVNU
IHsKIAogRmxvYXRMaXRlcmFsVHlwZTo6RmxvYXRMaXRlcmFsVHlwZShMZXhlcjo6VG9rZW4mJiBv
cmlnaW4sIGZsb2F0IHZhbHVlKQogICAgIDogbV92YWx1ZSh2YWx1ZSkKLSAgICAsIG1fcHJlZmVy
cmVkVHlwZShtYWtlVW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+KFdURk1vdmUob3JpZ2luKSwgU3Ry
aW5nKCJmbG9hdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBUeXBlQXJndW1lbnRz
KCkpKQorICAgICwgbV9wcmVmZXJyZWRUeXBlKG1ha2VVbmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4o
V1RGTW92ZShvcmlnaW4pLCAiZmxvYXQiX3N0ciwgVHlwZUFyZ3VtZW50cygpKSkKIHsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
SW5kZXhFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xJbmRleEV4cHJlc3Npb24uaAppbmRleCBhYjg5Nzc0MGYzZjJmZGY0YzNkY2M2YmU4
NmVmM2EwYzJkN2E0ODIwLi4yNWJhNmU3OGE1OWY3Njc4ODYyYjg0ODUwNDhmOWRlYThmMDBiNzll
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xJbmRleEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Npb24uaApAQCAtNTQsMTcgKzU0LDE3IEBAIHB1Ymxp
YzoKIAogICAgIFN0cmluZyBnZXRGdW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQogICAgIHsK
LSAgICAgICAgcmV0dXJuIFN0cmluZygib3BlcmF0b3JbXSIsIFN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOworICAgICAgICByZXR1cm4gIm9wZXJhdG9yW10iX3N0cjsKICAgICB9CiAKICAg
ICBTdHJpbmcgc2V0RnVuY3Rpb25OYW1lKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAg
IHJldHVybiBTdHJpbmcoIm9wZXJhdG9yJltdIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7CisgICAgICAgIHJldHVybiAib3BlcmF0b3ImW10iX3N0cjsKICAgICB9CiAKICAgICBTdHJp
bmcgYW5kRnVuY3Rpb25OYW1lKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHJldHVy
biBTdHJpbmcoIm9wZXJhdG9yW109IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Cisg
ICAgICAgIHJldHVybiAib3BlcmF0b3JbXT0iX3N0cjsKICAgICB9CiAKICAgICBFeHByZXNzaW9u
JiBpbmRleEV4cHJlc3Npb24oKSB7IHJldHVybiBzdGF0aWNfY2FzdDxFeHByZXNzaW9uJj4obV9p
bmRleCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwCmluZGV4IDMyMjM2
NDEzOWI3NGZiNjEwNmE3YmNmNDM1OTE1MjY0OWY5ZDA4N2MuLmU4N2FjZGFjYWI3OTI3YzQ5MTk2
ZGNiNDlmODRiNjA5YzdmMmIyMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBl
LmNwcApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgQVNUIHsKIAogSW50ZWdlckxpdGVyYWxU
eXBlOjpJbnRlZ2VyTGl0ZXJhbFR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBpbnQgdmFsdWUp
CiAgICAgOiBtX3ZhbHVlKHZhbHVlKQotICAgICwgbV9wcmVmZXJyZWRUeXBlKG1ha2VVbmlxdWVS
ZWY8VHlwZVJlZmVyZW5jZT4oV1RGTW92ZShvcmlnaW4pLCBTdHJpbmcoImludCIsIFN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBUeXBlQXJndW1lbnRzKCkpKQorICAgICwgbV9wcmVmZXJy
ZWRUeXBlKG1ha2VVbmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4oV1RGTW92ZShvcmlnaW4pLCAiaW50
Il9zdHIsIFR5cGVBcmd1bWVudHMoKSkpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1h
bnRpYy5jcHAKaW5kZXggNjVmYmIzM2QzOWQxM2JlNDI4MTk0YTFkYTQxZjYyNGJmMjNiZGE5OS4u
ODQ0MDk2MGM2ZTNiNDg3MmQ5ZTkzNDQzZmI4OGM3MzU4ZWQzNmNiZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRp
Yy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
UmVzb3VyY2VTZW1hbnRpYy5jcHAKQEAgLTI5LDYgKzI5LDggQEAKICNpZiBFTkFCTEUoV0VCR1BV
KQogCiAjaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEluZmVyVHlw
ZXMuaCIKKyNpbmNsdWRlICJXSExTTEludHJpbnNpY3MuaCIKICNpbmNsdWRlICJXSExTTFJlZmVy
ZW5jZVR5cGUuaCIKICNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKIApAQCAtMzgsMTAg
KzQwLDQyIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBBU1QgewogCi1ib29sIFJl
c291cmNlU2VtYW50aWM6OmlzQWNjZXB0YWJsZVR5cGUoY29uc3QgVW5uYW1lZFR5cGUmLCBjb25z
dCBJbnRyaW5zaWNzJikgY29uc3QKK2Jvb2wgUmVzb3VyY2VTZW1hbnRpYzo6aXNBY2NlcHRhYmxl
VHlwZShjb25zdCBVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIGNvbnN0IEludHJpbnNpY3MmIGlu
dHJpbnNpY3MpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCi0gICAgcmV0
dXJuIHRydWU7CisgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICBjYXNlIE1vZGU6OlVub3JkZXJl
ZEFjY2Vzc1ZpZXc6CisgICAgICAgIGlmIChpczxSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkp
IHsKKyAgICAgICAgICAgIGF1dG8mIHJlZmVyZW5jZVR5cGUgPSBkb3duY2FzdDxSZWZlcmVuY2VU
eXBlPih1bm5hbWVkVHlwZSk7CisgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlVHlwZS5hZGRy
ZXNzU3BhY2UoKSA9PSBSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkNvbnN0YW50IHx8IHJl
ZmVyZW5jZVR5cGUuYWRkcmVzc1NwYWNlKCkgPT0gUmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNl
OjpEZXZpY2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzPEFycmF5VHlwZT4odW5uYW1lZFR5
cGUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChpczxUeXBlUmVmZXJl
bmNlPih1bm5hbWVkVHlwZSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBk
b3duY2FzdDxUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSk7CisgICAgICAgICAgICBBU1NFUlQo
dHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgICAgICBpZiAoaXM8TmF0aXZl
VHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZl
cmVuY2UucmVzb2x2ZWRUeXBlKCkpLmlzVGV4dHVyZSgpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBjYXNlIE1vZGU6OlRleHR1cmU6CisgICAgICAgIGlmIChpczxSZWZl
cmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVm
ZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpLmFkZHJlc3NTcGFjZSgpID09IFJlZmVyZW5jZVR5cGU6
OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ7CisgICAgICAgIGlmIChpczxBcnJheVR5cGU+KHVubmFt
ZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoaXM8VHlwZVJl
ZmVyZW5jZT4odW5uYW1lZFR5cGUpKSB7CisgICAgICAgICAgICBhdXRvJiB0eXBlUmVmZXJlbmNl
ID0gZG93bmNhc3Q8VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpOworICAgICAgICAgICAgQVNT
RVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICAgICAgaWYgKGlzPE5h
dGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCp0eXBl
UmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKS5pc1RleHR1cmUoKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBNb2RlOjpCdWZmZXI6CisgICAgICAgIGlmIChpczxS
ZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8
UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpLmFkZHJlc3NTcGFjZSgpID09IFJlZmVyZW5jZVR5
cGU6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ7CisgICAgICAgIHJldHVybiBpczxBcnJheVR5cGU+
KHVubmFtZWRUeXBlKTsKKyAgICBjYXNlIE1vZGU6OlNhbXBsZXI6CisgICAgICAgIHJldHVybiBt
YXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLnNhbXBsZXJUeXBlKCkpOworICAgIH0KIH0K
IAogYm9vbCBSZXNvdXJjZVNlbWFudGljOjppc0FjY2VwdGFibGVGb3JTaGFkZXJJdGVtRGlyZWN0
aW9uKFNoYWRlckl0ZW1EaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBGdW5jdGlvbkRlZmluaXRp
b24mKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5
cGUuY3BwCmluZGV4IGJmMzFhM2M2ZTc5YWQ1MjEwMDI4M2Q3ZGZlODJiNDZmYTY2MzZmYTIuLjAx
ZjMxOTc5MTQ2YmM3YzRjZTgzNWNiOGY1ZjVkZGM0MmYwYTFlYzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxp
dGVyYWxUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHAKQEAgLTQyLDcgKzQyLDcgQEAg
bmFtZXNwYWNlIEFTVCB7CiAKIFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlOjpVbnNpZ25lZElu
dGVnZXJMaXRlcmFsVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIHVuc2lnbmVkIHZhbHVlKQog
ICAgIDogbV92YWx1ZSh2YWx1ZSkKLSAgICAsIG1fcHJlZmVycmVkVHlwZShtYWtlVW5pcXVlUmVm
PFR5cGVSZWZlcmVuY2U+KFdURk1vdmUob3JpZ2luKSwgU3RyaW5nKCJ1aW50IiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFR5cGVBcmd1bWVudHMoKSkpCisgICAgLCBtX3ByZWZlcnJl
ZFR5cGUobWFrZVVuaXF1ZVJlZjxUeXBlUmVmZXJlbmNlPihXVEZNb3ZlKG9yaWdpbiksICJ1aW50
Il9zdHIsIFR5cGVBcmd1bWVudHMoKSkpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0
ZUZ1bmN0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTdiNDYyZTBjMWYzN2FkM2NhMmM3MmM5OThlZWI1
ZDM2ZGQyY2RiOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCkBAIC0wLDAgKzEsMTEy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMQ2hl
Y2tEdXBsaWNhdGVGdW5jdGlvbnMuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRl
ICJXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgi
CisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJl
bmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworYm9v
bCBjaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyhjb25zdCBQcm9ncmFtJiBwcm9ncmFtKQoreworICAg
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPGNvbnN0IEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbj4+IGZ1bmN0aW9uczsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHBy
b2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKQorICAgICAgICBmdW5jdGlvbnMuYXBwZW5kKHN0
YXRpY19jYXN0PGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJj4oZnVuY3Rpb25EZWZpbml0
aW9uKSk7CisgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3Jh
bS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKQorICAgICAgICBmdW5jdGlvbnMuYXBwZW5k
KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiY+KG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKworICAgIHN0ZDo6c29ydChmdW5jdGlvbnMuYmVnaW4o
KSwgZnVuY3Rpb25zLmVuZCgpLCBbXShjb25zdCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGEs
IGNvbnN0IEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgYikgLT4gYm9vbCB7CisgICAgICAgIGlm
IChhLm5hbWUoKS5sZW5ndGgoKSA8IGIubmFtZSgpLmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGlmIChhLm5hbWUoKS5sZW5ndGgoKSA+IGIubmFtZSgpLmxlbmd0
aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYS5uYW1lKCkubGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGEubmFt
ZSgpW2ldIDwgYi5uYW1lKClbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICBpZiAoYS5uYW1lKClbaV0gPiBiLm5hbWUoKVtpXSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0pOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25zLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IGZ1bmN0aW9ucy5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkgIT0gZnVuY3Rpb25zW2pd
LmdldCgpLm5hbWUoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChp
czxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+KGZ1bmN0aW9uc1tpXS5nZXQoKSkgJiYg
aXM8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPihmdW5jdGlvbnNbal0uZ2V0KCkpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uc1tpXS5n
ZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IGZ1bmN0aW9uc1tqXS5nZXQoKS5wYXJhbWV0ZXJz
KCkuc2l6ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGZ1
bmN0aW9uc1tpXS5nZXQoKS5pc0Nhc3QoKSAmJiAhbWF0Y2hlcyhmdW5jdGlvbnNbaV0uZ2V0KCku
dHlwZSgpLCBmdW5jdGlvbnNbal0uZ2V0KCkudHlwZSgpKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIGJvb2wgc2FtZSA9IHRydWU7CisgICAgICAgICAgICBmb3IgKHNp
emVfdCBrID0gMDsgayA8IGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyAr
K2spIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMoKmZ1bmN0aW9uc1tpXS5nZXQoKS5w
YXJhbWV0ZXJzKClba10udHlwZSgpLCAqZnVuY3Rpb25zW2pdLmdldCgpLnBhcmFtZXRlcnMoKVtr
XS50eXBlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHNhbWUgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHNhbWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLm5hbWUoKSA9PSAi
b3BlcmF0b3ImW10iICYmIGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09
IDIKKyAgICAgICAgICAgICYmIGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihzdGF0aWNfY2Fz
dDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJz
KClbMF0udHlwZSgpKSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHR5cGUgPSBzdGF0aWNfY2FzdDxj
b25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClb
MV0udHlwZSgpKTsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHJlc29sdmVkVHlwZSA9IGRvd25jYXN0PEFT
VDo6VHlwZVJlZmVyZW5jZT4odHlwZSkucmVzb2x2ZWRUeXBlKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqcmVzb2x2ZWRUeXBlKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0g
ZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCpyZXNvbHZlZFR5cGUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0g
InVpbnQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkubmFtZSgpID09ICJvcGVyYXRvci5sZW5n
dGgiICYmIGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEKKyAgICAg
ICAgICAgICYmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3Qg
QVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5
cGUoKSkpCisgICAgICAgICAgICB8fCBpczxBU1Q6OkFycmF5VHlwZT4oc3RhdGljX2Nhc3Q8Y29u
c3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBd
LnR5cGUoKSkpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZWxzZSBpZiAo
ZnVuY3Rpb25zW2ldLmdldCgpLm5hbWUoKSA9PSAib3BlcmF0b3I9PSIKKyAgICAgICAgICAgICYm
IGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIKKyAgICAgICAgICAg
ICYmIGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVk
VHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSkpCisgICAg
ICAgICAgICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6
VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkp
KQorICAgICAgICAgICAgJiYgbWF0Y2hlcyhzdGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRU
eXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKSwgc3RhdGlj
X2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1l
dGVycygpWzFdLnR5cGUoKSkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9u
cy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxp
Y2F0ZUZ1bmN0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxY2FmNTVjNTZkYjhjNWYxYmJiNDcxOTAwMzk0
YzQzZTM0MDE5NmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmgKQEAgLTAsMCArMSw0MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2lu
Y2x1ZGUgIldITFNMUHJvZ3JhbS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFj
ZSBXSExTTCB7CisKK2Jvb2wgY2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMoY29uc3QgUHJvZ3JhbSYp
OworCit9CisKK30KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmluc2ljcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3Njg3ODUw
YjQ3ZjVlZTRlMjY0OWY0OWZmNjgwNjBmZDY5MjA2OTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuY3BwCkBAIC0w
LDAgKzEsNDI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldITFNMSW50cmluc2ljcy5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldI
TFNMQ29uc3RhbnRFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIK
KyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+Cisj
aW5jbHVkZSA8Y3N0cmluZz4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hM
U0wgeworCitjb25zdGV4cHIgY29uc3QgY2hhciogSW50cmluc2ljczo6bV90ZXh0dXJlVHlwZU5h
bWVzW107Citjb25zdGV4cHIgY29uc3QgY2hhciogSW50cmluc2ljczo6bV90ZXh0dXJlSW5uZXJU
eXBlTmFtZXNbXTsKK2NvbnN0ZXhwciBjb25zdCBjaGFyKiBJbnRyaW5zaWNzOjptX2RlcHRoVGV4
dHVyZUlubmVyVHlwZXNbXTsKKworSW50cmluc2ljczo6SW50cmluc2ljcygpCit7Cit9CisKK3Zv
aWQgSW50cmluc2ljczo6YWRkKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpCit7Cisg
ICAgLy8gRklYTUU6IFBvcHVsYXRlIHRoaXMuCit9CisKK2Jvb2wgSW50cmluc2ljczo6YWRkUHJp
bWl0aXZlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24p
Cit7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9u
Lm5hbWUoKSA9PSAidm9pZCIpCisgICAgICAgIG1fdm9pZFR5cGUgPSAmbmF0aXZlVHlwZURlY2xh
cmF0aW9uOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImJv
b2wiKQorICAgICAgICBtX2Jvb2xUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBl
bHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ1Y2hhciIpIHsKKyAgICAg
ICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzSW50KCk7CisgICAgICAgIG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5zZXRJc051bWJlcigpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24u
c2V0Q2FuUmVwcmVzZW50SW50ZWdlcihbXShpbnQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHgg
Pj0gMCAmJiB4IDw9IDB4RkY7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFy
YXRpb24uc2V0Q2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB4IDw9IDB4RkY7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVU
eXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50RmxvYXQoW10oZmxvYXQgeCkgeworICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0aWNfY2FzdDx1aW50OF90Pih4KSkg
PT0geDsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRTdWNj
ZXNzb3IoW10oaW50NjRfdCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1aW50OF90Pih4ICsgMSk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBl
RGVjbGFyYXRpb24uc2V0Rm9ybWF0VmFsdWVGcm9tSW50ZWdlcihbXShpbnQgeCkgLT4gaW50NjRf
dCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4oeCk7CisgICAgICAg
IH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0VmFsdWVGcm9tVW5z
aWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgpIC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZl
VHlwZURlY2xhcmF0aW9uLnNldEl0ZXJhdGVBbGxWYWx1ZXMoW10oY29uc3Qgc3RkOjpmdW5jdGlv
bjxib29sKGludDY0X3QpPiYgY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGZvciAoaW50NjRfdCBp
ID0gMDsgaSA8IDB4MTAwOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2soaSkp
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9KTsK
KyAgICAgICAgbV91Y2hhclR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIH0gZWxz
ZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAidXNob3J0IikgeworICAgICAg
ICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNJbnQoKTsKKyAgICAgICAgbmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnNldElzTnVtYmVyKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5z
ZXRDYW5SZXByZXNlbnRJbnRlZ2VyKFtdKGludCB4KSB7CisgICAgICAgICAgICByZXR1cm4geCA+
PSAwICYmIHggPD0gMHhGRkZGOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xh
cmF0aW9uLnNldENhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcihbXSh1bnNpZ25lZCB4KSB7Cisg
ICAgICAgICAgICByZXR1cm4geCA8PSAweEZGRkY7CisgICAgICAgIH0pOworICAgICAgICBuYXRp
dmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50RmxvYXQoW10oZmxvYXQgeCkgeworICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0aWNfY2FzdDx1aW50MTZfdD4o
eCkpID09IHg7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0
U3VjY2Vzc29yKFtdKGludDY0X3QgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dWludDE2X3Q+KHggKyAxKTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21JbnRlZ2VyKFtdKGludCB4KSAtPiBp
bnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MTZfdD4oeCk7Cisg
ICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0VmFsdWVG
cm9tVW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgpIC0+IGludDY0X3QgeworICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQxNl90Pih4KTsKKyAgICAgICAgfSk7CisgICAgICAg
IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJdGVyYXRlQWxsVmFsdWVzKFtdKGNvbnN0IHN0ZDo6
ZnVuY3Rpb248Ym9vbChpbnQ2NF90KT4mIGNhbGxiYWNrKSB7CisgICAgICAgICAgICBmb3IgKGlu
dDY0X3QgaSA9IDA7IGkgPCAweDEwMDAwOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2Fs
bGJhY2soaSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9KTsKKyAgICAgICAgbV91c2hvcnRUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsK
KyAgICB9IGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInVpbnQiKSB7
CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc0ludCgpOworICAgICAgICBuYXRp
dmVUeXBlRGVjbGFyYXRpb24uc2V0SXNOdW1iZXIoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xh
cmF0aW9uLnNldENhblJlcHJlc2VudEludGVnZXIoW10oaW50IHgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB4ID49IDA7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24u
c2V0Q2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkKSB7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5zZXRDYW5SZXByZXNlbnRGbG9hdChbXShmbG9hdCB4KSB7CisgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PHVpbnQzMl90Pih4KSkgPT0geDsKKyAgICAg
ICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRTdWNjZXNzb3IoW10oaW50
NjRfdCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50
MzJfdD4oeCArIDEpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9u
LnNldEZvcm1hdFZhbHVlRnJvbUludGVnZXIoW10oaW50IHgpIC0+IGludDY0X3QgeworICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pih4KTsKKyAgICAgICAgfSk7CisgICAg
ICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21VbnNpZ25lZEludGVn
ZXIoW10odW5zaWduZWQgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xh
cmF0aW9uLnNldEl0ZXJhdGVBbGxWYWx1ZXMoW10oY29uc3Qgc3RkOjpmdW5jdGlvbjxib29sKGlu
dDY0X3QpPiYgY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGZvciAoaW50NjRfdCBpID0gMDsgaSA8
IDB4MTAwMDAwMDAwOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2soaSkpCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAg
ICAgICAgbV91aW50VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgfSBlbHNlIGlm
IChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJjaGFyIikgeworICAgICAgICBuYXRp
dmVUeXBlRGVjbGFyYXRpb24uc2V0SXNJbnQoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0
aW9uLnNldElzTnVtYmVyKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc1Np
Z25lZCgpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50SW50
ZWdlcihbXShpbnQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHggPj0gLTEyOCAmJiB4IDw9IDEy
NzsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXBy
ZXNlbnRVbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQgeCkgeworICAgICAgICAgICAgcmV0dXJu
IHggPD0gMTI3OworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNl
dENhblJlcHJlc2VudEZsb2F0KFtdKGZsb2F0IHgpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8aW50OF90Pih4KSkgPT0geDsKKyAgICAgICAgfSk7
CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRTdWNjZXNzb3IoW10oaW50NjRfdCB4
KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHgg
KyAxKTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3Jt
YXRWYWx1ZUZyb21JbnRlZ2VyKFtdKGludCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZl
VHlwZURlY2xhcmF0aW9uLnNldEZvcm1hdFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdlcihbXSh1bnNp
Z25lZCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ4
X3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEl0
ZXJhdGVBbGxWYWx1ZXMoW10oY29uc3Qgc3RkOjpmdW5jdGlvbjxib29sKGludDY0X3QpPiYgY2Fs
bGJhY2spIHsKKyAgICAgICAgICAgIGZvciAoaW50NjRfdCBpID0gLTEyODsgaSA8IDEyODsgKytp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGkpKQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIG1fY2hhclR5cGUg
PSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIH0gZWxzZSBpZiAobmF0aXZlVHlwZURlY2xh
cmF0aW9uLm5hbWUoKSA9PSAic2hvcnQiKSB7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5zZXRJc0ludCgpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNOdW1iZXIo
KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzU2lnbmVkKCk7CisgICAgICAg
IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRJbnRlZ2VyKFtdKGludCB4KSB7
CisgICAgICAgICAgICByZXR1cm4geCA+PSAtMzI3NjggJiYgeCA8PSAzMjc2NzsKKyAgICAgICAg
fSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRVbnNpZ25l
ZEludGVnZXIoW10odW5zaWduZWQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHggPD0gMzI3Njc7
CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVz
ZW50RmxvYXQoW10oZmxvYXQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZs
b2F0PihzdGF0aWNfY2FzdDxpbnQxNl90Pih4KSkgPT0geDsKKyAgICAgICAgfSk7CisgICAgICAg
IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRTdWNjZXNzb3IoW10oaW50NjRfdCB4KSAtPiBpbnQ2
NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQxNl90Pih4ICsgMSk7Cisg
ICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0VmFsdWVG
cm9tSW50ZWdlcihbXShpbnQgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8aW50MTZfdD4oeCk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVj
bGFyYXRpb24uc2V0Rm9ybWF0VmFsdWVGcm9tVW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgp
IC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDE2X3Q+KHgp
OworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEl0ZXJhdGVB
bGxWYWx1ZXMoW10oY29uc3Qgc3RkOjpmdW5jdGlvbjxib29sKGludDY0X3QpPiYgY2FsbGJhY2sp
IHsKKyAgICAgICAgICAgIGZvciAoaW50NjRfdCBpID0gLTMyNzY4OyBpIDwgMzI3Njg7ICsraSkg
eworICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhpKSkKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBtX3Nob3J0VHlwZSA9
ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgfSBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFy
YXRpb24ubmFtZSgpID09ICJpbnQiKSB7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5z
ZXRJc0ludCgpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNOdW1iZXIoKTsK
KyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzU2lnbmVkKCk7CisgICAgICAgIG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRJbnRlZ2VyKFtdKGludCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVj
bGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgpIHsK
KyAgICAgICAgICAgIHJldHVybiB4IDw9IDIxNDc0ODM2NDc7CisgICAgICAgIH0pOworICAgICAg
ICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50RmxvYXQoW10oZmxvYXQgeCkg
eworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0aWNfY2FzdDxpbnQz
Ml90Pih4KSkgPT0geDsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5zZXRTdWNjZXNzb3IoW10oaW50NjRfdCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Pih4ICsgMSk7CisgICAgICAgIH0pOworICAgICAgICBu
YXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0VmFsdWVGcm9tSW50ZWdlcihbXShpbnQgeCkg
LT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4oeCk7
CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0VmFs
dWVGcm9tVW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgpIC0+IGludDY0X3QgeworICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KHgpOworICAgICAgICB9KTsKKyAgICAg
ICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEl0ZXJhdGVBbGxWYWx1ZXMoW10oY29uc3Qgc3Rk
OjpmdW5jdGlvbjxib29sKGludDY0X3QpPiYgY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGZvciAo
aW50NjRfdCBpID0gLTIxNDc0ODM2NDc7IGkgPCAyMTQ3NDgzNjQ4OyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoY2FsbGJhY2soaSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgbV9pbnRUeXBlID0gJm5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbjsKKyAgICB9IGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkg
PT0gImhhbGYiKSB7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc051bWJlcigp
OworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNGbG9hdGluZygpOworICAgICAg
ICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50SW50ZWdlcihbXShpbnQpIHsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlw
ZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcihbXSh1bnNpZ25lZCkg
eworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVU
eXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50RmxvYXQoW10oZmxvYXQpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgbV9oYWxmVHlwZSA9ICZuYXRp
dmVUeXBlRGVjbGFyYXRpb247CisgICAgfSBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24u
bmFtZSgpID09ICJmbG9hdCIpIHsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElz
TnVtYmVyKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc0Zsb2F0aW5nKCk7
CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRJbnRlZ2VyKFtd
KGludCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAgICAgICBu
YXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKFtdKHVu
c2lnbmVkKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAg
IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRGbG9hdChbXShmbG9hdCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAgICAgICBtX2Zsb2F0VHlw
ZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgfSBlbHNlIGlmIChuYXRpdmVUeXBlRGVj
bGFyYXRpb24ubmFtZSgpID09ICJhdG9taWNfaW50IikKKyAgICAgICAgbV9hdG9taWNJbnRUeXBl
ID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFy
YXRpb24ubmFtZSgpID09ICJhdG9taWNfdWludCIpCisgICAgICAgIG1fYXRvbWljVWludFR5cGUg
PSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5uYW1lKCkgPT0gInNhbXBsZXIiKQorICAgICAgICBtX3NhbXBsZXJUeXBlID0gJm5hdGl2
ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEludHJpbnNpY3M6OmFkZFZlY3RvcihBU1Q6
Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQoreworICAgIGlm
IChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpICE9ICJ2ZWN0b3IiKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBBU1NFUlQobmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVu
dHMoKS5zaXplKCkgPT0gMik7CisgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VW5p
cXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJn
dW1lbnRzKClbMF0pKTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OkNv
bnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsx
XSkpOworICAgIGF1dG8mIGlubmVyVHlwZSA9IHN0YXRpY19jYXN0PEFTVDo6VHlwZVJlZmVyZW5j
ZSY+KFdURjo6Z2V0PFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVj
bGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgYXV0byYgbGVuZ3RoRXhwcmVzc2lv
biA9IFdURjo6Z2V0PEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRp
b24udHlwZUFyZ3VtZW50cygpWzFdKTsKKyAgICBBU1NFUlQoIWlubmVyVHlwZS50eXBlQXJndW1l
bnRzKCkuc2l6ZSgpKTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbioqIGFycmF5Owor
ICAgIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJib29sIikKKyAgICAgICAgYXJyYXkgPSBtX3Zl
Y3RvckJvb2w7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAidWNoYXIiKQorICAg
ICAgICBhcnJheSA9IG1fdmVjdG9yVWNoYXI7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUo
KSA9PSAidXNob3J0IikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3RvclVzaG9ydDsKKyAgICBlbHNl
IGlmIChpbm5lclR5cGUubmFtZSgpID09ICJ1aW50IikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3Rv
clVpbnQ7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiY2hhciIpCisgICAgICAg
IGFycmF5ID0gbV92ZWN0b3JDaGFyOworICAgIGVsc2UgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0g
InNob3J0IikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3RvclNob3J0OworICAgIGVsc2UgaWYgKGlu
bmVyVHlwZS5uYW1lKCkgPT0gImludCIpCisgICAgICAgIGFycmF5ID0gbV92ZWN0b3JJbnQ7Cisg
ICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiaGFsZiIpCisgICAgICAgIGFycmF5ID0g
bV92ZWN0b3JIYWxmOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoaW5uZXJUeXBlLm5hbWUo
KSA9PSAiZmxvYXQiKTsKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3RvckZsb2F0OworICAgIH0KKyAg
ICBpbnQgbGVuZ3RoID0gbGVuZ3RoRXhwcmVzc2lvbi5pbnRlZ2VyTGl0ZXJhbCgpLnZhbHVlKCk7
CisgICAgQVNTRVJUKGxlbmd0aCA+PSAyICYmIGxlbmd0aCA8PSA0KTsKKyAgICBuYXRpdmVUeXBl
RGVjbGFyYXRpb24uc2V0SXNWZWN0b3IoKTsKKyAgICBhcnJheVtsZW5ndGggLSAyXSA9ICZuYXRp
dmVUeXBlRGVjbGFyYXRpb247CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW50cmluc2lj
czo6YWRkTWF0cml4KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFy
YXRpb24pCit7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgIT0gIm1hdHJp
eCIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChuYXRpdmVUeXBlRGVjbGFy
YXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAzKTsKKyAgICBBU1NFUlQoV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOworICAgIEFTU0VSVChXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRpb24u
dHlwZUFyZ3VtZW50cygpWzFdKSk7CisgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8
QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1l
bnRzKClbMl0pKTsKKyAgICBhdXRvJiBpbm5lclR5cGUgPSBzdGF0aWNfY2FzdDxBU1Q6OlR5cGVS
ZWZlcmVuY2UmPihXVEY6OmdldDxVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZl
VHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOworICAgIGF1dG8mIHJvd0V4cHJl
c3Npb24gPSBXVEY6OmdldDxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xh
cmF0aW9uLnR5cGVBcmd1bWVudHMoKVsxXSk7CisgICAgYXV0byYgY29sdW1uRXhwcmVzc2lvbiA9
IFdURjo6Z2V0PEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRpb24u
dHlwZUFyZ3VtZW50cygpWzJdKTsKKyAgICBBU1NFUlQoIWlubmVyVHlwZS50eXBlQXJndW1lbnRz
KCkuc2l6ZSgpKTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogKCphcnJheSlbM107
CisgICAgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gImhhbGYiKQorICAgICAgICBhcnJheSA9IG1f
bWF0cml4SGFsZjsKKyAgICBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiZmxvYXQiKQorICAgICAg
ICBhcnJheSA9IG1fbWF0cml4RmxvYXQ7CisgICAgaW50IHJvdyA9IHJvd0V4cHJlc3Npb24uaW50
ZWdlckxpdGVyYWwoKS52YWx1ZSgpOworICAgIEFTU0VSVChyb3cgPj0gMiAmJiByb3cgPD0gNCk7
CisgICAgaW50IGNvbHVtbiA9IGNvbHVtbkV4cHJlc3Npb24uaW50ZWdlckxpdGVyYWwoKS52YWx1
ZSgpOworICAgIEFTU0VSVChjb2x1bW4gPj0gMiAmJiBjb2x1bW4gPD0gNCk7CisgICAgbmF0aXZl
VHlwZURlY2xhcmF0aW9uLnNldElzTWF0cml4KCk7CisgICAgYXJyYXlbcm93IC0gMl1bY29sdW1u
IC0gMl0gPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIEludHJpbnNpY3M6OmFkZEZ1bGxUZXh0dXJlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
JiBuYXRpdmVUeXBlRGVjbGFyYXRpb24sIEFTVDo6VHlwZVJlZmVyZW5jZSYgaW5uZXJUeXBlKQor
eworICAgIHVuc2lnbmVkIHRleHR1cmVUeXBlSW5kZXggPSBXVEZfQVJSQVlfTEVOR1RIKG1fdGV4
dHVyZVR5cGVOYW1lcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdURl9BUlJBWV9M
RU5HVEgobV90ZXh0dXJlVHlwZU5hbWVzKTsgKytpKSB7CisgICAgICAgIGlmIChuYXRpdmVUeXBl
RGVjbGFyYXRpb24ubmFtZSgpID09IG1fdGV4dHVyZVR5cGVOYW1lc1tpXSkKKyAgICAgICAgICAg
IHRleHR1cmVUeXBlSW5kZXggPSBpOworICAgIH0KKyAgICBpZiAodGV4dHVyZVR5cGVJbmRleCA9
PSBXVEZfQVJSQVlfTEVOR1RIKG1fdGV4dHVyZVR5cGVOYW1lcykpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHVuc2lnbmVkIGlubmVyVHlwZUluZGV4ID0gV1RGX0FSUkFZX0xFTkdUSCht
X3RleHR1cmVJbm5lclR5cGVOYW1lcyk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKG1fdGV4dHVyZUlubmVy
VHlwZU5hbWVzKTsgKytpKSB7CisgICAgICAgIGlmIChpbm5lclR5cGUubmFtZSgpLnN0YXJ0c1dp
dGgobV90ZXh0dXJlSW5uZXJUeXBlTmFtZXNbaV0pKSB7CisgICAgICAgICAgICB0ZXh0dXJlVHlw
ZUluZGV4ID0gaTsKKyAgICAgICAgICAgIGlmIChpbm5lclR5cGUubmFtZSgpID09IG1fdGV4dHVy
ZUlubmVyVHlwZU5hbWVzW2ldKQorICAgICAgICAgICAgICAgIHZlY3Rvckxlbmd0aCA9IDE7Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaW5uZXJUeXBlLm5hbWUo
KS5sZW5ndGgoKSA9PSBzdHJsZW4obV90ZXh0dXJlSW5uZXJUeXBlTmFtZXNbaV0pICsgMSk7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKGlubmVyVHlwZS5uYW1lKClbaW5uZXJUeXBlLm5hbWUoKS5s
ZW5ndGgoKSAtIDFdID09ICcyJworICAgICAgICAgICAgICAgICAgICB8fCBpbm5lclR5cGUubmFt
ZSgpW2lubmVyVHlwZS5uYW1lKCkubGVuZ3RoKCkgLSAxXSA9PSAnMycKKyAgICAgICAgICAgICAg
ICAgICAgfHwgaW5uZXJUeXBlLm5hbWUoKVtpbm5lclR5cGUubmFtZSgpLmxlbmd0aCgpIC0gMV0g
PT0gJzQnKTsKKyAgICAgICAgICAgICAgICB2ZWN0b3JMZW5ndGggPSBpbm5lclR5cGUubmFtZSgp
W2lubmVyVHlwZS5uYW1lKCkubGVuZ3RoKCkgLSAxXSAtICcwJzsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQoaW5uZXJUeXBlSW5kZXggIT0gV1RGX0FSUkFZX0xF
TkdUSChtX3RleHR1cmVJbm5lclR5cGVOYW1lcykpOworICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5zZXRJc1RleHR1cmUoKTsKKyAgICBtX2Z1bGxUZXh0dXJlc1t0ZXh0dXJlVHlwZUluZGV4XVtp
bm5lclR5cGVJbmRleF1bdmVjdG9yTGVuZ3RoIC0gMV0gPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9u
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEludHJpbnNpY3M6OmFkZERlcHRoVGV4dHVy
ZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uLCBBU1Q6
OlR5cGVSZWZlcmVuY2UmIGlubmVyVHlwZSkKK3sKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbioqIHRleHR1cmU7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0g
IlRleHR1cmVEZXB0aDJEIikKKyAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZURlcHRoMkQ7Cisg
ICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiUldUZXh0dXJlRGVw
dGgyRCIpCisgICAgICAgIHRleHR1cmUgPSBtX3J3VGV4dHVyZURlcHRoMkQ7CisgICAgZWxzZSBp
ZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiVGV4dHVyZURlcHRoMkRBcnJheSIp
CisgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVEZXB0aDJEQXJyYXk7CisgICAgZWxzZSBpZiAo
bmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiUldUZXh0dXJlRGVwdGgyREFycmF5IikK
KyAgICAgICAgdGV4dHVyZSA9IG1fcndUZXh0dXJlRGVwdGgyREFycmF5OworICAgIGVsc2UgaWYg
KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlRleHR1cmVEZXB0aEN1YmUiKQorICAg
ICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlRGVwdGhDdWJlOworICAgIGVsc2UKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgdW5zaWduZWQgaW5uZXJUeXBlSW5kZXggPSBXVEZfQVJS
QVlfTEVOR1RIKG1fZGVwdGhUZXh0dXJlSW5uZXJUeXBlcyk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgobV9kZXB0aFRleHR1cmVJbm5lclR5cGVzKTsgKytp
KSB7CisgICAgICAgIGlmIChpbm5lclR5cGUubmFtZSgpID09IG1fZGVwdGhUZXh0dXJlSW5uZXJU
eXBlc1tpXSkKKyAgICAgICAgICAgIGlubmVyVHlwZUluZGV4ID0gaTsKKyAgICB9CisgICAgQVNT
RVJUKGlubmVyVHlwZUluZGV4ICE9IFdURl9BUlJBWV9MRU5HVEgobV9kZXB0aFRleHR1cmVJbm5l
clR5cGVzKSk7CisgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzVGV4dHVyZSgpOworICAg
IHRleHR1cmVbaW5uZXJUeXBlSW5kZXhdID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBJbnRyaW5zaWNzOjphZGRUZXh0dXJlKEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgQVNTRVJUKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDEpOworICAgIEFT
U0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+
PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgYXV0byYg
aW5uZXJUeXBlID0gc3RhdGljX2Nhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlJj4oV1RGOjpnZXQ8VW5p
cXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJn
dW1lbnRzKClbMF0pKTsKKyAgICBBU1NFUlQoIWlubmVyVHlwZS50eXBlQXJndW1lbnRzKCkuc2l6
ZSgpKTsKKyAgICBpZiAoYWRkRnVsbFRleHR1cmUobmF0aXZlVHlwZURlY2xhcmF0aW9uLCBpbm5l
clR5cGUpKSB7CisgICAgICAgIG1fdGV4dHVyZVNldC5hZGQoJm5hdGl2ZVR5cGVEZWNsYXJhdGlv
bik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGFkZERlcHRoVGV4dHVyZShuYXRp
dmVUeXBlRGVjbGFyYXRpb24sIGlubmVyVHlwZSkpCisgICAgICAgIG1fdGV4dHVyZVNldC5hZGQo
Jm5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7Cit9CisKK3ZvaWQgSW50cmluc2ljczo6YWRkKEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgaWYg
KGFkZFByaW1pdGl2ZShuYXRpdmVUeXBlRGVjbGFyYXRpb24pKQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKGFkZFZlY3RvcihuYXRpdmVUeXBlRGVjbGFyYXRpb24pKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKGFkZE1hdHJpeChuYXRpdmVUeXBlRGVjbGFyYXRpb24pKQorICAgICAgICByZXR1
cm47CisgICAgYWRkVGV4dHVyZShuYXRpdmVUeXBlRGVjbGFyYXRpb24pOworfQorCit9CisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEludHJpbnNpY3MuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMSW50cmluc2ljcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViMmMwNDU1NmIwMGYzODkwYWJmZjE5ZmI2
MzYzNjFhMzg5MDExNDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuaApAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldI
TFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlw
ZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgSW50cmluc2ljcyB7CitwdWJsaWM6Cisg
ICAgSW50cmluc2ljcygpOworCisgICAgdm9pZCBhZGQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uJik7CisgICAgdm9pZCBhZGQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKKwor
ICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiB2b2lkVHlwZSgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQobV92b2lkVHlwZSk7CisgICAgICAgIHJldHVybiAqbV92b2lkVHlwZTsK
KyAgICB9CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgYm9vbFR5cGUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYm9vbFR5cGUpOworICAgICAgICByZXR1cm4gKm1f
Ym9vbFR5cGU7CisgICAgfQorCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIGludFR5
cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1faW50VHlwZSk7CisgICAgICAgIHJl
dHVybiAqbV9pbnRUeXBlOworICAgIH0KKworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
JiB1aW50VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV91aW50VHlwZSk7Cisg
ICAgICAgIHJldHVybiAqbV91aW50VHlwZTsKKyAgICB9CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiYgc2FtcGxlclR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
c2FtcGxlclR5cGUpOworICAgICAgICByZXR1cm4gKm1fc2FtcGxlclR5cGU7CisgICAgfQorCisg
ICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIGZsb2F0VHlwZSgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQobV9mbG9hdFR5cGUpOworICAgICAgICByZXR1cm4gKm1fZmxvYXRUeXBl
OworICAgIH0KKworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBmbG9hdDNUeXBlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3ZlY3RvckZsb2F0WzFdKTsKKyAgICAgICAg
cmV0dXJuICptX3ZlY3RvckZsb2F0WzFdOworICAgIH0KKworICAgIEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uJiBmbG9hdDRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Zl
Y3RvckZsb2F0WzJdKTsKKyAgICAgICAgcmV0dXJuICptX3ZlY3RvckZsb2F0WzJdOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBib29sIGFkZFByaW1pdGl2ZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiYpOworICAgIGJvb2wgYWRkVmVjdG9yKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7
CisgICAgYm9vbCBhZGRNYXRyaXgoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKKyAgICBi
b29sIGFkZEZ1bGxUZXh0dXJlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiwgQVNUOjpUeXBl
UmVmZXJlbmNlJik7CisgICAgYm9vbCBhZGREZXB0aFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24mLCBBU1Q6OlR5cGVSZWZlcmVuY2UmKTsKKyAgICB2b2lkIGFkZFRleHR1cmUoQVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKKworICAgIEhhc2hTZXQ8Y29uc3QgQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24qPiBtX3RleHR1cmVTZXQ7CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiogbV92b2lkVHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiog
bV9ib29sVHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV91Y2hhclR5cGU7
CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdXNob3J0VHlwZTsKKyAgICBBU1Q6
Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV91aW50VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiogbV9jaGFyVHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiog
bV9zaG9ydFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1faW50VHlwZTsK
KyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9oYWxmVHlwZTsKKyAgICBBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9mbG9hdFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24qIG1fYXRvbWljSW50VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
biogbV9hdG9taWNVaW50VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9z
YW1wbGVyVHlwZTsKKworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvckJv
b2xbM107CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9yVWNoYXJbM107
CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9yVXNob3J0WzNdOworICAg
IEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvclVpbnRbM107CisgICAgQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9yQ2hhclszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JTaG9ydFszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiogbV92ZWN0b3JJbnRbM107CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24q
IG1fdmVjdG9ySGFsZlszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0
b3JGbG9hdFszXTsKKworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX21hdHJpeEhh
bGZbM11bM107CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fbWF0cml4RmxvYXRb
M11bM107CisKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIG1fdGV4dHVyZVR5cGVO
YW1lc1tdID0geyAiVGV4dHVyZTFEIiwgIlJXVGV4dHVyZTFEIiwgIlRleHR1cmUxREFycmF5Iiwg
IlJXVGV4dHVyZTFEQXJyYXkiLCAiVGV4dHVyZTJEIiwgIlJXVGV4dHVyZTJEIiwgIlRleHR1cmUy
REFycmF5IiwgIlJXVGV4dHVyZTJEQXJyYXkiLCAiVGV4dHVyZTNEIiwgIlJXVGV4dHVyZTNEIiwg
IlRleHR1cmVDdWJlIiB9OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyKiBtX3Rl
eHR1cmVJbm5lclR5cGVOYW1lc1tdID0geyAidWNoYXIiLCAidXNob3J0IiwgICJ1aW50IiwgImNo
YXIiLCAic2hvcnQiLCAiaW50IiwgImhhbGYiLCAiZmxvYXQiIH07CisKKyAgICBBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiogbV9mdWxsVGV4dHVyZXNbV1RGX0FSUkFZX0xFTkdUSChtX3RleHR1
cmVUeXBlTmFtZXMpXVtXVEZfQVJSQVlfTEVOR1RIKG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzKV1b
NF07CisKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIG1fZGVwdGhUZXh0dXJlSW5u
ZXJUeXBlc1tdID0gIHsgImhhbGYiLCAiZmxvYXQiIH07CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiogbV90ZXh0dXJlRGVwdGgyRFtXVEZfQVJSQVlfTEVOR1RIKG1fZGVwdGhUZXh0
dXJlSW5uZXJUeXBlcyldOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3J3VGV4
dHVyZURlcHRoMkRbV1RGX0FSUkFZX0xFTkdUSChtX2RlcHRoVGV4dHVyZUlubmVyVHlwZXMpXTsK
KyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV90ZXh0dXJlRGVwdGgyREFycmF5W1dU
Rl9BUlJBWV9MRU5HVEgobV9kZXB0aFRleHR1cmVJbm5lclR5cGVzKV07CisgICAgQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24qIG1fcndUZXh0dXJlRGVwdGgyREFycmF5W1dURl9BUlJBWV9MRU5H
VEgobV9kZXB0aFRleHR1cmVJbm5lclR5cGVzKV07CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24qIG1fdGV4dHVyZURlcHRoQ3ViZVtXVEZfQVJSQVlfTEVOR1RIKG1fZGVwdGhUZXh0dXJl
SW5uZXJUeXBlcyldOworfTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCmlu
ZGV4IDZiZjE4ZTY5YWZjNWM4ZmU1MGQ3NDVlNTRkOTYyNmRkYzBkNTBlMGYuLjQ4ZmE5MzAyMjA4
YWZlZmVlZTdlNjQ4Y2JjZjVkMzczNjNiNjNlMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKQEAgLTE5
Nyw3ICsxOTcsNyBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lv
biYgY2FsbEV4cHJlc3Npb24pCiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKGF1dG8q
IHR5cGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyhjYWxsRXhwcmVzc2lvbi5uYW1lKCkpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKHR5cGVzLT5zaXplKCkgPT0gMSkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoYXV0byogZnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMo
U3RyaW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBmdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0
LmdldEZ1bmN0aW9ucygib3BlcmF0b3IgY2FzdCJfc3RyKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgY2FsbEV4cHJlc3Npb24uc2V0Q2FzdERhdGEoKCp0eXBlcylbMF0uZ2V0KCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0T3ZlcmxvYWRzKCpmdW5jdGlv
bnMpOwogICAgICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb2dyYW0uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvZ3JhbS5oCmluZGV4IDBkY2YzZjViODkzM2ViNGVkYWE3
M2ExYTVmMWE4MjQwNTdlOGE3OTkuLmM5M2E3NjdmOGZkOTRmOGIyYzdlYjVjNzNlNTFkNGIzMTUx
N2NjNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUHJvZ3JhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUHJvZ3JhbS5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXSExTTEVudW1lcmF0
aW9uRGVmaW5pdGlvbi5oIgogI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisj
aW5jbHVkZSAiV0hMU0xJbnRyaW5zaWNzLmgiCiAjaW5jbHVkZSAiV0hMU0xOYW1lQ29udGV4dC5o
IgogI2luY2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUg
IldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCkBAIC03MiwxNiArNzMsMTkgQEAgcHVibGlj
OgogICAgIGJvb2wgYXBwZW5kKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYmIG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCiAgICAgewogICAgICAgICBtX25hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb25zLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbj4oV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSkpOworICAgICAgICBtX2lu
dHJpbnNpY3MuYWRkKHN0YXRpY19jYXN0PEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiY+
KG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMubGFzdCgpKSk7CiAgICAgICAgIHJldHVybiBt
X25hbWVDb250ZXh0LmFkZChzdGF0aWNfY2FzdDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24mPihtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zLmxhc3QoKSkpOwogICAgIH0KIAogICAg
IGJvb2wgYXBwZW5kKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiYgbmF0aXZlVHlwZURlY2xh
cmF0aW9uKQogICAgIHsKICAgICAgICAgbV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zLmFwcGVuZCht
YWtlVW5pcXVlUmVmPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihXVEZNb3ZlKG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbikpKTsKKyAgICAgICAgbV9pbnRyaW5zaWNzLmFkZChzdGF0aWNfY2FzdDxB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiY+KG1fbmF0aXZlVHlwZURlY2xhcmF0aW9ucy5sYXN0
KCkpKTsKICAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKHN0YXRpY19jYXN0PEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uJj4obV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zLmxhc3QoKSkp
OwogICAgIH0KIAogICAgIE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCgpIHsgcmV0dXJuIG1fbmFt
ZUNvbnRleHQ7IH0KKyAgICBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKCkgeyByZXR1cm4gbV9pbnRy
aW5zaWNzOyB9CiAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OlR5cGVEZWZpbml0aW9uPj4mIHR5
cGVEZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fdHlwZURlZmluaXRpb25zOyB9CiAgICAgVmVjdG9y
PFVuaXF1ZVJlZjxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+PiYgc3RydWN0dXJlRGVmaW5pdGlv
bnMoKSB7IHJldHVybiBtX3N0cnVjdHVyZURlZmluaXRpb25zOyB9CiAgICAgVmVjdG9yPFVuaXF1
ZVJlZjxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4+JiBlbnVtZXJhdGlvbkRlZmluaXRpb25z
KCkgeyByZXR1cm4gbV9lbnVtZXJhdGlvbkRlZmluaXRpb25zOyB9CkBAIC05Myw2ICs5Nyw3IEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBOYW1lQ29udGV4dCBtX25hbWVDb250ZXh0OworICAg
IEludHJpbnNpY3MgbV9pbnRyaW5zaWNzOwogICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpUeXBl
RGVmaW5pdGlvbj4+IG1fdHlwZURlZmluaXRpb25zOwogICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNU
OjpTdHJ1Y3R1cmVEZWZpbml0aW9uPj4gbV9zdHJ1Y3R1cmVEZWZpbml0aW9uczsKICAgICBWZWN0
b3I8VW5pcXVlUmVmPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPj4gbV9lbnVtZXJhdGlvbkRl
ZmluaXRpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
ODIyZjA3NWExM2RmN2YwY2EzMjkwMTY4ZWJhNTliNDQxODJmYzA3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBl
Q2hlY2tlci5jcHAKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oIgorCisjaWYgRU5B
QkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMVmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKwor
Y2xhc3MgUmVjdXJzaXZlVHlwZUNoZWNrZXIgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6Cisg
ICAgflJlY3Vyc2l2ZVR5cGVDaGVja2VyKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2aXNpdChB
U1Q6OlR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlcy5hZGQoJnR5cGVEZWZpbml0aW9uKTsKKyAgICAg
ICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFZpc2l0b3I6OnZpc2l0
KHR5cGVEZWZpbml0aW9uKTsKKworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBtX3R5cGVzLnJlbW92
ZSgmdHlwZURlZmluaXRpb24pOworICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nl
c3MpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBz
dHJ1Y3R1cmVEZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byBhZGRSZXN1
bHQgPSBtX3R5cGVzLmFkZCgmc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgICAgIGlmICghYWRk
UmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWaXNpdG9yOjp2aXNpdChzdHJ1Y3R1cmVE
ZWZpbml0aW9uKTsKKworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBtX3R5cGVzLnJlbW92ZSgmc3Ry
dWN0dXJlRGVmaW5pdGlvbik7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vz
cyk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZl
cmVuY2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZXMu
YWRkKCZ0eXBlUmVmZXJlbmNlKTsKKyAgICAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkg
eworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGZvciAoYXV0byYgdHlwZUFyZ3VtZW50IDogdHlwZVJlZmVyZW5jZS50eXBl
QXJndW1lbnRzKCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZUFyZ3VtZW50
KTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlw
ZSgpKTsKKworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBtX3R5cGVzLnJlbW92ZSgmdHlwZVJlZmVy
ZW5jZSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisgICAgfQor
CisgICAgdm9pZCB2aXNpdChBU1Q6OlJlZmVyZW5jZVR5cGUmKSBvdmVycmlkZQorICAgIHsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgSGFzaFNldDxBU1Q6OlR5cGUqPiBtX3R5cGVzOworfTsKKwor
Ym9vbCBjaGVja1JlY3Vyc2l2ZVR5cGVzKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgUmVjdXJz
aXZlVHlwZUNoZWNrZXIgcmVjdXJzaXZlVHlwZUNoZWNrZXI7CisgICAgcmVjdXJzaXZlVHlwZUNo
ZWNrZXIuY2hlY2tFcnJvckFuZFZpc2l0KHByb2dyYW0pOworICAgIHJldHVybiByZWN1cnNpdmVU
eXBlQ2hlY2tlci5lcnJvcigpOworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVj
a2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2
ZVR5cGVDaGVja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmM5NzBjNzI0OTY2ZDEzOTEwYWIyYWFhZTE1Njdk
N2MxMDVhMzM5NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaApAQCAtMCwwICsxLDQzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgUHJvZ3JhbTsKKwor
Ym9vbCBjaGVja1JlY3Vyc2l2ZVR5cGVzKFByb2dyYW0mKTsKKworfQorCit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50
aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45ZDYyMGZhMTFhNzA3MmY4NmIwZTgzZGIzMzNiMjFkYjdlY2ExMDUxCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVz
aXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVBcnJheU9wZXJh
dG9yTGVuZ3RoLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xBcnJh
eVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVS
ZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBGaW5kQXJyYXlUeXBlcyA6IHB1Ymxp
YyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICB+RmluZEFycmF5VHlwZXMoKSA9IGRlZmF1bHQ7CisK
KyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBtX2FycmF5VHlwZXMuYXBwZW5kKGFycmF5VHlwZSk7CisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChhcnJheVR5cGUpOworICAgIH0KKworICAgIFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPEFTVDo6QXJyYXlUeXBlPj4mJiB0YWtlQXJyYXlUeXBlcygpCisgICAgewor
ICAgICAgICByZXR1cm4gV1RGTW92ZShtX2FycmF5VHlwZXMpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkFycmF5VHlwZT4+IG1fYXJy
YXlUeXBlczsKK307CisKK3ZvaWQgc3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgoUHJvZ3Jh
bSYgcHJvZ3JhbSkKK3sKKyAgICBGaW5kQXJyYXlUeXBlcyBmaW5kQXJyYXlUeXBlczsKKyAgICBm
aW5kQXJyYXlUeXBlcy5jaGVja0Vycm9yQW5kVmlzaXQocHJvZ3JhbSk7CisgICAgYXV0byBhcnJh
eVR5cGVzID0gZmluZEFycmF5VHlwZXMudGFrZUFycmF5VHlwZXMoKTsKKworICAgIGJvb2wgaXNP
cGVyYXRvciA9IHRydWU7CisgICAgYm9vbCBpc1Jlc3RyaWN0ZWQgPSBmYWxzZTsKKworICAgIGZv
ciAoYXV0byYgYXJyYXlUeXBlIDogYXJyYXlUeXBlcykgeworICAgICAgICBBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdl
dCgpLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgYXJyYXlUeXBlLmdldCgpLmNsb25l
KCkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICBwYXJhbWV0ZXJzLmFw
cGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgQVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihhcnJheVR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6
OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFw
KExleGVyOjpUb2tlbihhcnJheVR5cGUuZ2V0KCkub3JpZ2luKCkpLCBwcm9ncmFtLmludHJpbnNp
Y3MoKS51aW50VHlwZSgpKSwgIm9wZXJhdG9yLmxlbmd0aCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICBw
cm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICB9
Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3Bl
cmF0b3JMZW5ndGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMDEyZjJiMDEwMmFjYWM1MTM2MGIxOWVjYjkzYWU1
ZWIwOGE1NjhlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oCkBAIC0wLDAgKzEs
NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgUHJvZ3Jh
bTsKKwordm9pZCBzeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aChQcm9ncmFtJik7CisKK30K
KworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjg1ZTJiODgxZDliNDBhMzg4NWUyOTMwY2M4Y2Q3MWJiMzlkOWMyMDYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRo
ZXNpemVDb25zdHJ1Y3RvcnMuY3BwCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5o
IgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIldITFNM
VHlwZVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgor
I2luY2x1ZGUgIldITFNMVmlzaXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVz
cGFjZSBXSExTTCB7CisKK2NsYXNzIEZpbmRBbGxUeXBlcyA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1
YmxpYzoKKyAgICB+RmluZEFsbFR5cGVzKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2aXNpdChB
U1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlwZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1f
dW5uYW1lZFR5cGVzLmFwcGVuZChwb2ludGVyVHlwZSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChwb2ludGVyVHlwZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5UmVm
ZXJlbmNlVHlwZSYgYXJyYXlSZWZlcmVuY2VUeXBlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
bV91bm5hbWVkVHlwZXMuYXBwZW5kKGFycmF5UmVmZXJlbmNlVHlwZSk7CisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChhcnJheVJlZmVyZW5jZVR5cGUpOworICAgIH0KKworICAgIHZvaWQgdmlz
aXQoQVNUOjpBcnJheVR5cGUmIGFycmF5VHlwZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1f
dW5uYW1lZFR5cGVzLmFwcGVuZChhcnJheVR5cGUpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoYXJyYXlUeXBlKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25E
ZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBtX25hbWVkVHlwZXMuYXBwZW5kKGVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChlbnVtZXJhdGlvbkRlZmluaXRpb24pOworICAgIH0KKworICAgIHZv
aWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgbV9uYW1lZFR5cGVzLmFwcGVuZChzdHJ1Y3R1cmVEZWZp
bml0aW9uKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0cnVjdHVyZURlZmluaXRpb24p
OworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fbmFtZWRUeXBl
cy5hcHBlbmQobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7CisgICAgfQorCisgICAgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8QVNUOjpVbm5hbWVkVHlwZT4+JiYgdGFrZVVubmFtZWRUeXBlcygpCisg
ICAgeworICAgICAgICByZXR1cm4gV1RGTW92ZShtX3VubmFtZWRUeXBlcyk7CisgICAgfQorCisg
ICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+PiYmIHRha2VO
YW1lZFR5cGVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fbmFtZWRUeXBlcyk7
CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFT
VDo6VW5uYW1lZFR5cGU+PiBtX3VubmFtZWRUeXBlczsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4+IG1fbmFtZWRUeXBlczsKK307CisKK3ZvaWQgc3lu
dGhlc2l6ZUNvbnN0cnVjdG9ycyhQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIEZpbmRBbGxUeXBl
cyBmaW5kQWxsVHlwZXM7CisgICAgZmluZEFsbFR5cGVzLmNoZWNrRXJyb3JBbmRWaXNpdChwcm9n
cmFtKTsKKyAgICBhdXRvIG1fdW5uYW1lZFR5cGVzID0gZmluZEFsbFR5cGVzLnRha2VVbm5hbWVk
VHlwZXMoKTsKKyAgICBhdXRvIG1fbmFtZWRUeXBlcyA9IGZpbmRBbGxUeXBlcy50YWtlTmFtZWRU
eXBlcygpOworCisgICAgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKKyAgICBib29sIGlzUmVzdHJp
Y3RlZCA9IGZhbHNlOworCisgICAgZm9yIChhdXRvJiB1bm5hbWVkVHlwZSA6IG1fdW5uYW1lZFR5
cGVzKSB7CisgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0
aW9uKExleGVyOjpUb2tlbih1bm5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6UXVhbGlm
aWVycygpLCB7IHVubmFtZWRUeXBlLmdldCgpLmNsb25lKCkgfSwgU3RyaW5nKCksIFdURjo6bnVs
bG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBw
YXJhbWV0ZXJzOworICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVj
bGFyYXRpb24pKTsKKyAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGNvcHlD
b25zdHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHVubmFtZWRU
eXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQs
IHVubmFtZWRUeXBlLmdldCgpLmNsb25lKCksICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUo
cGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7Cisg
ICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUoY29weUNvbnN0cnVjdG9yKSk7CisKKyAgICAg
ICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGRlZmF1bHRDb25zdHJ1Y3RvcihBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBlLmdldCgpLm9yaWdp
bigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIHVubmFtZWRUeXBlLmdl
dCgpLmNsb25lKCksICJvcGVyYXRvciBjYXN0Il9zdHIsIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
bnMoKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAg
cHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShkZWZhdWx0Q29uc3RydWN0b3IpKTsKKyAgICB9CisKKyAg
ICBmb3IgKGF1dG8mIG5hbWVkVHlwZSA6IG1fbmFtZWRUeXBlcykgeworICAgICAgICBBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4obmFtZWRU
eXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgQVNUOjpUeXBlUmVmZXJl
bmNlOjp3cmFwKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBuYW1lZFR5
cGUuZ2V0KCkpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAg
ICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgcGFyYW1l
dGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OkF0
dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExl
eGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBuYW1lZFR5cGUuZ2V0KCkpLCAi
b3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlz
T3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3Zl
KGNvcHlDb25zdHJ1Y3RvcikpOworCisgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbiBkZWZhdWx0Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpU
b2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdU
Rjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihuYW1lZFR5
cGUuZ2V0KCkub3JpZ2luKCkpLCBuYW1lZFR5cGUuZ2V0KCkpLCAib3BlcmF0b3IgY2FzdCJfc3Ry
LCBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zKCksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciks
IGlzUmVzdHJpY3RlZCk7CisgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUoZGVmYXVsdENv
bnN0cnVjdG9yKSk7CisgICAgfQorfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1
Y3RvcnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhl
c2l6ZUNvbnN0cnVjdG9ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5YTA1YmVhNjIzYTliOWIwYTljZmY0YjRm
NDJmZjcwMWRlYmQ0MzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaApAQCAtMCwwICsxLDQy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFByb2dyYW07
CisKK3ZvaWQgc3ludGhlc2l6ZUNvbnN0cnVjdG9ycyhQcm9ncmFtJik7CisKK30KKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42M2ZlZmI0M2RjN2UwNTllYTFlMzJjZDkyOGZlYWVmNmNjOTk0NjEwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwCkBAIC0wLDAgKzEsODYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXpl
RW51bWVyYXRpb25GdW5jdGlvbnMuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRl
ICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCit2b2lkIHN5bnRoZXNpemVF
bnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIGJvb2wgaXNPcGVy
YXRvciA9IHRydWU7CisgICAgYm9vbCBpc1Jlc3RyaWN0ZWQgPSBmYWxzZTsKKyAgICBmb3IgKGF1
dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9u
cygpKSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2
YXJpYWJsZURlY2xhcmF0aW9uMShMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5v
cmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChM
ZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIHN0YXRpY19jYXN0
PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJj4oZW51bWVyYXRpb25EZWZpbml0aW9uKSkgfSwg
U3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMihMZXhlcjo6VG9rZW4oZW51
bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6
VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5v
cmlnaW4oKSksIHN0YXRpY19jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJj4oZW51bWVy
YXRpb25EZWZpbml0aW9uKSkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0
KTsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAg
ICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjEp
KTsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJh
dGlvbjIpKTsKKyAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9r
ZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2so
KSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVu
dW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBwcm9ncmFtLmludHJpbnNpY3MoKS5ib29s
VHlwZSgpKSwgIm9wZXJhdG9yPT0iX3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxs
b3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAgICAgIHByb2dyYW0uYXBw
ZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+dHlwZSgpKSB7CisgICAgICAgICAgICAv
LyBGSVhNRTogSGFuZGxlIGEgbnVsbCBiYXNlIHR5cGUuCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4
ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmll
cnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9u
RGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBzdGF0aWNfY2FzdDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5p
dGlvbiY+KGVudW1lcmF0aW9uRGVmaW5pdGlvbikpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQs
IFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
cyBwYXJhbWV0ZXJzOworICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUo
dmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFT
VDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBlbnVtZXJhdGlvbkRlZmluaXRpb24t
PnR5cGUoKS0+Y2xvbmUoKSwgIm9wZXJhdG9yLnZhbHVlIl9zdHIsIFdURk1vdmUocGFyYW1ldGVy
cyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgICAg
ICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVy
YXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlw
ZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmln
aW4oKSksIHN0YXRpY19jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJj4oZW51bWVyYXRp
b25EZWZpbml0aW9uKSkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsK
KyAgICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7Cisg
ICAgICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0
aW9uKSk7CisgICAgICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpU
b2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9j
aygpLCBXVEY6Om51bGxvcHQsIGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+dHlwZSgpLT5jbG9uZSgp
LCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQs
IGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICAgICAgICAgIHByb2dyYW0uYXBw
ZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
IHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+
b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBl
KCktPmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAg
ICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikp
OworICAgICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4o
ZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwg
V1RGOjpudWxsb3B0LCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51
bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIHN0YXRpY19jYXN0PEFTVDo6RW51bWVyYXRp
b25EZWZpbml0aW9uJj4oZW51bWVyYXRpb25EZWZpbml0aW9uKSkgfSwgIm9wZXJhdG9yIGNhc3Qi
X3N0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNS
ZXN0cmljdGVkKTsKKyAgICAgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
K30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0
aW9uRnVuY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjEyN2ZkMTE1MjRjMWM4MzI4MjgzYzViYWU5MjNk
ZmVmMDFkZjVhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmgKQEAgLTAsMCAr
MSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9n
cmFtOworCit2b2lkIHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9ncmFtJik7CisK
K30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nl
c3NvcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIzNDIyZGRiMzU5YjVkYWFmNWQxOTJkNTQ3NTVmNmU4NmQ3
OTc4NTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCkBAIC0wLDAgKzEsODkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50
aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5j
bHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgorI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgorI2lu
Y2x1ZGUgIldITFNMUmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5j
ZS5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK3ZvaWQgc3ludGhlc2l6ZVN0cnVjdHVy
ZUFjY2Vzc29ycyhQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIGJvb2wgaXNPcGVyYXRvciA9IHRy
dWU7CisgICAgYm9vbCBpc1Jlc3RyaWN0ZWQgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIHN0cnVj
dHVyZURlZmluaXRpb24gOiBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25zKCkpIHsKKyAgICAg
ICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVFbGVtZW50IDogc3RydWN0dXJlRGVmaW5pdGlvbi0+c3Ry
dWN0dXJlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFRo
ZSBnZXR0ZXI6IG9wZXJhdG9yLmZpZWxkCisgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1l
bnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6Ondy
YXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBzdGF0aWNfY2FzdDxB
U1Q6OlN0cnVjdHVyZURlZmluaXRpb24mPihzdHJ1Y3R1cmVEZWZpbml0aW9uKSkgfSwgU3RyaW5n
KCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgICAgICBBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVy
cy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICAgICAg
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24o
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9y
aWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIHN0cnVjdHVyZUVs
ZW1lbnQudHlwZSgpLmNsb25lKCksIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRvci4lcyIsIHN0cnVj
dHVyZUVsZW1lbnQubmFtZSgpLnV0ZjgoKS5kYXRhKCkpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBX
VEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICAgICAgICAg
IHByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHNldHRl
cjogb3BlcmF0b3IuZmllbGQ9CisgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24xKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9y
aWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExl
eGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgc3RhdGljX2Nhc3Q8QVNUOjpT
dHJ1Y3R1cmVEZWZpbml0aW9uJj4oc3RydWN0dXJlRGVmaW5pdGlvbikpIH0sIFN0cmluZygpLCBX
VEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24yKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVF
bGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgc3RydWN0dXJlRWxlbWVudC50
eXBlKCkuY2xvbmUoKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwor
ICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAg
ICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRp
b24xKSk7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJs
ZURlY2xhcmF0aW9uMikpOworICAgICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
bihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRl
QmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRv
a2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBzdGF0aWNfY2FzdDxBU1Q6OlN0cnVjdHVy
ZURlZmluaXRpb24mPihzdHJ1Y3R1cmVEZWZpbml0aW9uKSksIFN0cmluZzo6Zm9ybWF0KCJvcGVy
YXRvci4lcz0iLCBzdHJ1Y3R1cmVFbGVtZW50Lm5hbWUoKS51dGY4KCkuZGF0YSgpKSwgV1RGTW92
ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsK
KyAgICAgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24pKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVGhlIGFuZGVyOiBv
cGVyYXRvciYuZmllbGQKKyAgICAgICAgICAgIGF1dG8gY3JlYXRlQW5kZXIgPSBbJl0oQVNUOjpS
ZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKSAtPiBBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24geworICAgICAgICAgICAgICAgIGF1dG8gYXJndW1lbnRUeXBlID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxl
bWVudC5vcmlnaW4oKSksIGFkZHJlc3NTcGFjZSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExl
eGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgc3RhdGljX2Nhc3Q8QVNUOjpT
dHJ1Y3R1cmVEZWZpbml0aW9uJj4oc3RydWN0dXJlRGVmaW5pdGlvbikpKTsKKyAgICAgICAgICAg
ICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6
VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IFdU
Rk1vdmUoYXJndW1lbnRUeXBlKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxv
cHQpOworICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVy
czsKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVj
bGFyYXRpb24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJldHVyblR5cGUgPSBtYWtlVW5pcXVl
UmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdp
bigpKSwgYWRkcmVzc1NwYWNlLCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpKTsKKyAg
ICAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHN0cnVj
dHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9w
dCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nOjpmb3JtYXQoIm9wZXJhdG9yJi4lcyIsIHN0
cnVjdHVyZUVsZW1lbnQubmFtZSgpLnV0ZjgoKS5kYXRhKCkpLCBXVEZNb3ZlKHBhcmFtZXRlcnMp
LCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICAgICAg
ICAgIHJldHVybiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uOworICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIHByb2dyYW0uYXBwZW5kKGNyZWF0ZUFuZGVyKEFTVDo6UmVmZXJlbmNlVHlwZTo6
QWRkcmVzc1NwYWNlOjpDb25zdGFudCkpOworICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoY3Jl
YXRlQW5kZXIoQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkRldmljZSkpOworICAg
ICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoY3JlYXRlQW5kZXIoQVNUOjpSZWZlcmVuY2VUeXBlOjpB
ZGRyZXNzU3BhY2U6OlRocmVhZGdyb3VwKSk7CisgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChj
cmVhdGVBbmRlcihBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6VGhyZWFkKSk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFj
Y2Vzc29ycy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50
aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmI5ZjJiOWFkMzk4YTBlYmY3
OTQ4YjU2YWQ5YzRkOTMwNDQwOGNiZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5o
CkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKwor
Y2xhc3MgUHJvZ3JhbTsKKwordm9pZCBzeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzKFByb2dy
YW0mKTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCAwNmYzMmQxOWQ4MmI3
OTUzNWU2ZDUyM2EzM2ZjNGE3NmI4NGYzMjRkLi4wZDI1NjM1M2Q3NGFiZDYyNjYzMDI0YmQ4MDU0
Yzk1MGUwNzM4MTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMzA5LDYgKzMwOSwxMyBAQCBNb2R1bGVz
L3dlYmdwdS9ET01XaW5kb3dXZWJHUFUuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTElu
ZmVyVHlwZXMuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmNwcAogTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xS
ZWN1cnNpdmVUeXBlQ2hlY2tlci5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhl
c2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5
bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRo
ZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
U3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMSW50cmluc2ljcy5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQu
Y3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKIE1vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3YTllMWRmNjNi
YTc4ZDczMTVmZGNkYjI5NjlkYWU5NjQzODI5MzU4Li42NDkzODQ0Yjg4ZDUwNjQzNDEyNTBiNGRk
ZDVmYzA1MTM1Yjg3Nzc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMzMzMiw2ICsxMzMzMiwyMCBAQAogCQlDMjM0QTk5QTIx
RTkwRjU2MDAzQzk4NEQgLyogV0hMU0xJbmZlclR5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdITFNMSW5mZXJUeXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMzRB
OTlCMjFFOTBGNTcwMDNDOTg0RCAvKiBXSExTTEluZmVyVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0hMU0xJbmZlclR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMzRBOTlE
MjFFOTEwQkQwMDNDOTg0RCAvKiBXSExTTFJlc29sdmluZ1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0hMU0xSZXNvbHZpbmdUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMzRB
OUE5MjFFOTJDMTcwMDNDOTg0RCAvKiBXSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3Ro
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5n
dGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjM0QTlBQjIxRTkyQzE4MDAz
Qzk4NEQgLyogV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExT
TFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMy
MzRBOUFDMjFFOTJDMTkwMDNDOTg0RCAvKiBXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0
aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9u
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjM0QTlBRDIxRTkyQzE5MDAzQzk4
NEQgLyogV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
SExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQzIzNEE5QUUyMUU5MkMxQTAwM0M5ODREIC8qIFdITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlv
bnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjM0QTlBRjIxRTkyQzFCMDAzQzk4NEQgLyogV0hM
U0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN5
bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUMyMzRBOUIwMjFFOTJDMUMwMDNDOTg0RCAvKiBXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3Rv
cnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIzNEE5QjEyMUU5MkMxRDAwM0M5ODRE
IC8qIFdITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN5
bnRoZXNpemVDb25zdHJ1Y3RvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIz
NEE5QjIyMUU5MkMxRjAwM0M5ODREIC8qIFdITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMzRBOUIzMjFFOTJDMjEwMDNDOTg0RCAvKiBX
SExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUMyMzRBOUI0MjFFOTJDMjIwMDNDOTg0RCAvKiBXSExTTFN5bnRoZXNp
emVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTeW50aGVz
aXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzIzNEE5QjUyMUU5MkMyMzAwM0M5ODREIC8qIFdITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vz
c29ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIzNEE5QjYyMUU5MkNDMDAwM0M5ODRE
IC8qIFdITFNMSW50cmluc2ljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEludHJpbnNpY3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIzNEE5QjcyMUU5MkNDMTAwM0M5ODREIC8q
IFdITFNMSW50cmluc2ljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEludHJpbnNpY3Mu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFERjJFNzFEOUU0RTk5MDBGNUIy
NEMgLyogQ1NTRm9udFZhcmlhdGlvblZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENTU0ZvbnRWYXJpYXRpb25WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyMURGMkU4MUQ5RTRFOTkwMEY1QjI0QyAvKiBDU1NGb250VmFyaWF0aW9u
VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRm9udFZhcmlhdGlv
blZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMzRBOTg1MjFFODg2QTkw
MDNDOTg0RCAvKiBXSExTTFZpc2l0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xWaXNp
dG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1Mzk5LDggKzI1NDEzLDEy
IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUMyMUJGNkYxMjFD
RDg5OEQwMDIyNzk3OSAvKiBBU1QgKi8sCisJCQkJQzIzNEE5QjIyMUU5MkMxRjAwM0M5ODREIC8q
IFdITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwICovLAorCQkJCUMyMzRBOUFFMjFFOTJD
MUEwMDNDOTg0RCAvKiBXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmggKi8sCiAJCQkJQzIz
NEE5OUEyMUU5MEY1NjAwM0M5ODREIC8qIFdITFNMSW5mZXJUeXBlcy5jcHAgKi8sCiAJCQkJQzIz
NEE5OUIyMUU5MEY1NzAwM0M5ODREIC8qIFdITFNMSW5mZXJUeXBlcy5oICovLAorCQkJCUMyMzRB
OUI3MjFFOTJDQzEwMDNDOTg0RCAvKiBXSExTTEludHJpbnNpY3MuY3BwICovLAorCQkJCUMyMzRB
OUI2MjFFOTJDQzAwMDNDOTg0RCAvKiBXSExTTEludHJpbnNpY3MuaCAqLywKIAkJCQlDMjEwRTkx
MTIxQjRCRDEwMDBCN0Y4M0QgLyogV0hMU0xMZXhlci5jcHAgKi8sCiAJCQkJQzIxMEU5MTIyMUI0
QkQxMDAwQjdGODNEIC8qIFdITFNMTGV4ZXIuaCAqLywKIAkJCQlDMjM0QTk4RDIxRTg4ODg0MDAz
Qzk4NEQgLyogV0hMU0xOYW1lQ29udGV4dC5jcHAgKi8sCkBAIC0yNTQxMCwxMCArMjU0MjgsMjAg
QEAKIAkJCQlDMjFCRjczNzIxQ0Q4QTAyMDAyMjc5NzkgLyogV0hMU0xQYXJzZXIuY3BwICovLAog
CQkJCUMyMUJGNzM4MjFDRDhBMDMwMDIyNzk3OSAvKiBXSExTTFBhcnNlci5oICovLAogCQkJCUMy
MUJGNzNBMjFDRDhENzAwMDIyNzk3OSAvKiBXSExTTFByb2dyYW0uaCAqLywKKwkJCQlDMjM0QTlB
RDIxRTkyQzE5MDAzQzk4NEQgLyogV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5jcHAgKi8sCisJ
CQkJQzIzNEE5QUIyMUU5MkMxODAwM0M5ODREIC8qIFdITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIu
aCAqLywKIAkJCQlDMjM0QTk5OTIxRTkwRjI5MDAzQzk4NEQgLyogV0hMU0xSZXNvbHZlT3Zlcmxv
YWRJbXBsLmNwcCAqLywKIAkJCQlDMjM0QTk5NzIxRTkwRjI4MDAzQzk4NEQgLyogV0hMU0xSZXNv
bHZlT3ZlcmxvYWRJbXBsLmggKi8sCiAJCQkJQzIzNEE5OUQyMUU5MTBCRDAwM0M5ODREIC8qIFdI
TFNMUmVzb2x2aW5nVHlwZS5oICovLAogCQkJCUMyMUJGNzQ1MjFDRDk2OTgwMDIyNzk3OSAvKiBX
SExTTFN0YW5kYXJkTGlicmFyeS50eHQgKi8sCisJCQkJQzIzNEE5QTkyMUU5MkMxNzAwM0M5ODRE
IC8qIFdITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwICovLAorCQkJCUMyMzRB
OUFGMjFFOTJDMUIwMDNDOTg0RCAvKiBXSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3Ro
LmggKi8sCisJCQkJQzIzNEE5QjAyMUU5MkMxQzAwM0M5ODREIC8qIFdITFNMU3ludGhlc2l6ZUNv
bnN0cnVjdG9ycy5jcHAgKi8sCisJCQkJQzIzNEE5QjEyMUU5MkMxRDAwM0M5ODREIC8qIFdITFNM
U3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oICovLAorCQkJCUMyMzRBOUIzMjFFOTJDMjEwMDNDOTg0
RCAvKiBXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAgKi8sCisJCQkJQzIz
NEE5QUMyMUU5MkMxOTAwM0M5ODREIC8qIFdITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rp
b25zLmggKi8sCisJCQkJQzIzNEE5QjQyMUU5MkMyMjAwM0M5ODREIC8qIFdITFNMU3ludGhlc2l6
ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAgKi8sCisJCQkJQzIzNEE5QjUyMUU5MkMyMzAwM0M5ODRE
IC8qIFdITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oICovLAogCQkJCUMyMzRBOTg1
MjFFODg2QTkwMDNDOTg0RCAvKiBXSExTTFZpc2l0b3IuY3BwICovLAogCQkJCUMyMzRBOTg3MjFF
ODg2QUQwMDNDOTg0RCAvKiBXSExTTFZpc2l0b3IuaCAqLywKIAkJCSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>